Code Redemption cleanup

This commit is contained in:
DenialMC 2015-04-04 13:29:27 +03:00
parent b6cf9c8f22
commit 6436cb9f0f
8 changed files with 22 additions and 154 deletions

View file

@ -711,8 +711,6 @@ from toontown.uberdog.DistributedMailManager/AI/UD import DistributedMailManager
from toontown.uberdog.DistributedPartyManager/AI/UD import DistributedPartyManager/AI/UD from toontown.uberdog.DistributedPartyManager/AI/UD import DistributedPartyManager/AI/UD
from toontown.rpc.AwardManager/UD import AwardManager/UD from toontown.rpc.AwardManager/UD import AwardManager/UD
from toontown.coderedemption.TTCodeRedemptionMgr/AI import TTCodeRedemptionMgr/AI from toontown.coderedemption.TTCodeRedemptionMgr/AI import TTCodeRedemptionMgr/AI
from toontown.distributed.NonRepeatableRandomSourceAI import NonRepeatableRandomSourceAI
from toontown.distributed.NonRepeatableRandomSourceUD import NonRepeatableRandomSourceUD
from toontown.ai.DistributedPhaseEventMgr/AI import DistributedPhaseEventMgr/AI from toontown.ai.DistributedPhaseEventMgr/AI import DistributedPhaseEventMgr/AI
from toontown.ai.DistributedHydrantZeroMgr/AI import DistributedHydrantZeroMgr/AI from toontown.ai.DistributedHydrantZeroMgr/AI import DistributedHydrantZeroMgr/AI
from toontown.ai.DistributedMailboxZeroMgr/AI import DistributedMailboxZeroMgr/AI from toontown.ai.DistributedMailboxZeroMgr/AI import DistributedMailboxZeroMgr/AI
@ -3615,19 +3613,9 @@ dclass AwardManager : DistributedObjectGlobal {
giveAwardToToon(uint32, DoId, string, DoId, uint32, uint32); giveAwardToToon(uint32, DoId, string, DoId, uint32, uint32);
}; };
dclass NonRepeatableRandomSourceClient { dclass TTCodeRedemptionMgr : DistributedObject {
getRandomSamplesReply(uint32, uint32 []) airecv; redeemCode(char [0-256]) airecv clsend;
}; redeemCodeResult(uint32);
dclass TTCodeRedemptionMgr : DistributedObject, NonRepeatableRandomSourceClient {
redeemCode(uint32, char [0-256]) airecv clsend;
redeemCodeResult(uint32, uint32, uint32);
};
dclass NonRepeatableRandomSource : DistributedObject, NonRepeatableRandomSourceClient {
getRandomSamples(DoId, string, uint32, uint32);
randomSample(DoId, uint32);
randomSampleAck() airecv;
}; };
struct Friend struct Friend

View file

@ -206,8 +206,6 @@ cmd = (pythonPath + ' ../tools/prepare_client.py' +
' --build-mfs' + ' --build-mfs' +
' --resources-dir src/resources' + ' --resources-dir src/resources' +
' --config-dir ' + configDir + ' --config-dir ' + configDir +
' --include NonRepeatableRandomSourceUD.py' +
' --include NonRepeatableRandomSourceAI.py' +
' --exclude ServiceStart.py') ' --exclude ServiceStart.py')
for vfsMount in vfsMounts: for vfsMount in vfsMounts:
cmd += ' --vfs ' + vfsMount cmd += ' --vfs ' + vfsMount

View file

@ -2,7 +2,7 @@
from pandac.PandaModules import * from pandac.PandaModules import *
hashVal = 4270694562L hashVal = 2680034445L
from toontown.coghq import DistributedCashbotBossSafe, DistributedCashbotBossCrane, DistributedBattleFactory, DistributedCashbotBossTreasure, DistributedCogHQDoor, DistributedSellbotHQDoor, DistributedFactoryElevatorExt, DistributedMintElevatorExt, DistributedLawOfficeElevatorExt, DistributedLawOfficeElevatorInt, LobbyManager, DistributedMegaCorp, DistributedFactory, DistributedLawOffice, DistributedLawOfficeFloor, DistributedLift, DistributedDoorEntity, DistributedSwitch, DistributedButton, DistributedTrigger, DistributedCrushableEntity, DistributedCrusherEntity, DistributedStomper, DistributedStomperPair, DistributedLaserField, DistributedGolfGreenGame, DistributedSecurityCamera, DistributedMover, DistributedElevatorMarker, DistributedBarrelBase, DistributedGagBarrel, DistributedBeanBarrel, DistributedHealBarrel, DistributedGrid, ActiveCell, DirectionalCell, CrusherCell, DistributedCrate, DistributedSinkingPlatform, BattleBlocker, DistributedMint, DistributedMintRoom, DistributedMintBattle, DistributedStage, DistributedStageRoom, DistributedStageBattle, DistributedLawbotBossGavel, DistributedLawbotCannon, DistributedLawbotChair, DistributedCogKart, DistributedCountryClub, DistributedCountryClubRoom, DistributedMoleField, DistributedCountryClubBattle, DistributedMaze, DistributedFoodBelt, DistributedBanquetTable, DistributedGolfSpot from toontown.coghq import DistributedCashbotBossSafe, DistributedCashbotBossCrane, DistributedBattleFactory, DistributedCashbotBossTreasure, DistributedCogHQDoor, DistributedSellbotHQDoor, DistributedFactoryElevatorExt, DistributedMintElevatorExt, DistributedLawOfficeElevatorExt, DistributedLawOfficeElevatorInt, LobbyManager, DistributedMegaCorp, DistributedFactory, DistributedLawOffice, DistributedLawOfficeFloor, DistributedLift, DistributedDoorEntity, DistributedSwitch, DistributedButton, DistributedTrigger, DistributedCrushableEntity, DistributedCrusherEntity, DistributedStomper, DistributedStomperPair, DistributedLaserField, DistributedGolfGreenGame, DistributedSecurityCamera, DistributedMover, DistributedElevatorMarker, DistributedBarrelBase, DistributedGagBarrel, DistributedBeanBarrel, DistributedHealBarrel, DistributedGrid, ActiveCell, DirectionalCell, CrusherCell, DistributedCrate, DistributedSinkingPlatform, BattleBlocker, DistributedMint, DistributedMintRoom, DistributedMintBattle, DistributedStage, DistributedStageRoom, DistributedStageBattle, DistributedLawbotBossGavel, DistributedLawbotCannon, DistributedLawbotChair, DistributedCogKart, DistributedCountryClub, DistributedCountryClubRoom, DistributedMoleField, DistributedCountryClubBattle, DistributedMaze, DistributedFoodBelt, DistributedBanquetTable, DistributedGolfSpot
@ -30,7 +30,6 @@ from toontown.safezone import DistributedTrolley, DistributedPartyGate, Distribu
from toontown.fishing import DistributedFishingPond, DistributedFishingTarget, DistributedPondBingoManager from toontown.fishing import DistributedFishingPond, DistributedFishingTarget, DistributedPondBingoManager
from toontown.minigame import DistributedMinigame, DistributedMinigameTemplate, DistributedRaceGame, DistributedCannonGame, DistributedPhotoGame, DistributedPatternGame, DistributedRingGame, DistributedTagGame, DistributedMazeGame, DistributedTugOfWarGame, DistributedCatchGame, DistributedDivingGame, DistributedTargetGame, DistributedTravelGame, DistributedPairingGame, DistributedVineGame, DistributedIceGame, DistributedCogThiefGame, DistributedTwoDGame from toontown.minigame import DistributedMinigame, DistributedMinigameTemplate, DistributedRaceGame, DistributedCannonGame, DistributedPhotoGame, DistributedPatternGame, DistributedRingGame, DistributedTagGame, DistributedMazeGame, DistributedTugOfWarGame, DistributedCatchGame, DistributedDivingGame, DistributedTargetGame, DistributedTravelGame, DistributedPairingGame, DistributedVineGame, DistributedIceGame, DistributedCogThiefGame, DistributedTwoDGame
from toontown.racing import DistributedVehicle, DistributedStartingBlock, DistributedRace, DistributedKartPad, DistributedRacePad, DistributedViewPad, DistributedStartingBlock, DistributedLeaderBoard, DistributedGag, DistributedProjectile from toontown.racing import DistributedVehicle, DistributedStartingBlock, DistributedRace, DistributedKartPad, DistributedRacePad, DistributedViewPad, DistributedStartingBlock, DistributedLeaderBoard, DistributedGag, DistributedProjectile
from toontown.distributed.NonRepeatableRandomSourceUD import NonRepeatableRandomSourceUD
from toontown.catalog import CatalogManager, AccountDate from toontown.catalog import CatalogManager, AccountDate
from toontown.ai.DistributedHydrantZeroMgr import DistributedHydrantZeroMgr from toontown.ai.DistributedHydrantZeroMgr import DistributedHydrantZeroMgr
from toontown.rpc.AwardManager import AwardManager from toontown.rpc.AwardManager import AwardManager
@ -44,7 +43,6 @@ from toontown.toon import DistributedToon, DistributedNPCToonBase, DistributedNP
from toontown.tutorial import DistributedBattleTutorial, TutorialManager from toontown.tutorial import DistributedBattleTutorial, TutorialManager
from toontown.pets import DistributedPetProxy from toontown.pets import DistributedPetProxy
from toontown.coderedemption.TTCodeRedemptionMgr import TTCodeRedemptionMgr from toontown.coderedemption.TTCodeRedemptionMgr import TTCodeRedemptionMgr
from toontown.distributed.NonRepeatableRandomSourceAI import NonRepeatableRandomSourceAI
from toontown.ai.DistributedMailboxZeroMgr import DistributedMailboxZeroMgr from toontown.ai.DistributedMailboxZeroMgr import DistributedMailboxZeroMgr
from toontown.uberdog.DistributedDeliveryManager import DistributedDeliveryManager from toontown.uberdog.DistributedDeliveryManager import DistributedDeliveryManager
from direct.distributed import DistributedObject, DistributedNode, DistributedSmoothNode, DistributedCartesianGrid, DistributedCamera, DistributedObjectGlobal from direct.distributed import DistributedObject, DistributedNode, DistributedSmoothNode, DistributedCartesianGrid, DistributedCamera, DistributedObjectGlobal

View file

@ -11,25 +11,15 @@ class TTCodeRedemptionMgr(DistributedObject):
def announceGenerate(self): def announceGenerate(self):
DistributedObject.announceGenerate(self) DistributedObject.announceGenerate(self)
base.cr.codeRedemptionMgr = self base.cr.codeRedemptionMgr = self
self._contextGen = SerialMaskedGen(4294967295L)
self._context2callback = {}
def delete(self): def delete(self):
if hasattr(base.cr, 'codeRedemptionMgr'): if hasattr(base.cr, 'codeRedemptionMgr'):
if base.cr.codeRedemptionMgr is self:
del base.cr.codeRedemptionMgr del base.cr.codeRedemptionMgr
self._context2callback = None
self._contextGen = None
DistributedObject.delete(self) DistributedObject.delete(self)
return
def redeemCode(self, code, callback): def redeemCode(self, code, callback):
context = self._contextGen.next() self.callback = callback
self._context2callback[context] = callback self.sendUpdate('redeemCode', [code])
self.notify.debug('redeemCode(%s, %s)' % (context, code))
self.sendUpdate('redeemCode', [context, code])
def redeemCodeResult(self, context, result, awardMgrResult): def redeemCodeResult(self, result):
self.notify.debug('redeemCodeResult(%s, %s, %s)' % (context, result, awardMgrResult)) self.callback(result)
callback = self._context2callback.pop(context)
callback(result, awardMgrResult)

View file

@ -83,7 +83,7 @@ class TTCodeRedemptionMgrAI(DistributedObjectAI):
return count return count
def redeemCode(self, context, code): def redeemCode(self, code):
avId = self.air.getAvatarIdFromSender() avId = self.air.getAvatarIdFromSender()
av = self.air.doId2do.get(avId) av = self.air.doId2do.get(avId)
@ -92,26 +92,26 @@ class TTCodeRedemptionMgrAI(DistributedObjectAI):
if code in self.codes: if code in self.codes:
if av.isCodeRedeemed(code): if av.isCodeRedeemed(code):
self.sendUpdateToAvatarId(avId, 'redeemCodeResult', [context, 3, 2]) self.sendUpdateToAvatarId(avId, 'redeemCodeResult', [4])
return return
codeInfo = self.codes[code] codeInfo = self.codes[code]
date = datetime.now() date = datetime.now()
if ('month' in codeInfo and date.month is not codeInfo['month']) or ('day' in codeInfo and date.day is not codeInfo['day']) or ('expirationDate' in codeInfo and codeInfo['expirationDate'] - date < timedelta(hours = 1)): if ('month' in codeInfo and date.month is not codeInfo['month']) or ('day' in codeInfo and date.day is not codeInfo['day']) or ('expirationDate' in codeInfo and codeInfo['expirationDate'] - date < timedelta(hours = 1)):
self.sendUpdateToAvatarId(avId, 'redeemCodeResult', [context, 2, 0]) self.sendUpdateToAvatarId(avId, 'redeemCodeResult', [2])
return return
av.redeemCode(code) av.redeemCode(code)
self.requestCodeRedeem(context, avId, av, codeInfo['items']) self.requestCodeRedeem(avId, av, codeInfo['items'])
else: else:
self.sendUpdateToAvatarId(avId, 'redeemCodeResult', [context, 1, 0]) self.sendUpdateToAvatarId(avId, 'redeemCodeResult', [1])
def requestCodeRedeem(self, context, avId, av, items): def requestCodeRedeem(self, avId, av, items):
count = self.getMailboxCount(items) count = self.getMailboxCount(items)
if len(av.onOrder) + count > 5 or len(av.mailboxContents) + len(av.onOrder) + count >= ToontownGlobals.MaxMailboxContents: if len(av.onOrder) + count > 5 or len(av.mailboxContents) + len(av.onOrder) + count >= ToontownGlobals.MaxMailboxContents:
self.sendUpdateToAvatarId(avId, 'redeemCodeResult', [context, 3, 1]) self.sendUpdateToAvatarId(avId, 'redeemCodeResult', [3])
return return
for item in items: for item in items:
@ -122,4 +122,4 @@ class TTCodeRedemptionMgrAI(DistributedObjectAI):
av.onOrder.append(item) av.onOrder.append(item)
av.b_setDeliverySchedule(av.onOrder) av.b_setDeliverySchedule(av.onOrder)
self.sendUpdateToAvatarId(avId, 'redeemCodeResult', [context, 0, 0]) self.sendUpdateToAvatarId(avId, 'redeemCodeResult', [0])

View file

@ -1,49 +0,0 @@
from direct.directnotify.DirectNotifyGlobal import directNotify
from direct.distributed.DistributedObjectAI import DistributedObjectAI
from direct.task import Task
from otp.distributed import OtpDoGlobals
import random
class NonRepeatableRandomSourceAI(DistributedObjectAI):
notify = directNotify.newCategory('NonRepeatableRandomSourceAI')
def __init__(self, air):
DistributedObjectAI.__init__(self, air)
def announceGenerate(self):
DistributedObjectAI.announceGenerate(self)
self._contextGen = SerialMaskedGen((1L << 32) - 1)
self._requests = {}
self._sampleTask = self.doMethodLater(3 * 60, self._sampleRandomTask, self.uniqueName('sampleRandom'))
self._sampleRandom()
def delete(self):
self.removeTask(self._sampleTask)
self._sampleTask = None
DistributedObjectAI.delete(self)
return
def _sampleRandomTask(self, task = None):
self._sampleRandom()
return Task.again
def _sampleRandom(self):
self.air.sendUpdateToDoId('NonRepeatableRandomSource', 'randomSample', OtpDoGlobals.OTP_DO_ID_TOONTOWN_NON_REPEATABLE_RANDOM_SOURCE, [self.doId, int(random.randrange(1L << 32))])
def randomSampleAck(self):
self._sampleRandom()
def getRandomSamples(self, callback, num = None):
if num is None:
num = 1
context = self._contextGen.next()
self._requests[context] = (callback,)
self.air.sendUpdateToDoId('NonRepeatableRandomSource', 'getRandomSamples', OtpDoGlobals.OTP_DO_ID_TOONTOWN_NON_REPEATABLE_RANDOM_SOURCE, [self.doId,
'NonRepeatableRandomSource',
context,
num])
return
def getRandomSamplesReply(self, context, samples):
callback, = self._requests.pop(context)
callback(samples)

View file

@ -1,55 +0,0 @@
from direct.distributed.DistributedObjectGlobalUD import DistributedObjectGlobalUD
from direct.directnotify.DirectNotifyGlobal import directNotify
import random
class NonRepeatableRandomSourceUD(DistributedObjectGlobalUD):
notify = directNotify.newCategory('NonRepeatableRandomSourceUD')
RandomNumberCacheSize = 2000000
class Request(ScratchPad):
def __init__(self, replyTo, replyToClass, context, num):
ScratchPad.__init__(self, replyTo=replyTo, replyToClass=replyToClass, context=context, num=num, randoms=[])
def __init__(self, air):
DistributedObjectGlobalUD.__init__(self, air)
def announceGenerate(self):
DistributedObjectGlobalUD.announceGenerate(self)
self._randoms = []
self._requests = []
self._fakeIt = 0
if __dev__:
NonRepeatableRandomSourceUD.RandomNumberCacheSize = config.GetInt('random-source-cache-size', 5000)
self._fakeIt = config.GetBool('fake-non-repeatable-random-source', self._fakeIt)
def randomSample(self, nrrsDoId, random):
self._randoms = [random] + self._randoms
if len(self._randoms) > self.RandomNumberCacheSize:
self._randoms.pop()
self._processRequests()
self.air.sendUpdateToDoId('NonRepeatableRandomSource', 'randomSampleAck', nrrsDoId, [])
def getRandomSamples(self, replyTo, replyToClass, context, num):
self._requests.append(self.Request(replyTo, replyToClass, context, num))
self._processRequests()
def _processRequests(self):
while len(self._requests):
request = self._requests[0]
if not self._fakeIt and len(request.randoms) < request.num:
if len(self._randoms) == 0:
break
needed = request.num - len(request.randoms)
if needed > 0:
numRandoms = min(needed, len(self._randoms))
if self._fakeIt:
for i in xrange(numRandoms):
request.randoms.append(random.random() * 4294967295L)
else:
request.randoms += self._randoms[:numRandoms]
self._randoms = self._randoms[numRandoms:]
if request.num == len(request.randoms):
self._requests.pop(0)
self.air.dispatchUpdateToDoId(request.replyToClass, 'getRandomSamplesReply', request.replyTo, [request.context, request.randoms])

View file

@ -665,9 +665,8 @@ class CodesTabPage(DirectFrame):
self.__disableCodeEntry() self.__disableCodeEntry()
return return
def __getCodeResult(self, result, awardMgrResult): def __getCodeResult(self, result):
self.notify.debug('result = %s' % result) self.notify.debug('result = %s' % result)
self.notify.debug('awardMgrResult = %s' % awardMgrResult)
self.__enableCodeEntry() self.__enableCodeEntry()
if result == 0: if result == 0:
self.resultPanel['image'] = self.resultPanelSuccessGui self.resultPanel['image'] = self.resultPanelSuccessGui
@ -680,9 +679,8 @@ class CodesTabPage(DirectFrame):
self.resultPanel['text'] = TTLocalizer.CdrResultExpiredCode self.resultPanel['text'] = TTLocalizer.CdrResultExpiredCode
elif result == 3: elif result == 3:
self.resultPanel['image'] = self.resultPanelErrorGui self.resultPanel['image'] = self.resultPanelErrorGui
if awardMgrResult == 1: elif result == 4:
self.resultPanel['text'] = TTLocalizer.CdrResultMailboxFull self.resultPanel['image'] = self.resultPanelErrorGui
elif awardMgrResult == 2:
self.resultPanel['text'] = TTLocalizer.CdrResultAlreadyRedeemed self.resultPanel['text'] = TTLocalizer.CdrResultAlreadyRedeemed
if result == 0: if result == 0:
self.successSfx.play() self.successSfx.play()