2015-03-03 16:10:12 -06:00
|
|
|
import CatalogItem
|
|
|
|
from toontown.toonbase import ToontownGlobals
|
|
|
|
from toontown.toonbase import TTLocalizer
|
|
|
|
from otp.otpbase import OTPLocalizer
|
|
|
|
from direct.interval.IntervalGlobal import *
|
|
|
|
from toontown.estate import GardenGlobals
|
|
|
|
from direct.actor import Actor
|
|
|
|
from pandac.PandaModules import NodePath
|
|
|
|
|
|
|
|
class CatalogGardenItem(CatalogItem.CatalogItem):
|
|
|
|
sequenceNumber = 0
|
|
|
|
|
|
|
|
def makeNewItem(self, itemIndex = 0, count = 3, tagCode = 1):
|
|
|
|
self.gardenIndex = itemIndex
|
|
|
|
self.numItems = count
|
|
|
|
self.giftCode = tagCode
|
|
|
|
CatalogItem.CatalogItem.makeNewItem(self)
|
|
|
|
|
|
|
|
def getPurchaseLimit(self):
|
|
|
|
if self.gardenIndex == GardenGlobals.GardenAcceleratorSpecial:
|
|
|
|
return 1
|
|
|
|
else:
|
|
|
|
return 100
|
|
|
|
|
2015-07-20 14:53:53 -05:00
|
|
|
def reachedPurchaseLimit(self, avatar):
|
|
|
|
if self in avatar.onOrder or self in avatar.mailboxContents or self in avatar.onGiftOrder or self in avatar.awardMailboxContents or self in avatar.onAwardOrder:
|
|
|
|
return 1
|
|
|
|
return 0
|
|
|
|
|
2015-03-03 16:10:12 -06:00
|
|
|
def getAcceptItemErrorText(self, retcode):
|
|
|
|
if retcode == ToontownGlobals.P_ItemAvailable:
|
|
|
|
return TTLocalizer.CatalogAcceptGarden
|
|
|
|
return CatalogItem.CatalogItem.getAcceptItemErrorText(self, retcode)
|
|
|
|
|
|
|
|
def saveHistory(self):
|
|
|
|
return 1
|
|
|
|
|
|
|
|
def getTypeName(self):
|
|
|
|
return TTLocalizer.GardenTypeName
|
|
|
|
|
|
|
|
def getName(self):
|
|
|
|
name = GardenGlobals.Specials[self.gardenIndex]['photoName']
|
|
|
|
return name
|
|
|
|
|
|
|
|
def recordPurchase(self, avatar, optional):
|
|
|
|
if avatar:
|
|
|
|
avatar.addGardenItem(self.gardenIndex, self.numItems)
|
2015-03-09 12:33:29 -05:00
|
|
|
if 1:
|
|
|
|
return ToontownGlobals.P_ItemAvailable
|
2015-03-03 16:10:12 -06:00
|
|
|
|
|
|
|
def getPicture(self, avatar):
|
|
|
|
photoModel = GardenGlobals.Specials[self.gardenIndex]['photoModel']
|
2015-07-22 00:45:01 -05:00
|
|
|
if 'photoAnimation' in GardenGlobals.Specials[self.gardenIndex]:
|
2015-03-03 16:10:12 -06:00
|
|
|
modelPath = photoModel + GardenGlobals.Specials[self.gardenIndex]['photoAnimation'][0]
|
|
|
|
animationName = GardenGlobals.Specials[self.gardenIndex]['photoAnimation'][1]
|
|
|
|
animationPath = photoModel + animationName
|
|
|
|
self.model = Actor.Actor()
|
|
|
|
self.model.loadModel(modelPath)
|
|
|
|
self.model.loadAnims(dict([[animationName, animationPath]]))
|
|
|
|
frame, ival = self.makeFrameModel(self.model, 0)
|
|
|
|
ival = ActorInterval(self.model, animationName, 2.0)
|
|
|
|
photoPos = GardenGlobals.Specials[self.gardenIndex]['photoPos']
|
|
|
|
frame.setPos(photoPos)
|
|
|
|
photoScale = GardenGlobals.Specials[self.gardenIndex]['photoScale']
|
|
|
|
self.model.setScale(photoScale)
|
|
|
|
self.hasPicture = True
|
|
|
|
return (frame, ival)
|
|
|
|
else:
|
|
|
|
self.model = loader.loadModel(photoModel)
|
|
|
|
frame = self.makeFrame()
|
|
|
|
self.model.reparentTo(frame)
|
|
|
|
photoPos = GardenGlobals.Specials[self.gardenIndex]['photoPos']
|
|
|
|
self.model.setPos(*photoPos)
|
|
|
|
photoScale = GardenGlobals.Specials[self.gardenIndex]['photoScale']
|
|
|
|
self.model.setScale(photoScale)
|
|
|
|
self.hasPicture = True
|
|
|
|
return (frame, None)
|
|
|
|
return None
|
|
|
|
|
|
|
|
def cleanupPicture(self):
|
|
|
|
CatalogItem.CatalogItem.cleanupPicture(self)
|
2015-07-22 00:45:01 -05:00
|
|
|
if hasattr(self, 'model') and self.model:
|
|
|
|
self.model.detachNode()
|
|
|
|
self.model = None
|
2015-03-03 16:10:12 -06:00
|
|
|
return
|
|
|
|
|
|
|
|
def output(self, store = -1):
|
|
|
|
return 'CatalogGardenItem(%s%s)' % (self.gardenIndex, self.formatOptionalData(store))
|
|
|
|
|
|
|
|
def compareTo(self, other):
|
|
|
|
return 0
|
|
|
|
|
|
|
|
def getHashContents(self):
|
|
|
|
return self.gardenIndex
|
|
|
|
|
|
|
|
def getBasePrice(self):
|
|
|
|
beanCost = GardenGlobals.Specials[self.gardenIndex]['beanCost']
|
|
|
|
return beanCost
|
|
|
|
|
|
|
|
def decodeDatagram(self, di, versionNumber, store):
|
|
|
|
CatalogItem.CatalogItem.decodeDatagram(self, di, versionNumber, store)
|
|
|
|
self.gardenIndex = di.getUint8()
|
|
|
|
self.numItems = di.getUint8()
|
|
|
|
|
|
|
|
def encodeDatagram(self, dg, store):
|
|
|
|
CatalogItem.CatalogItem.encodeDatagram(self, dg, store)
|
|
|
|
dg.addUint8(self.gardenIndex)
|
|
|
|
dg.addUint8(self.numItems)
|
|
|
|
|
|
|
|
def getRequestPurchaseErrorText(self, retcode):
|
|
|
|
retval = CatalogItem.CatalogItem.getRequestPurchaseErrorText(self, retcode)
|
|
|
|
origText = retval
|
|
|
|
if retval == TTLocalizer.CatalogPurchaseItemAvailable or retval == TTLocalizer.CatalogPurchaseItemOnOrder:
|
|
|
|
recipeKey = GardenGlobals.getRecipeKeyUsingSpecial(self.gardenIndex)
|
|
|
|
if not recipeKey == -1:
|
|
|
|
retval += GardenGlobals.getPlantItWithString(self.gardenIndex)
|
|
|
|
if self.gardenIndex == GardenGlobals.GardenAcceleratorSpecial:
|
|
|
|
if GardenGlobals.ACCELERATOR_USED_FROM_SHTIKER_BOOK:
|
|
|
|
retval = origText
|
|
|
|
retval += TTLocalizer.UseFromSpecialsTab
|
|
|
|
retval += TTLocalizer.MakeSureWatered
|
|
|
|
return retval
|
|
|
|
|
|
|
|
def getRequestPurchaseErrorTextTimeout(self):
|
|
|
|
return 20
|
|
|
|
|
2015-03-09 12:33:29 -05:00
|
|
|
def getDeliveryTime(self):
|
|
|
|
if self.gardenIndex == GardenGlobals.GardenAcceleratorSpecial:
|
2015-07-20 14:53:53 -05:00
|
|
|
return 24 * 60
|
2015-03-09 12:33:29 -05:00
|
|
|
else:
|
|
|
|
return 0
|
|
|
|
|
2015-03-03 16:10:12 -06:00
|
|
|
def getPurchaseLimit(self):
|
|
|
|
if self.gardenIndex == GardenGlobals.GardenAcceleratorSpecial:
|
|
|
|
return 1
|
|
|
|
else:
|
|
|
|
return 0
|
|
|
|
|
|
|
|
def compareTo(self, other):
|
|
|
|
if self.gardenIndex != other.gardenIndex:
|
|
|
|
return self.gardenIndex - other.gardenIndex
|
|
|
|
return self.gardenIndex - other.gardenIndex
|
|
|
|
|
|
|
|
def reachedPurchaseLimit(self, avatar):
|
|
|
|
if avatar.onOrder.count(self) != 0:
|
|
|
|
return 1
|
|
|
|
if avatar.mailboxContents.count(self) != 0:
|
|
|
|
return 1
|
|
|
|
for specials in avatar.getGardenSpecials():
|
|
|
|
if specials[0] == self.gardenIndex:
|
|
|
|
if self.gardenIndex == GardenGlobals.GardenAcceleratorSpecial:
|
|
|
|
return 1
|
|
|
|
|
|
|
|
return 0
|
|
|
|
|
|
|
|
def isSkillTooLow(self, avatar):
|
|
|
|
recipeKey = GardenGlobals.getRecipeKeyUsingSpecial(self.gardenIndex)
|
|
|
|
recipe = GardenGlobals.Recipes[recipeKey]
|
|
|
|
numBeansRequired = len(recipe['beans'])
|
|
|
|
canPlant = avatar.getBoxCapability()
|
|
|
|
result = False
|
|
|
|
if canPlant < numBeansRequired:
|
|
|
|
result = True
|
2015-07-22 00:45:01 -05:00
|
|
|
if not result and self.gardenIndex in GardenGlobals.Specials and 'minSkill' in GardenGlobals.Specials[self.gardenIndex]:
|
2015-03-03 16:10:12 -06:00
|
|
|
minSkill = GardenGlobals.Specials[self.gardenIndex]['minSkill']
|
|
|
|
if avatar.shovelSkill < minSkill:
|
|
|
|
result = True
|
|
|
|
else:
|
|
|
|
result = False
|
|
|
|
return result
|
|
|
|
|
|
|
|
def noGarden(self, avatar):
|
|
|
|
return not avatar.getGardenStarted()
|
|
|
|
|
|
|
|
def isGift(self):
|
|
|
|
return 0
|