historical/toontown-classic.git/toontown/partiesolder/DistributedPartyCatchActivityAI.py

88 lines
3.6 KiB
Python
Raw Normal View History

2024-01-16 11:20:27 -06:00
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])