toontown-just-works/toontown/battle/RewardPanel.py
2024-07-07 18:08:39 -05:00

781 lines
34 KiB
Python

import copy
from direct.directnotify import DirectNotifyGlobal
from direct.gui.DirectGui import *
from direct.interval.IntervalGlobal import *
import math
from panda3d.core import *
import random
import Fanfare
from otp.otpbase import OTPGlobals
from toontown.coghq import CogDisguiseGlobals
from toontown.quest import Quests
from toontown.shtiker import DisguisePage
from toontown.suit import SuitDNA
from toontown.toonbase import TTLocalizer
from toontown.toonbase import ToontownBattleGlobals
from toontown.toonbase import ToontownGlobals
class RewardPanel(DirectFrame):
notify = DirectNotifyGlobal.directNotify.newCategory('RewardPanel')
SkipBattleMovieEvent = 'skip-battle-movie-event'
def __init__(self, name):
gscale = (TTLocalizer.RPdirectFrame[0], TTLocalizer.RPdirectFrame[1], TTLocalizer.RPdirectFrame[2] * 1.1)
DirectFrame.__init__(self, relief=None, geom=DGG.getDefaultDialogGeom(), geom_color=ToontownGlobals.GlobalDialogColor, geom_pos=Point3(0, 0, -.05), geom_scale=gscale, pos=(0, 0, 0.587))
self.initialiseoptions(RewardPanel)
self.avNameLabel = DirectLabel(parent=self, relief=None, pos=(0, 0, 0.3), text=name, text_scale=0.08)
self.gagExpFrame = DirectFrame(parent=self, relief=None, pos=(-0.32, 0, 0.24))
self.itemFrame = DirectFrame(parent=self, relief=None, text=TTLocalizer.RewardPanelItems, text_pos=(0, 0.2), text_scale=0.08)
self.cogPartFrame = DirectFrame(parent=self, relief=None, text=TTLocalizer.RewardPanelCogPart, text_pos=(0, 0.2), text_scale=0.08)
self.missedItemFrame = DirectFrame(parent=self, relief=None, text=TTLocalizer.RewardPanelMissedItems, text_pos=(0, 0.2), text_scale=0.08)
self.itemLabel = DirectLabel(parent=self.itemFrame, text='', text_scale=0.06)
self.cogPartLabel = DirectLabel(parent=self.cogPartFrame, text='', text_scale=0.06)
self.missedItemLabel = DirectLabel(parent=self.missedItemFrame, text='', text_scale=0.06)
self.questFrame = DirectFrame(parent=self, relief=None, text=TTLocalizer.RewardPanelToonTasks, text_pos=(0, 0.2), text_scale=0.06)
self.questLabelList = []
for i in xrange(ToontownGlobals.MaxQuestCarryLimit):
label = DirectLabel(parent=self.questFrame, relief=None, pos=(-0.85, 0, -0.1 * i), text=TTLocalizer.RewardPanelQuestLabel % i, text_scale=0.05, text_align=TextNode.ALeft)
label.hide()
self.questLabelList.append(label)
self.newGagFrame = DirectFrame(parent=self, relief=None, pos=(0, 0, 0.24), text='', text_wordwrap=14.4, text_pos=(0, -0.46), text_scale=0.06)
self.endTrackFrame = DirectFrame(parent=self, relief=None, pos=(0, 0, 0.24), text='', text_wordwrap=14.4, text_pos=(0, -0.46), text_scale=0.06)
self.congratsLeft = DirectLabel(parent=self.newGagFrame, pos=(-0.2, 0, -0.1), text='', text_pos=(0, 0), text_scale=0.06)
self.congratsLeft.setHpr(0, 0, -30)
self.congratsRight = DirectLabel(parent=self.newGagFrame, pos=(0.2, 0, -0.1), text='', text_pos=(0, 0), text_scale=0.06)
self.congratsRight.setHpr(0, 0, 30)
self.promotionFrame = DirectFrame(parent=self, relief=None, pos=(0, 0, 0.24), text='', text_wordwrap=14.4, text_pos=(0, -0.46), text_scale=0.06)
self.trackLabels = []
self.trackIncLabels = []
self.trackBars = []
self.trackBarsOffset = 0
self.meritLabels = []
self.meritIncLabels = []
self.meritBars = []
for i in xrange(len(SuitDNA.suitDepts)):
deptName = TextEncoder.upper(SuitDNA.suitDeptFullnames[SuitDNA.suitDepts[i]])
self.meritLabels.append(DirectLabel(parent=self.gagExpFrame, relief=None, text=deptName, text_scale=0.05, text_align=TextNode.ARight, pos=(TTLocalizer.RPmeritLabelPosX, 0, -0.09 * i - 0.125), text_pos=(0, -0.02)))
self.meritIncLabels.append(DirectLabel(parent=self.gagExpFrame, relief=None, text='', text_scale=0.05, text_align=TextNode.ALeft, pos=(0.7, 0, -0.09 * i - 0.125), text_pos=(0, -0.02)))
self.meritBars.append(DirectWaitBar(parent=self.gagExpFrame, relief=DGG.SUNKEN, frameSize=(-1,
1,
-0.15,
0.15), borderWidth=(0.02, 0.02), scale=0.25, frameColor=(DisguisePage.DeptColors[i][0] * 0.7,
DisguisePage.DeptColors[i][1] * 0.7,
DisguisePage.DeptColors[i][2] * 0.7,
1), barColor=(DisguisePage.DeptColors[i][0],
DisguisePage.DeptColors[i][1],
DisguisePage.DeptColors[i][2],
1), text='0/0 ' + TTLocalizer.RewardPanelMeritBarLabels[i], text_scale=TTLocalizer.RPmeritBarLabels, text_fg=(0, 0, 0, 1), text_align=TextNode.ALeft, text_pos=(-0.96, -0.05), pos=(TTLocalizer.RPmeritBarsPosX, 0, -0.09 * i - 0.125)))
for i in xrange(len(ToontownBattleGlobals.Tracks)):
trackName = TextEncoder.upper(ToontownBattleGlobals.Tracks[i])
self.trackLabels.append(DirectLabel(parent=self.gagExpFrame, relief=None, text=trackName, text_scale=TTLocalizer.RPtrackLabels, text_align=TextNode.ARight, pos=(0.13, 0, -0.09 * i), text_pos=(0, -0.02)))
self.trackIncLabels.append(DirectLabel(parent=self.gagExpFrame, relief=None, text='', text_scale=0.05, text_align=TextNode.ALeft, pos=(0.65, 0, -0.09 * i), text_pos=(0, -0.02)))
self.trackBars.append(DirectWaitBar(parent=self.gagExpFrame, relief=DGG.SUNKEN, frameSize=(-1,
1,
-0.15,
0.15), borderWidth=(0.02, 0.02), scale=0.25, frameColor=(ToontownBattleGlobals.TrackColors[i][0] * 0.7,
ToontownBattleGlobals.TrackColors[i][1] * 0.7,
ToontownBattleGlobals.TrackColors[i][2] * 0.7,
1), barColor=(ToontownBattleGlobals.TrackColors[i][0],
ToontownBattleGlobals.TrackColors[i][1],
ToontownBattleGlobals.TrackColors[i][2],
1), text='0/0', text_scale=0.18, text_fg=(0, 0, 0, 1), text_align=TextNode.ACenter, text_pos=(0, -0.05), pos=(0.4, 0, -0.09 * i)))
self._battleGui = loader.loadModel('phase_3.5/models/gui/battle_gui')
self.skipButton = DirectButton(parent=self, relief=None, image=(self._battleGui.find('**/tt_t_gui_gen_skipSectionUp'),
self._battleGui.find('**/tt_t_gui_gen_skipSectionDown'),
self._battleGui.find('**/tt_t_gui_gen_skipSectionRollOver'),
self._battleGui.find('**/tt_t_gui_gen_skipSectionDisabled')), pos=(0.815, 0, -0.395), scale=(0.39, 1.0, 0.39), text=('',
TTLocalizer.RewardPanelSkip,
TTLocalizer.RewardPanelSkip,
''), text_scale=TTLocalizer.RPskipScale, text_fg=Vec4(1, 1, 1, 1), text_shadow=Vec4(0, 0, 0, 1), text_pos=TTLocalizer.RPskipPos, textMayChange=0, command=self._handleSkip)
return
def getNextExpValue(self, curSkill, trackIndex):
retVal = ToontownBattleGlobals.UberSkill
for amount in ToontownBattleGlobals.Levels[trackIndex]:
if curSkill < amount:
retVal = amount
return retVal
return retVal
def getNextExpValueUber(self, curSkill, trackIndex):
return ToontownBattleGlobals.UberSkill
def getNextMeritValue(self, curMerits, toon, dept):
totalMerits = CogDisguiseGlobals.getTotalMerits(toon, dept)
retVal = totalMerits
if curMerits > totalMerits:
retVal = amount
return retVal
def initItemFrame(self, toon):
self.endTrackFrame.hide()
self.gagExpFrame.hide()
self.newGagFrame.hide()
self.promotionFrame.hide()
self.questFrame.hide()
self.itemFrame.show()
self.cogPartFrame.hide()
self.missedItemFrame.hide()
def initMissedItemFrame(self, toon):
self.endTrackFrame.hide()
self.gagExpFrame.hide()
self.newGagFrame.hide()
self.promotionFrame.hide()
self.questFrame.hide()
self.itemFrame.hide()
self.cogPartFrame.hide()
self.missedItemFrame.show()
def initCogPartFrame(self, toon):
self.endTrackFrame.hide()
self.gagExpFrame.hide()
self.newGagFrame.hide()
self.promotionFrame.hide()
self.questFrame.hide()
self.itemFrame.hide()
self.cogPartFrame.show()
self.cogPartLabel['text'] = ''
self.missedItemFrame.hide()
def initQuestFrame(self, toon, avQuests):
self.endTrackFrame.hide()
self.gagExpFrame.hide()
self.newGagFrame.hide()
self.promotionFrame.hide()
self.questFrame.show()
self.itemFrame.hide()
self.cogPartFrame.hide()
self.missedItemFrame.hide()
for i in xrange(ToontownGlobals.MaxQuestCarryLimit):
questLabel = self.questLabelList[i]
questLabel['text_fg'] = (0, 0, 0, 1)
questLabel.hide()
for i in xrange(len(avQuests)):
questDesc = avQuests[i]
questId, npcId, toNpcId, rewardId, toonProgress = questDesc
quest = Quests.getQuest(questId)
if quest:
questString = quest.getString()
progressString = quest.getProgressString(toon, questDesc)
rewardString = quest.getRewardString(progressString)
rewardString = Quests.fillInQuestNames(rewardString, toNpcId=toNpcId)
completed = quest.getCompletionStatus(toon, questDesc) == Quests.COMPLETE
questLabel = self.questLabelList[i]
questLabel.show()
if base.localAvatar.tutorialAck:
questLabel['text'] = rewardString
if completed:
questLabel['text_fg'] = (0, 0.3, 0, 1)
else:
questLabel['text'] = questString + ' :'
def initGagFrame(self, toon, expList, meritList, noSkip = False):
self.avNameLabel['text'] = toon.getName()
self.endTrackFrame.hide()
self.gagExpFrame.show()
self.newGagFrame.hide()
self.promotionFrame.hide()
self.questFrame.hide()
self.itemFrame.hide()
self.cogPartFrame.hide()
self.missedItemFrame.hide()
trackBarOffset = 0
self.skipButton['state'] = choice(noSkip, DGG.DISABLED, DGG.NORMAL)
for i in xrange(len(SuitDNA.suitDepts)):
meritBar = self.meritBars[i]
meritLabel = self.meritLabels[i]
totalMerits = CogDisguiseGlobals.getTotalMerits(toon, i)
merits = meritList[i]
self.meritIncLabels[i].hide()
if CogDisguiseGlobals.isSuitComplete(toon.cogParts, i):
if not self.trackBarsOffset:
trackBarOffset = 0.47
self.trackBarsOffset = 1
meritBar.show()
meritLabel.show()
meritLabel.show()
if totalMerits:
meritBar['range'] = totalMerits
meritBar['value'] = merits
if merits == totalMerits:
meritBar['text'] = TTLocalizer.RewardPanelMeritAlert
else:
meritBar['text'] = '%s/%s %s' % (merits, totalMerits, TTLocalizer.RewardPanelMeritBarLabels[i])
else:
meritBar['range'] = 1
meritBar['value'] = 1
meritBar['text'] = TTLocalizer.RewardPanelMeritsMaxed
self.resetMeritBarColor(i)
else:
meritBar.hide()
meritLabel.hide()
for i in xrange(len(expList)):
curExp = expList[i]
trackBar = self.trackBars[i]
trackLabel = self.trackLabels[i]
trackIncLabel = self.trackIncLabels[i]
trackBar.setX(trackBar.getX() - trackBarOffset)
trackLabel.setX(trackLabel.getX() - trackBarOffset)
trackIncLabel.setX(trackIncLabel.getX() - trackBarOffset)
trackIncLabel.hide()
if toon.hasTrackAccess(i):
trackBar.show()
if curExp >= ToontownBattleGlobals.regMaxSkill:
nextExp = self.getNextExpValueUber(curExp, i)
trackBar['range'] = nextExp
uberCurrExp = curExp - ToontownBattleGlobals.regMaxSkill
trackBar['value'] = uberCurrExp
trackBar['text'] = TTLocalizer.InventoryUberTrackExp % {'nextExp': ToontownBattleGlobals.MaxSkill - curExp}
else:
nextExp = self.getNextExpValue(curExp, i)
trackBar['range'] = nextExp
trackBar['value'] = curExp
trackBar['text'] = '%s/%s' % (curExp, nextExp)
self.resetBarColor(i)
else:
trackBar.hide()
def incrementExp(self, track, newValue, toon):
trackBar = self.trackBars[track]
oldValue = trackBar['value']
newValue = min(ToontownBattleGlobals.MaxSkill, newValue)
nextExp = self.getNextExpValue(newValue, track)
if newValue >= ToontownBattleGlobals.regMaxSkill:
newValue = newValue - ToontownBattleGlobals.regMaxSkill
nextExp = self.getNextExpValueUber(newValue, track)
trackBar['text'] = TTLocalizer.InventoryUberTrackExp % {'nextExp': ToontownBattleGlobals.UberSkill - newValue}
else:
trackBar['text'] = '%s/%s' % (newValue, nextExp)
trackBar['range'] = nextExp
trackBar['value'] = newValue
trackBar['barColor'] = (ToontownBattleGlobals.TrackColors[track][0],
ToontownBattleGlobals.TrackColors[track][1],
ToontownBattleGlobals.TrackColors[track][2],
1)
def resetBarColor(self, track):
self.trackBars[track]['barColor'] = (ToontownBattleGlobals.TrackColors[track][0] * 0.8,
ToontownBattleGlobals.TrackColors[track][1] * 0.8,
ToontownBattleGlobals.TrackColors[track][2] * 0.8,
1)
def incrementMerits(self, toon, dept, newValue, totalMerits):
meritBar = self.meritBars[dept]
oldValue = meritBar['value']
if totalMerits:
newValue = min(totalMerits, newValue)
meritBar['range'] = totalMerits
meritBar['value'] = newValue
if newValue == totalMerits:
meritBar['text'] = TTLocalizer.RewardPanelMeritAlert
meritBar['barColor'] = (DisguisePage.DeptColors[dept][0],
DisguisePage.DeptColors[dept][1],
DisguisePage.DeptColors[dept][2],
1)
else:
meritBar['text'] = '%s/%s %s' % (newValue, totalMerits, TTLocalizer.RewardPanelMeritBarLabels[dept])
def resetMeritBarColor(self, dept):
self.meritBars[dept]['barColor'] = (DisguisePage.DeptColors[dept][0] * 0.8,
DisguisePage.DeptColors[dept][1] * 0.8,
DisguisePage.DeptColors[dept][2] * 0.8,
1)
def getRandomCongratsPair(self, toon):
congratsStrings = TTLocalizer.RewardPanelCongratsStrings
numStrings = len(congratsStrings)
indexList = range(numStrings)
index1 = random.choice(indexList)
indexList.remove(index1)
index2 = random.choice(indexList)
string1 = congratsStrings[index1]
string2 = congratsStrings[index2]
return (string1, string2)
def uberGagInterval(self, toon, track, level):
self.endTrackFrame.hide()
self.gagExpFrame.hide()
self.newGagFrame.show()
self.promotionFrame.hide()
self.questFrame.hide()
self.itemFrame.hide()
self.missedItemFrame.hide()
self.newGagFrame['text'] = TTLocalizer.RewardPanelUberGag % {'gagName': ToontownBattleGlobals.Tracks[track].capitalize(),
'exp': str(ToontownBattleGlobals.UberSkill),
'avName': toon.getName()}
self.congratsLeft['text'] = ''
self.congratsRight['text'] = ''
gagOriginal = base.localAvatar.inventory.buttonLookup(track, level)
self.newGagIcon = gagOriginal.copyTo(self.newGagFrame)
self.newGagIcon.setPos(0, 0, -0.25)
self.newGagIcon.setScale(1.5)
def newGag(self, toon, track, level):
self.endTrackFrame.hide()
self.gagExpFrame.hide()
self.newGagFrame.show()
self.promotionFrame.hide()
self.questFrame.hide()
self.itemFrame.hide()
self.missedItemFrame.hide()
self.newGagFrame['text'] = TTLocalizer.RewardPanelNewGag % {'gagName': ToontownBattleGlobals.Tracks[track].capitalize(),
'avName': toon.getName()}
self.congratsLeft['text'] = ''
self.congratsRight['text'] = ''
gagOriginal = base.localAvatar.inventory.buttonLookup(track, level)
self.newGagIcon = gagOriginal.copyTo(self.newGagFrame)
self.newGagIcon.setPos(0, 0, -0.25)
self.newGagIcon.setScale(1.5)
def cleanupNewGag(self):
self.endTrackFrame.hide()
if self.newGagIcon:
self.newGagIcon.removeNode()
self.newGagIcon = None
self.gagExpFrame.show()
self.newGagFrame.hide()
self.promotionFrame.hide()
self.questFrame.hide()
self.itemFrame.hide()
self.missedItemFrame.hide()
return
def getNewGagIntervalList(self, toon, track, level):
leftCongratsAnticipate = 1.0
rightCongratsAnticipate = 1.0
finalDelay = 1.5
leftString, rightString = self.getRandomCongratsPair(toon)
intervalList = [Func(self.newGag, toon, track, level),
Wait(leftCongratsAnticipate),
Func(self.congratsLeft.setProp, 'text', leftString),
Wait(rightCongratsAnticipate),
Func(self.congratsRight.setProp, 'text', rightString),
Wait(finalDelay),
Func(self.cleanupNewGag)]
return intervalList
def getUberGagIntervalList(self, toon, track, level):
leftCongratsAnticipate = 1.0
rightCongratsAnticipate = 1.0
finalDelay = 1.5
leftString, rightString = self.getRandomCongratsPair(toon)
intervalList = [Func(self.uberGagInterval, toon, track, level),
Wait(leftCongratsAnticipate),
Func(self.congratsLeft.setProp, 'text', leftString),
Wait(rightCongratsAnticipate),
Func(self.congratsRight.setProp, 'text', rightString),
Wait(finalDelay),
Func(self.cleanupNewGag)]
return intervalList
def vanishFrames(self):
self.hide()
self.endTrackFrame.hide()
self.gagExpFrame.hide()
self.newGagFrame.hide()
self.promotionFrame.hide()
self.questFrame.hide()
self.itemFrame.hide()
self.missedItemFrame.hide()
self.cogPartFrame.hide()
self.missedItemFrame.hide()
def endTrack(self, toon, toonList, track):
for t in toonList:
if t == base.localAvatar:
self.show()
self.endTrackFrame.show()
self.endTrackFrame['text'] = TTLocalizer.RewardPanelEndTrack % {'gagName': ToontownBattleGlobals.Tracks[track].capitalize(),
'avName': toon.getName()}
gagLast = base.localAvatar.inventory.buttonLookup(track, ToontownBattleGlobals.UBER_GAG_LEVEL_INDEX)
self.gagIcon = gagLast.copyTo(self.endTrackFrame)
self.gagIcon.setPos(0, 0, -0.25)
self.gagIcon.setScale(1.5)
def cleanIcon(self):
self.gagIcon.removeNode()
self.gagIcon = None
return
def cleanupEndTrack(self):
self.endTrackFrame.hide()
self.gagExpFrame.show()
self.newGagFrame.hide()
self.promotionFrame.hide()
self.questFrame.hide()
self.itemFrame.hide()
self.missedItemFrame.hide()
def getEndTrackIntervalList(self, toon, toonList, track):
intervalList = [Func(self.endTrack, toon, toonList, track), Wait(2.0), Func(self.cleanIcon)]
return intervalList
def showTrackIncLabel(self, track, earnedSkill):
if earnedSkill > 0:
self.trackIncLabels[track]['text'] = '+ ' + str(earnedSkill)
elif earnedSkill < 0:
self.trackIncLabels[track]['text'] = ' ' + str(earnedSkill)
self.trackIncLabels[track].show()
def showMeritIncLabel(self, dept, earnedMerits):
self.meritIncLabels[dept]['text'] = '+ ' + str(earnedMerits)
self.meritIncLabels[dept].show()
def getTrackIntervalList(self, toon, track, origSkill, earnedSkill, hasUber):
if hasUber < 0:
print (toon.doId, 'Reward Panel received an invalid hasUber from an uberList')
tickDelay = 0.1
intervalList = []
intervalList.append(Func(self.showTrackIncLabel, track, earnedSkill))
barTime = math.log(earnedSkill + 0.5)
numTicks = int(math.ceil(barTime / tickDelay))
for i in xrange(numTicks):
t = (i + 1) / float(numTicks)
newValue = int(origSkill + t * earnedSkill + 0.5)
intervalList.append(Func(self.incrementExp, track, newValue, toon))
intervalList.append(Wait(tickDelay))
intervalList.append(Func(self.resetBarColor, track))
intervalList.append(Wait(0.1))
nextExpValue = self.getNextExpValue(origSkill, track)
finalGagFlag = 0
while origSkill + earnedSkill >= nextExpValue and origSkill < nextExpValue and not finalGagFlag:
if nextExpValue != ToontownBattleGlobals.MaxSkill:
intervalList += self.getNewGagIntervalList(toon, track, ToontownBattleGlobals.Levels[track].index(nextExpValue))
newNextExpValue = self.getNextExpValue(nextExpValue, track)
if newNextExpValue == nextExpValue:
finalGagFlag = 1
else:
nextExpValue = newNextExpValue
uberIndex = ToontownBattleGlobals.LAST_REGULAR_GAG_LEVEL + 1
currentSkill = origSkill + earnedSkill
uberSkill = ToontownBattleGlobals.UberSkill + ToontownBattleGlobals.Levels[track][ToontownBattleGlobals.LAST_REGULAR_GAG_LEVEL + 1]
if currentSkill >= uberSkill and not hasUber > 0:
intervalList += self.getUberGagIntervalList(toon, track, ToontownBattleGlobals.LAST_REGULAR_GAG_LEVEL + 1)
intervalList.append(Wait(0.3))
skillDiff = currentSkill - ToontownBattleGlobals.Levels[track][ToontownBattleGlobals.LAST_REGULAR_GAG_LEVEL + 1]
barTime = math.log(skillDiff + 0.5)
numTicks = int(math.ceil(barTime / tickDelay))
displayedSkillDiff = skillDiff
if displayedSkillDiff > ToontownBattleGlobals.UberSkill:
displayedSkillDiff = ToontownBattleGlobals.UberSkill
intervalList.append(Func(self.showTrackIncLabel, track, -displayedSkillDiff))
for i in xrange(numTicks):
t = (i + 1) / float(numTicks)
newValue = int(currentSkill - t * skillDiff + 0.5)
intervalList.append(Func(self.incrementExp, track, newValue, toon))
intervalList.append(Wait(tickDelay * 0.5))
intervalList.append(Wait(0.3))
return intervalList
def getMeritIntervalList(self, toon, dept, origMerits, earnedMerits):
tickDelay = 0.08
intervalList = []
totalMerits = CogDisguiseGlobals.getTotalMerits(toon, dept)
neededMerits = 0
if totalMerits and origMerits != totalMerits:
neededMerits = totalMerits - origMerits
intervalList.append(Func(self.showMeritIncLabel, dept, min(neededMerits, earnedMerits)))
barTime = math.log(earnedMerits + 1)
numTicks = int(math.ceil(barTime / tickDelay))
for i in xrange(numTicks):
t = (i + 1) / float(numTicks)
newValue = int(origMerits + t * earnedMerits + 0.5)
intervalList.append(Func(self.incrementMerits, toon, dept, newValue, totalMerits))
intervalList.append(Wait(tickDelay))
intervalList.append(Func(self.resetMeritBarColor, dept))
intervalList.append(Wait(0.3))
if toon.cogLevels[dept] < ToontownGlobals.MaxCogSuitLevel:
if neededMerits and toon.readyForPromotion(dept):
intervalList.append(Wait(0.3))
intervalList += self.getPromotionIntervalList(toon, dept)
return intervalList
def promotion(self, toon, dept):
self.endTrackFrame.hide()
self.gagExpFrame.hide()
self.newGagFrame.hide()
self.promotionFrame.show()
self.questFrame.hide()
self.itemFrame.hide()
self.missedItemFrame.hide()
name = SuitDNA.suitDepts[dept]
self.promotionFrame['text'] = TTLocalizer.RewardPanelPromotion % SuitDNA.suitDeptFullnames[name]
icons = loader.loadModel('phase_3/models/gui/cog_icons')
if dept in SuitDNA.suitDeptModelPaths:
self.deptIcon = icons.find(SuitDNA.suitDeptModelPaths[dept]).copyTo(self.promotionFrame)
icons.removeNode()
self.deptIcon.setPos(0, 0, -0.225)
self.deptIcon.setScale(0.33)
def cleanupPromotion(self):
if not hasattr(self, 'deptIcon'):
return
self.deptIcon.removeNode()
self.deptIcon = None
self.endTrackFrame.hide()
self.gagExpFrame.show()
self.newGagFrame.hide()
self.promotionFrame.hide()
self.questFrame.hide()
self.itemFrame.hide()
self.missedItemFrame.hide()
return
def getPromotionIntervalList(self, toon, dept):
finalDelay = 2.0
intervalList = [Func(self.promotion, toon, dept), Wait(finalDelay), Func(self.cleanupPromotion)]
return intervalList
def getQuestIntervalList(self, toon, deathList, toonList, origQuestsList, itemList, helpfulToonsList = []):
avId = toon.getDoId()
tickDelay = 0.2
intervalList = []
cogList = []
for i in xrange(0, len(deathList), 4):
cogIndex = deathList[i]
cogLevel = deathList[i + 1]
activeToonBits = deathList[i + 2]
flags = deathList[i + 3]
activeToonIds = []
for j in xrange(8):
if activeToonBits & 1 << j:
if toonList[j] is not None:
activeToonIds.append(toonList[j].getDoId())
isSkelecog = flags & ToontownBattleGlobals.DLF_SKELECOG
isForeman = flags & ToontownBattleGlobals.DLF_FOREMAN
isBoss = flags & ToontownBattleGlobals.DLF_BOSS
isSupervisor = flags & ToontownBattleGlobals.DLF_SUPERVISOR
isVirtual = flags & ToontownBattleGlobals.DLF_VIRTUAL
hasRevives = flags & ToontownBattleGlobals.DLF_REVIVES
if isBoss > 0:
cogType = None
cogTrack = SuitDNA.suitDepts[cogIndex]
else:
cogType = SuitDNA.suitHeadTypes[cogIndex]
cogTrack = SuitDNA.getSuitDept(cogType)
cogList.append({'type': cogType,
'level': cogLevel,
'track': cogTrack,
'isSkelecog': isSkelecog,
'isForeman': isForeman,
'isBoss': isBoss,
'isSupervisor': isSupervisor,
'isVirtual': isVirtual,
'hasRevives': hasRevives,
'activeToons': activeToonIds})
try:
zoneId = base.cr.playGame.getPlace().getTaskZoneId()
except:
zoneId = 0
avQuests = []
for i in xrange(0, len(origQuestsList), 5):
avQuests.append(origQuestsList[i:i + 5])
for i in xrange(len(avQuests)):
questDesc = avQuests[i]
questId, npcId, toNpcId, rewardId, toonProgress = questDesc
quest = Quests.getQuest(questId)
if quest and i < len(self.questLabelList):
questString = quest.getString()
progressString = quest.getProgressString(toon, questDesc)
questLabel = self.questLabelList[i]
earned = 0
orig = questDesc[4] & pow(2, 16) - 1
num = 0
if quest.getType() == Quests.RecoverItemQuest:
questItem = quest.getItem()
if questItem in itemList:
earned = itemList.count(questItem)
else:
for cogDict in cogList:
num = quest.doesCogCount(avId, cogDict, zoneId)
if num:
if base.config.GetBool('battle-passing-no-credit', True):
if avId in helpfulToonsList:
earned += num
else:
self.notify.debug('avId=%d not getting %d kill cog quest credit' % (avId, num))
else:
earned += num
if base.localAvatar.tutorialAck:
if earned > 0:
earned = min(earned, quest.getNumQuestItems() - questDesc[4])
if earned > 0 or base.localAvatar.tutorialAck == 0 and num == 1:
barTime = math.log(earned + 1)
numTicks = int(math.ceil(barTime / tickDelay))
for i in xrange(numTicks):
t = (i + 1) / float(numTicks)
newValue = int(orig + t * earned + 0.5)
questDesc[4] = newValue
progressString = quest.getProgressString(toon, questDesc)
str = '%s : %s' % (questString, progressString)
if quest.getCompletionStatus(toon, questDesc) == Quests.COMPLETE:
intervalList.append(Func(questLabel.setProp, 'text_fg', (0, 0.3, 0, 1)))
intervalList.append(Func(questLabel.setProp, 'text', str))
intervalList.append(Wait(tickDelay))
return intervalList
def getItemIntervalList(self, toon, itemList):
intervalList = []
for itemId in itemList:
itemName = Quests.getItemName(itemId)
intervalList.append(Func(self.itemLabel.setProp, 'text', itemName))
intervalList.append(Wait(1))
return intervalList
def getCogPartIntervalList(self, toon, cogPartList):
itemName = CogDisguiseGlobals.getPartName(cogPartList)
intervalList = []
intervalList.append(Func(self.cogPartLabel.setProp, 'text', itemName))
intervalList.append(Wait(1))
return intervalList
def getMissedItemIntervalList(self, toon, missedItemList):
intervalList = []
for itemId in missedItemList:
itemName = Quests.getItemName(itemId)
intervalList.append(Func(self.missedItemLabel.setProp, 'text', itemName))
intervalList.append(Wait(1))
return intervalList
def getExpTrack(self, toon, origExp, earnedExp, deathList, origQuestsList, itemList, missedItemList, origMeritList, meritList, partList, toonList, uberEntry, helpfulToonsList, noSkip = False):
track = Sequence(Func(self.initGagFrame, toon, origExp, origMeritList, noSkip=noSkip), Wait(1.0))
endTracks = [0,
0,
0,
0,
0,
0,
0]
trackEnded = 0
for trackIndex in xrange(len(earnedExp)):
if earnedExp[trackIndex] > 0 or origExp[trackIndex] >= ToontownBattleGlobals.MaxSkill:
track += self.getTrackIntervalList(toon, trackIndex, origExp[trackIndex], earnedExp[trackIndex], ToontownBattleGlobals.getUberFlagSafe(uberEntry, trackIndex))
maxExp = ToontownBattleGlobals.MaxSkill - ToontownBattleGlobals.UberSkill
if origExp[trackIndex] < maxExp and earnedExp[trackIndex] + origExp[trackIndex] >= maxExp:
endTracks[trackIndex] = 1
trackEnded = 1
for dept in xrange(len(SuitDNA.suitDepts)):
if meritList[dept]:
track += self.getMeritIntervalList(toon, dept, origMeritList[dept], meritList[dept])
track.append(Wait(1.0))
itemInterval = self.getItemIntervalList(toon, itemList)
if itemInterval:
track.append(Func(self.initItemFrame, toon))
track.append(Wait(1.0))
track += itemInterval
track.append(Wait(1.0))
missedItemInterval = self.getMissedItemIntervalList(toon, missedItemList)
if missedItemInterval:
track.append(Func(self.initMissedItemFrame, toon))
track.append(Wait(1.0))
track += missedItemInterval
track.append(Wait(1.0))
self.notify.debug('partList = %s' % partList)
newPart = 0
for part in partList:
if part != 0:
newPart = 1
break
if newPart:
partList = self.getCogPartIntervalList(toon, partList)
if partList:
track.append(Func(self.initCogPartFrame, toon))
track.append(Wait(1.0))
track += partList
track.append(Wait(1.0))
questList = self.getQuestIntervalList(toon, deathList, toonList, origQuestsList, itemList, helpfulToonsList)
if questList:
avQuests = []
for i in xrange(0, len(origQuestsList), 5):
avQuests.append(origQuestsList[i:i + 5])
track.append(Func(self.initQuestFrame, toon, copy.deepcopy(avQuests)))
track.append(Wait(1.0))
track += questList
track.append(Wait(2.0))
track.append(Wait(0.25))
if trackEnded:
track.append(Func(self.vanishFrames))
track.append(Fanfare.makeFanfare(0, toon)[0])
for i in xrange(len(endTracks)):
if endTracks[i] is 1:
track += self.getEndTrackIntervalList(toon, toonList, i)
track.append(Func(self.cleanupEndTrack))
return track
def testMovie(self, otherToons = []):
track = Sequence()
track.append(Func(self.show))
expTrack = self.getExpTrack(base.localAvatar, [1999,
0,
20,
30,
10,
0,
60], [2,
0,
2,
6,
1,
0,
8], [3,
1,
3,
0,
2,
2,
1,
1,
30,
2,
1,
0], [], [], [], [0,
0,
0,
0], [0,
0,
0,
0], [], [base.localAvatar] + otherToons)
track.append(expTrack)
if len(track) > 0:
track.append(Func(self.hide))
track.append(Func(base.localAvatar.loop, 'neutral'))
track.append(Func(base.localAvatar.startUpdateSmartCamera))
track.start()
base.localAvatar.loop('victory')
base.localAvatar.stopUpdateSmartCamera()
camera.setPosHpr(0, 8, base.localAvatar.getHeight() * 0.66, 179, 15, 0)
else:
self.notify.debug('no experience, no movie.')
return None
def _handleSkip(self):
messenger.send(self.SkipBattleMovieEvent)