mirror of
https://github.com/Sneed-Group/Poodletooth-iLand
synced 2024-12-23 11:42:39 -06:00
64 lines
3 KiB
Python
64 lines
3 KiB
Python
|
from otp.ai.AIBaseGlobal import *
|
||
|
from direct.directnotify import DirectNotifyGlobal
|
||
|
import random
|
||
|
from toontown.suit import SuitDNA
|
||
|
from toontown.coghq import CogDisguiseGlobals
|
||
|
from toontown.toonbase.ToontownBattleGlobals import getInvasionMultiplier
|
||
|
MeritMultiplier = 0.5
|
||
|
|
||
|
class PromotionManagerAI:
|
||
|
notify = DirectNotifyGlobal.directNotify.newCategory('PromotionManagerAI')
|
||
|
|
||
|
def __init__(self, air):
|
||
|
self.air = air
|
||
|
|
||
|
def getPercentChance(self):
|
||
|
return 100.0
|
||
|
|
||
|
def recoverMerits(self, av, cogList, zoneId, multiplier = 1, extraMerits = None, addInvasion = True):
|
||
|
avId = av.getDoId()
|
||
|
meritsRecovered = [0, 0, 0, 0]
|
||
|
if extraMerits is None:
|
||
|
extraMerits = [0, 0, 0, 0]
|
||
|
if addInvasion and self.air.suitInvasionManager.getInvading():
|
||
|
multiplier *= getInvasionMultiplier()
|
||
|
for i in xrange(len(extraMerits)):
|
||
|
if CogDisguiseGlobals.isSuitComplete(av.getCogParts(), i):
|
||
|
meritsRecovered[i] += extraMerits[i]
|
||
|
self.notify.debug('recoverMerits: extra merits = %s' % extraMerits[i])
|
||
|
self.notify.debug('recoverMerits: multiplier = %s' % multiplier)
|
||
|
for cogDict in cogList:
|
||
|
dept = SuitDNA.suitDepts.index(cogDict['track'])
|
||
|
if avId in cogDict['activeToons']:
|
||
|
if CogDisguiseGlobals.isSuitComplete(av.getCogParts(), SuitDNA.suitDepts.index(cogDict['track'])):
|
||
|
self.notify.debug('recoverMerits: checking against cogDict: %s' % cogDict)
|
||
|
rand = random.random() * 100
|
||
|
if rand <= self.getPercentChance() and not cogDict['isVirtual']:
|
||
|
merits = cogDict['level'] * MeritMultiplier
|
||
|
merits = int(round(merits))
|
||
|
if cogDict['hasRevives']:
|
||
|
merits *= 2
|
||
|
merits = merits * multiplier
|
||
|
merits = int(round(merits))
|
||
|
meritsRecovered[dept] += merits
|
||
|
self.notify.debug('recoverMerits: merits = %s' % merits)
|
||
|
else:
|
||
|
self.notify.debug('recoverMerits: virtual cog!')
|
||
|
if meritsRecovered != [0, 0, 0, 0]:
|
||
|
actualCounted = [0, 0, 0, 0]
|
||
|
merits = av.getCogMerits()
|
||
|
for i in xrange(len(meritsRecovered)):
|
||
|
max = CogDisguiseGlobals.getTotalMerits(av, i)
|
||
|
if max:
|
||
|
if merits[i] + meritsRecovered[i] <= max:
|
||
|
actualCounted[i] = meritsRecovered[i]
|
||
|
merits[i] += meritsRecovered[i]
|
||
|
else:
|
||
|
actualCounted[i] = max - merits[i]
|
||
|
merits[i] = max
|
||
|
av.b_setCogMerits(merits)
|
||
|
if reduce(lambda x, y: x + y, actualCounted):
|
||
|
self.air.writeServerEvent('merits', avId, '%s|%s|%s|%s' % tuple(actualCounted))
|
||
|
self.notify.debug('recoverMerits: av %s recovered merits %s' % (avId, actualCounted))
|
||
|
return meritsRecovered
|