136 lines
4.5 KiB
Python
136 lines
4.5 KiB
Python
from pandac.PandaModules import *
|
|
from toontown.toonbase.ToontownBattleGlobals import *
|
|
from direct.directnotify import DirectNotifyGlobal
|
|
from direct.distributed.PyDatagram import PyDatagram
|
|
from direct.distributed.PyDatagramIterator import PyDatagramIterator
|
|
from otp.otpbase import OTPGlobals
|
|
|
|
class Experience:
|
|
notify = DirectNotifyGlobal.directNotify.newCategory('Experience')
|
|
|
|
def __init__(self, expStr = None, owner = None):
|
|
self.owner = owner
|
|
if expStr == None:
|
|
self.experience = []
|
|
for track in range(0, len(Tracks)):
|
|
self.experience.append(StartingLevel)
|
|
|
|
else:
|
|
self.experience = self.makeFromNetString(expStr)
|
|
return
|
|
|
|
def __str__(self):
|
|
return str(self.experience)
|
|
|
|
def makeNetString(self):
|
|
dataList = self.experience
|
|
datagram = PyDatagram()
|
|
for track in range(0, len(Tracks)):
|
|
datagram.addUint16(dataList[track])
|
|
|
|
dgi = PyDatagramIterator(datagram)
|
|
return dgi.getRemainingBytes()
|
|
|
|
def makeFromNetString(self, netString):
|
|
dataList = []
|
|
dg = PyDatagram(netString)
|
|
dgi = PyDatagramIterator(dg)
|
|
for track in range(0, len(Tracks)):
|
|
dataList.append(dgi.getUint16())
|
|
|
|
return dataList
|
|
|
|
def addExp(self, track, amount = 1):
|
|
if type(track) == type(''):
|
|
track = Tracks.index(track)
|
|
self.notify.debug('adding %d exp to track %d' % (amount, track))
|
|
if self.owner.getGameAccess() == OTPGlobals.AccessFull:
|
|
if self.experience[track] + amount <= MaxSkill:
|
|
self.experience[track] += amount
|
|
else:
|
|
self.experience[track] = MaxSkill
|
|
elif self.experience[track] + amount <= UnpaidMaxSkills[track]:
|
|
self.experience[track] += amount
|
|
elif self.experience[track] > UnpaidMaxSkills[track]:
|
|
self.experience[track] += 0
|
|
else:
|
|
self.experience[track] = UnpaidMaxSkills[track]
|
|
|
|
def maxOutExp(self):
|
|
for track in range(0, len(Tracks)):
|
|
self.experience[track] = MaxSkill - UberSkill
|
|
|
|
def maxOutExpMinusOne(self):
|
|
for track in range(0, len(Tracks)):
|
|
self.experience[track] = MaxSkill - 1
|
|
|
|
def makeExpHigh(self):
|
|
for track in range(0, len(Tracks)):
|
|
self.experience[track] = Levels[track][len(Levels[track]) - 1] - 1
|
|
|
|
def makeExpRegular(self):
|
|
import random
|
|
for track in range(0, len(Tracks)):
|
|
rank = random.choice((0, int(random.random() * 1500.0), int(random.random() * 2000.0)))
|
|
self.experience[track] = Levels[track][len(Levels[track]) - 1] - rank
|
|
|
|
def zeroOutExp(self):
|
|
for track in range(0, len(Tracks)):
|
|
self.experience[track] = StartingLevel
|
|
|
|
def setAllExp(self, num):
|
|
for track in range(0, len(Tracks)):
|
|
self.experience[track] = num
|
|
|
|
def getExp(self, track):
|
|
if type(track) == type(''):
|
|
track = Tracks.index(track)
|
|
return self.experience[track]
|
|
|
|
def setExp(self, track, exp):
|
|
if type(track) == type(''):
|
|
track = Tracks.index(track)
|
|
self.experience[track] = exp
|
|
|
|
def getExpLevel(self, track):
|
|
if type(track) == type(''):
|
|
track = Tracks.index(track)
|
|
level = 0
|
|
for amount in Levels[track]:
|
|
if self.experience[track] >= amount:
|
|
level = Levels[track].index(amount)
|
|
|
|
return level
|
|
|
|
def getTotalExp(self):
|
|
total = 0
|
|
for level in self.experience:
|
|
total += level
|
|
|
|
return total
|
|
|
|
def getNextExpValue(self, track, curSkill = None):
|
|
if curSkill == None:
|
|
curSkill = self.experience[track]
|
|
retVal = Levels[track][len(Levels[track]) - 1]
|
|
for amount in Levels[track]:
|
|
if curSkill < amount:
|
|
retVal = amount
|
|
return retVal
|
|
|
|
return retVal
|
|
|
|
def getNewGagIndexList(self, track, extraSkill):
|
|
retList = []
|
|
curSkill = self.experience[track]
|
|
nextExpValue = self.getNextExpValue(track, curSkill)
|
|
finalGagFlag = 0
|
|
while curSkill + extraSkill >= nextExpValue and curSkill < nextExpValue and not finalGagFlag:
|
|
retList.append(Levels[track].index(nextExpValue))
|
|
newNextExpValue = self.getNextExpValue(track, nextExpValue)
|
|
if newNextExpValue == nextExpValue:
|
|
finalGagFlag = 1
|
|
else:
|
|
nextExpValue = newNextExpValue
|
|
|
|
return retList
|