mirror of
https://github.com/Sneed-Group/Poodletooth-iLand
synced 2024-12-25 12:42:41 -06:00
75 lines
3 KiB
Python
75 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 xrange(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)
|