Implement TTR's catalog

This commit is contained in:
Daniel 2015-03-09 19:33:29 +02:00
parent 25bb468501
commit 1256f21e0b
33 changed files with 418 additions and 888 deletions

View file

@ -1527,8 +1527,6 @@ dclass TutorialManager : DistributedObject {
dclass CatalogManager : DistributedObject {
startCatalog() airecv clsend;
fetchPopularItems() airecv clsend;
setPopularItems(blob);
};
dclass DistributedMyTest : DistributedObject {

View file

@ -2,7 +2,7 @@
from pandac.PandaModules import *
hashVal = 315047669
hashVal = 2495436342L
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

View file

@ -19,7 +19,6 @@ from toontown.ai import BankManagerAI
from toontown.building.DistributedBuildingQueryMgrAI import DistributedBuildingQueryMgrAI
from toontown.building.DistributedTrophyMgrAI import DistributedTrophyMgrAI
from toontown.catalog.CatalogManagerAI import CatalogManagerAI
from toontown.catalog.PopularItemManagerAI import PopularItemManagerAI
from toontown.coghq import CountryClubManagerAI
from toontown.coghq import FactoryManagerAI
from toontown.coghq import LawOfficeManagerAI
@ -130,7 +129,6 @@ class ToontownAIRepository(ToontownInternalRepository):
self.estateManager.generateWithRequired(2)
self.catalogManager = CatalogManagerAI(self)
self.catalogManager.generateWithRequired(2)
self.popularItemManager = PopularItemManagerAI(self)
self.deliveryManager = self.generateGlobalObject(
OTP_DO_ID_TOONTOWN_DELIVERY_MANAGER, 'DistributedDeliveryManager')
if self.wantPets:

View file

@ -1,21 +0,0 @@
from pandac.PandaModules import NodePath
from direct.gui.DirectButton import DirectButton
from toontown.catalog import CatalogGlobals
class CatalogArrowButton(NodePath):
def __init__(self, parent, nodeName, clickEvent):
NodePath.__init__(self, parent.attachNewNode(nodeName))
self.clickEvent = clickEvent
self.normalNode = CatalogGlobals.CatalogNodePath.find('**/arrow_UP_'+nodeName).copyTo(self)
self.clickedNode = CatalogGlobals.CatalogNodePath.find('**/arrow_DN_'+nodeName).copyTo(self)
self.hoverNode = CatalogGlobals.CatalogNodePath.find('**/arrow_OVR_'+nodeName).copyTo(self)
self.arrowButton = DirectButton(parent=self, relief=None, image=(self.normalNode, self.clickedNode, self.hoverNode), command=self.clickEvent)
def cleanup(self):
self.arrowButton.destroy()
NodePath.removeNode(self)

View file

@ -0,0 +1,93 @@
from pandac.PandaModules import *
class CatalogChatBalloon:
TEXT_SHIFT = (0.1, -0.05, 1.1)
TEXT_SHIFT_REVERSED = -0.05
TEXT_SHIFT_PROP = 0.08
NATIVE_WIDTH = 10.0
MIN_WIDTH = 2.5
MIN_HEIGHT = 1
BUBBLE_PADDING = 0.3
BUBBLE_PADDING_PROP = 0.05
BUTTON_SCALE = 6
BUTTON_SHIFT = (-0.2, 0, 0.6)
FRAME_SHIFT = (0.2, 1.4)
def __init__(self, model):
self.model = model
def generate(self, text, font, textColor=(0,0,0,1), balloonColor=(1,1,1,1),
wordWrap = 10.0, button=None, reversed=False):
root = NodePath('balloon')
# Add balloon geometry:
balloon = self.model.copyTo(root)
top = balloon.find('**/top')
middle = balloon.find('**/middle')
bottom = balloon.find('**/bottom')
balloon.setColor(balloonColor)
if balloonColor[3] < 1.0:
balloon.setTransparency(1)
# Render the text into a TextNode, using the font:
t = root.attachNewNode(TextNode('text'))
t.node().setFont(font)
t.node().setWordwrap(wordWrap)
t.node().setText(text)
t.node().setTextColor(textColor)
width, height = t.node().getWidth(), t.node().getHeight()
# Turn off depth write for the text: The place in the depth buffer is
# held by the chat bubble anyway, and the text renders after the bubble
# so there's no risk of the bubble overwriting the text's pixels.
t.setAttrib(DepthWriteAttrib.make(0))
t.setPos(self.TEXT_SHIFT)
t.setX(t, self.TEXT_SHIFT_PROP*width)
t.setZ(t, height)
if reversed:
# The nametag code wants the text on the left side of the axis,
# rather than on the right side. Therefore, we move the text to the
# opposite side:
t.setX(self.TEXT_SHIFT_REVERSED - self.TEXT_SHIFT_PROP*width - width)
# Give the chat bubble a button, if one is requested:
if button:
np = button.copyTo(root)
np.setPos(t, width, 0, -height)
np.setPos(np, self.BUTTON_SHIFT)
np.setScale(self.BUTTON_SCALE)
# Set a minimum width and height for short or empty messages
if width < self.MIN_WIDTH:
width = self.MIN_WIDTH
if reversed:
t.setX(t, -width/2.0)
else:
t.setX(t, width/2.0)
t.node().setAlign(TextNode.ACenter)
if height < self.MIN_HEIGHT:
height = self.MIN_HEIGHT
t.setX(t, height/2.0)
t.node().setAlign(TextNode.ACenter)
# Set the balloon's size:
width *= 1+self.BUBBLE_PADDING_PROP
width += self.BUBBLE_PADDING
balloon.setSx(width/self.NATIVE_WIDTH)
if reversed:
balloon.setSx(-balloon.getSx())
balloon.setTwoSided(True) # Render the backface of the balloon
middle.setSz(height)
top.setZ(top, height-1)
# Calculate the frame occupied by the balloon:
left, bottom = self.FRAME_SHIFT
if reversed:
left = -left - width
frame = (left, left+width, bottom, bottom+height+1)
return root, frame

View file

@ -27,9 +27,6 @@ class CatalogChatItem(CatalogItem.CatalogItem):
def getDisplayName(self):
return OTPLocalizer.CustomSCStrings[self.customIndex]
def getDeliveryTime(self):
return 0
def recordPurchase(self, avatar, optional):
if avatar.customMessages.count(self.customIndex) != 0:
@ -103,6 +100,7 @@ class CatalogChatItem(CatalogItem.CatalogItem):
if status == 'pick':
self.mailbox.acceptItem(self, self.index, self.callback, pickedMessage)
else:
print 'picker canceled'
self.callback(ToontownGlobals.P_UserCancelled, None, self.index)
self.messagePicker.hide()
self.messagePicker.destroy()
@ -121,7 +119,7 @@ class CatalogChatItem(CatalogItem.CatalogItem):
del self.phone
def getPicture(self, avatar):
chatBalloon = loader.loadModel('phase_3/models/props/chatbox.bam')
chatBalloon = loader.loadModel('phase_3/models/props/chatbox')
chatBalloon.find('**/top').setPos(1, 0, 5)
chatBalloon.find('**/middle').setScale(1, 1, 3)
frame = self.makeFrame()

View file

@ -356,7 +356,7 @@ class CatalogClothingItem(CatalogItem.CatalogItem):
if dna.topTex == defn[0] and dna.topTexColor == defn[2][self.colorIndex][0] and dna.sleeveTex == defn[1] and dna.sleeveTexColor == defn[2][self.colorIndex][1]:
return 1
l = avatar.clothesTopsList
for i in xrange(0, len(l), 4):
for i in range(0, len(l), 4):
if l[i] == defn[0] and l[i + 1] == defn[2][self.colorIndex][0] and l[i + 2] == defn[1] and l[i + 3] == defn[2][self.colorIndex][1]:
return 1
@ -365,7 +365,7 @@ class CatalogClothingItem(CatalogItem.CatalogItem):
if dna.botTex == defn[0] and dna.botTexColor == defn[1][self.colorIndex]:
return 1
l = avatar.clothesBottomsList
for i in xrange(0, len(l), 2):
for i in range(0, len(l), 2):
if l[i] == defn[0] and l[i + 1] == defn[1][self.colorIndex]:
return 1
@ -427,6 +427,9 @@ class CatalogClothingItem(CatalogItem.CatalogItem):
avatar.d_catalogGenClothes()
return ToontownGlobals.P_ItemAvailable
def getDeliveryTime(self):
return 1
def getPicture(self, avatar):
from toontown.toon import Toon
self.hasPicture = True
@ -594,7 +597,7 @@ def getAllClothes(*clothingTypes):
for clothingType in clothingTypes:
base = CatalogClothingItem(clothingType, 0)
list.append(base)
for n in xrange(1, len(base.getColorChoices())):
for n in range(1, len(base.getColorChoices())):
list.append(CatalogClothingItem(clothingType, n))
return list

View file

@ -115,7 +115,7 @@ class CatalogFlooringItem(CatalogSurfaceItem):
if versionNumber < 4 or store & CatalogItem.Customization:
self.colorIndex = di.getUint8()
else:
self.colorIndex = None
self.colorIndex = 0
wtype = FlooringTypes[self.patternIndex]
return
@ -123,10 +123,7 @@ class CatalogFlooringItem(CatalogSurfaceItem):
CatalogAtticItem.CatalogAtticItem.encodeDatagram(self, dg, store)
dg.addUint16(self.patternIndex)
if store & CatalogItem.Customization:
colorIndex = self.colorIndex
if self.colorIndex is None:
colorIndex = 0
dg.addUint8(colorIndex)
dg.addUint8(self.colorIndex)
def getFloorings(*indexList):
@ -142,7 +139,7 @@ def getAllFloorings(*indexList):
for index in indexList:
colors = FlooringTypes[index][FTColor]
if colors:
for n in xrange(len(colors)):
for n in range(len(colors)):
list.append(CatalogFlooringItem(index, n))
else:
@ -166,7 +163,7 @@ def getFlooringRange(fromIndex, toIndex, *otherRanges):
if patternIndex >= fromIndex and patternIndex <= toIndex:
colors = FlooringTypes[patternIndex][FTColor]
if colors:
for n in xrange(len(colors)):
for n in range(len(colors)):
list.append(CatalogFlooringItem(patternIndex, n))
else:

View file

@ -3,7 +3,6 @@ import CatalogItem
import random
from toontown.toonbase import TTLocalizer
from toontown.toonbase import ToontownGlobals
FTModelName = 0
FTColor = 1
FTColorOptions = 2
@ -19,67 +18,39 @@ FLIsTable = 32
FLPhone = 64
FLBillboard = 128
FLTrunk = 256
furnitureColors = [(0.792,
0.353,
0.29,
1.0),
(0.176,
0.592,
0.439,
1.0),
(0.439,
0.424,
0.682,
1.0),
(0.325,
0.58,
0.835,
1.0),
(0.753,
0.345,
0.557,
1.0),
(0.992,
0.843,
0.392,
1.0)]
woodColors = [(0.933,
0.773,
0.569,
1.0),
(0.9333,
0.6785,
0.055,
1.0),
(0.545,
0.451,
0.333,
1.0),
(0.541,
0.0,
0.0,
1.0),
(0.5451,
0.2706,
0.0745,
1.0),
(0.5451,
0.4118,
0.4118,
1.0)]
BankToMoney = {1300: 12000,
1310: 12000,
1320: 12000,
1330: 12000,
1340: 12000,
1350: 12000}
FLBoysOnly = 512
FLGirlsOnly = 1024
furnitureColors = [
(0.792, 0.353, 0.29, 1.0),
(0.176, 0.592, 0.439, 1.0),
(0.439, 0.424, 0.682, 1.0),
(0.325, 0.58, 0.835, 1.0),
(0.753, 0.345, 0.557, 1.0),
(0.992, 0.843, 0.392, 1.0)
]
woodColors = [
(0.933, 0.773, 0.569, 1.0),
(0.9333, 0.6785, 0.055, 1.0),
(0.545, 0.451, 0.333, 1.0),
(0.541, 0.0, 0.0, 1.0),
(0.5451, 0.2706, 0.0745, 1.0),
(0.5451, 0.4118, 0.4118, 1.0)
]
BankToMoney = {
1300: 15000,
1310: 15000,
1320: 15000,
1330: 15000,
1340: 15000,
1350: 15000
}
MoneyToBank = {}
for bankId, maxMoney in BankToMoney.items():
MoneyToBank[maxMoney] = bankId
MaxBankId = 1350
ClosetToClothes = {500: 10,
ClosetToClothes = {
500: 10,
502: 15,
504: 20,
506: 25,
@ -88,20 +59,24 @@ ClosetToClothes = {500: 10,
512: 15,
514: 20,
516: 25,
518: 50}
518: 50
}
ClothesToCloset = {}
for closetId, maxClothes in ClosetToClothes.items():
if maxClothes not in ClothesToCloset:
if not ClothesToCloset.has_key(maxClothes):
ClothesToCloset[maxClothes] = (closetId,)
else:
ClothesToCloset[maxClothes] += (closetId,)
MaxClosetIds = (508, 518)
MaxTrunkIds = (4000, 4010)
FurnitureTypes = {100: ('phase_5.5/models/estate/chairA',
None,
None,
80),
FurnitureTypes = {
100: ('phase_5.5/models/estate/chairA', # Model
None, # Color
None, # Color Options
80), # Base Price
# Flags
# Scale
105: ('phase_5.5/models/estate/chairAdesat',
None,
{0: (('**/cushion*', furnitureColors[0]), ('**/arm*', furnitureColors[0])),
@ -189,7 +164,8 @@ FurnitureTypes = {100: ('phase_5.5/models/estate/chairA',
210: ('phase_5.5/models/estate/girly_bed',
None,
None,
450),
450,
FLGirlsOnly),
220: ('phase_5.5/models/estate/bathtub_bed',
None,
None,
@ -233,7 +209,8 @@ FurnitureTypes = {100: ('phase_5.5/models/estate/chairA',
410: ('phase_5.5/models/estate/FireplaceGirlee',
None,
None,
800),
800,
FLGirlsOnly),
420: ('phase_5.5/models/estate/FireplaceRound',
None,
None,
@ -275,7 +252,7 @@ FurnitureTypes = {100: ('phase_5.5/models/estate/chairA',
None,
None,
1100,
None,
FLGirlsOnly,
None,
0.5),
491: ('phase_5.5/models/estate/tt_m_prp_int_fireplace_bugRoom',
@ -875,13 +852,13 @@ FurnitureTypes = {100: ('phase_5.5/models/estate/chairA',
4000: ('phase_5.5/models/estate/tt_m_ara_est_accessoryTrunkBoy',
None,
None,
5,
0,
FLTrunk,
0.9),
4010: ('phase_5.5/models/estate/tt_m_ara_est_accessoryTrunkGirl',
None,
None,
5,
0,
FLTrunk,
0.9),
10000: ('phase_4/models/estate/pumpkin_short',
@ -905,7 +882,8 @@ FurnitureTypes = {100: ('phase_5.5/models/estate/chairA',
None,
None,
200,
FLPainting)}
FLPainting)
}
class CatalogFurnitureItem(CatalogAtticItem.CatalogAtticItem):
@ -934,6 +912,8 @@ class CatalogFurnitureItem(CatalogAtticItem.CatalogAtticItem):
return TTLocalizer.FurnitureYourOldBank
elif self.getFlags() & FLTrunk:
return TTLocalizer.FurnitureYourOldTrunk
else:
return None
return None
def notOfferedTo(self, avatar):
@ -944,8 +924,24 @@ class CatalogFurnitureItem(CatalogAtticItem.CatalogAtticItem):
return not forBoys
else:
return forBoys
if self.forBoysOnly():
if avatar.getStyle().getGender() == 'm':
return 0
else:
return 1
elif self.forGirlsOnly():
if avatar.getStyle().getGender() == 'f':
return 0
else:
return 1
return 0
def forBoysOnly(self):
return self.getFlags() & FLBoysOnly > 0
def forGirlsOnly(self):
return self.getFlags() & FLGirlsOnly > 0
def isDeletable(self):
return self.getFlags() & (FLBank | FLCloset | FLPhone | FLTrunk) == 0
@ -1034,6 +1030,9 @@ class CatalogFurnitureItem(CatalogAtticItem.CatalogAtticItem):
avatar.b_setMaxBankMoney(self.getMaxBankMoney())
return retcode
def getDeliveryTime(self):
return 1
def getPicture(self, avatar):
model = self.loadModel()
spin = 1
@ -1104,10 +1103,7 @@ class CatalogFurnitureItem(CatalogAtticItem.CatalogAtticItem):
dg.addInt16(self.furnitureType)
if FurnitureTypes[self.furnitureType][FTColorOptions]:
if store & CatalogItem.Customization:
if self.colorOption == None:
dg.addUint8(0)
else:
dg.addUint8(self.colorOption)
dg.addUint8(self.colorOption)
def getAcceptItemErrorText(self, retcode):
if retcode == ToontownGlobals.P_AlreadyOwnBiggerCloset:
@ -1168,15 +1164,18 @@ def getAllClosets():
def get50ItemTrunk(avatar, duplicateItems):
if avatar.getStyle().getGender() == 'm':
index = 0
else:
index = 1
trunkId = MaxTrunkIds[index]
item = CatalogFurnitureItem(trunkId)
if item in avatar.onOrder or item in avatar.mailboxContents:
return None
return item
if config.GetBool('want-accessories', 1):
if avatar.getStyle().getGender() == 'm':
index = 0
else:
index = 1
trunkId = MaxTrunkIds[index]
item = CatalogFurnitureItem(trunkId)
if item in avatar.onOrder or item in avatar.mailboxContents:
return None
return item
# If we get here, we probably don't want accessories yet.
return None
def getMaxTrunks():
@ -1190,7 +1189,7 @@ def getMaxTrunks():
def getAllFurnitures(index):
list = []
colors = FurnitureTypes[index][FTColorOptions]
for n in xrange(len(colors)):
for n in range(len(colors)):
list.append(CatalogFurnitureItem(index, n))
return list

View file

@ -1,206 +0,0 @@
from pandac.PandaModules import NodePath, Vec4
from direct.showbase.DirectObject import DirectObject
from direct.gui.DirectButton import DirectButton
from toontown.catalog.CatalogTabButton import CatalogTabButton
from toontown.catalog.CatalogArrowButton import CatalogArrowButton
from toontown.catalog.CatalogRadioButton import CatalogRadioButton
from toontown.catalog import CatalogGlobals
from toontown.toonbase import ToontownGlobals
from toontown.toonbase import TTLocalizer
class CatalogGUI(NodePath, DirectObject):
def __init__(self, phone, doneEvent=None):
NodePath.__init__(self, aspect2d.attachNewNode('CatalogGUI'))
DirectObject.__init__(self)
CatalogGlobals.CatalogNodePath.find('**/CATALOG_GUI_BKGD').copyTo(self)
self.setScale(CatalogGlobals.CatalogBKGDScale)
self.phone = phone
self.doneEvent = doneEvent
self.arrowButtons = {}
self.createArrowButtons()
self.currentTab = None
self.tabButtons = {}
self.createTabButtons()
self.radioButtons = []
# self.createRadioButtons()
self.activePage = 0
self.gifting = -1
guiItems = loader.loadModel('phase_5.5/models/gui/catalog_gui')
hangupGui = guiItems.find('**/hangup')
hangupRolloverGui = guiItems.find('**/hangup_rollover')
self.hangup = DirectButton(self,
relief=None,
pos=(-0.158, 0, 0.17),
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.hangup.reparentTo(base.a2dBottomRight)
guiItems.removeNode()
def setCurrentTab(self, tab):
self.currentTab = tab
def getCurrentTab(self):
return self.currentTab
def setActivePage(self, activePage):
self.activePage = activePage
def getActivePage(self):
return self.activePage
def createTabButtons(self):
# We need to create the tabs in reverse order...
self.tabButtons['SPECIAL_TAB'] = CatalogTabButton(self, 'BTN7',
self.specialTabClicked)
self.tabButtons['NAMETAG_TAB'] = CatalogTabButton(self, 'BTN6',
self.nametagTabClicked)
self.tabButtons['CLOTHING_TAB'] = CatalogTabButton(self, 'BTN5',
self.clothingTabClicked)
self.tabButtons['PHRASES_TAB'] = CatalogTabButton(self, 'BTN4',
self.phrasesTabClicked)
self.tabButtons['EMOTE_TAB'] = CatalogTabButton(self, 'BTN3',
self.emoteTabClicked)
self.tabButtons['FURNITURE_TAB'] = CatalogTabButton(self, 'BTN2',
self.furnitureTabClicked)
self.tabButtons['POPULAR_TAB'] = CatalogTabButton(self, 'BTN1',
self.popularTabClicked)
tabList = []
for tab in self.tabButtons:
tabList.append(self.tabButtons[tab])
for tab in self.tabButtons:
self.tabButtons[tab].setOtherTabs(tabList)
def popularTabClicked(self):
messenger.send('wakeup')
def furnitureTabClicked(self):
messenger.send('wakeup')
def emoteTabClicked(self):
messenger.send('wakeup')
def phrasesTabClicked(self):
messenger.send('wakeup')
def clothingTabClicked(self):
messenger.send('wakeup')
def nametagTabClicked(self):
messenger.send('wakeup')
def specialTabClicked(self):
messenger.send('wakeup')
def createArrowButtons(self):
self.arrowButtons['LEFT_ARROW'] = CatalogArrowButton(self, 'LT',
self.leftArrowClicked)
self.arrowButtons['RIGHT_ARROW'] = CatalogArrowButton(self, 'RT',
self.rightArrowClicked)
def leftArrowClicked(self):
messenger.send('wakeup')
if self.currentTab:
self.currentTab.moveLeft()
def rightArrowClicked(self):
messenger.send('wakeup')
if self.currentTab:
self.currentTab.moveRight()
def createRadioButtons(self):
byNameRadioButton = CatalogRadioButton(self, 'ByName',
self.byNameRadioButtonClicked)
byCostRadioButton = CatalogRadioButton(self, 'ByCost',
self.byCostRadioButtonClicked)
self.radioButtons.append(byNameRadioButton)
self.radioButtons.append(byCostRadioButton)
for radioButton in self.radioButtons:
radioButton.setOthers(self.radioButtons)
byNameRadioButton.enable()
def byNameRadioButtonClicked(self):
pass
def byCostRadioButtonClicked(self):
pass
def enableBothArrows(self):
for arrow in self.arrowButtons:
self.arrowButtons[arrow].show()
def disableBothArrows(self):
for arrow in self.arrowButtons:
self.arrowButtons[arrow].hide()
def disableLeftArrow(self):
self.arrowButtons['LEFT_ARROW'].hide()
def disableRightArrow(self):
self.arrowButtons['RIGHT_ARROW'].hide()
def show(self):
self.accept('CatalogItemPurchaseRequest', self.__handlePurchaseRequest)
base.setBackgroundColor(Vec4(0.570312, 0.449219, 0.164062, 1.0))
NodePath.show(self)
render.hide()
def hide(self):
self.ignore('CatalogItemPurchaseRequest')
base.setBackgroundColor(ToontownGlobals.DefaultBackgroundColor)
NodePath.hide(self)
render.show()
def unload(self):
self.hide()
for arrow in self.arrowButtons:
self.arrowButtons[arrow].cleanup()
for tab in self.tabButtons:
self.tabButtons[tab].cleanup()
for radio in self.radioButtons:
radio.cleanup()
self.hangup.destroy()
self.destroy()
def destroy(self):
NodePath.removeNode(self)
def hangUp(self):
self.unload()
print self.doneEvent
messenger.send(self.doneEvent)
def __handlePurchaseRequest(self, item):
item.requestPurchase(self.phone, self.__handlePurchaseResponse)
def __handlePurchaseResponse(self, retCode, item):
self.lockItems()
def lockItems(self):
for tab in self.tabButtons:
self.tabButtons[tab].lockItems()
def updateItems(self):
for tab in self.tabButtons:
self.tabButtons[tab].updateItems(self.gifting)

View file

@ -45,11 +45,12 @@ class CatalogGardenItem(CatalogItem.CatalogItem):
def recordPurchase(self, avatar, optional):
if avatar:
avatar.addGardenItem(self.gardenIndex, self.numItems)
return ToontownGlobals.P_ItemAvailable
if 1:
return ToontownGlobals.P_ItemAvailable
def getPicture(self, avatar):
photoModel = GardenGlobals.Specials[self.gardenIndex]['photoModel']
if 'photoAnimation' in GardenGlobals.Specials[self.gardenIndex]:
if GardenGlobals.Specials[self.gardenIndex].has_key('photoAnimation'):
modelPath = photoModel + GardenGlobals.Specials[self.gardenIndex]['photoAnimation'][0]
animationName = GardenGlobals.Specials[self.gardenIndex]['photoAnimation'][1]
animationPath = photoModel + animationName
@ -122,6 +123,12 @@ class CatalogGardenItem(CatalogItem.CatalogItem):
def getRequestPurchaseErrorTextTimeout(self):
return 20
def getDeliveryTime(self):
if self.gardenIndex == GardenGlobals.GardenAcceleratorSpecial:
return 1
else:
return 0
def getPurchaseLimit(self):
if self.gardenIndex == GardenGlobals.GardenAcceleratorSpecial:
return 1
@ -153,7 +160,7 @@ class CatalogGardenItem(CatalogItem.CatalogItem):
result = False
if canPlant < numBeansRequired:
result = True
if not result and self.gardenIndex in GardenGlobals.Specials and 'minSkill' in GardenGlobals.Specials[self.gardenIndex]:
if not result and GardenGlobals.Specials.has_key(self.gardenIndex) and GardenGlobals.Specials[self.gardenIndex].has_key('minSkill'):
minSkill = GardenGlobals.Specials[self.gardenIndex]['minSkill']
if avatar.shovelSkill < minSkill:
result = True

View file

@ -30,10 +30,13 @@ class CatalogGardenStarterItem(CatalogItem.CatalogItem):
return TTLocalizer.GardenStarterTypeName
def recordPurchase(self, avatar, optional):
print 'rental-- record purchase'
if avatar:
estate = simbase.air.estateManager._lookupEstate(avatar.doId)
print 'starter garden-- has avater'
estate = simbase.air.estateManager.toon2estate.get(avatar)
if estate:
estate.placeStarterGarden(avatar.doId)
print 'starter garden-- has estate'
estate.placeStarterGarden(avatar)
else:
print 'starter garden-- something not there'
return ToontownGlobals.P_ItemAvailable
@ -70,6 +73,9 @@ class CatalogGardenStarterItem(CatalogItem.CatalogItem):
def encodeDatagram(self, dg, store):
CatalogItem.CatalogItem.encodeDatagram(self, dg, store)
def getDeliveryTime(self):
return 1
def isRental(self):
return 0

View file

@ -1,3 +1,4 @@
from direct.directnotify import DirectNotifyGlobal
import CatalogItem
import CatalogItemList
from CatalogFurnitureItem import CatalogFurnitureItem, nextAvailableCloset, getAllClosets, get50ItemCloset, getMaxClosets, get50ItemTrunk
@ -39,20 +40,25 @@ MetaItems = {100: getAllClothes(101, 102, 103, 104, 105, 106, 107, 108, 109, 109
2921: getChatRange(12050, 12099),
2930: getChatRange(13000, 13099),
2940: getChatRange(14000, 14099),
3000: getWallpapers(1000, 1100, 1200, 1300, 1400, 1500, 1600, 1700, 1800, 1900, 2000, 2100),
3010: getWallpapers(2200, 2300, 2400, 2500, 2600, 2700, 2800),
3020: getWallpapers(2900, 3000, 3100, 3200, 3300, 3400, 3500, 3600),
3030: getWallpapers(3700, 3800, 3900),
3500: getAllWainscotings(1000, 1010),
3510: getAllWainscotings(1020),
3520: getAllWainscotings(1030),
3530: getAllWainscotings(1040),
4000: getFloorings(1000, 1010, 1020, 1030, 1040, 1050, 1060, 1070, 1080, 1090, 1100),
4010: getFloorings(1110, 1120, 1130),
4020: getFloorings(1140, 1150, 1160, 1170, 1180, 1190),
4500: getAllMouldings(1000, 1010),
4510: getAllMouldings(1020, 1030, 1040),
4520: getAllMouldings(1070),
5000: getAllPetTricks()}
MetaItemChatKeysSold = (2000,
2010,
@ -396,22 +402,34 @@ MonthlySchedule = ((7,
1,
9,
30,
(CatalogGardenItem(135, 1),)),
(
# CatalogGardenItem(135, 1)
)
),
(1,
1,
1,
31,
(CatalogGardenItem(135, 1),)),
(
# CatalogGardenItem(135, 1)
)
),
(4,
1,
4,
30,
(CatalogGardenItem(135, 1),)),
(
# CatalogGardenItem(135, 1)
)
),
(6,
1,
6,
30,
(CatalogGardenItem(135, 1),)),
(
# CatalogGardenItem(135, 1)
)
),
(6,
26,
7,
@ -431,8 +449,8 @@ MonthlySchedule = ((7,
4,
(CatalogFurnitureItem(680),
CatalogFurnitureItem(681),
CatalogGardenItem(130, 1),
CatalogGardenItem(131, 1),
# CatalogGardenItem(130, 1),
# CatalogGardenItem(131, 1),
CatalogAnimatedFurnitureItem(10020),
CatalogFurnitureItem(10030, 0))),
(12,
@ -506,29 +524,30 @@ MonthlySchedule = ((7,
1,
12,
31,
(CatalogGardenItem(100, 1),
CatalogGardenItem(101, 1),
CatalogGardenItem(103, 1),
CatalogGardenItem(104, 1),
(
#CatalogGardenItem(100, 1), #GARDENS
#CatalogGardenItem(101, 1),
#CatalogGardenItem(103, 1),
#CatalogGardenItem(104, 1),
CatalogToonStatueItem(105, endPoseIndex=108),
#CatalogRentalItem(1, 2880, 1000), # TODO
CatalogGardenStarterItem(), # TODO
CatalogRentalItem(1, 2880, 1000),
#CatalogGardenStarterItem(), # We don't want Gardens yet.
CatalogNametagItem(100),
CatalogNametagItem(0),
CatalogClothingItem(1608, 0, 0),
CatalogClothingItem(1605, 0, 0),
CatalogClothingItem(1602, 0, 0),
CatalogClothingItem(1607, 0, 0),
CatalogClothingItem(1604, 0, 0),
CatalogClothingItem(1601, 0, 0),
CatalogClothingItem(1606, 0, 0),
CatalogClothingItem(1603, 0, 0),
CatalogClothingItem(1600, 0, 0),
CatalogEmoteItem(20, 0),
CatalogEmoteItem(21, 0),
CatalogEmoteItem(22, 0),
CatalogEmoteItem(23, 0),
CatalogEmoteItem(24, 0))),
CatalogClothingItem(1608, 0, 90),
CatalogClothingItem(1605, 0, 90),
CatalogClothingItem(1602, 0, 90),
CatalogClothingItem(1607, 0, 60),
CatalogClothingItem(1604, 0, 60),
CatalogClothingItem(1601, 0, 60),
CatalogClothingItem(1606, 0, 30),
CatalogClothingItem(1603, 0, 30),
CatalogClothingItem(1600, 0, 30),
CatalogEmoteItem(20, 30),
CatalogEmoteItem(21, 45),
CatalogEmoteItem(22, 60),
CatalogEmoteItem(23, 75),
CatalogEmoteItem(24, 90))),
(5,
26,
6,
@ -596,8 +615,8 @@ MonthlySchedule = ((7,
((3, 2910),
CatalogFurnitureItem(680),
CatalogFurnitureItem(681),
CatalogGardenItem(130, 1),
CatalogGardenItem(131, 1),
#CatalogGardenItem(130, 1), #MORE GARDEN STUFF
#CatalogGardenItem(131, 1),
CatalogAnimatedFurnitureItem(10020),
CatalogFurnitureItem(10030, 0),
CatalogWallpaperItem(11000),
@ -1481,7 +1500,7 @@ WeeklySchedule = ((100,
nextAvailablePole))
class CatalogGenerator:
notify = directNotify.newCategory('CatalogGenerator')
notify = DirectNotifyGlobal.directNotify.newCategory('CatalogGenerator')
def __init__(self):
self.__itemLists = {}
@ -1541,7 +1560,7 @@ class CatalogGenerator:
lastBackCatalog = avatar.backCatalog[:]
thisWeek = min(len(WeeklySchedule), week - 1)
lastWeek = min(len(WeeklySchedule), previousWeek)
for week in xrange(thisWeek, lastWeek, -1):
for week in range(thisWeek, lastWeek, -1):
self.notify.debug('Adding items from week %s to back catalog' % week)
schedule = WeeklySchedule[week - 1]
if not isinstance(schedule, Sale):
@ -1567,7 +1586,7 @@ class CatalogGenerator:
return itemLists
else:
self.__releasedItemLists.clear()
testDaysAhead = simbase.config.GetInt('test-server-holiday-days-ahead', 0)
testDaysAhead = config.GetInt('test-server-holiday-days-ahead', 0)
nowtuple = time.localtime(weekStart * 60 + testDaysAhead * 24 * 60 * 60)
year = nowtuple[0]
month = nowtuple[1]
@ -1597,7 +1616,7 @@ class CatalogGenerator:
itemLists = self.__itemLists.get(dayNumber)
if itemLists != None:
return itemLists
testDaysAhead = simbase.config.GetInt('test-server-holiday-days-ahead', 0)
testDaysAhead = config.GetInt('test-server-holiday-days-ahead', 0)
nowtuple = time.localtime(weekStart * 60 + testDaysAhead * 24 * 60 * 60)
year = nowtuple[0]
month = nowtuple[1]
@ -1646,7 +1665,7 @@ class CatalogGenerator:
selection.append(item)
elif item != None:
list = item[:]
for i in xrange(chooseCount):
for i in range(chooseCount):
if len(list) == 0:
return selection
item = self.__chooseFromList(avatar, list, duplicateItems)
@ -1722,7 +1741,7 @@ class CatalogGenerator:
def generateScheduleDictionary(self):
sched = {}
for index in xrange(len(WeeklySchedule)):
for index in range(len(WeeklySchedule)):
week = index + 1
schedule = WeeklySchedule[index]
if isinstance(schedule, Sale):
@ -1775,7 +1794,7 @@ class CatalogGenerator:
return
def __recordScheduleItem(self, sched, weekCode, maybeWeekCode, item):
if item not in sched:
if not sched.has_key(item):
sched[item] = [[], []]
if weekCode != None:
sched[item][0].append(weekCode)

View file

@ -1,19 +0,0 @@
CatalogNodePath = loader.loadModel('phase_3/models/gui/catalog_gui')
CatalogBKGDScale = 0.60
ItemPageTextLoc = (-1.7, 0.0, 1.36)
ItemPageTextScale = 0.1
CatalogPropPos = [
(-1.3, 0.0, 0.8),
(-0.6, 0.0, 0.8),
(-1.3, 0.0, 0.1),
(-0.6, 0.0, 0.1),
(-1.3, 0.0, -0.6),
(-0.6, 0.0, -0.6),
(0.45, 0.0, 0.8),
(1.15, 0.0, 0.8),
(0.45, 0.0, 0.1),
(1.15, 0.0, 0.1),
(0.45, 0.0, -0.6),
(1.15, 0.0, -0.6)
]

View file

@ -1,3 +1,4 @@
from direct.directnotify import DirectNotifyGlobal
from pandac.PandaModules import *
from toontown.toonbase import TTLocalizer
from toontown.toonbase import ToontownGlobals
@ -6,8 +7,6 @@ from direct.distributed.PyDatagram import PyDatagram
from direct.distributed.PyDatagramIterator import PyDatagramIterator
import types
import sys
CatalogReverseType = None
CatalogItemVersion = 8
CatalogBackorderMarkup = 1.2
@ -23,9 +22,8 @@ CatalogTypeBackorder = 2
CatalogTypeMonthly = 3
CatalogTypeLoyalty = 4
class CatalogItem:
notify = directNotify.newCategory('CatalogItem')
notify = DirectNotifyGlobal.directNotify.newCategory('CatalogItem')
def __init__(self, *args, **kw):
self.saleItem = 0
@ -130,10 +128,13 @@ class CatalogItem:
return 0
def setLoyaltyRequirement(self, days):
self.loyaltyDays = 0
self.loyaltyDays = days
def loyaltyRequirement(self):
return 0
if not hasattr(self, 'loyaltyDays'):
return 0
else:
return self.loyaltyDays
def getPrice(self, catalogType):
if catalogType == CatalogTypeBackorder:
@ -153,7 +154,7 @@ class CatalogItem:
return int(self.getBasePrice() * CatalogSaleMarkdown)
def getDeliveryTime(self):
return 1
return 0
def getPicture(self, avatar):
self.hasPicture = True
@ -208,6 +209,7 @@ class CatalogItem:
mailbox.acceptItem(self, index, callback)
def discardItem(self, mailbox, index, callback):
print 'Item discardItem'
mailbox.discardItem(self, index, callback)
def acceptItemCleanup(self):
@ -335,13 +337,13 @@ class CatalogItem:
tex = loader.loadTexture(color)
tex.setMinfilter(Texture.FTLinearMipmapLinear)
tex.setMagfilter(Texture.FTLinear)
for i in xrange(matches.getNumPaths()):
for i in range(matches.getNumPaths()):
matches.getPath(i).setTexture(tex, 1)
else:
needsAlpha = color[3] != 1
color = VBase4(color[0], color[1], color[2], color[3])
for i in xrange(matches.getNumPaths()):
for i in range(matches.getNumPaths()):
matches.getPath(i).setColorScale(color, 1)
if needsAlpha:
matches.getPath(i).setTransparency(1)

View file

@ -1,33 +0,0 @@
from toontown.catalog.CatalogItemPage import CatalogItemPage
class CatalogItemListGUI:
def __init__(self, catalogGui):
self.catalogGui = catalogGui
self.items = {}
self.pages = []
def getPages(self):
return self.pages
def addItem(self, item, category):
if category not in self.items:
self.items[category] = []
if not item in self.items[category]:
self.items[category].append(item)
def generatePages(self):
for category in self.items.keys():
pageNum = 1
currPage = CatalogItemPage(self.catalogGui, category, pageNum)
for (x, item) in enumerate(self.items[category]):
if x % 12 == 0 and x != 0:
self.pages.append(currPage)
pageNum += 1
currPage = CatalogItemPage(self.catalogGui, category, pageNum)
currPage.addCatalogItem(item)
if not currPage in self.pages:
self.pages.append(currPage)
for page in self.pages:
page.generatePage()
return self.pages

View file

@ -1,56 +0,0 @@
from pandac.PandaModules import NodePath, TextNode
from toontown.catalog import CatalogGlobals
from toontown.catalog.CatalogItemPanel import CatalogItemPanel
from toontown.toonbase import ToontownGlobals
class CatalogItemPage(NodePath):
def __init__(self, parent, category, pageNum):
NodePath.__init__(self, parent.attachNewNode(category))
self.parent = parent
self.pageNum = pageNum
self.category = category
self.catalogItems = []
self.itemFrames = []
self.textNode = None
def addCatalogItem(self, item):
if not item in self.catalogItems:
self.catalogItems.append(item)
def setCatalogItems(self, catalogItems):
self.catalogItems = catalogItems
def generatePage(self):
pageText = '%s - %s' % (self.category, self.pageNum)
self.textNode = TextNode(pageText)
self.textNode.setText(pageText)
self.textNode.setFont(ToontownGlobals.getInterfaceFont())
self.textNode = self.attachNewNode(self.textNode)
self.textNode.setPos(*CatalogGlobals.ItemPageTextLoc)
self.textNode.setScale(CatalogGlobals.ItemPageTextScale)
self.textNode.setColor(0, 0, 0, 1)
for (x, item) in enumerate(self.catalogItems):
itemFrame = CatalogItemPanel(parent=self, parentCatalogScreen=self.parent, item=item)
itemFrame.load()
itemFrame.setPos(*CatalogGlobals.CatalogPropPos[x])
self.itemFrames.append(itemFrame)
def lockItems(self):
for itemFrame in self.itemFrames:
itemFrame.lockItem()
def updateItems(self, gifting):
for itemFrame in self.itemFrames:
itemFrame.updateButtons(gifting)
def cleanup(self):
for item in self.catalogItems:
if hasattr(item, 'destroy'):
item.destroy()
for itemFrame in self.itemFrames:
itemFrame.destroy()
NodePath.removeNode(self)

View file

@ -1,80 +0,0 @@
from CatalogFurnitureItem import CatalogFurnitureItem # Furniture
from CatalogChatItem import CatalogChatItem # Phrase
from CatalogClothingItem import CatalogClothingItem # Clothing
from CatalogEmoteItem import CatalogEmoteItem # Emotion
from CatalogWallpaperItem import CatalogWallpaperItem # Furniture
from CatalogWindowItem import CatalogWindowItem # Furniture
from CatalogFlooringItem import CatalogFlooringItem # Furniture
from CatalogMouldingItem import CatalogMouldingItem # Furniture
from CatalogWainscotingItem import CatalogWainscotingItem # Furniture
from CatalogPoleItem import CatalogPoleItem # Special
from CatalogPetTrickItem import CatalogPetTrickItem # Special
from CatalogBeanItem import CatalogBeanItem # Furniture
from CatalogGardenItem import CatalogGardenItem # Special
from CatalogRentalItem import CatalogRentalItem # Special
from CatalogGardenStarterItem import CatalogGardenStarterItem # Special
from CatalogNametagItem import CatalogNametagItem # Nametag
from CatalogToonStatueItem import CatalogToonStatueItem # Special
from CatalogAnimatedFurnitureItem import CatalogAnimatedFurnitureItem # Furniture
from CatalogAccessoryItem import CatalogAccessoryItem # Clothing
class CatalogItemSorter:
SPECIAL_ITEMS = (CatalogToonStatueItem, CatalogPoleItem, CatalogGardenStarterItem,
CatalogGardenItem, CatalogRentalItem, CatalogPetTrickItem)
NAMETAG_ITEMS = (CatalogNametagItem,)
PHRASE_ITEMS = (CatalogChatItem,)
CLOTHING_ITEMS = (CatalogAccessoryItem, CatalogClothingItem)
EMOTION_ITEMS = (CatalogEmoteItem,)
FURNITURE_ITEMS = (CatalogFurnitureItem, CatalogWallpaperItem, CatalogWindowItem,
CatalogFlooringItem, CatalogMouldingItem, CatalogWainscotingItem,
CatalogBeanItem, CatalogAnimatedFurnitureItem)
def __init__(self, itemList):
self.itemList = itemList
self.sortedItems = {
'UNSORTED': [],
'SPECIAL': [],
'CLOTHING': [],
'PHRASES': [],
'EMOTIONS': [],
'FURNITURE': [],
'NAMETAG': []
}
def sortItems(self):
for item in self.itemList:
if self.__isSpecial(item):
self.sortedItems['SPECIAL'].append(item)
elif self.__isNametag(item):
self.sortedItems['NAMETAG'].append(item)
elif self.__isClothing(item):
self.sortedItems['CLOTHING'].append(item)
elif self.__isPhrase(item):
self.sortedItems['PHRASES'].append(item)
elif self.__isEmotion(item):
self.sortedItems['EMOTIONS'].append(item)
elif self.__isFurniture(item):
self.sortedItems['FURNITURE'].append(item)
else:
self.sortedItems['UNSORTED'].append(item)
return self.sortedItems
def __isSpecial(self, item):
return isinstance(item, CatalogItemSorter.SPECIAL_ITEMS)
def __isClothing(self, item):
return isinstance(item, CatalogItemSorter.CLOTHING_ITEMS)
def __isPhrase(self, item):
return isinstance(item, CatalogItemSorter.PHRASE_ITEMS)
def __isNametag(self, item):
return isinstance(item, CatalogItemSorter.NAMETAG_ITEMS)
def __isEmotion(self, item):
return isinstance(item, CatalogItemSorter.EMOTION_ITEMS)
def __isFurniture(self, item):
return isinstance(item, CatalogItemSorter.FURNITURE_ITEMS)

View file

@ -1,39 +1,31 @@
from direct.distributed.DistributedObject import DistributedObject
from toontown.catalog.CatalogItemList import CatalogItemList
import time
from direct.distributed import DistributedObject
from direct.directnotify import DirectNotifyGlobal
class CatalogManager(DistributedObject):
notify = directNotify.newCategory('CatalogManager')
class CatalogManager(DistributedObject.DistributedObject):
notify = DirectNotifyGlobal.directNotify.newCategory('CatalogManager')
neverDisable = 1
def __init__(self, cr):
DistributedObject.__init__(self, cr)
self.popularItems = None
DistributedObject.DistributedObject.__init__(self, cr)
def generate(self):
if base.cr.catalogManager != None:
base.cr.catalogManager.delete()
base.cr.catalogManager = self
DistributedObject.generate(self)
DistributedObject.DistributedObject.generate(self)
if hasattr(base.localAvatar, 'catalogScheduleNextTime') and base.localAvatar.catalogScheduleNextTime == 0:
self.d_startCatalog()
return
def disable(self):
base.cr.catalogManager = None
DistributedObject.disable(self)
DistributedObject.DistributedObject.disable(self)
return
def delete(self):
base.cr.catalogManager = None
DistributedObject.delete(self)
DistributedObject.DistributedObject.delete(self)
return
def d_startCatalog(self):
self.sendUpdate('startCatalog')
def fetchPopularItems(self):
self.sendUpdate('fetchPopularItems')
def setPopularItems(self, popularItems):
self.popularItems = CatalogItemList(popularItems)
messenger.send('PopularItemsSet')
self.sendUpdate('startCatalog', [])

View file

@ -1,25 +1,22 @@
from direct.directnotify import DirectNotifyGlobal
from direct.distributed.DistributedObjectAI import DistributedObjectAI
from CatalogGenerator import CatalogGenerator
from toontown.toonbase import ToontownGlobals
import time
class CatalogManagerAI(DistributedObjectAI):
notify = directNotify.newCategory('CatalogManagerAI')
notify = DirectNotifyGlobal.directNotify.newCategory("CatalogManagerAI")
def __init__(self, air):
DistributedObjectAI.__init__(self, air)
self.catalogGenerator = CatalogGenerator()
def startCatalog(self):
avId = self.air.getAvatarIdFromSender()
self.acceptOnce('generate-%s' % avId, self.deliverCatalog)
def deliverCatalog(self, avId):
av = self.air.doId2do.get(avId)
if av:
self.deliverCatalogFor(av)
self.deliverCatalogFor(av)
def deliverCatalogFor(self, av):
monthlyCatalog = self.catalogGenerator.generateMonthlyCatalog(av, time.time() / 60)
newWeek = (av.catalogScheduleCurrentWeek + 1) % ToontownGlobals.CatalogNumWeeks
@ -28,8 +25,7 @@ class CatalogManagerAI(DistributedObjectAI):
av.b_setCatalog(monthlyCatalog, weeklyCatalog, backCatalog)
av.b_setCatalogSchedule(newWeek, int((time.time() + 604800)/60))
av.b_setCatalogNotify(ToontownGlobals.NewItems, av.mailboxNotify)
def isItemReleased(self, accessory):
return 1
def fetchPopularItems(self):
avId = self.air.getAvatarIdFromSender()
popularItems = self.air.popularItemManager.requestPopularItems()
self.sendUpdateToAvatarId(avId, 'setPopularItems', [popularItems])

View file

@ -119,7 +119,7 @@ def getAllMouldings(*indexList):
for index in indexList:
colors = MouldingTypes[index][MTColor]
if colors:
for n in xrange(len(colors)):
for n in range(len(colors)):
list.append(CatalogMouldingItem(index, n))
else:
@ -143,7 +143,7 @@ def getMouldingRange(fromIndex, toIndex, *otherRanges):
if patternIndex >= fromIndex and patternIndex <= toIndex:
colors = MouldingTypes[patternIndex][MTColor]
if colors:
for n in xrange(len(colors)):
for n in range(len(colors)):
list.append(CatalogMouldingItem(patternIndex, n))
else:

View file

@ -40,6 +40,9 @@ class CatalogPoleItem(CatalogItem.CatalogItem):
def isGift(self):
return 0
def getDeliveryTime(self):
return 1
def getPicture(self, avatar):
rodPath = FishGlobals.RodFileDict.get(self.rodId)
pole = Actor.Actor(rodPath, {'cast': 'phase_4/models/props/fishing-pole-chan'})
@ -103,7 +106,7 @@ def nextAvailablePole(avatar, duplicateItems):
def getAllPoles():
list = []
for rodId in xrange(0, FishGlobals.MaxRodId + 1):
for rodId in range(0, FishGlobals.MaxRodId + 1):
list.append(CatalogPoleItem(rodId))
return list

View file

@ -1,38 +0,0 @@
from pandac.PandaModules import NodePath
from direct.gui.DirectButton import DirectButton
from toontown.catalog import CatalogGlobals
class CatalogRadioButton(NodePath):
def __init__(self, parent, nodeName, clickEvent):
NodePath.__init__(self, parent.attachNewNode(nodeName))
self.radioButtons = []
self.clickEvent = clickEvent
self.normalNode = CatalogGlobals.CatalogNodePath.find('**/'+nodeName+'_UP').copyTo(self)
self.clickedNode = CatalogGlobals.CatalogNodePath.find('**/'+nodeName+'_DN').copyTo(self)
self.hoverNode = CatalogGlobals.CatalogNodePath.find('**/'+nodeName+'_OVR').copyTo(self)
self.statusIndicator = CatalogGlobals.CatalogNodePath.find('**/'+nodeName+'Radio_ON').copyTo(self)
self.statusIndicator.hide()
self.radioButton = DirectButton(parent=self, relief=None, image=(self.normalNode, self.clickedNode, self.hoverNode), command=self.enable)
def setOthers(self, radioButtons):
self.radioButtons = radioButtons
def enable(self):
for radioButton in self.radioButtons:
radioButton.disable()
self.statusIndicator.show()
self.clickEvent()
def disable(self):
self.statusIndicator.hide()
def cleanup(self):
self.radioButton.destroy()
NodePath.removeNode(self)

View file

@ -1,23 +1,21 @@
from direct.actor import Actor
from pandac.PandaModules import *
from direct.gui.DirectGui import *
from pandac.PandaModules import *
from direct.gui.DirectScrolledList import *
from pandac.PandaModules import *
from pandac.PandaModules import *
import random
import CatalogFurnitureItem
import CatalogInvalidItem
import CatalogItem
import CatalogItemPanel
import CatalogItemTypes
from toontown.chat.ChatBalloon import ChatBalloon
from toontown.nametag import NametagGlobals
from toontown.nametag import NametagGroup
from toontown.toon import DistributedToon
from toontown.toonbase import TTLocalizer
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 toontown.nametag import NametagGlobals
import CatalogChatBalloon
NUM_CATALOG_ROWS = 3
NUM_CATALOG_COLS = 2
@ -30,7 +28,7 @@ CatalogPanelColors = {CatalogItemTypes.FURNITURE_ITEM: Vec4(0.733, 0.78, 0.933,
CatalogItemTypes.WINDOW_ITEM: Vec4(0.827, 0.91, 0.659, 1.0)}
class CatalogScreen(DirectFrame):
notify = directNotify.newCategory('CatalogScreen')
notify = DirectNotifyGlobal.directNotify.newCategory('CatalogScreen')
def __init__(self, parent = aspect2d, **kw):
guiItems = loader.loadModel('phase_5.5/models/gui/catalog_gui')
@ -80,11 +78,12 @@ class CatalogScreen(DirectFrame):
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)
self.setClarabelleChat(TTLocalizer.CatalogGreeting, type='greeting')
def clarabelleHelpText1(task):
self.setClarabelleChat(TTLocalizer.CatalogHelpText1)
@ -108,6 +107,7 @@ class CatalogScreen(DirectFrame):
self.ignore(localAvatar.uniqueName('emblemsChange'))
deliveryText = 'setDeliverySchedule-%s' % base.localAvatar.doId
self.ignore(deliveryText)
base.setBackgroundColor(ToontownGlobals.DefaultBackgroundColor)
render.show()
DirectFrame.hide(self)
@ -178,7 +178,7 @@ class CatalogScreen(DirectFrame):
self.emblemCatalogButton['state'] = DGG.DISABLED
def showNewItems(self, index = None):
if base.config.GetBool('want-qa-regression', 0):
if config.GetBool('want-qa-regression', 0):
self.notify.info('QA-REGRESSION: CATALOG: New item')
taskMgr.remove('clarabelleHelpText1')
messenger.send('wakeup')
@ -195,7 +195,7 @@ class CatalogScreen(DirectFrame):
return
def showBackorderItems(self, index = None):
if base.config.GetBool('want-qa-regression', 0):
if config.GetBool('want-qa-regression', 0):
self.notify.info('QA-REGRESSION: CATALOG: Backorder item')
taskMgr.remove('clarabelleHelpText1')
messenger.send('wakeup')
@ -212,7 +212,7 @@ class CatalogScreen(DirectFrame):
return
def showLoyaltyItems(self, index = None):
if base.config.GetBool('want-qa-regression', 0):
if config.GetBool('want-qa-regression', 0):
self.notify.info('QA-REGRESSION: CATALOG: Special item')
taskMgr.remove('clarabelleHelpText1')
messenger.send('wakeup')
@ -229,7 +229,7 @@ class CatalogScreen(DirectFrame):
return
def showEmblemItems(self, index = None):
if base.config.GetBool('want-qa-regression', 0):
if config.GetBool('want-qa-regression', 0):
self.notify.info('QA-REGRESSION: CATALOG: Emblem item')
taskMgr.remove('clarabelleHelpText1')
messenger.send('wakeup')
@ -310,8 +310,8 @@ class CatalogScreen(DirectFrame):
pIndex = 0
randGen = random.Random()
randGen.seed(base.localAvatar.catalogScheduleCurrentWeek + (self.pageIndex << 8) + (newOrBackOrLoyalty << 16))
for i in xrange(NUM_CATALOG_ROWS):
for j in xrange(NUM_CATALOG_COLS):
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)])
@ -549,8 +549,9 @@ class CatalogScreen(DirectFrame):
self.emblemCatalogButton2.hide()
self.__makeFFlist()
if len(self.ffList) > 0:
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)
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()
@ -577,7 +578,7 @@ class CatalogScreen(DirectFrame):
self.__chooseFriend(self.ffList[0][0], self.ffList[0][1])
self.update()
self.createdGiftGui = 1
for i in xrange(4):
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)
@ -591,8 +592,8 @@ class CatalogScreen(DirectFrame):
[],
[],
[]]
for i in xrange(NUM_CATALOG_ROWS):
for j in xrange(NUM_CATALOG_COLS):
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)
@ -688,7 +689,7 @@ class CatalogScreen(DirectFrame):
self.clarabelleFrame = DirectLabel(self, relief=None, image=guiItems.find('**/clarabelle_frame'))
hangupGui = guiItems.find('**/hangup')
hangupRolloverGui = guiItems.find('**/hangup_rollover')
self.hangup = DirectButton(self, relief=None, pos=(1.78, 0, -1.3), image=[hangupGui,
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)
@ -723,7 +724,7 @@ class CatalogScreen(DirectFrame):
self.cCamNode.setLens(self.cLens)
self.cCamNode.setScene(self.cRender)
self.cCam = self.cCamera.attachNewNode(self.cCamNode)
self.cDr = base.win.makeDisplayRegion(0.58, 0.82, 0.53, 0.85)
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)
@ -738,10 +739,24 @@ class CatalogScreen(DirectFrame):
self.clarabelle.find('**/glassR').setBin('fixed', 2)
switchboard = loader.loadModel('phase_5.5/models/estate/switchboard')
switchboard.reparentTo(self.clarabelle)
switchboard.setPos(0, -2, 0)
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.56, 6.43, -3.81, 121.61, 0.0, 0.0, 1.0, 1.0, 1.0)
self.clarabelleFrame.setPosHprScale(-0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 1.0, 1.0)
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:
@ -809,6 +824,7 @@ class CatalogScreen(DirectFrame):
if self.giftAvatar:
base.cr.cancelAvatarDetailsRequest(self.giftAvatar)
self.hide()
self.hangup.hide()
self.destroy()
del self.base
del self.squares
@ -860,10 +876,14 @@ class CatalogScreen(DirectFrame):
self.clarabelle.cleanup()
del self.clarabelle
if self.clarabelleChatBalloon:
self.clarabelleChatBalloon.removeNode()
del self.clarabelleChatBalloon
def hangUp(self):
if hasattr(self, 'giftAvatar') and self.giftAvatar:
self.giftAvatar.disable()
self.setClarabelleChat(random.choice(TTLocalizer.CatalogGoodbyeList))
self.setClarabelleChat(random.choice(TTLocalizer.CatalogGoodbyeList), type='goodbye')
self.setPageIndex(-1)
self.showPageItems()
self.nextPageButton.hide()
@ -934,15 +954,18 @@ class CatalogScreen(DirectFrame):
self.responseDialog = None
return
def setClarabelleChat(self, str, timeout = 6):
def setClarabelleChat(self, str, timeout = 6, type = None):
self.clearClarabelleChat()
if not self.clarabelleChatBalloon:
self.clarabelleChatBalloon = loader.loadModel('phase_3/models/props/chatbox.bam')
self.clarabelleChat = ChatBalloon(self.clarabelleChatBalloon)
chatNode = self.clarabelleChat.generate(str, ToontownGlobals.getInterfaceFont())
self.clarabelleChatNP = chatNode
self.clarabelleChatBalloon = loader.loadModel('phase_3/models/props/chatbox')
self.clarabelleChat = CatalogChatBalloon.CatalogChatBalloon(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')
@ -988,7 +1011,6 @@ class CatalogScreen(DirectFrame):
return test
def __makeFFlist(self):
from toontown.nametag import NametagGroup
for familyMember in base.cr.avList:
if familyMember.id != base.localAvatar.doId:
newFF = (familyMember.id, familyMember.name, NametagGlobals.CCNonPlayer)
@ -1034,9 +1056,20 @@ class CatalogScreen(DirectFrame):
self.scrollList.refresh()
def makeFamilyButton(self, familyId, familyName, colorCode):
from toontown.nametag import NametagGlobals
fg = NametagGlobals.NametagColors.get(colorCode)[3][0]
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])
# 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')

View file

@ -3,16 +3,17 @@ import CatalogAtticItem
from toontown.toonbase import ToontownGlobals
from toontown.toonbase import TTLocalizer
from CatalogSurfaceColors import *
STWallpaper = 0
STMoulding = 1
STFlooring = 2
STWainscoting = 3
NUM_ST_TYPES = 4
class CatalogSurfaceItem(CatalogAtticItem.CatalogAtticItem):
def makeNewItem(self):
CatalogAtticItem.CatalogAtticItem.makeNewItem(self)
def setPatternIndex(self, patternIndex):
self.patternIndex = patternIndex
@ -28,3 +29,7 @@ class CatalogSurfaceItem(CatalogAtticItem.CatalogAtticItem):
if retcode >= 0:
house.addWallpaper(self)
return retcode
def getDeliveryTime(self):
return 1

View file

@ -1,87 +0,0 @@
from pandac.PandaModules import NodePath
from direct.gui.DirectButton import DirectButton
from toontown.catalog import CatalogGlobals
class CatalogTabButton(NodePath):
def __init__(self, catalogGui, nodeName, clickEvent):
NodePath.__init__(self, catalogGui.attachNewNode(nodeName))
self.active = False
self.activePage = 0
self.catalogGui = catalogGui
self.catalogItemPages = []
self.otherTabs = []
self.clickEvent = clickEvent
self.clickedNode = CatalogGlobals.CatalogNodePath.find('**/'+nodeName+'_DN').copyTo(self)
self.hoverNode = CatalogGlobals.CatalogNodePath.find('**/'+nodeName+'_OVR').copyTo(self)
self.tabButton = DirectButton(parent=self, relief=None, image=(self.clickedNode, self.clickedNode, self.hoverNode), command=self.tabClicked)
def tabClicked(self):
if self.active:
return
for tab in self.otherTabs:
tab.disableTab()
self.active = True
self.catalogGui.setCurrentTab(self)
self.showPages()
self.updateArrows()
self.clickEvent()
def setOtherTabs(self, otherTabs):
self.otherTabs = otherTabs
def setCatalogItemPages(self, catalogItemPages):
self.catalogItemPages = catalogItemPages
def showPages(self):
self.hidePages()
if self.catalogItemPages:
self.catalogItemPages[self.activePage].show()
self.catalogGui.setActivePage(self.activePage)
def hidePages(self):
for page in self.catalogItemPages:
page.hide()
def disableTab(self):
if not self.active:
return
self.active = False
self.hidePages()
self.activePage = 0
def updateArrows(self):
self.catalogGui.enableBothArrows()
if self.activePage == 0:
self.catalogGui.disableLeftArrow()
if self.activePage == len(self.catalogItemPages) - 1:
self.catalogGui.disableRightArrow()
def moveLeft(self):
self.activePage -= 1
self.showPages()
self.updateArrows()
def moveRight(self):
self.activePage += 1
self.showPages()
self.updateArrows()
def lockItems(self):
for page in self.catalogItemPages:
page.lockItems()
def updateItems(self, gifting):
for page in self.catalogItemPages:
page.updateItems(gifting)
def cleanup(self):
for page in self.catalogItemPages:
page.cleanup()
self.tabButton.destroy()
NodePath.removeNode(self)

View file

@ -50,7 +50,7 @@ class CatalogToonStatueItem(CatalogGardenItem.CatalogGardenItem):
def getAllToonStatues(self):
self.statueList = []
for index in xrange(self.startPoseIndex, self.endPoseIndex + 1):
for index in range(self.startPoseIndex, self.endPoseIndex + 1):
self.statueList.append(CatalogToonStatueItem(index, 1, endPoseIndex=index))
return self.statueList

View file

@ -110,7 +110,7 @@ def getAllWainscotings(*indexList):
for index in indexList:
colors = WainscotingTypes[index][WSTColor]
if colors:
for n in xrange(len(colors)):
for n in range(len(colors)):
list.append(CatalogWainscotingItem(index, n))
else:
@ -134,7 +134,7 @@ def getWainscotingRange(fromIndex, toIndex, *otherRanges):
if patternIndex >= fromIndex and patternIndex <= toIndex:
colors = WainscotingTypes[patternIndex][WSTColor]
if colors:
for n in xrange(len(colors)):
for n in range(len(colors)):
list.append(CatalogWainscotingItem(patternIndex, n))
else:

View file

@ -1,25 +1,19 @@
from CatalogSurfaceItem import *
WTTextureName = 0
WTColor = 1
WTBorderList = 2
WTBasePrice = 3
BDTextureName = 0
BDColor = 1
All = (
1000,
All = (1000,
1010,
1020,
1030,
1040,
1050,
1060,
1070
)
WallpaperTypes = {
1000: ('phase_5.5/maps/flat_wallpaper1.jpg',
1070)
WallpaperTypes = {1000: ('phase_5.5/maps/flat_wallpaper1.jpg',
CTFlatColor,
(0, 1000),
180),
@ -465,11 +459,8 @@ WallpaperTypes = {
13300: ('phase_5.5/maps/StPatWallpaper4.jpg',
CTWhite,
(0, 13000),
400)
}
WallpaperGroups = {
1100: (1100,
400)}
WallpaperGroups = {1100: (1100,
1110,
1120,
1130,
@ -533,9 +524,7 @@ WallpaperGroups = {
2700: (2700, 2710),
2800: (2800, 2810),
2900: (2900, 2910)}
BorderTypes = {
1000: ('phase_5.5/maps/bd_grey_border1.jpg', CTFlatColorDark),
BorderTypes = {1000: ('phase_5.5/maps/bd_grey_border1.jpg', CTFlatColorDark),
1010: ('phase_5.5/maps/diamonds_border2.jpg', CTWhite),
1020: ('phase_5.5/maps/diamonds_border2ch.jpg', CTWhite),
1030: ('phase_5.5/maps/diamonds_border3ch.jpg', CTWhite),
@ -561,17 +550,15 @@ BorderTypes = {
12000: ('phase_5.5/maps/Vborder1a.jpg', CTWhite),
12010: ('phase_5.5/maps/Vborder1b.jpg', CTWhite),
12020: ('phase_5.5/maps/Vborder2b.jpg', CTWhite),
13000: ('phase_5.5/maps/StPatBorder1.jpg', CTWhite)
}
13000: ('phase_5.5/maps/StPatBorder1.jpg', CTWhite)}
class CatalogWallpaperItem(CatalogSurfaceItem):
def makeNewItem(self, patternIndex, colorIndex = None, borderIndex = 0, borderColorIndex = 0):
self.patternIndex = patternIndex
self.colorIndex = colorIndex
self.borderIndex = borderIndex
self.borderColorIndex = borderColorIndex
CatalogSurfaceItem.makeNewItem(self)
def needsCustomize(self):
@ -582,7 +569,7 @@ class CatalogWallpaperItem(CatalogSurfaceItem):
def getName(self):
name = TTLocalizer.WallpaperNames.get(self.patternIndex)
if name is None:
if name == None:
century = self.patternIndex - self.patternIndex % 100
name = TTLocalizer.WallpaperNames.get(century)
if name:
@ -610,10 +597,10 @@ class CatalogWallpaperItem(CatalogSurfaceItem):
def output(self, store = -1):
return 'CatalogWallpaperItem(%s, %s, %s, %s%s)' % (self.patternIndex,
self.colorIndex,
self.borderIndex,
self.borderColorIndex,
self.formatOptionalData(store))
self.colorIndex,
self.borderIndex,
self.borderColorIndex,
self.formatOptionalData(store))
def getFilename(self):
return WallpaperTypes[self.patternIndex][WTTextureName]
@ -626,7 +613,8 @@ class CatalogWallpaperItem(CatalogSurfaceItem):
return 0
def getHashContents(self):
return self.patternIndex - self.patternIndex % 100
century = self.patternIndex - self.patternIndex % 100
return century
def getBasePrice(self):
return WallpaperTypes[self.patternIndex][WTBasePrice]
@ -640,7 +628,7 @@ class CatalogWallpaperItem(CatalogSurfaceItem):
return texture
def getColor(self):
if self.colorIndex is None:
if self.colorIndex == None:
colorIndex = 0
else:
colorIndex = self.colorIndex
@ -648,7 +636,9 @@ class CatalogWallpaperItem(CatalogSurfaceItem):
if colorIndex < len(colors):
return colors[colorIndex]
else:
print 'Warning: colorIndex > len(colors). Returning white.'
return CT_WHITE
return
def loadBorderTexture(self):
from pandac.PandaModules import Texture
@ -670,10 +660,10 @@ class CatalogWallpaperItem(CatalogSurfaceItem):
return colors[self.borderColorIndex]
else:
return CT_WHITE
return
def decodeDatagram(self, di, versionNumber, store):
CatalogAtticItem.CatalogAtticItem.decodeDatagram(self, di, versionNumber, store)
self.colorIndex = 0
if store & CatalogItem.Customization:
self.borderIndex = 0
@ -693,10 +683,10 @@ class CatalogWallpaperItem(CatalogSurfaceItem):
self.borderIndex = di.getUint16()
self.borderColorIndex = di.getUint8()
wtype = WallpaperTypes[self.patternIndex]
return
def encodeDatagram(self, dg, store):
CatalogAtticItem.CatalogAtticItem.encodeDatagram(self, dg, store)
dg.addUint16(self.patternIndex)
if store & CatalogItem.Customization:
dg.addUint8(self.colorIndex)
@ -708,8 +698,10 @@ def getWallpapers(*typeList):
list = []
for type in typeList:
list.append(CatalogWallpaperItem(type))
return list
def getAllWallpapers(*typeList):
list = []
for type in typeList:
@ -722,12 +714,14 @@ def getAllWallpapers(*typeList):
numBorderColors = len(borderData[BDColor])
else:
numBorderColors = 1
for borderColorIndex in xrange(numBorderColors):
for borderColorIndex in range(numBorderColors):
colors = WallpaperTypes[index][WTColor]
for n in xrange(len(colors)):
for n in range(len(colors)):
list.append(CatalogWallpaperItem(index, n, borderKey, borderColorIndex))
return list
def getWallpaperRange(fromIndex, toIndex, *otherRanges):
list = []
froms = [fromIndex]
@ -737,6 +731,7 @@ def getWallpaperRange(fromIndex, toIndex, *otherRanges):
froms.append(otherRanges[i])
tos.append(otherRanges[i + 1])
i += 2
for patternIndex in WallpaperTypes.keys():
for fromIndex, toIndex in zip(froms, tos):
if patternIndex >= fromIndex and patternIndex <= toIndex:
@ -747,8 +742,9 @@ def getWallpaperRange(fromIndex, toIndex, *otherRanges):
numBorderColors = len(borderData[BDColor])
else:
numBorderColors = 1
for borderColorIndex in xrange(numBorderColors):
for borderColorIndex in range(numBorderColors):
colors = WallpaperTypes[patternIndex][WTColor]
for n in xrange(len(colors)):
for n in range(len(colors)):
list.append(CatalogWallpaperItem(patternIndex, n, borderKey, borderColorIndex))
return list

View file

@ -43,6 +43,9 @@ class CatalogWindowItem(CatalogAtticItem.CatalogAtticItem):
house.addWindow(self)
return retcode
def getDeliveryTime(self):
return 1
def getPicture(self, avatar):
frame = self.makeFrame()
model = self.loadModel()

View file

@ -1,75 +0,0 @@
from CatalogItemList import CatalogItemList
from CatalogInvalidItem import CatalogInvalidItem
from CatalogFurnitureItem import CatalogFurnitureItem
from CatalogChatItem import CatalogChatItem
from CatalogClothingItem import CatalogClothingItem
from CatalogEmoteItem import CatalogEmoteItem
from CatalogWallpaperItem import CatalogWallpaperItem
from CatalogWindowItem import CatalogWindowItem
from CatalogFlooringItem import CatalogFlooringItem
from CatalogMouldingItem import CatalogMouldingItem
from CatalogWainscotingItem import CatalogWainscotingItem
from CatalogPoleItem import CatalogPoleItem
from CatalogPetTrickItem import CatalogPetTrickItem
from CatalogBeanItem import CatalogBeanItem
from CatalogGardenItem import CatalogGardenItem
from CatalogRentalItem import CatalogRentalItem
from CatalogGardenStarterItem import CatalogGardenStarterItem
from CatalogNametagItem import CatalogNametagItem
from CatalogToonStatueItem import CatalogToonStatueItem
from CatalogAnimatedFurnitureItem import CatalogAnimatedFurnitureItem
from CatalogAccessoryItem import CatalogAccessoryItem
class PopularItemManagerAI:
def __init__(self, air):
self.air = air
self.popularItemDict = {}
def avBoughtItem(self, item):
# Load the current popularItems
try:
popularItems = simbase.backups.load('catalog', ('popular-items',), default=({}))
except ValueError:
return
itemOutput = item.output()
# Don't allow rental items!
if 'CatalogRentalItem' in itemOutput:
return
if not itemOutput in popularItems:
popularItems[itemOutput] = 1
else:
popularItems[itemOutput] += 1
# Save it.
try:
simbase.backups.save('catalog', ('popular-items',), (popularItems))
except ValueError:
pass
def requestPopularItems(self):
# Load the current popularItems
try:
self.popularItemDict = simbase.backups.load('catalog', ('popular-items',), default=({}))
except ValueError:
pass
sortedItems = [(x,y) for y,x in sorted([(y,x) for x,y in self.popularItemDict.items()],reverse=True)]
finalItems = []
if len(sortedItems) <= 12:
for item in sortedItems:
item = eval(item[0])
finalItems.append(item)
else:
for i in xrange(12):
item = eval(sortedItems[i][0])
finalItems.append(item)
catalog = CatalogItemList(finalItems)
return catalog.getBlob()

View file

@ -122,7 +122,6 @@ class DistributedPhoneAI(DistributedFurnitureItemAI):
item.deliveryDate = int(time.time()/60) + item.getDeliveryTime()
av.onOrder.append(item)
av.b_setDeliverySchedule(av.onOrder)
self.air.popularItemManager.avBoughtItem(item)
self.sendUpdateToAvatarId(avId, 'requestPurchaseResponse', [context, ToontownGlobals.P_ItemOnOrder])
taskMgr.doMethodLater(0.2, self.sendUpdateToAvatarId, 'purchaseItemComplete-%d' % self.getDoId(), extraArgs=[avId, 'purchaseItemComplete', []])
else:
@ -132,8 +131,6 @@ class DistributedPhoneAI(DistributedFurnitureItemAI):
resp = item.recordPurchase(av, optional)
if resp < 0:
av.addMoney(price)
else:
self.air.popularItemManager.avBoughtItem(item)
self.sendUpdateToAvatarId(avId, 'requestPurchaseResponse', [context, resp])
taskMgr.doMethodLater(0.2, self.sendUpdateToAvatarId, 'purchaseItemComplete-%d' % self.getDoId(), extraArgs=[avId, 'purchaseItemComplete', []])