60 lines
2.5 KiB
Python
60 lines
2.5 KiB
Python
from otp.ai.AIBaseGlobal import *
|
|
from direct.distributed.ClockDelta import *
|
|
from direct.directnotify import DirectNotifyGlobal
|
|
from direct.fsm import ClassicFSM
|
|
from toontown.building import DistributedDoorAI
|
|
from direct.fsm import State
|
|
from toontown.toonbase import ToontownGlobals
|
|
import CogDisguiseGlobals
|
|
from toontown.building import FADoorCodes
|
|
from toontown.building import DoorTypes
|
|
from toontown.toonbase import ToontownAccessAI
|
|
|
|
class DistributedCogHQDoorAI(DistributedDoorAI.DistributedDoorAI):
|
|
notify = DirectNotifyGlobal.directNotify.newCategory('DistributedCogHQDoorAI')
|
|
|
|
def __init__(self, air, blockNumber, doorType, destinationZone, doorIndex=0, lockValue=FADoorCodes.SB_DISGUISE_INCOMPLETE, swing=3):
|
|
DistributedDoorAI.DistributedDoorAI.__init__(self, air, blockNumber, doorType, doorIndex, lockValue, swing)
|
|
self.destinationZone = destinationZone
|
|
|
|
def requestEnter(self):
|
|
avatarID = self.air.getAvatarIdFromSender()
|
|
allowed = 0
|
|
dept = ToontownGlobals.cogHQZoneId2deptIndex(self.destinationZone)
|
|
av = self.air.doId2do.get(avatarID)
|
|
if av:
|
|
if self.doorType == DoorTypes.EXT_COGHQ and self.isLockedDoor():
|
|
parts = av.getCogParts()
|
|
if CogDisguiseGlobals.isSuitComplete(parts, dept):
|
|
allowed = 1
|
|
else:
|
|
allowed = 0
|
|
else:
|
|
allowed = 1
|
|
|
|
if not ToontownAccessAI.canAccess(avatarID, self.zoneId, 'DistributedCogHQDoorAI.requestEnter'):
|
|
allowed = 0
|
|
|
|
if not allowed:
|
|
self.sendReject(avatarID, self.isLockedDoor())
|
|
else:
|
|
self.enqueueAvatarIdEnter(avatarID)
|
|
self.sendUpdateToAvatarId(avatarID, 'setOtherZoneIdAndDoId', [
|
|
self.destinationZone,
|
|
self.otherDoor.getDoId()])
|
|
|
|
def requestExit(self):
|
|
avatarID = self.air.getAvatarIdFromSender()
|
|
if self.avatarsWhoAreEntering.has_key(avatarID):
|
|
del self.avatarsWhoAreEntering[avatarID]
|
|
if not self.avatarsWhoAreExiting.has_key(avatarID):
|
|
dept = ToontownGlobals.cogHQZoneId2deptIndex(self.destinationZone)
|
|
self.avatarsWhoAreExiting[avatarID] = 1
|
|
self.sendUpdate('avatarExit', [avatarID])
|
|
self.openDoor(self.exitDoorFSM)
|
|
if self.lockedDoor:
|
|
av = self.air.doId2do[avatarID]
|
|
if self.doorType == DoorTypes.EXT_COGHQ:
|
|
av.b_setCogIndex(-1)
|
|
else:
|
|
av.b_setCogIndex(dept)
|