oldschool-toontown/toontown/coghq/DistributedCogHQDoorAI.py

61 lines
2.5 KiB
Python
Raw Normal View History

2019-11-02 17:27:54 -05:00
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
from . import CogDisguiseGlobals
2019-11-02 17:27:54 -05:00
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 avatarID in self.avatarsWhoAreEntering:
2019-11-02 17:27:54 -05:00
del self.avatarsWhoAreEntering[avatarID]
if avatarID not in self.avatarsWhoAreExiting:
2019-11-02 17:27:54 -05:00
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)