87 lines
3.6 KiB
Python
87 lines
3.6 KiB
Python
from direct.directnotify import DirectNotifyGlobal
|
|
from toontown.parties.DistributedPartyActivityAI import DistributedPartyActivityAI
|
|
from toontown.parties.DistributedPartyCatchActivityBase import DistributedPartyCatchActivityBase
|
|
from direct.task import Task
|
|
from direct.distributed.ClockDelta import globalClockDelta
|
|
from toontown.toonbase import TTLocalizer
|
|
import PartyGlobals
|
|
|
|
class DistributedPartyCatchActivityAI(DistributedPartyActivityAI, DistributedPartyCatchActivityBase):
|
|
notify = DirectNotifyGlobal.directNotify.newCategory("DistributedPartyCatchActivityAI")
|
|
|
|
def __init__(self, air, parent, activityTuple):
|
|
DistributedPartyActivityAI.__init__(self, air, parent, activityTuple)
|
|
self.numGenerations = 1
|
|
self.generations = []
|
|
self.player2catches = {}
|
|
self.startTimestamp = globalClockDelta.getRealNetworkTime(bits=32)
|
|
self.playing = False
|
|
|
|
def delete(self):
|
|
taskMgr.remove('newGeneration%d' % self.doId)
|
|
DistributedPartyActivityAI.delete(self)
|
|
|
|
def getStartTimestamp(self):
|
|
return self.startTimestamp
|
|
|
|
def setStartTimestamp(self, ts):
|
|
self.startTimestamp = ts
|
|
|
|
def setGenerations(self, generations):
|
|
self.generations = generations
|
|
|
|
def toonJoinRequest(self):
|
|
DistributedPartyActivityAI.toonJoinRequest(self)
|
|
avId = self.air.getAvatarIdFromSender()
|
|
self.player2catches[avId] = 0
|
|
if not self.playing:
|
|
self.__startGame()
|
|
self.sendUpdate('setState', ['Active', globalClockDelta.getRealNetworkTime()])
|
|
|
|
def toonExitDemand(self):
|
|
avId = self.air.getAvatarIdFromSender()
|
|
if not avId in self.toonsPlaying:
|
|
self.air.writeServerEvent('suspicious',avId,'Toon tried to exit a party game they\'re not using!')
|
|
return
|
|
catches = self.player2catches[avId]
|
|
del self.player2catches[avId]
|
|
av = self.air.doId2do.get(avId, None)
|
|
if not av:
|
|
self.air.writeServerEvent('suspicious',avId,'Toon tried to award beans while not in district!')
|
|
return
|
|
if catches > PartyGlobals.CatchMaxTotalReward:
|
|
catches = PartyGlobals.CatchMaxTotalReward
|
|
self.sendUpdateToAvatarId(avId, 'showJellybeanReward', [catches, av.getMoney(), TTLocalizer.PartyCatchRewardMessage % (catches, catches)])
|
|
av.addMoney(catches)
|
|
DistributedPartyActivityAI.toonExitDemand(self)
|
|
|
|
def __startGame(self):
|
|
self.playing = True
|
|
self.calcDifficultyConstants(len(self.toonsPlaying))
|
|
self.generations.append([self.numGenerations, globalClockDelta.getRealNetworkTime(bits=32), len(self.toonsPlaying)])
|
|
self.numGenerations += 1
|
|
self.sendUpdate('setGenerations', [self.generations])
|
|
taskMgr.doMethodLater(self.generationDuration, self.__newGeneration, 'newGeneration%d' % self.doId, extraArgs=[])
|
|
|
|
def __newGeneration(self):
|
|
if len(self.toonsPlaying) > 0:
|
|
self.__startGame()
|
|
else:
|
|
self.playing = False
|
|
def getGenerations(self):
|
|
return self.generations
|
|
|
|
def requestActivityStart(self):
|
|
pass
|
|
|
|
def startRequestResponse(self, todo0):
|
|
pass
|
|
|
|
def claimCatch(self, generation, objNum, objType):
|
|
avId = self.air.getAvatarIdFromSender()
|
|
if not avId in self.toonsPlaying:
|
|
self.air.writeServerEvent('suspicious',avId,'Toon tried to catch while not playing!')
|
|
return
|
|
if PartyGlobals.DOTypeId2Name[objType] != 'anvil':
|
|
self.player2catches[avId] += 1
|
|
self.sendUpdate('setObjectCaught', [avId, generation, objNum])
|