mirror of
https://github.com/Sneed-Group/Poodletooth-iLand
synced 2024-12-23 03:35:12 -06:00
117 lines
4.8 KiB
Python
117 lines
4.8 KiB
Python
from direct.directnotify import DirectNotifyGlobal
|
|
from direct.distributed.ClockDelta import *
|
|
from toontown.battle import BattleBase
|
|
from toontown.building.ElevatorConstants import *
|
|
from toontown.cogdominium.DistCogdoGameAI import DistCogdoGameAI
|
|
import CogdoFlyingGameGlobals as Globals
|
|
|
|
class DistCogdoFlyingGameAI(DistCogdoGameAI):
|
|
notify = DirectNotifyGlobal.directNotify.newCategory("DistCogdoFlyingGameAI")
|
|
delayIntro = BattleBase.ELEVATOR_T + ElevatorData[ELEVATOR_FIELD]['openTime']
|
|
|
|
def __init__(self, air):
|
|
DistCogdoGameAI.__init__(self, air)
|
|
self.completed = []
|
|
self.eagles = {}
|
|
self.totalMemos = 0
|
|
|
|
def requestAction(self, action, data):
|
|
avId = self.air.getAvatarIdFromSender()
|
|
av = self.air.doId2do.get(avId)
|
|
if not av:
|
|
return
|
|
|
|
if action == Globals.AI.GameActions.LandOnWinPlatform:
|
|
self.completed.append(avId)
|
|
for toon in self.toons:
|
|
if toon not in self.completed:
|
|
return
|
|
self.gameDone()
|
|
|
|
elif action == Globals.AI.GameActions.BladeLost:
|
|
self.sendUpdate("toonBladeLost", [avId])
|
|
elif action == Globals.AI.GameActions.SetBlades:
|
|
self.sendUpdate("toonSetBlades", [avId, data])
|
|
elif action == Globals.AI.GameActions.Died:
|
|
damage = Globals.AI.SafezoneId2DeathDamage[self.getSafezoneId()]
|
|
self.__damage(av, damage)
|
|
self.sendUpdate("toonDied", [avId, globalClockDelta.getRealNetworkTime()])
|
|
elif action == Globals.AI.GameActions.Spawn:
|
|
self.sendUpdate("toonSpawn", [avId, globalClockDelta.getRealNetworkTime()])
|
|
elif action == Globals.AI.GameActions.RequestEnterEagleInterest:
|
|
if not self.eagles.get(data):
|
|
self.eagles[data] = avId
|
|
self.sendUpdate("toonSetAsEagleTarget", [avId, data, globalClockDelta.getRealNetworkTime()])
|
|
elif action == Globals.AI.GameActions.RequestExitEagleInterest:
|
|
if self.eagles.get(data) == avId:
|
|
self.eagles[data] = 0
|
|
self.sendUpdate("toonClearAsEagleTarget", [avId, data, globalClockDelta.getRealNetworkTime()])
|
|
elif action == Globals.AI.GameActions.HitLegalEagle:
|
|
damage = Globals.AI.SafezoneId2LegalEagleDamage[self.getSafezoneId()]
|
|
self.__damage(av, damage)
|
|
elif action == Globals.AI.GameActions.HitMinion:
|
|
damage = Globals.AI.SafezoneId2MinionDamage[self.getSafezoneId()]
|
|
self.__damage(av, damage)
|
|
elif action == Globals.AI.GameActions.HitWhirlwind:
|
|
damage = Globals.AI.SafezoneId2WhirlwindDamage[self.getSafezoneId()]
|
|
self.__damage(av, damage)
|
|
elif action == Globals.AI.GameActions.RanOutOfTimePenalty:
|
|
damage = int(20 * self.getDifficulty())
|
|
self.__damage(av, damage)
|
|
else:
|
|
self.notify.warning('Client requested unknown action \'%s\'' %action)
|
|
|
|
def requestPickUp(self, pickupNum, pickupType):
|
|
avId = self.air.getAvatarIdFromSender()
|
|
av = self.air.doId2do.get(avId)
|
|
if not av:
|
|
return
|
|
|
|
if pickupType <= len(Globals.Level.GatherableTypes):
|
|
self.sendUpdate("pickUp", [avId, pickupNum, globalClockDelta.getRealNetworkTime()])
|
|
if pickupType == Globals.Level.GatherableTypes.LaffPowerup:
|
|
av.toonUp(int(27 * self.getDifficulty()) + 3)
|
|
if pickupType == Globals.Level.GatherableTypes.Memo:
|
|
self.totalMemos += 1
|
|
else:
|
|
self.notify.warning('Client requested unknown pickup \'%s\'' % pickupType)
|
|
|
|
def handleStart(self):
|
|
for toon in self.toons:
|
|
self.acceptOnce(self.air.getAvatarExitEvent(toon), self.__handleAvExit, [toon])
|
|
|
|
def __handleAvExit(self, toon):
|
|
if self.air:
|
|
if toon in self.toons:
|
|
self.toons.remove(toon)
|
|
self.ignore(self.air.getAvatarExitEvent(toon))
|
|
if not self.toons:
|
|
self.gameDone(failed=True)
|
|
|
|
def requestDelete(self):
|
|
DistCogdoGameAI.requestDelete(self)
|
|
self.ignoreAll()
|
|
|
|
def __removeToon(self, avId):
|
|
if avId not in self.toons:
|
|
return
|
|
|
|
self.toons.pop(self.toons.index(avId))
|
|
if len(self.toons) == 0:
|
|
self.gameDone(failed=True)
|
|
|
|
def __damage(self, av, damage):
|
|
av.takeDamage(damage)
|
|
if av.getHp() < 1:
|
|
self.__removeToon(av.doId)
|
|
|
|
def getTotalMemos(self):
|
|
return self.totalMemos
|
|
|
|
from otp.ai.MagicWordGlobal import *
|
|
@magicWord(category=CATEGORY_PROGRAMMER)
|
|
def endFly():
|
|
if hasattr(simbase.air, 'cogdoGame'):
|
|
game = simbase.air.cogdoGame
|
|
game.requestAction(Globals.AI.GameActions.LandOnWinPlatform, 0)
|
|
return 'Finished cogdo flying game!'
|