74 lines
3 KiB
Python
74 lines
3 KiB
Python
from otp.ai.AIBase import *
|
|
from toontown.toonbase import ToontownGlobals
|
|
from direct.distributed.ClockDelta import *
|
|
from ElevatorConstants import *
|
|
import DistributedElevatorAI
|
|
import DistributedElevatorExtAI
|
|
from direct.fsm import ClassicFSM
|
|
from direct.fsm import State
|
|
from direct.task import Task
|
|
from direct.directnotify import DirectNotifyGlobal
|
|
from toontown.suit import DistributedSellbotBossAI
|
|
|
|
class DistributedBossElevatorAI(DistributedElevatorExtAI.DistributedElevatorExtAI):
|
|
|
|
def __init__(self, air, bldg, zone, antiShuffle = 0, minLaff = 0):
|
|
DistributedElevatorExtAI.DistributedElevatorExtAI.__init__(self, air, bldg, numSeats=8, antiShuffle=antiShuffle, minLaff=minLaff)
|
|
self.zone = zone
|
|
self.type = ELEVATOR_VP
|
|
self.countdownTime = ElevatorData[self.type]['countdown']
|
|
|
|
def elevatorClosed(self):
|
|
numPlayers = self.countFullSeats()
|
|
if numPlayers > 0:
|
|
bossZone = self.bldg.createBossOffice(self.seats)
|
|
for seatIndex in range(len(self.seats)):
|
|
avId = self.seats[seatIndex]
|
|
if avId:
|
|
self.sendUpdateToAvatarId(avId, 'setBossOfficeZone', [bossZone])
|
|
self.clearFullNow(seatIndex)
|
|
|
|
else:
|
|
self.notify.warning('The elevator left, but was empty.')
|
|
self.fsm.request('closed')
|
|
|
|
def sendAvatarsToDestination(self, avIdList):
|
|
if len(avIdList) > 0:
|
|
bossZone = self.bldg.createBossOffice(avIdList)
|
|
for avId in avIdList:
|
|
if avId:
|
|
self.sendUpdateToAvatarId(avId, 'setBossOfficeZoneForce', [bossZone])
|
|
|
|
def enterClosing(self):
|
|
DistributedElevatorAI.DistributedElevatorAI.enterClosing(self)
|
|
taskMgr.doMethodLater(ElevatorData[self.type]['closeTime'], self.elevatorClosedTask, self.uniqueName('closing-timer'))
|
|
|
|
def enterClosed(self):
|
|
DistributedElevatorExtAI.DistributedElevatorExtAI.enterClosed(self)
|
|
self.fsm.request('opening')
|
|
|
|
def enterOpening(self):
|
|
DistributedElevatorAI.DistributedElevatorAI.enterOpening(self)
|
|
taskMgr.doMethodLater(ElevatorData[self.type]['openTime'], self.waitEmptyTask, self.uniqueName('opening-timer'))
|
|
|
|
def checkBoard(self, av):
|
|
dept = ToontownGlobals.cogHQZoneId2deptIndex(self.zone)
|
|
if av.hp < self.minLaff:
|
|
return REJECT_MINLAFF
|
|
if not av.readyForPromotion(dept):
|
|
return REJECT_PROMOTION
|
|
return 0
|
|
|
|
def requestBoard(self, *args):
|
|
self.notify.debug('requestBoard')
|
|
avId = self.air.getAvatarIdFromSender()
|
|
av = self.air.doId2do.get(avId)
|
|
if av:
|
|
boardResponse = self.checkBoard(av)
|
|
newArgs = (avId,) + args + (boardResponse,)
|
|
if boardResponse == 0:
|
|
self.acceptingBoardersHandler(*newArgs)
|
|
else:
|
|
self.rejectingBoardersHandler(*newArgs)
|
|
else:
|
|
self.notify.warning('avid: %s does not exist, but tried to board an elevator' % avId)
|