mirror of
https://github.com/Sneed-Group/Poodletooth-iLand
synced 2025-01-09 17:53:50 +00:00
Code Redemption cleanup
This commit is contained in:
parent
b6cf9c8f22
commit
6436cb9f0f
8 changed files with 22 additions and 154 deletions
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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)
|
|
|
@ -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])
|
||||||
|
|
|
@ -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)
|
|
|
@ -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])
|
|
|
@ -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()
|
||||||
|
|
Loading…
Reference in a new issue