59 lines
2.8 KiB
Python
59 lines
2.8 KiB
Python
|
from toontown.coghq import DistributedLevelBattleAI
|
||
|
from direct.directnotify import DirectNotifyGlobal
|
||
|
from direct.fsm import State
|
||
|
from direct.fsm import ClassicFSM, State
|
||
|
from toontown.battle.BattleBase import *
|
||
|
import CogDisguiseGlobals
|
||
|
from direct.showbase.PythonUtil import addListsByValue
|
||
|
|
||
|
class DistributedBattleFactoryAI(DistributedLevelBattleAI.DistributedLevelBattleAI):
|
||
|
notify = DirectNotifyGlobal.directNotify.newCategory('DistributedBattleFactoryAI')
|
||
|
|
||
|
def __init__(self, air, battleMgr, pos, suit, toonId, zoneId, level, battleCellId, roundCallback = None, finishCallback = None, maxSuits = 4):
|
||
|
DistributedLevelBattleAI.DistributedLevelBattleAI.__init__(self, air, battleMgr, pos, suit, toonId, zoneId, level, battleCellId, 'FactoryReward', roundCallback, finishCallback, maxSuits)
|
||
|
self.battleCalc.setSkillCreditMultiplier(1)
|
||
|
if self.bossBattle:
|
||
|
self.level.d_setForemanConfronted(toonId)
|
||
|
self.fsm.addState(State.State('FactoryReward', self.enterFactoryReward, self.exitFactoryReward, ['Resume']))
|
||
|
playMovieState = self.fsm.getStateNamed('PlayMovie')
|
||
|
playMovieState.addTransition('FactoryReward')
|
||
|
|
||
|
def getTaskZoneId(self):
|
||
|
return self.level.factoryId
|
||
|
|
||
|
def handleToonsWon(self, toons):
|
||
|
self.handleCrateReward(toons)
|
||
|
for toon in toons:
|
||
|
recovered, notRecovered = self.air.questManager.recoverItems(toon, self.suitsKilled, self.getTaskZoneId())
|
||
|
self.toonItems[toon.doId][0].extend(recovered)
|
||
|
self.toonItems[toon.doId][1].extend(notRecovered)
|
||
|
meritArray = self.air.promotionMgr.recoverMerits(
|
||
|
toon, self.suitsKilled, self.getTaskZoneId(),
|
||
|
getFactoryMeritMultiplier(self.getTaskZoneId()) * 2.0, addInvasion=False)
|
||
|
if toon.doId in self.helpfulToons:
|
||
|
self.toonMerits[toon.doId] = addListsByValue(self.toonMerits[toon.doId], meritArray)
|
||
|
else:
|
||
|
self.notify.debug('toon %d not helpful, skipping merits' % toon.doId)
|
||
|
if self.bossBattle:
|
||
|
self.toonParts[toon.doId] = self.air.cogSuitMgr.recoverPart(toon, self.level.factoryType, self.suitTrack)
|
||
|
self.notify.debug('toonParts = %s' % self.toonParts)
|
||
|
|
||
|
|
||
|
def enterFactoryReward(self):
|
||
|
self.joinableFsm.request('Unjoinable')
|
||
|
self.runableFsm.request('Unrunable')
|
||
|
self.resetResponses()
|
||
|
self.assignRewards()
|
||
|
self.bossDefeated = 1
|
||
|
self.level.setVictors(self.activeToons[:])
|
||
|
self.timer.startCallback(BUILDING_REWARD_TIMEOUT, self.serverRewardDone)
|
||
|
return None
|
||
|
|
||
|
def exitFactoryReward(self):
|
||
|
return None
|
||
|
|
||
|
def enterResume(self):
|
||
|
DistributedLevelBattleAI.DistributedLevelBattleAI.enterResume(self)
|
||
|
if self.bossBattle and self.bossDefeated:
|
||
|
self.battleMgr.level.b_setDefeated()
|