mirror of
https://github.com/Sneed-Group/Poodletooth-iLand
synced 2024-12-26 13:12:30 -06:00
145 lines
6.4 KiB
Python
145 lines
6.4 KiB
Python
from direct.directnotify import DirectNotifyGlobal
|
|
from direct.distributed.ClockDelta import *
|
|
from direct.fsm.FSM import FSM
|
|
from direct.task import Task
|
|
from toontown.parties.DistributedPartyActivityAI import DistributedPartyActivityAI
|
|
from toontown.toonbase import TTLocalizer
|
|
import PartyGlobals
|
|
|
|
class DistributedPartyTrampolineActivityAI(DistributedPartyActivityAI, FSM):
|
|
notify = DirectNotifyGlobal.directNotify.newCategory("DistributedPartyTrampolineActivityAI")
|
|
|
|
def __init__(self, air, parent, activityTuple):
|
|
DistributedPartyActivityAI.__init__(self, air, parent, activityTuple)
|
|
FSM.__init__(self, 'DistributedPartyTrampolineActivityAI')
|
|
self.currentAv = 0
|
|
self.record = 0
|
|
self.jellybeans = []
|
|
self.collected = 0
|
|
|
|
def generate(self):
|
|
self.demand('Idle')
|
|
|
|
def awardBeans(self, numBeans, height):
|
|
avId = self.air.getAvatarIdFromSender()
|
|
if avId != self.currentAv:
|
|
self.air.writeServerEvent('suspicious',avId,'Tried to give beans while not using the trampoline!')
|
|
return
|
|
if self.state != 'Active':
|
|
self.air.writeServerEvent('suspicious',avId,'Toon tried to award beans while the game wasn\'t running!')
|
|
return
|
|
if numBeans != self.collected:
|
|
self.air.writeServerEvent('suspicious',avId,'Toon reported incorrect number of collected jellybeans!')
|
|
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
|
|
reward = self.collected*2
|
|
message = TTLocalizer.PartyTrampolineBeanResults % self.collected
|
|
if self.collected == PartyGlobals.TrampolineNumJellyBeans:
|
|
reward += PartyGlobals.TrampolineJellyBeanBonus
|
|
message = TTLocalizer.PartyTrampolineBonusBeanResults % (self.collected, PartyGlobals.TrampolineJellyBeanBonus)
|
|
message += '\n\n' + TTLocalizer.PartyTrampolineTopHeightResults % height
|
|
# TODO: Pass a msgId(?) to the client so the client can use whatever localizer it chooses.
|
|
# Ideally, we shouldn't even be passing strings that *should* be localized.
|
|
self.sendUpdateToAvatarId(avId, 'showJellybeanReward', [reward, av.getMoney(), message])
|
|
av.addMoney(reward)
|
|
|
|
|
|
def reportHeightInformation(self, height):
|
|
avId = self.air.getAvatarIdFromSender()
|
|
av = self.air.doId2do.get(avId, None)
|
|
if not av:
|
|
self.air.writeServerEvent('suspicious',avId,'Toon tried to report height without being on the district!')
|
|
return
|
|
if height > self.record:
|
|
self.record = height
|
|
self.sendUpdate('setBestHeightInfo', [av.getName(), height])
|
|
else:
|
|
self.air.writeServerEvent('suspicious',avId,'Toon incorrectly reported height!')
|
|
|
|
def enterActive(self):
|
|
self.jellybeans = range(PartyGlobals.TrampolineNumJellyBeans)
|
|
taskMgr.doMethodLater(PartyGlobals.TrampolineDuration, self.sendUpdate, 'exitTrampoline%d' % self.doId, extraArgs=['leaveTrampoline', []])
|
|
self.sendUpdate('setState', ['Active', globalClockDelta.getRealNetworkTime()])
|
|
self.collected = 0
|
|
|
|
def enterIdle(self):
|
|
self.sendUpdate('setState', ['Idle', globalClockDelta.getRealNetworkTime()])
|
|
self.currentAv = 0
|
|
self.updateToonsPlaying()
|
|
|
|
def enterRules(self):
|
|
self.sendUpdate('setState', ['Rules', globalClockDelta.getRealNetworkTime()])
|
|
|
|
def requestAnim(self, anim):
|
|
avId = self.air.getAvatarIdFromSender()
|
|
if self.state != 'Active':
|
|
self.air.writeServerEvent('suspicious',avId,'Toon tried to request an animation while not playing!')
|
|
return
|
|
if self.currentAv != avId:
|
|
self.air.writeServerEvent('suspicious',avId, 'Toon tried to request an anim for someone else!')
|
|
return
|
|
self.sendUpdate('requestAnimEcho', [anim])
|
|
|
|
def removeBeans(self, beans):
|
|
avId = self.air.getAvatarIdFromSender()
|
|
if self.state != 'Active':
|
|
self.air.writeServerEvent('suspicious',avId,'Toon tried to collect jellybeans while not playing!')
|
|
return
|
|
if self.currentAv != avId:
|
|
self.air.writeServerEvent('suspicious',avId, 'Toon tried to collect jellybeans while someone else was playing!')
|
|
return
|
|
for bean in beans:
|
|
if not bean in self.jellybeans:
|
|
self.air.writeServerEvent('suspicious',avId,'Toon tried to collect non-existent bean!')
|
|
beans.remove(bean)
|
|
else:
|
|
self.collected += 1
|
|
self.sendUpdate('removeBeansEcho', [beans])
|
|
|
|
def updateToonsPlaying(self):
|
|
if self.currentAv == 0:
|
|
self.sendUpdate('setToonsPlaying', [[]])
|
|
return
|
|
self.sendUpdate('setToonsPlaying', [[self.currentAv]])
|
|
|
|
def toonJoinRequest(self):
|
|
avId = self.air.getAvatarIdFromSender()
|
|
if self.state == 'Active':
|
|
self.sendUpdateToAvatarId(avId, 'joinRequestDenied', [1])
|
|
return
|
|
self.currentAv = avId
|
|
self.updateToonsPlaying()
|
|
self.demand('Rules')
|
|
|
|
def toonExitRequest(self):
|
|
avId = self.air.getAvatarIdFromSender()
|
|
if self.state != 'Active':
|
|
self.air.writeServerEvent('suspicious',avId,'Toon tried to leave a trampoline that was not running!')
|
|
return
|
|
if self.currentAv != avId:
|
|
self.air.writeServerEvent('suspicious',avId,'Toon tried to exit trampoline for someone else!')
|
|
return
|
|
taskMgr.remove('exitTrampoline'%self.doId)
|
|
self.sendUpdate('leaveTrampoline', [])
|
|
|
|
def toonExitDemand(self):
|
|
avId = self.air.getAvatarIdFromSender()
|
|
if avId != self.currentAv:
|
|
self.air.writeServerEvent('suspicious',avId,'Toon tried to exit trampoline they\'re not using!')
|
|
return
|
|
self.demand('Idle')
|
|
|
|
def toonReady(self):
|
|
avId = self.air.getAvatarIdFromSender()
|
|
if self.state != 'Rules':
|
|
self.air.writeServerEvent('suspicious',avId,'Toon tried to verify rules while the rules were not running!')
|
|
return
|
|
if avId != self.currentAv:
|
|
self.air.writeServerEvent('suspicious',avId,'Toon tried to verify rules for someone else!')
|
|
return
|
|
self.demand('Active')
|
|
|
|
|
|
|