oldschool-toontown/toontown/coghq/DistributedStageAI.py

132 lines
4.8 KiB
Python
Raw Normal View History

2019-11-02 17:27:54 -05:00
from direct.distributed import DistributedObjectAI
from otp.level import DistributedLevelAI
from direct.directnotify import DirectNotifyGlobal
from toontown.toonbase import ToontownGlobals
from toontown.coghq import StageLayout, DistributedStageRoomAI
from toontown.coghq import BattleExperienceAggregatorAI
from toontown.building import DistributedElevatorFloorAI
from panda3d.core import *
2019-11-02 17:27:54 -05:00
class DistributedStageAI(DistributedObjectAI.DistributedObjectAI):
notify = DirectNotifyGlobal.directNotify.newCategory('DistributedStageAI')
def __init__(self, air, stageId, zoneId, floorNum, avIds, layoutIndex, battleExpAggreg=None):
DistributedObjectAI.DistributedObjectAI.__init__(self, air)
self.stageId = stageId
self.zoneId = zoneId
self.floorNum = floorNum
self.avIds = avIds
self.elevatorList = []
self.setLayoutIndex(layoutIndex)
self.battleExpAggreg = battleExpAggreg
self.puzzelReward = 5
def generate(self):
DistributedObjectAI.DistributedObjectAI.generate(self)
self.notify.info('generate %s, id=%s, floor=%s' % (self.doId, self.stageId, self.floorNum))
self.layout = StageLayout.StageLayout(self.stageId, self.floorNum, self.layoutIndex)
self.rooms = []
if self.battleExpAggreg is None:
self.battleExpAggreg = BattleExperienceAggregatorAI.BattleExperienceAggregatorAI()
for i in range(self.layout.getNumRooms()):
room = DistributedStageRoomAI.DistributedStageRoomAI(self.air, self.stageId, self.doId, self.zoneId, self.layout.getRoomId(i), i * 2, self.avIds, self.battleExpAggreg)
room.generateWithRequired(self.zoneId)
self.rooms.append(room)
roomDoIds = []
for room in self.rooms:
roomDoIds.append(room.doId)
self.sendUpdate('setRoomDoIds', [roomDoIds])
self.placeElevatorsOnMarkers()
if __dev__:
simbase.stage = self
description = '%s|%s|%s' % (self.stageId, self.floorNum, self.avIds)
for avId in self.avIds:
self.air.writeServerEvent('stageEntered', avId, description)
return
def requestDelete(self):
self.notify.info('requestDelete: %s' % self.doId)
if hasattr(self, 'rooms'):
for room in self.rooms:
room.requestDelete()
if hasattr(self, 'elevatorList'):
for elevator in self.elevatorList:
elevator.requestDelete()
DistributedObjectAI.DistributedObjectAI.requestDelete(self)
def delete(self):
self.notify.info('delete: %s' % self.doId)
if __dev__:
if hasattr(simbase, 'stage') and simbase.stage is self:
del simbase.stage
self.air.deallocateZone(self.zoneId)
if hasattr(self, 'elevatorList'):
del self.elevatorList
if hasattr(self, 'rooms'):
del self.rooms
if hasattr(self, 'layout'):
del self.layout
if hasattr(self, 'battleExpAggreg'):
del self.battleExpAggreg
DistributedObjectAI.DistributedObjectAI.delete(self)
def getTaskZoneId(self):
return self.stageId
def placeElevatorsOnMarkers(self):
for room in self.rooms:
if room.entType2ids['elevatorMarker']:
for markerId in room.entType2ids['elevatorMarker']:
marker = room.getEntity(markerId)
newElevator = DistributedElevatorFloorAI.DistributedElevatorFloorAI(self.air, self.doId, self, self.avIds, marker.doId)
newElevator.generateWithRequired(self.zoneId)
self.elevatorList.append(newElevator)
def allToonsGone(self):
self.notify.info('allToonsGone')
self.requestDelete()
def getZoneId(self):
return self.zoneId
def getStageId(self):
return self.stageId
def getFloorNum(self):
return self.floorNum
def setLayoutIndex(self, layoutIndex):
self.layoutIndex = layoutIndex
def getLayoutIndex(self):
return self.layoutIndex
def startNextFloor(self):
floor = self.floorNum + 1
StageZone = self.air.allocateZone()
Stage = DistributedStageAI(self.air, self.stageId, StageZone, floor, self.avIds, self.layoutIndex, self.battleExpAggreg)
Stage.generateWithRequired(StageZone)
for avId in self.avIds:
self.sendUpdateToAvatarId(avId, 'setStageZone', [StageZone])
self.requestDelete()
def elevatorAlert(self, avId):
self.sendUpdate('elevatorAlert', [avId])
def increasePuzzelReward(self):
self.puzzelReward += 5
if self.puzzelReward > 10:
self.puzzelReward = 10
def resetPuzzelReward(self):
self.puzzelReward = 5
def getPuzzelReward(self):
return self.puzzelReward