ToonTownRewritten/toontown/catalog/CatalogScreen.py

1183 lines
55 KiB
Python

from pandac.PandaModules import *
from direct.gui.DirectGui import *
from pandac.PandaModules import *
from direct.gui.DirectScrolledList import *
from toontown.toonbase import ToontownGlobals
from toontown.toontowngui import TTDialog
import CatalogItem
import CatalogInvalidItem
import CatalogFurnitureItem
from toontown.toonbase import TTLocalizer
import CatalogItemPanel
import CatalogItemTypes
from direct.actor import Actor
import random
from toontown.toon import DistributedToon
from direct.directnotify import DirectNotifyGlobal
from otp.nametag.ChatBalloon import ChatBalloon
from otp.nametag import NametagGroup
NUM_CATALOG_ROWS = 3
NUM_CATALOG_COLS = 2
CatalogPanelCenters = [[Point3(-0.95, 0, 0.91), Point3(-0.275, 0, 0.91)], [Point3(-0.95, 0, 0.275), Point3(-0.275, 0, 0.275)], [Point3(-0.95, 0, -0.4), Point3(-0.275, 0, -0.4)]]
CatalogPanelColors = {CatalogItemTypes.FURNITURE_ITEM: Vec4(0.733, 0.78, 0.933, 1.0),
CatalogItemTypes.CHAT_ITEM: Vec4(0.922, 0.922, 0.753, 1.0),
CatalogItemTypes.CLOTHING_ITEM: Vec4(0.918, 0.69, 0.69, 1.0),
CatalogItemTypes.EMOTE_ITEM: Vec4(0.922, 0.922, 0.753, 1.0),
CatalogItemTypes.WALLPAPER_ITEM: Vec4(0.749, 0.984, 0.608, 1.0),
CatalogItemTypes.WINDOW_ITEM: Vec4(0.827, 0.91, 0.659, 1.0)}
class CatalogScreen(DirectFrame):
notify = DirectNotifyGlobal.directNotify.newCategory('CatalogScreen')
def __init__(self, parent = aspect2d, **kw):
guiItems = loader.loadModel('phase_5.5/models/gui/catalog_gui')
background = guiItems.find('**/catalog_background')
guiButton = loader.loadModel('phase_3/models/gui/quit_button')
guiBack = loader.loadModel('phase_5.5/models/gui/package_delivery_panel')
optiondefs = (('scale', 0.667, None),
('pos', (0, 1, 0.025), None),
('phone', None, None),
('doneEvent', None, None),
('image', background, None),
('relief', None, None))
self.defineoptions(kw, optiondefs)
DirectFrame.__init__(self, parent)
self.friendGiftIndex = 0
self.friendGiftHandle = None
self.frienddoId = None
self.receiverName = 'Error Nameless Toon'
self.friends = {}
self.family = {}
self.ffList = []
self.textRolloverColor = Vec4(1, 1, 0, 1)
self.textDownColor = Vec4(0.5, 0.9, 1, 1)
self.textDisabledColor = Vec4(0.4, 0.8, 0.4, 1)
self.giftAvatar = None
self.gotAvatar = 0
self.allowGetDetails = 1
self.load(guiItems, guiButton, guiBack)
self.initialiseoptions(CatalogScreen)
self.enableBackorderCatalogButton()
self.setMaxPageIndex(self.numNewPages)
self.setPageIndex(-1)
self.showPageItems()
self.hide()
self.clarabelleChatNP = None
self.clarabelleChatBalloon = None
self.clarabelleGreetingSfx = None
self.clarabelleGoodbyeSfx = None
self.clarabelleErrorSfx = None
self.clarabelleChatterSfx = None
self.gifting = -1
self.createdGiftGui = None
self.viewing = None
return
def show(self):
self.accept('CatalogItemPurchaseRequest', self.__handlePurchaseRequest)
self.accept('CatalogItemGiftPurchaseRequest', self.__handleGiftPurchaseRequest)
self.accept(localAvatar.uniqueName('moneyChange'), self.__moneyChange)
self.accept(localAvatar.uniqueName('bankMoneyChange'), self.__bankMoneyChange)
self.accept(localAvatar.uniqueName('emblemsChange'), self.__emblemChange)
deliveryText = 'setDeliverySchedule-%s' % base.localAvatar.doId
self.accept(deliveryText, self.remoteUpdate)
base.setBackgroundColor(Vec4(0.529, 0.290, 0.286, 1))
render.hide()
DirectFrame.show(self)
def clarabelleGreeting(task):
self.setClarabelleChat(TTLocalizer.CatalogGreeting, type='greeting')
def clarabelleHelpText1(task):
self.setClarabelleChat(TTLocalizer.CatalogHelpText1)
taskMgr.doMethodLater(1.0, clarabelleGreeting, 'clarabelleGreeting')
taskMgr.doMethodLater(12.0, clarabelleHelpText1, 'clarabelleHelpText1')
if hasattr(self, 'giftToggle'):
self.giftToggle['state'] = DGG.DISABLED
self.giftToggle['text'] = TTLocalizer.CatalogGiftToggleWait
base.cr.deliveryManager.sendAck()
self.accept('DeliveryManagerAck', self.__handleUDack)
taskMgr.doMethodLater(10.0, self.__handleNoAck, 'ackTimeOut')
def hide(self):
self.ignore('CatalogItemPurchaseRequest')
self.ignore('CatalogItemGiftPurchaseRequest')
self.ignore('DeliveryManagerAck')
taskMgr.remove('ackTimeOut')
self.ignore(localAvatar.uniqueName('moneyChange'))
self.ignore(localAvatar.uniqueName('bankMoneyChange'))
self.ignore(localAvatar.uniqueName('emblemsChange'))
deliveryText = 'setDeliverySchedule-%s' % base.localAvatar.doId
self.ignore(deliveryText)
base.setBackgroundColor(ToontownGlobals.DefaultBackgroundColor)
render.show()
DirectFrame.hide(self)
def setNumNewPages(self, numNewPages):
self.numNewPages = numNewPages
def setNumBackPages(self, numBackPages):
self.numBackPages = numBackPages
def setNumLoyaltyPages(self, numLoyaltyPages):
self.numLoyaltyPages = numLoyaltyPages
def setNumEmblemPages(self, numEmblemPages):
self.numEmblemPages = numEmblemPages
def setPageIndex(self, index):
self.pageIndex = index
def setMaxPageIndex(self, numPages):
self.maxPageIndex = max(numPages - 1, -1)
def enableBackorderCatalogButton(self):
self.backCatalogButton['state'] = DGG.NORMAL
self.newCatalogButton['state'] = DGG.DISABLED
self.loyaltyCatalogButton['state'] = DGG.DISABLED
self.emblemCatalogButton['state'] = DGG.DISABLED
def enableNewCatalogButton(self):
self.backCatalogButton['state'] = DGG.DISABLED
self.newCatalogButton['state'] = DGG.NORMAL
self.loyaltyCatalogButton['state'] = DGG.DISABLED
self.emblemCatalogButton['state'] = DGG.DISABLED
def enableLoyaltyCatalogButton(self):
self.backCatalogButton['state'] = DGG.DISABLED
self.newCatalogButton['state'] = DGG.DISABLED
self.loyaltyCatalogButton['state'] = DGG.NORMAL
self.emblemCatalogButton['state'] = DGG.DISABLED
def enableEmblemCatalogButton(self):
self.backCatalogButton['state'] = DGG.DISABLED
self.newCatalogButton['state'] = DGG.DISABLED
self.loyaltyCatalogButton['state'] = DGG.DISABLED
self.emblemCatalogButton['state'] = DGG.NORMAL
def modeBackorderCatalog(self):
self.backCatalogButton['state'] = DGG.DISABLED
self.newCatalogButton['state'] = DGG.NORMAL
self.loyaltyCatalogButton['state'] = DGG.NORMAL
self.emblemCatalogButton['state'] = DGG.NORMAL
def modeNewCatalog(self):
self.backCatalogButton['state'] = DGG.NORMAL
self.newCatalogButton['state'] = DGG.DISABLED
self.loyaltyCatalogButton['state'] = DGG.NORMAL
self.emblemCatalogButton['state'] = DGG.NORMAL
def modeLoyaltyCatalog(self):
self.backCatalogButton['state'] = DGG.NORMAL
self.newCatalogButton['state'] = DGG.NORMAL
self.loyaltyCatalogButton['state'] = DGG.DISABLED
self.emblemCatalogButton['state'] = DGG.NORMAL
def modeEmblemCatalog(self):
self.backCatalogButton['state'] = DGG.NORMAL
self.newCatalogButton['state'] = DGG.NORMAL
self.loyaltyCatalogButton['state'] = DGG.NORMAL
self.emblemCatalogButton['state'] = DGG.DISABLED
def showNewItems(self, index = None):
if config.GetBool('want-qa-regression', 0):
self.notify.info('QA-REGRESSION: CATALOG: New item')
taskMgr.remove('clarabelleHelpText1')
messenger.send('wakeup')
self.viewing = 'New'
self.modeNewCatalog()
self.setMaxPageIndex(self.numNewPages)
if self.numNewPages == 0:
self.setPageIndex(-1)
elif index is not None:
self.setPageIndex(index)
else:
self.setPageIndex(0)
self.showPageItems()
return
def showBackorderItems(self, index = None):
if config.GetBool('want-qa-regression', 0):
self.notify.info('QA-REGRESSION: CATALOG: Backorder item')
taskMgr.remove('clarabelleHelpText1')
messenger.send('wakeup')
self.viewing = 'Backorder'
self.modeBackorderCatalog()
self.setMaxPageIndex(self.numBackPages)
if self.numBackPages == 0:
self.setPageIndex(-1)
elif index is not None:
self.setPageIndex(index)
else:
self.setPageIndex(0)
self.showPageItems()
return
def showLoyaltyItems(self, index = None):
if config.GetBool('want-qa-regression', 0):
self.notify.info('QA-REGRESSION: CATALOG: Special item')
taskMgr.remove('clarabelleHelpText1')
messenger.send('wakeup')
self.viewing = 'Loyalty'
self.modeLoyaltyCatalog()
self.setMaxPageIndex(self.numLoyaltyPages)
if self.numLoyaltyPages == 0:
self.setPageIndex(-1)
elif index is not None:
self.setPageIndex(index)
else:
self.setPageIndex(0)
self.showPageItems()
return
def showEmblemItems(self, index = None):
if config.GetBool('want-qa-regression', 0):
self.notify.info('QA-REGRESSION: CATALOG: Emblem item')
taskMgr.remove('clarabelleHelpText1')
messenger.send('wakeup')
self.viewing = 'Emblem'
self.modeEmblemCatalog()
self.setMaxPageIndex(self.numEmblemPages)
if self.numEmblemPages == 0:
self.setPageIndex(-1)
elif index is not None:
self.setPageIndex(index)
else:
self.setPageIndex(0)
self.showPageItems()
return
def showNextPage(self):
taskMgr.remove('clarabelleHelpText1')
messenger.send('wakeup')
self.pageIndex = self.pageIndex + 1
if self.viewing == None:
self.modeNewCatalog()
self.viewing == 'New'
if self.viewing == 'New' and self.pageIndex > self.maxPageIndex and self.numBackPages > 0:
self.showBackorderItems()
if self.viewing == 'New' and self.pageIndex > self.maxPageIndex and self.numLoyaltyPages > 0:
self.showLoyaltyItems()
elif self.viewing == 'Backorder' and self.pageIndex > self.maxPageIndex and self.numLoyaltyPages > 0:
self.showLoyaltyItems()
elif self.viewing == 'Loyalty' and self.pageIndex > self.maxPageIndex and self.numEmblemPages > 0:
self.showEmblemItems()
else:
self.pageIndex = min(self.pageIndex, self.maxPageIndex)
self.showPageItems()
return
def showBackPage(self):
taskMgr.remove('clarabelleHelpText1')
messenger.send('wakeup')
self.pageIndex = self.pageIndex - 1
if self.viewing == 'Backorder' and self.pageIndex < 0 and self.numNewPages > 0:
self.showNewItems(self.numNewPages - 1)
elif self.viewing == 'Loyalty' and self.pageIndex < 0 and self.numBackPages > 0:
self.showBackorderItems(self.numBackPages - 1)
elif self.viewing == 'Emblem' and self.pageIndex < 0 and self.numLoyaltyPages > 0:
self.showLoyaltyItems(self.numLoyaltyPages - 1)
else:
self.pageIndex = max(self.pageIndex, -1)
self.showPageItems()
def showPageItems(self):
self.hidePages()
if self.viewing == None:
self.viewing = 'New'
if self.pageIndex < 0:
self.closeCover()
else:
if self.pageIndex == 0:
self.openCover()
if self.viewing == 'New':
page = self.pageList[self.pageIndex]
newOrBackOrLoyalty = 0
elif self.viewing == 'Backorder':
page = self.backPageList[self.pageIndex]
newOrBackOrLoyalty = 1
elif self.viewing == 'Loyalty':
page = self.loyaltyPageList[self.pageIndex]
newOrBackOrLoyalty = 2
elif self.viewing == 'Emblem':
page = self.emblemPageList[self.pageIndex]
newOrBackOrLoyalty = 3
page.show()
for panel in self.panelDict[page.get_key()]:
panel.load()
if panel.ival:
panel.ival.loop()
self.visiblePanels.append(panel)
pIndex = 0
randGen = random.Random()
randGen.seed(base.localAvatar.catalogScheduleCurrentWeek + (self.pageIndex << 8) + (newOrBackOrLoyalty << 16))
for i in range(NUM_CATALOG_ROWS):
for j in range(NUM_CATALOG_COLS):
if pIndex < len(self.visiblePanels):
type = self.visiblePanels[pIndex]['item'].getTypeCode()
self.squares[i][j].setColor(CatalogPanelColors.values()[randGen.randint(0, len(CatalogPanelColors) - 1)])
cs = 0.7 + 0.3 * randGen.random()
self.squares[i][j].setColorScale(0.7 + 0.3 * randGen.random(), 0.7 + 0.3 * randGen.random(), 0.7 + 0.3 * randGen.random(), 1)
else:
self.squares[i][j].setColor(CatalogPanelColors[CatalogItemTypes.CHAT_ITEM])
self.squares[i][j].clearColorScale()
pIndex += 1
if self.viewing == 'New':
text = TTLocalizer.CatalogNew
elif self.viewing == 'Loyalty':
text = TTLocalizer.CatalogLoyalty
elif self.viewing == 'Backorder':
text = TTLocalizer.CatalogBackorder
elif self.viewing == 'Emblem':
text = TTLocalizer.CatalogEmblem
self.pageLabel['text'] = text + ' - %d' % (self.pageIndex + 1)
if self.pageIndex < self.maxPageIndex:
self.nextPageButton.show()
elif self.viewing == 'New' and self.numBackPages == 0 and self.numLoyaltyPages == 0:
self.nextPageButton.hide()
elif self.viewing == 'Backorder' and self.numLoyaltyPages == 0:
self.nextPageButton.hide()
elif self.viewing == 'Loyalty' and self.numEmblemPages == 0:
self.nextPageButton.hide()
elif self.viewing == 'Loyalty' and self.numEmblemPages > 0:
self.nextPageButton.show()
elif self.viewing == 'Emblem':
self.nextPageButton.hide()
self.adjustForSound()
self.update()
return
def adjustForSound(self):
numEmoteItems = 0
emotePanels = []
for visIndex in xrange(len(self.visiblePanels)):
panel = self.visiblePanels[visIndex]
item = panel['item']
catalogType = item.getTypeCode()
if catalogType == CatalogItemTypes.EMOTE_ITEM:
numEmoteItems += 1
emotePanels.append(panel)
else:
panel.soundOnButton.hide()
panel.soundOffButton.hide()
if numEmoteItems == 1:
emotePanels[0].handleSoundOnButton()
elif numEmoteItems > 1:
for panel in emotePanels:
panel.handleSoundOffButton()
def hidePages(self):
for page in self.pageList:
page.hide()
for page in self.backPageList:
page.hide()
for page in self.loyaltyPageList:
page.hide()
for page in self.emblemPageList:
page.hide()
for panel in self.visiblePanels:
if panel.ival:
panel.ival.finish()
self.visiblePanels = []
def openCover(self):
self.cover.hide()
self.hideDummyTabs()
self.backPageButton.show()
self.pageLabel.show()
def closeCover(self):
self.cover.show()
self.showDummyTabs()
self.nextPageButton.show()
self.backPageButton.hide()
self.pageLabel.hide()
self.hidePages()
def showDummyTabs(self):
if self.numNewPages > 0:
self.newCatalogButton2.show()
if self.numBackPages > 0:
self.backCatalogButton2.show()
if self.numLoyaltyPages > 0:
self.loyaltyCatalogButton2.show()
if self.numEmblemPages > 0:
self.emblemCatalogButton2.show()
self.newCatalogButton.hide()
self.backCatalogButton.hide()
self.loyaltyCatalogButton.hide()
self.emblemCatalogButton.hide()
def hideDummyTabs(self):
self.newCatalogButton2.hide()
self.backCatalogButton2.hide()
self.loyaltyCatalogButton2.hide()
self.emblemCatalogButton2.hide()
if self.numNewPages > 0:
self.newCatalogButton.show()
if self.numBackPages > 0:
self.backCatalogButton.show()
if self.numLoyaltyPages > 0:
self.loyaltyCatalogButton.show()
if self.numEmblemPages > 0:
self.emblemCatalogButton.show()
def packPages(self, panelList, pageList, prefix):
i = 0
j = 0
numPages = 0
pageName = prefix + '_page%d' % numPages
for item in panelList:
if i == 0 and j == 0:
numPages += 1
pageName = prefix + '_page%d' % numPages
page = self.base.attachNewNode(pageName)
pageList.append(page)
item.reparentTo(page)
item.setPos(CatalogPanelCenters[i][j])
itemList = self.panelDict.get(page.get_key(), [])
itemList.append(item)
self.panelDict[page.get_key()] = itemList
j += 1
if j == NUM_CATALOG_COLS:
j = 0
i += 1
if i == NUM_CATALOG_ROWS:
i = 0
return numPages
def load(self, guiItems, guiButton, guiBack):
self.pageIndex = -1
self.maxPageIndex = 0
self.numNewPages = 0
self.numBackPages = 5
self.numLoyaltyPages = 0
self.viewing = 'New'
self.panelList = []
self.backPanelList = []
self.pageList = []
self.backPageList = []
self.loyaltyPanelList = []
self.loyaltyPageList = []
self.emblemPanelList = []
self.emblemPageList = []
self.panelDict = {}
self.visiblePanels = []
self.responseDialog = None
catalogBase = guiItems.find('**/catalog_base')
self.base = DirectLabel(self, relief=None, image=catalogBase)
newDown = guiItems.find('**/new1')
newUp = guiItems.find('**/new2')
backDown = guiItems.find('**/previous2')
backUp = guiItems.find('**/previous1')
giftToggleUp = guiItems.find('**/giftButtonUp')
giftToggleDown = guiItems.find('**/giftButtonDown')
giftFriends = guiItems.find('**/gift_names')
oldLift = 0.4
lift = 0.4
liftDiff = lift - oldLift
lift2 = 0.05
smash = 0.75
priceScale = 0.15
emblemIcon = loader.loadModel('phase_3.5/models/gui/tt_m_gui_gen_emblemIcons')
silverModel = emblemIcon.find('**/tt_t_gui_gen_emblemSilver')
goldModel = emblemIcon.find('**/tt_t_gui_gen_emblemGold')
self.silverLabel = DirectLabel(parent=self, relief=None, pos=(1.05, 0, -0.6), scale=priceScale, image=silverModel, image_pos=(-0.4, 0, 0.4), text=str(localAvatar.emblems[ToontownGlobals.EmblemTypes.Silver]), text_fg=(0.95, 0.95, 0, 1), text_shadow=(0, 0, 0, 1), text_font=ToontownGlobals.getSignFont(), text_align=TextNode.ALeft)
base.silverLabel = self.silverLabel
self.goldLabel = DirectLabel(parent=self, relief=None, pos=(1.05, 0, -0.8), scale=priceScale, image=goldModel, image_pos=(-0.4, 0, 0.4), text=str(localAvatar.emblems[ToontownGlobals.EmblemTypes.Gold]), text_fg=(0.95, 0.95, 0, 1), text_shadow=(0, 0, 0, 1), text_font=ToontownGlobals.getSignFont(), text_align=TextNode.ALeft)
base.goldLabel = self.goldLabel
if not base.cr.wantEmblems:
self.hideEmblems()
self.newCatalogButton = DirectButton(self.base, relief=None, pos=(0, 0, 0.17), frameSize=(-0.2,
0.25,
0.45,
1.2), image=[newDown,
newDown,
newDown,
newUp], image_scale=(1.0, 1.0, smash), image_pos=(0.0, 0.0, lift), pressEffect=0, command=self.showNewItems, text=TTLocalizer.CatalogNew, text_font=ToontownGlobals.getSignFont(), text_pos=(-0.4 - lift, 0.13), text3_pos=(-0.4 - lift, 0.1), text_scale=0.08, text_fg=(0.353, 0.627, 0.627, 1.0), text2_fg=(0.353, 0.427, 0.427, 1.0))
self.newCatalogButton.hide()
self.newCatalogButton2 = DirectButton(self.base, relief=None, pos=(0, 0, 0.17), frameSize=(-0.2,
0.25,
0.45,
1.2), image=newDown, image_scale=(1.0, 1.0, smash), image_pos=(0.0, 0.0, lift), pressEffect=0, command=self.showNewItems, text=TTLocalizer.CatalogNew, text_font=ToontownGlobals.getSignFont(), text_pos=(-0.4 - lift, 0.13), text_scale=0.08, text_fg=(0.353, 0.627, 0.627, 1.0), text2_fg=(0.353, 0.427, 0.427, 1.0))
self.newCatalogButton2.hide()
self.backCatalogButton = DirectButton(self.base, relief=None, pos=(0, 0, 0.269), frameSize=(-0.2,
0.25,
-0.2,
0.4), image=[backDown,
backDown,
backDown,
backUp], image_scale=(1.0, 1.0, smash), image_pos=(0.0, 0.0, lift), pressEffect=0, command=self.showBackorderItems, text=TTLocalizer.CatalogBackorder, text_font=ToontownGlobals.getSignFont(), text_pos=(0.25 - lift, 0.132), text3_pos=(0.25 - lift, 0.112), text_scale=TTLocalizer.CSbackCatalogButton, text_fg=(0.392, 0.549, 0.627, 1.0), text2_fg=(0.392, 0.349, 0.427, 1.0))
self.backCatalogButton.hide()
self.backCatalogButton2 = DirectButton(self.base, relief=None, pos=(0, 0, 0.269), frameSize=(-0.2,
0.25,
-0.2,
0.4), image_scale=(1.0, 1.0, smash), image_pos=(0.0, 0.0, lift), image=backDown, pressEffect=0, command=self.showBackorderItems, text=TTLocalizer.CatalogBackorder, text_font=ToontownGlobals.getSignFont(), text_pos=(0.25 - lift, 0.132), text_scale=TTLocalizer.CSbackCatalogButton, text_fg=(0.392, 0.549, 0.627, 1.0), text2_fg=(0.392, 0.349, 0.427, 1.0))
self.backCatalogButton2.hide()
self.loyaltyCatalogButton = DirectButton(self.base, relief=None, pos=(0, 0, 0.469), frameSize=(-0.2,
0.25,
-0.85,
-0.3), image=[newDown,
newDown,
newDown,
newUp], image_scale=(1.0, 1.0, smash), image_pos=(0.0, 0.0, -1.4 + lift), pressEffect=0, command=self.showLoyaltyItems, text=TTLocalizer.CatalogLoyalty, text_font=ToontownGlobals.getSignFont(), text_pos=(1.0 - lift, 0.132), text3_pos=(1.0 - lift, 0.112), text_scale=0.065, text_fg=(0.353, 0.627, 0.627, 1.0), text2_fg=(0.353, 0.427, 0.427, 1.0))
self.loyaltyCatalogButton.hide()
self.loyaltyCatalogButton2 = DirectButton(self.base, relief=None, pos=(0, 0, 0.469), frameSize=(-0.2,
0.25,
-0.85,
-0.3), image_scale=(1.0, 1.0, smash), image_pos=(0.0, 0.0, -1.4 + lift), image=newDown, pressEffect=0, command=self.showLoyaltyItems, text=TTLocalizer.CatalogLoyalty, text_font=ToontownGlobals.getSignFont(), text_pos=(1.0 - lift, 0.132), text_scale=0.065, text_fg=(0.353, 0.627, 0.627, 1.0), text2_fg=(0.353, 0.427, 0.427, 1.0))
self.loyaltyCatalogButton2.hide()
self.emblemCatalogButton = DirectButton(self.base, relief=None, pos=(0, 0, 1.05), frameSize=(-0.2,
0.25,
-2.0,
-1.45), image=[backDown,
backDown,
backDown,
backUp], image_scale=(1.0, 1.0, smash), image_pos=(0.0, 0.0, -1.9 + lift), pressEffect=0, command=self.showEmblemItems, text=TTLocalizer.CatalogEmblem, text_font=ToontownGlobals.getSignFont(), text_pos=(1.75, 0.132), text3_pos=(1.75, 0.112), text_scale=0.065, text_fg=(0.353, 0.627, 0.627, 1.0), text2_fg=(0.353, 0.427, 0.427, 1.0))
self.emblemCatalogButton.hide()
self.emblemCatalogButton2 = DirectButton(self.base, relief=None, pos=(0, 0, 1.05), frameSize=(-0.2,
0.25,
-2.0,
-1.45), image_scale=(1.0, 1.0, smash), image_pos=(0.0, 0.0, -1.9 + lift), image=backDown, pressEffect=0, command=self.showEmblemItems, text=TTLocalizer.CatalogEmblem, text_font=ToontownGlobals.getSignFont(), text_pos=(1.75, 0.132), text_scale=0.065, text_fg=(0.353, 0.627, 0.627, 1.0), text2_fg=(0.353, 0.427, 0.427, 1.0))
self.emblemCatalogButton2.hide()
self.__makeFFlist()
if len(self.ffList) > 0:
if config.GetBool('want-gifting', True):
self.giftToggle = DirectButton(self.base, relief=None, pressEffect=0, image=(giftToggleUp, giftToggleDown, giftToggleUp), image_scale=(1.0, 1, 0.7), command=self.__giftToggle, text=TTLocalizer.CatalogGiftToggleOff, text_font=ToontownGlobals.getSignFont(), text_pos=TTLocalizer.CSgiftTogglePos, text_scale=TTLocalizer.CSgiftToggle, text_fg=(0.353, 0.627, 0.627, 1.0), text3_fg=(0.15, 0.3, 0.3, 1.0), text2_fg=(0.353, 0.427, 0.427, 1.0), image_color=Vec4(1.0, 1.0, 0.2, 1.0), image1_color=Vec4(0.9, 0.85, 0.2, 1.0), image2_color=Vec4(0.9, 0.85, 0.2, 1.0), image3_color=Vec4(0.5, 0.45, 0.2, 1.0))
self.giftToggle.setPos(0.0, 0, -0.035)
self.giftLabel = DirectLabel(self.base, relief=None, image=giftFriends, image_scale=(1.15, 1, 1.14), text=' ', text_font=ToontownGlobals.getSignFont(), text_pos=(1.2, -0.97), text_scale=0.07, text_fg=(0.392, 0.549, 0.627, 1.0), sortOrder=100, textMayChange=1)
self.giftLabel.setPos(-0.15, 0, 0.08)
self.giftLabel.hide()
self.friendLabel = DirectLabel(self.base, relief=None, text='Friend Name', text_font=ToontownGlobals.getSignFont(), text_pos=(-0.25, 0.132), text_scale=0.068, text_align=TextNode.ALeft, text_fg=(0.992, 0.949, 0.327, 1.0), sortOrder=100, textMayChange=1)
self.friendLabel.setPos(0.5, 0, -0.42)
self.friendLabel.hide()
gui = loader.loadModel('phase_3.5/models/gui/friendslist_gui')
self.scrollList = DirectScrolledList(parent=self, relief=None, incButton_image=(gui.find('**/FndsLst_ScrollUp'),
gui.find('**/FndsLst_ScrollDN'),
gui.find('**/FndsLst_ScrollUp_Rllvr'),
gui.find('**/FndsLst_ScrollUp')), incButton_relief=None, incButton_pos=(0.0, 0.0, -0.316), incButton_image1_color=Vec4(1.0, 0.9, 0.4, 1.0), incButton_image3_color=Vec4(1.0, 1.0, 0.6, 0.5), incButton_scale=(1.0, 1.0, -1.0), decButton_image=(gui.find('**/FndsLst_ScrollUp'),
gui.find('**/FndsLst_ScrollDN'),
gui.find('**/FndsLst_ScrollUp_Rllvr'),
gui.find('**/FndsLst_ScrollUp')), decButton_relief=None, decButton_pos=(0.0, 0.0, 0.117), decButton_image1_color=Vec4(1.0, 1.0, 0.6, 1.0), decButton_image3_color=Vec4(1.0, 1.0, 0.6, 0.6), itemFrame_pos=(-0.17, 0.0, 0.06), itemFrame_relief=None, numItemsVisible=8, items=[])
self.scrollList.setPos(1.2, 0, -0.58)
self.scrollList.setScale(1.5)
self.scrollList.hide()
clipper = PlaneNode('clipper')
clipper.setPlane(Plane(Vec3(-1, 0, 0), Point3(0.17, 0, 0)))
clipNP = self.scrollList.attachNewNode(clipper)
self.scrollList.setClipPlane(clipNP)
self.__makeScrollList()
friendId = self.ffList[0]
self.__chooseFriend(self.ffList[0][0], self.ffList[0][1])
self.update()
self.createdGiftGui = 1
for i in range(4):
self.newCatalogButton.component('text%d' % i).setR(90)
self.newCatalogButton2.component('text%d' % i).setR(90)
self.backCatalogButton.component('text%d' % i).setR(90)
self.backCatalogButton2.component('text%d' % i).setR(90)
self.loyaltyCatalogButton.component('text%d' % i).setR(90)
self.loyaltyCatalogButton2.component('text%d' % i).setR(90)
self.emblemCatalogButton.component('text%d' % i).setR(90)
self.emblemCatalogButton2.component('text%d' % i).setR(90)
self.squares = [[],
[],
[],
[]]
for i in range(NUM_CATALOG_ROWS):
for j in range(NUM_CATALOG_COLS):
square = guiItems.find('**/square%d%db' % (i + 1, j + 1))
label = DirectLabel(self.base, image=square, relief=None, state='normal')
self.squares[i].append(label)
def priceSort(a, b, type):
priceA = a.getPrice(type)
priceB = b.getPrice(type)
return priceB - priceA
itemList = base.localAvatar.monthlyCatalog + base.localAvatar.weeklyCatalog
itemList.sort(lambda a, b: priceSort(a, b, CatalogItem.CatalogTypeWeekly))
itemList.reverse()
allClosetItems = CatalogFurnitureItem.getAllClosets()
isMaxClosetOfferred = False
for item in itemList:
if item in allClosetItems and item.furnitureType in CatalogFurnitureItem.MaxClosetIds:
isMaxClosetOfferred = True
break
for item in itemList:
if isinstance(item, CatalogInvalidItem.CatalogInvalidItem):
self.notify.warning('skipping catalog invalid item %s' % item)
continue
if isMaxClosetOfferred and item in allClosetItems and item.furnitureType not in CatalogFurnitureItem.MaxClosetIds:
continue
if item.loyaltyRequirement() != 0:
self.loyaltyPanelList.append(CatalogItemPanel.CatalogItemPanel(parent=hidden, item=item, type=CatalogItem.CatalogTypeLoyalty, parentCatalogScreen=self))
elif item.getEmblemPrices():
self.emblemPanelList.append(CatalogItemPanel.CatalogItemPanel(parent=hidden, item=item, type=CatalogItem.CatalogTypeWeekly, parentCatalogScreen=self))
else:
self.panelList.append(CatalogItemPanel.CatalogItemPanel(parent=hidden, item=item, type=CatalogItem.CatalogTypeWeekly, parentCatalogScreen=self))
itemList = base.localAvatar.backCatalog
itemList.sort(lambda a, b: priceSort(a, b, CatalogItem.CatalogTypeBackorder))
itemList.reverse()
for item in itemList:
if isinstance(item, CatalogInvalidItem.CatalogInvalidItem):
self.notify.warning('skipping catalog invalid item %s' % item)
continue
if isMaxClosetOfferred and item in allClosetItems and item.furnitureType not in CatalogFurnitureItem.MaxClosetIds:
continue
if item.loyaltyRequirement() != 0:
self.loyaltyPanelList.append(CatalogItemPanel.CatalogItemPanel(parent=hidden, item=item, type=CatalogItem.CatalogTypeLoyalty, parentCatalogScreen=self))
elif item.getEmblemPrices():
self.emblemPanelList.append(CatalogItemPanel.CatalogItemPanel(parent=hidden, item=item, type=CatalogItem.CatalogTypeBackOrder, parentCatalogScreen=self))
else:
self.backPanelList.append(CatalogItemPanel.CatalogItemPanel(parent=hidden, item=item, type=CatalogItem.CatalogTypeBackorder, parentCatalogScreen=self))
numPages = self.packPages(self.panelList, self.pageList, 'new')
self.setNumNewPages(numPages)
numPages = self.packPages(self.backPanelList, self.backPageList, 'back')
self.setNumBackPages(numPages)
numPages = self.packPages(self.loyaltyPanelList, self.loyaltyPageList, 'loyalty')
self.setNumLoyaltyPages(numPages)
numPages = self.packPages(self.emblemPanelList, self.emblemPageList, 'emblem')
self.setNumEmblemPages(numPages)
currentWeek = base.localAvatar.catalogScheduleCurrentWeek - 1
if currentWeek < 57:
seriesNumber = currentWeek / ToontownGlobals.CatalogNumWeeksPerSeries + 1
weekNumber = currentWeek % ToontownGlobals.CatalogNumWeeksPerSeries + 1
elif currentWeek < 65:
seriesNumber = 6
weekNumber = currentWeek - 56
else:
seriesNumber = currentWeek / ToontownGlobals.CatalogNumWeeksPerSeries + 2
weekNumber = currentWeek % ToontownGlobals.CatalogNumWeeksPerSeries + 1
geom = NodePath('cover')
cover = guiItems.find('**/cover')
maxSeries = ToontownGlobals.CatalogNumWeeks / ToontownGlobals.CatalogNumWeeksPerSeries + 1
coverSeries = (seriesNumber - 1) % maxSeries + 1
coverPicture = cover.find('**/cover_picture%s' % coverSeries)
if not coverPicture.isEmpty():
coverPicture.reparentTo(geom)
bottomSquare = cover.find('**/cover_bottom')
topSquare = guiItems.find('**/square12b2')
if seriesNumber == 1:
topSquare.setColor(0.651, 0.404, 0.322, 1.0)
bottomSquare.setColor(0.655, 0.522, 0.263, 1.0)
else:
topSquare.setColor(0.651, 0.404, 0.322, 1.0)
bottomSquare.setColor(0.655, 0.522, 0.263, 1.0)
bottomSquare.reparentTo(geom)
topSquare.reparentTo(geom)
cover.find('**/clarabelle_text').reparentTo(geom)
cover.find('**/blue_circle').reparentTo(geom)
cover.find('**/clarabelle').reparentTo(geom)
cover.find('**/circle_green').reparentTo(geom)
self.cover = DirectLabel(self.base, relief=None, geom=geom)
self.catalogNumber = DirectLabel(self.cover, relief=None, scale=0.2, pos=(-0.22, 0, -0.33), text='#%d' % weekNumber, text_fg=(0.95, 0.95, 0, 1), text_shadow=(0, 0, 0, 1), text_font=ToontownGlobals.getInterfaceFont())
self.catalogSeries = DirectLabel(self.cover, relief=None, scale=(0.22, 1, 0.18), pos=(-0.76, 0, -0.9), text=TTLocalizer.CatalogSeriesLabel % seriesNumber, text_fg=(0.9, 0.9, 0.4, 1), text_shadow=(0, 0, 0, 1), text_font=ToontownGlobals.getInterfaceFont())
self.catalogSeries.setShxz(0.4)
self.rings = DirectLabel(self.base, relief=None, geom=guiItems.find('**/rings'))
self.clarabelleFrame = DirectLabel(self, relief=None, image=guiItems.find('**/clarabelle_frame'))
hangupGui = guiItems.find('**/hangup')
hangupRolloverGui = guiItems.find('**/hangup_rollover')
self.hangup = DirectButton(base.a2dBottomRight, relief=None, pos=(-0.158, 0, 0.14), scale=(0.7, 0.7, 0.7), image=[hangupGui,
hangupRolloverGui,
hangupRolloverGui,
hangupGui], text=['', TTLocalizer.CatalogHangUp, TTLocalizer.CatalogHangUp], text_fg=Vec4(1), text_scale=0.07, text_pos=(0.0, 0.14), command=self.hangUp)
self.beanBank = DirectLabel(self, relief=None, image=guiItems.find('**/bean_bank'), text=str(base.localAvatar.getMoney() + base.localAvatar.getBankMoney()), text_align=TextNode.ARight, text_scale=0.11, text_fg=(0.95, 0.95, 0, 1), text_shadow=(0, 0, 0, 1), text_pos=(0.75, -0.81), text_font=ToontownGlobals.getSignFont())
nextUp = guiItems.find('**/arrow_up')
nextRollover = guiItems.find('**/arrow_Rollover')
nextDown = guiItems.find('**/arrow_Down')
prevUp = guiItems.find('**/arrowUp')
prevDown = guiItems.find('**/arrowDown1')
prevRollover = guiItems.find('**/arrowRollover')
self.nextPageButton = DirectButton(self, relief=None, pos=(-0.1, 0, -0.9), image=[nextUp,
nextDown,
nextRollover,
nextUp], image_color=(0.9, 0.9, 0.9, 1), image2_color=(1, 1, 1, 1), command=self.showNextPage)
self.backPageButton = DirectButton(self, relief=None, pos=(-0.1, 0, -0.9), image=[prevUp,
prevDown,
prevRollover,
prevUp], image_color=(0.9, 0.9, 0.9, 1), image2_color=(1, 1, 1, 1), command=self.showBackPage)
self.backPageButton.hide()
self.pageLabel = DirectLabel(self.base, relief=None, pos=(-1.33, 0, -0.9), scale=0.06, text=TTLocalizer.CatalogPagePrefix, text_fg=(0.95, 0.95, 0, 1), text_shadow=(0, 0, 0, 1), text_font=ToontownGlobals.getSignFont(), text_align=TextNode.ALeft)
self.loadClarabelle()
return
def loadClarabelle(self):
self.cRender = NodePath('cRender')
self.cCamera = self.cRender.attachNewNode('cCamera')
self.cCamNode = Camera('cCam')
self.cLens = PerspectiveLens()
self.cLens.setFov(40, 40)
self.cLens.setNear(0.1)
self.cLens.setFar(100.0)
self.cCamNode.setLens(self.cLens)
self.cCamNode.setScene(self.cRender)
self.cCam = self.cCamera.attachNewNode(self.cCamNode)
self.cDr = base.win.makeDisplayRegion(0.56, 0.81, 0.52, 0.85)
self.cDr.setSort(1)
self.cDr.setClearDepthActive(1)
self.cDr.setClearColorActive(1)
self.cDr.setClearColor(Vec4(0.3, 0.3, 0.3, 1))
self.cDr.setCamera(self.cCam)
self.clarabelle = Actor.Actor('phase_5.5/models/char/Clarabelle-zero', {'listen': 'phase_5.5/models/char/Clarabelle-listens'})
self.clarabelle.loop('listen')
self.clarabelle.find('**/eyes').setBin('fixed', 0)
self.clarabelle.find('**/pupilL').setBin('fixed', 1)
self.clarabelle.find('**/pupilR').setBin('fixed', 1)
self.clarabelle.find('**/glassL').setBin('fixed', 2)
self.clarabelle.find('**/glassR').setBin('fixed', 2)
switchboard = loader.loadModel('phase_5.5/models/estate/switchboard')
switchboard.reparentTo(self.clarabelle)
switchboard.setPos(1, -1.6, 0)
switchboard.setH(30)
room = loader.loadModel('phase_3/models/makeatoon/tt_m_ara_mat_room.bam')
room.reparentTo(self.clarabelle)
room.find('**/genderProps').removeNode()
room.find('**/bodyWalls').removeNode()
room.find('**/bodyProps').removeNode()
room.find('**/colorWalls').removeNode()
room.find('**/colorProps').removeNode()
room.find('**/clothWalls').removeNode()
room.find('**/nameWalls').removeNode()
room.find('**/nameProps').removeNode()
room.find('**/spotlight').removeNode()
room.setPos(5.5, 1.25, 0)
room.setH(330)
self.clarabelle.reparentTo(self.cRender)
self.clarabelle.setPosHprScale(-0.52, 6.13, -3.81, 85, 0.0, 0.0, 1.0, 1.0, 1.0)
self.clarabelleFrame.setPosHprScale(-0.01, 0.0, -0.01, 0.0, 0.0, 0.0, 1.02, 1.0, 1.02)
def reload(self):
for panel in self.panelList + self.backPanelList + self.loyaltyPanelList + self.emblemPanelList:
panel.destroy()
def priceSort(a, b, type):
priceA = a.getPrice(type)
priceB = b.getPrice(type)
return priceB - priceA
self.pageIndex = -1
self.maxPageIndex = 0
self.numNewPages = 0
self.numBackPages = 5
self.numLoyaltyPages = 0
self.viewing = 'New'
self.panelList = []
self.backPanelList = []
self.loyaltyList = []
self.pageList = []
self.backPageList = []
self.loyaltyPanelList = []
self.loyaltyPageList = []
self.panelDict = {}
self.visiblePanels = []
itemList = base.localAvatar.monthlyCatalog + base.localAvatar.weeklyCatalog
itemList.sort(lambda a, b: priceSort(a, b, CatalogItem.CatalogTypeWeekly))
itemList.reverse()
for item in itemList:
if item.loyaltyRequirement() != 0:
self.loyaltyPanelList.append(CatalogItemPanel.CatalogItemPanel(parent=hidden, item=item, type=CatalogItem.CatalogTypeLoyalty, parentCatalogScreen=self))
else:
self.panelList.append(CatalogItemPanel.CatalogItemPanel(parent=hidden, item=item, type=CatalogItem.CatalogTypeWeekly))
itemList = base.localAvatar.backCatalog
itemList.sort(lambda a, b: priceSort(a, b, CatalogItem.CatalogTypeBackorder))
itemList.reverse()
for item in itemList:
if item.loyaltyRequirement() != 0:
self.loyaltyPanelList.append(CatalogItemPanel.CatalogItemPanel(parent=hidden, item=item, type=CatalogItem.CatalogTypeLoyalty, parentCatalogScreen=self))
else:
self.backPanelList.append(CatalogItemPanel.CatalogItemPanel(parent=hidden, item=item, type=CatalogItem.CatalogTypeBackorder))
numPages = self.packPages(self.panelList, self.pageList, 'new')
self.setNumNewPages(numPages)
numPages = self.packPages(self.backPanelList, self.backPageList, 'back')
self.setNumBackPages(numPages)
numPages = self.packPages(self.loyaltyPanelList, self.loyaltyPageList, 'loyalty')
self.setNumLoyaltyPages(numPages)
seriesNumber = (base.localAvatar.catalogScheduleCurrentWeek - 1) / ToontownGlobals.CatalogNumWeeksPerSeries + 1
self.catalogSeries['text'] = Localizer.CatalogSeriesLabel % seriesNumber
weekNumber = (base.localAvatar.catalogScheduleCurrentWeek - 1) % ToontownGlobals.CatalogNumWeeksPerSeries + 1
self.catalogNumber['text'] = '#%d' % weekNumber
self.enableBackorderCatalogButton()
self.setMaxPageIndex(self.numNewPages)
self.setPageIndex(-1)
self.showPageItems()
def unload(self):
taskMgr.remove('clearClarabelleChat')
taskMgr.remove('postGoodbyeHangUp')
taskMgr.remove('clarabelleGreeting')
taskMgr.remove('clarabelleHelpText1')
taskMgr.remove('clarabelleAskAnythingElse')
if self.giftAvatar:
base.cr.cancelAvatarDetailsRequest(self.giftAvatar)
self.hide()
self.hangup.hide()
self.destroy()
del self.base
del self.squares
for panel in self.panelList + self.backPanelList + self.loyaltyPanelList + self.emblemPanelList:
panel.destroy()
del self.panelList
del self.backPanelList
del self.cover
del self.rings
del self.clarabelleFrame
del self.hangup
del self.beanBank
del self.silverLabel
del self.goldLabel
del self.nextPageButton
del self.backPageButton
del self.newCatalogButton
del self.newCatalogButton2
del self.backCatalogButton
del self.backCatalogButton2
del self.loyaltyCatalogButton
del self.loyaltyCatalogButton2
del self.pageLabel
if self.createdGiftGui:
del self.giftToggle
del self.giftLabel
del self.friendLabel
del self.scrollList
self.unloadClarabelle()
if self.responseDialog:
self.responseDialog.cleanup()
self.responseDialog = None
if self.giftAvatar:
if hasattr(self.giftAvatar, 'doId'):
self.giftAvatar.delete()
else:
self.giftAvatar = None
return
def unloadClarabelle(self):
base.win.removeDisplayRegion(self.cDr)
del self.cRender
del self.cCamera
del self.cCamNode
del self.cLens
del self.cCam
del self.cDr
self.clarabelle.cleanup()
del self.clarabelle
if self.clarabelleChatBalloon:
self.clarabelleChatBalloon.removeNode()
del self.clarabelleChatBalloon
if self.clarabelleGreetingSfx:
for sound in self.clarabelleGreetingSfx:
del sound
del self.clarabelleGreetingSfx
if self.clarabelleGoodbyeSfx:
for sound in self.clarabelleGoodbyeSfx:
del sound
del self.clarabelleGoodbyeSfx
if self.clarabelleErrorSfx:
for sound in self.clarabelleGoodbyeSfx:
del sound
del self.clarabelleGoodbyeSfx
if self.clarabelleChatterSfx:
for sound in self.clarabelleChatterSfx:
del sound
del self.clarabelleChatterSfx
def hangUp(self):
if hasattr(self, 'giftAvatar') and self.giftAvatar:
self.giftAvatar.disable()
self.setClarabelleChat(random.choice(TTLocalizer.CatalogGoodbyeList), type='goodbye')
self.setPageIndex(-1)
self.showPageItems()
self.nextPageButton.hide()
self.backPageButton.hide()
self.newCatalogButton.hide()
self.newCatalogButton2.hide()
self.backCatalogButton.hide()
self.backCatalogButton2.hide()
self.loyaltyCatalogButton.hide()
self.loyaltyCatalogButton2.hide()
self.emblemCatalogButton.hide()
self.emblemCatalogButton2.hide()
self.hangup.hide()
taskMgr.remove('clarabelleGreeting')
taskMgr.remove('clarabelleHelpText1')
taskMgr.remove('clarabelleAskAnythingElse')
def postGoodbyeHangUp(task):
messenger.send(self['doneEvent'])
self.unload()
taskMgr.doMethodLater(1.5, postGoodbyeHangUp, 'postGoodbyeHangUp')
def remoteUpdate(self):
self.update()
def update(self, lock = 0):
if not hasattr(self.giftAvatar, 'doId'):
if self.gifting == 1:
self.__giftToggle()
if hasattr(self, 'beanBank'):
self.beanBank['text'] = str(base.localAvatar.getTotalMoney())
if lock == 0:
for item in self.panelList + self.backPanelList + self.loyaltyPanelList + self.emblemPanelList:
if type(item) != type(''):
item.updateButtons(self.gifting)
def __handlePurchaseRequest(self, item):
item.requestPurchase(self['phone'], self.__handlePurchaseResponse)
taskMgr.remove('clarabelleAskAnythingElse')
def __handleGiftPurchaseRequest(self, item):
item.requestGiftPurchase(self['phone'], self.frienddoId, self.__handleGiftPurchaseResponse)
taskMgr.remove('clarabelleAskAnythingElse')
def __handlePurchaseResponse(self, retCode, item):
if retCode == ToontownGlobals.P_UserCancelled:
self.update()
return
self.setClarabelleChat(item.getRequestPurchaseErrorText(retCode), item.getRequestPurchaseErrorTextTimeout())
def __handleGiftPurchaseResponse(self, retCode, item):
if retCode == ToontownGlobals.P_UserCancelled:
return
if self.isEmpty() or self.isHidden():
return
self.setClarabelleChat(item.getRequestGiftPurchaseErrorText(retCode) % self.receiverName)
self.__loadFriend()
def askAnythingElse(task):
self.setClarabelleChat(TTLocalizer.CatalogAnythingElse)
if retCode >= 0:
taskMgr.doMethodLater(8, askAnythingElse, 'clarabelleAskAnythingElse')
def __clearDialog(self, event):
self.responseDialog.cleanup()
self.responseDialog = None
return
def setClarabelleChat(self, str, timeout = 6, type = None):
self.clearClarabelleChat()
# Clarabelle can talk now! Let's give her some variation.
if type == 'greeting':
if not self.clarabelleGreetingSfx:
clarabelleGreeting1 = base.loadSfx('phase_5.5/audio/dial/clarabelle_ah_1.ogg')
clarabelleGreeting2 = base.loadSfx('phase_5.5/audio/dial/clarabelle_ah_2.ogg')
self.clarabelleGreetingSfx = [clarabelleGreeting1, clarabelleGreeting2]
base.playSfx(random.choice(self.clarabelleGreetingSfx))
elif type == 'goodbye':
if not self.clarabelleGoodbyeSfx:
clarabelleGoodbye1 = base.loadSfx('phase_5.5/audio/dial/clarabelle_wa_2.ogg')
clarabelleGoodbye2 = base.loadSfx('phase_5.5/audio/dial/clarabelle_wa_3.ogg')
clarabelleGoodbye3 = base.loadSfx('phase_5.5/audio/dial/clarabelle_wa_4.ogg')
self.clarabelleGoodbyeSfx = [clarabelleGoodbye1, clarabelleGoodbye2, clarabelleGoodbye3]
base.playSfx(random.choice(self.clarabelleGoodbyeSfx))
elif type == 'error':
if not self.clarabelleErrorSfx:
clarabelleError1 = base.loadSfx('phase_5.5/audio/dial/clarabelle_ah_2.ogg')
self.clarabelleChatterSfx = [clarabelleError1]
base.playSfx(random.choice(self.clarabelleErrorSfx))
else:
# These are currently placeholders.
if not self.clarabelleChatterSfx:
clarabelleChatter1 = base.loadSfx('phase_5.5/audio/dial/clarabelle_ah_2.ogg')
clarabelleChatter2 = base.loadSfx('phase_5.5/audio/dial/clarabelle_gen_2.ogg')
self.clarabelleChatterSfx = [clarabelleChatter1, clarabelleChatter2]
base.playSfx(random.choice(self.clarabelleChatterSfx))
if not self.clarabelleChatBalloon:
self.clarabelleChatBalloon = loader.loadModel('phase_3/models/props/chatbox')
self.clarabelleChat = ChatBalloon(self.clarabelleChatBalloon)
chatNode = self.clarabelleChat.generate(str, ToontownGlobals.getInterfaceFont())[0]
self.clarabelleChatNP = self.attachNewNode(chatNode.node(), 1000)
self.clarabelleChatNP.setScale(0.08)
self.clarabelleChatNP.setPos(0.7, 0, 0.6)
if timeout:
taskMgr.doMethodLater(timeout, self.clearClarabelleChat, 'clearClarabelleChat')
def clearClarabelleChat(self, task = None):
taskMgr.remove('clearClarabelleChat')
if self.clarabelleChatNP:
self.clarabelleChatNP.removeNode()
self.clarabelleChatNP = None
del self.clarabelleChat
return
def __moneyChange(self, money):
if self.gifting > 0:
self.update(1)
else:
self.update(0)
def __bankMoneyChange(self, bankMoney):
if self.gifting > 0:
self.update(1)
else:
self.update(0)
def __emblemChange(self, newEmblems):
self.silverLabel['text'] = str(newEmblems[0])
self.goldLabel['text'] = str(newEmblems[1])
def showEmblems(self):
if base.cr.wantEmblems:
self.silverLabel.show()
self.goldLabel.show()
def hideEmblems(self):
self.silverLabel.hide()
self.goldLabel.hide()
def checkFamily(self, doId):
test = 0
for familyMember in base.cr.avList:
if familyMember.id == doId:
test = 1
return test
def __makeFFlist(self):
for familyMember in base.cr.avList:
if familyMember.id != base.localAvatar.doId:
newFF = (familyMember.id, familyMember.name, NametagGroup.CCNonPlayer)
self.ffList.append(newFF)
for friendPair in base.localAvatar.friendsList:
friendId, flags = friendPair
handle = base.cr.identifyFriend(friendId)
if handle and not self.checkFamily(friendId):
if hasattr(handle, 'getName'):
colorCode = NametagGroup.CCSpeedChat
if flags & ToontownGlobals.FriendChat:
colorCode = NametagGroup.CCFreeChat
newFF = (friendPair[0], handle.getName(), colorCode)
self.ffList.append(newFF)
else:
self.notify.warning('Bad Handle for getName in makeFFlist')
hasManager = hasattr(base.cr, 'playerFriendsManager')
if hasManager:
for avatarId in base.cr.playerFriendsManager.getAllOnlinePlayerAvatars():
handle = base.cr.playerFriendsManager.getAvHandleFromId(avatarId)
playerId = base.cr.playerFriendsManager.findPlayerIdFromAvId(avatarId)
playerInfo = base.cr.playerFriendsManager.getFriendInfo(playerId)
freeChat = playerInfo.understandableYesNo
if handle and not self.checkFamily(avatarId):
if hasattr(handle, 'getName'):
colorCode = NametagGroup.CCSpeedChat
if freeChat:
colorCode = NametagGroup.CCFreeChat
newFF = (avatarId, handle.getName(), colorCode)
self.ffList.append(newFF)
else:
self.notify.warning('Bad Handle for getName in makeFFlist')
def __makeScrollList(self):
for ff in self.ffList:
ffbutton = self.makeFamilyButton(ff[0], ff[1], ff[2])
if ffbutton:
self.scrollList.addItem(ffbutton, refresh=0)
self.friends[ff] = ffbutton
self.scrollList.refresh()
def makeFamilyButton(self, familyId, familyName, colorCode):
# fg = NametagGlobals.getNameFg(colorCode, PGButton.SInactive)
return DirectButton(
relief=None,
text=familyName,
text_scale=0.04,
text_align=TextNode.ALeft,
# text_fg=fg,
text1_bg=self.textDownColor,
text2_bg=self.textRolloverColor,
text3_fg=self.textDisabledColor,
textMayChange=0,
command=self.__chooseFriend,
extraArgs=[familyId, familyName]
)
def __chooseFriend(self, friendId, friendName):
messenger.send('wakeup')
self.frienddoId = friendId
self.receiverName = friendName
self.friendLabel['text'] = TTLocalizer.CatalogGiftTo % self.receiverName
self.__loadFriend()
def __loadFriend(self):
if self.allowGetDetails == 0:
CatalogScreen.notify.warning('smashing requests')
if self.frienddoId and self.allowGetDetails:
if self.giftAvatar:
if hasattr(self.giftAvatar, 'doId'):
self.giftAvatar.disable()
self.giftAvatar.delete()
self.giftAvatar = None
self.giftAvatar = DistributedToon.DistributedToon(base.cr)
self.giftAvatar.doId = self.frienddoId
self.giftAvatar.forceAllowDelayDelete()
self.giftAvatar.generate()
base.cr.getAvatarDetails(self.giftAvatar, self.__handleAvatarDetails, 'DistributedToon')
self.gotAvatar = 0
self.allowGetDetails = 0
self.scrollList['state'] = DGG.DISABLED
return
def __handleAvatarDetails(self, gotData, avatar, dclass):
if self.giftAvatar.doId != avatar.doId or gotData == 0:
CatalogScreen.notify.error('Get Gift Avatar Failed')
self.gotAvatar = 0
return
else:
self.gotAvatar = 1
self.giftAvatar = avatar
self.scrollList['state'] = DGG.NORMAL
self.allowGetDetails = 1
self.update()
def __giftToggle(self):
messenger.send('wakeup')
if self.gifting == -1:
self.gifting = 1
self.giftLabel.show()
self.friendLabel.show()
self.scrollList.show()
self.hideEmblems()
self.giftToggle['text'] = TTLocalizer.CatalogGiftToggleOn
self.__loadFriend()
else:
self.gifting = -1
self.giftLabel.hide()
self.friendLabel.hide()
self.scrollList.hide()
self.showEmblems()
self.giftToggle['text'] = TTLocalizer.CatalogGiftToggleOff
self.update()
def __handleUDack(self, caller = None):
taskMgr.remove('ackTimeOut')
if hasattr(self, 'giftToggle') and self.giftToggle:
self.giftToggle['state'] = DGG.NORMAL
self.giftToggle['text'] = TTLocalizer.CatalogGiftToggleOff
def __handleNoAck(self, caller = None):
if hasattr(self, 'giftToggle') and self.giftToggle:
self.giftToggle['text'] = TTLocalizer.CatalogGiftToggleNoAck