toontown-just-works/toontown/parties/DistributedPartyCatchActivityAI.py
2024-07-07 18:08:39 -05:00

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