Safeguard code redemption

This commit is contained in:
Daniel 2015-03-07 00:19:39 +02:00
parent f20e720479
commit e598558eb1
4 changed files with 57 additions and 45 deletions

View file

@ -9,7 +9,9 @@ class TTCodeRedemptionMgrAI(DistributedObjectAI):
notify = DirectNotifyGlobal.directNotify.newCategory("TTCodeRedemptionMgrAI") notify = DirectNotifyGlobal.directNotify.newCategory("TTCodeRedemptionMgrAI")
codes = { codes = {
'weed': { 'weed': {
'item': CatalogClothingItem.CatalogClothingItem(1821, 0), 'items': [
CatalogClothingItem.CatalogClothingItem(1821, 0)
],
'month': 4, 'month': 4,
'day': 20 'day': 20
} }
@ -18,10 +20,27 @@ class TTCodeRedemptionMgrAI(DistributedObjectAI):
def announceGenerate(self): def announceGenerate(self):
DistributedObjectAI.announceGenerate(self) DistributedObjectAI.announceGenerate(self)
def getMailboxCount(items):
count = 0
for item in items:
if item.getDeliveryTime() < 1:
count += 1
return count
def redeemCode(self, context, code): def redeemCode(self, context, code):
avId = self.air.getAvatarIdFromSender() avId = self.air.getAvatarIdFromSender()
av = self.air.doId2do.get(avId)
if not av:
return
if code in self.codes: if code in self.codes:
if av.isCodeRedeemed(code):
self.sendUpdateToAvatarId(avId, 'redeemCodeResult', [context, 3, 4])
return
codeInfo = self.codes[code] codeInfo = self.codes[code]
date = datetime.now() date = datetime.now()
@ -29,30 +48,29 @@ class TTCodeRedemptionMgrAI(DistributedObjectAI):
self.sendUpdateToAvatarId(avId, 'redeemCodeResult', [context, 2, 0]) self.sendUpdateToAvatarId(avId, 'redeemCodeResult', [context, 2, 0])
return return
self.requestCodeRedeem(context, codeInfo['item']) av.redeemCode(code)
self.requestCodeRedeem(context, avId, av, codeInfo['items'])
else: else:
self.sendUpdateToAvatarId(avId, 'redeemCodeResult', [context, 1, 0]) self.sendUpdateToAvatarId(avId, 'redeemCodeResult', [context, 1, 0])
def requestCodeRedeem(self, context, item): def requestCodeRedeem(self, context, avId, av, items):
avId = self.air.getAvatarIdFromSender() if item in av.onOrder:
av = self.air.doId2do.get(avId) self.sendUpdateToAvatarId(avId, 'redeemCodeResult', [context, 3, 2])
if not av:
return return
if len(av.onOrder) > 5: if item.reachedPurchaseLimit(av):
self.sendUpdateToAvatarId(avId, 'redeemCodeResult', [context, 4, 4]) self.sendUpdateToAvatarId(avId, 'redeemCodeResult', [context, 3, 3])
return return
if len(av.mailboxContents) + len(av.onOrder) >= ToontownGlobals.MaxMailboxContents: count = getMailboxCount(items)
self.sendUpdateToAvatarId(avId, 'redeemCodeResult', [context, 4, 3])
return if len(av.onOrder) + count > 5 or len(av.mailboxContents) + len(av.onOrder) + count >= ToontownGlobals.MaxMailboxContents:
self.sendUpdateToAvatarId(avId, 'redeemCodeResult', [context, 3, 1])
if item in av.onOrder or item.reachedPurchaseLimit(av):
self.sendUpdateToAvatarId(avId, 'redeemCodeResult', [context, 4, 13])
return return
for item in items:
item.deliveryDate = int(time.time() / 60) + 0.01 item.deliveryDate = int(time.time() / 60) + 0.01
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', [context, 0, 0])

View file

@ -646,36 +646,22 @@ class CodesTabPage(DirectFrame):
if result == 0: if result == 0:
self.resultPanel['image'] = self.resultPanelSuccessGui self.resultPanel['image'] = self.resultPanelSuccessGui
self.resultPanel['text'] = TTLocalizer.CdrResultSuccess self.resultPanel['text'] = TTLocalizer.CdrResultSuccess
elif result == 1 or result == 3: elif result == 1:
self.resultPanel['image'] = self.resultPanelFailureGui self.resultPanel['image'] = self.resultPanelFailureGui
self.resultPanel['text'] = TTLocalizer.CdrResultInvalidCode self.resultPanel['text'] = TTLocalizer.CdrResultInvalidCode
elif result == 2: elif result == 2:
self.resultPanel['image'] = self.resultPanelFailureGui self.resultPanel['image'] = self.resultPanelFailureGui
self.resultPanel['text'] = TTLocalizer.CdrResultExpiredCode self.resultPanel['text'] = TTLocalizer.CdrResultExpiredCode
elif result == 4: elif result == 3:
self.resultPanel['image'] = self.resultPanelErrorGui self.resultPanel['image'] = self.resultPanelErrorGui
if awardMgrResult == 0: if awardMgrResult == 1:
self.resultPanel['text'] = TTLocalizer.CdrResultSuccess
elif awardMgrResult == 1 or awardMgrResult == 2 or awardMgrResult == 15 or awardMgrResult == 16:
self.resultPanel['text'] = TTLocalizer.CdrResultUnknownError
elif awardMgrResult == 3 or awardMgrResult == 4:
self.resultPanel['text'] = TTLocalizer.CdrResultMailboxFull self.resultPanel['text'] = TTLocalizer.CdrResultMailboxFull
elif awardMgrResult == 5 or awardMgrResult == 10: elif awardMgrResult == 2:
self.resultPanel['text'] = TTLocalizer.CdrResultAlreadyInMailbox self.resultPanel['text'] = TTLocalizer.CdrResultAlreadyInMailbox
elif awardMgrResult == 6 or awardMgrResult == 7 or awardMgrResult == 11: elif awardMgrResult == 3:
self.resultPanel['text'] = TTLocalizer.CdrResultAlreadyInQueue self.resultPanel['text'] = TTLocalizer.CdrResultReachedLimit
elif awardMgrResult == 8: elif awardMgrResult == 4:
self.resultPanel['text'] = TTLocalizer.CdrResultAlreadyInCloset self.resultPanel['text'] = TTLocalizer.CdrResultAlreadyRedeemed
elif awardMgrResult == 9:
self.resultPanel['text'] = TTLocalizer.CdrResultAlreadyBeingWorn
elif awardMgrResult == 12 or awardMgrResult == 13 or awardMgrResult == 14:
self.resultPanel['text'] = TTLocalizer.CdrResultAlreadyReceived
elif result == 5:
self.resultPanel['text'] = TTLocalizer.CdrResultTooManyFails
self.__disableCodeEntry()
elif result == 6:
self.resultPanel['text'] = TTLocalizer.CdrResultServiceUnavailable
self.__disableCodeEntry()
if result == 0: if result == 0:
self.successSfx.play() self.successSfx.play()
else: else:

View file

@ -565,6 +565,19 @@ class DistributedToonAI(DistributedPlayerAI.DistributedPlayerAI, DistributedSmoo
def getMaxNPCFriends(self): def getMaxNPCFriends(self):
return self.maxNPCFriends return self.maxNPCFriends
def b_setRedeemedCodes(self, redeemedCodes):
self.redeemedCodes = redeemedCodes
def getRedeemedCodes(self, redeemedCodes):
return self.redeemedCodes
def isCodeRedeemed(self, code):
return code in self.redeemedCodes
def redeemCode(self, code):
if not isCodeReedemed(code):
self.redeemedCodes.append(code)
def getBattleId(self): def getBattleId(self):
if self.battleId >= 0: if self.battleId >= 0:
return self.battleId return self.battleId

View file

@ -4698,15 +4698,10 @@ CdrInstructions = 'Enter your code to receive a special item in your mailbox.'
CdrResultSuccess = 'Congratulations! Check your mailbox to claim your item!' CdrResultSuccess = 'Congratulations! Check your mailbox to claim your item!'
CdrResultInvalidCode = "You've entered an invalid code. Please check the code and try again." CdrResultInvalidCode = "You've entered an invalid code. Please check the code and try again."
CdrResultExpiredCode = "We're sorry. This code has expired." CdrResultExpiredCode = "We're sorry. This code has expired."
CdrResultUnknownError = "We're sorry. This code cannot be applied to your Toon."
CdrResultMailboxFull = 'Your mailbox is full. Please remove an item, then enter your code again.' CdrResultMailboxFull = 'Your mailbox is full. Please remove an item, then enter your code again.'
CdrResultAlreadyInMailbox = "You've already received this item. Check your mailbox to confirm." CdrResultAlreadyInMailbox = "You've already received this item. Check your mailbox to confirm."
CdrResultAlreadyInQueue = 'Your item is on its way. Check your mailbox in a few minutes to receive it.' CdrResultReachedLimit = "You reached your limit for today. Please try again later."
CdrResultAlreadyInCloset = "You've already received this item. Check your closet to confirm." CdrResultAlreadyRedeemed = "You've already redeemed this item!"
CdrResultAlreadyBeingWorn = "You've already received this item, and you are wearing it!"
CdrResultAlreadyReceived = "You've already received this item."
CdrResultTooManyFails = "We're sorry. You've tried to enter an incorrect code too many times. Please try again after some time."
CdrResultServiceUnavailable = "We're sorry. This feature is temporarily unavailable. Please try again during your next login."
TrackPageTitle = 'Gag Track Training' TrackPageTitle = 'Gag Track Training'
TrackPageShortTitle = 'Gag Training' TrackPageShortTitle = 'Gag Training'
TrackPageSubtitle = 'Complete ToonTasks to learn how to use new gags!' TrackPageSubtitle = 'Complete ToonTasks to learn how to use new gags!'