oldschool-toontown/toontown/suit/DistributedFactorySuitAI.py

123 lines
4.3 KiB
Python
Raw Normal View History

2019-11-02 17:27:54 -05:00
from otp.ai.AIBaseGlobal import *
from direct.directnotify import DirectNotifyGlobal
from toontown.battle import SuitBattleGlobals
import DistributedSuitBaseAI, SuitDialog
from direct.showbase.PythonUtil import StackTrace
class DistributedFactorySuitAI(DistributedSuitBaseAI.DistributedSuitBaseAI):
notify = DirectNotifyGlobal.directNotify.newCategory('DistributedFactorySuitAI')
def __init__(self, air, suitPlanner):
DistributedSuitBaseAI.DistributedSuitBaseAI.__init__(self, air, suitPlanner)
self.blocker = None
self.battleCellIndex = None
self.chasing = 0
self.factoryGone = 0
return
def factoryIsGoingDown(self):
self.factoryGone = 1
def delete(self):
if not self.factoryGone:
try:
self.setBattleCellIndex(None)
except Exception, e:
simbase.air.writeServerEvent('avoid_crash', self.doId, 'DistributedFactorySuitAI.delete, factoryIsNotGone, got Exception %s' % str(e))
self.notify.warning('delete, factoryIsNotGone, got Exception %s' % str(e))
self.notify.warning('stackTrace=%s' % StackTrace().compact())
self.notify.warning('doId=%s' % self.doId)
if hasattr(self, 'levelDoId'):
self.notify.warning('levelDoId=%s' % self.levelDoId)
else:
self.notify.warning('no levelDoId')
del self.blocker
self.ignoreAll()
DistributedSuitBaseAI.DistributedSuitBaseAI.delete(self)
return
def setLevelDoId(self, levelDoId):
self.levelDoId = levelDoId
def getLevelDoId(self):
return self.levelDoId
def setCogId(self, cogId):
self.cogId = cogId
def getCogId(self):
return self.cogId
def setReserve(self, reserve):
self.reserve = reserve
def getReserve(self):
return self.reserve
def requestBattle(self, x, y, z, h, p, r):
toonId = self.air.getAvatarIdFromSender()
if self.notify.getDebug():
self.notify.debug(str(self.getDoId()) + str(self.zoneId) + ': request battle with toon: %d' % toonId)
self.confrontPos = Point3(x, y, z)
self.confrontHpr = Vec3(h, p, r)
if self.sp.requestBattle(self, toonId):
if self.notify.getDebug():
self.notify.debug('Suit %d requesting battle in zone %d with toon %d' % (self.getDoId(), self.zoneId, toonId))
else:
if self.notify.getDebug():
self.notify.debug('requestBattle from suit %d, toon %d- denied by battle manager' % (toonId, self.getDoId()))
self.b_setBrushOff(SuitDialog.getBrushOffIndex(self.getStyleName()))
self.d_denyBattle(toonId)
def getConfrontPosHpr(self):
return (
self.confrontPos, self.confrontHpr)
def setBattleCellIndex(self, battleCellIndex):
self.sp.suitBattleCellChange(self, oldCell=self.battleCellIndex, newCell=battleCellIndex)
self.battleCellIndex = battleCellIndex
self.attachBattleBlocker()
self.accept(self.sp.getBattleBlockerEvent(self.battleCellIndex), self.attachBattleBlocker)
def getBattleCellIndex(self):
return self.battleCellIndex
def attachBattleBlocker(self):
blocker = self.sp.battleMgr.battleBlockers.get(self.battleCellIndex)
self.blocker = blocker
def setAlert(self, avId):
if avId == self.air.getAvatarIdFromSender():
av = self.air.doId2do.get(avId)
if av:
self.chasing = avId
if self.sp.battleMgr.cellHasBattle(self.battleCellIndex):
pass
else:
self.sendUpdate('setConfrontToon', [avId])
def setStrayed(self):
if self.chasing > 0:
self.chasing = 0
self.sendUpdate('setReturn', [])
def resume(self):
self.notify.debug('Suit %s resume' % self.doId)
if self.currHP <= 0:
messenger.send(self.getDeathEvent())
self.notify.debug('Suit %s dead after resume' % self.doId)
self.requestRemoval()
else:
self.sendUpdate('setReturn', [])
return None
def isForeman(self):
return self.boss
def setVirtual(self, isVirtual=1):
self.virtual = isVirtual
def getVirtual(self):
return self.virtual