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.rpc.AwardManager/UD import AwardManager/UD
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.DistributedHydrantZeroMgr/AI import DistributedHydrantZeroMgr/AI
from toontown.ai.DistributedMailboxZeroMgr/AI import DistributedMailboxZeroMgr/AI
@ -3615,19 +3613,9 @@ dclass AwardManager : DistributedObjectGlobal {
giveAwardToToon(uint32, DoId, string, DoId, uint32, uint32);
};
dclass NonRepeatableRandomSourceClient {
getRandomSamplesReply(uint32, uint32 []) airecv;
};
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;
dclass TTCodeRedemptionMgr : DistributedObject {
redeemCode(char [0-256]) airecv clsend;
redeemCodeResult(uint32);
};
struct Friend

View file

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

View file

@ -2,7 +2,7 @@
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
@ -30,7 +30,6 @@ from toontown.safezone import DistributedTrolley, DistributedPartyGate, Distribu
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.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.ai.DistributedHydrantZeroMgr import DistributedHydrantZeroMgr
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.pets import DistributedPetProxy
from toontown.coderedemption.TTCodeRedemptionMgr import TTCodeRedemptionMgr
from toontown.distributed.NonRepeatableRandomSourceAI import NonRepeatableRandomSourceAI
from toontown.ai.DistributedMailboxZeroMgr import DistributedMailboxZeroMgr
from toontown.uberdog.DistributedDeliveryManager import DistributedDeliveryManager
from direct.distributed import DistributedObject, DistributedNode, DistributedSmoothNode, DistributedCartesianGrid, DistributedCamera, DistributedObjectGlobal

View file

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

View file

@ -82,8 +82,8 @@ class TTCodeRedemptionMgrAI(DistributedObjectAI):
count += 1
return count
def redeemCode(self, context, code):
def redeemCode(self, code):
avId = self.air.getAvatarIdFromSender()
av = self.air.doId2do.get(avId)
@ -92,26 +92,26 @@ class TTCodeRedemptionMgrAI(DistributedObjectAI):
if code in self.codes:
if av.isCodeRedeemed(code):
self.sendUpdateToAvatarId(avId, 'redeemCodeResult', [context, 3, 2])
self.sendUpdateToAvatarId(avId, 'redeemCodeResult', [4])
return
codeInfo = self.codes[code]
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)):
self.sendUpdateToAvatarId(avId, 'redeemCodeResult', [context, 2, 0])
self.sendUpdateToAvatarId(avId, 'redeemCodeResult', [2])
return
av.redeemCode(code)
self.requestCodeRedeem(context, avId, av, codeInfo['items'])
self.requestCodeRedeem(avId, av, codeInfo['items'])
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)
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
for item in items:
@ -122,4 +122,4 @@ class TTCodeRedemptionMgrAI(DistributedObjectAI):
av.onOrder.append(item)
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()
return
def __getCodeResult(self, result, awardMgrResult):
def __getCodeResult(self, result):
self.notify.debug('result = %s' % result)
self.notify.debug('awardMgrResult = %s' % awardMgrResult)
self.__enableCodeEntry()
if result == 0:
self.resultPanel['image'] = self.resultPanelSuccessGui
@ -680,10 +679,9 @@ class CodesTabPage(DirectFrame):
self.resultPanel['text'] = TTLocalizer.CdrResultExpiredCode
elif result == 3:
self.resultPanel['image'] = self.resultPanelErrorGui
if awardMgrResult == 1:
self.resultPanel['text'] = TTLocalizer.CdrResultMailboxFull
elif awardMgrResult == 2:
self.resultPanel['text'] = TTLocalizer.CdrResultAlreadyRedeemed
elif result == 4:
self.resultPanel['image'] = self.resultPanelErrorGui
self.resultPanel['text'] = TTLocalizer.CdrResultAlreadyRedeemed
if result == 0:
self.successSfx.play()
else: