import CatalogItem from toontown.toonbase import ToontownGlobals from toontown.toonbase import TTLocalizer from toontown.toon import ToonDNA import random from direct.showbase import PythonUtil from direct.gui.DirectGui import * from panda3d.core import * CTArticle = 0 CTString = 1 CTBasePrice = 2 CTEmblemPrices = 3 ABoysShirt = 0 AGirlsShirt = 1 AShirt = 2 ABoysShorts = 3 AGirlsShorts = 4 AGirlsSkirt = 5 AShorts = 6 ClothingTypes = {101: (ABoysShirt, 'bss1', 40), 102: (ABoysShirt, 'bss2', 40), 103: (ABoysShirt, 'bss3', 40), 105: (ABoysShirt, 'bss4', 40), 104: (ABoysShirt, 'bss5', 40), 106: (ABoysShirt, 'bss6', 40), 107: (ABoysShirt, 'bss7', 40), 108: (ABoysShirt, 'bss8', 40), 109: (ABoysShirt, 'bss9', 40), 111: (ABoysShirt, 'bss11', 40), 115: (ABoysShirt, 'bss15', 40), 116: (ABoysShirt, 'c_ss1', 80), 117: (ABoysShirt, 'c_ss2', 80), 118: (ABoysShirt, 'c_bss1', 80), 119: (ABoysShirt, 'c_bss2', 80), 120: (ABoysShirt, 'c_ss3', 80), 121: (ABoysShirt, 'c_bss3', 80), 122: (ABoysShirt, 'c_bss4', 80), 123: (ABoysShirt, 'c_ss4', 120), 124: (ABoysShirt, 'c_ss5', 120), 125: (AShirt, 'c_ss6', 120), 126: (AShirt, 'c_ss7', 120), 127: (AShirt, 'c_ss8', 120), 128: (AShirt, 'c_ss9', 120), 129: (AShirt, 'c_ss10', 120), 130: (AShirt, 'c_ss11', 120), 131: (ABoysShirt, 'c_ss12', 160), 201: (AGirlsShirt, 'gss1', 40), 202: (AGirlsShirt, 'gss2', 40), 203: (AGirlsShirt, 'gss3', 40), 205: (AGirlsShirt, 'gss4', 40), 204: (AGirlsShirt, 'gss5', 40), 206: (AGirlsShirt, 'gss6', 40), 207: (AGirlsShirt, 'gss7', 40), 208: (AGirlsShirt, 'gss8', 40), 209: (AGirlsShirt, 'gss9', 40), 211: (AGirlsShirt, 'gss11', 40), 215: (AGirlsShirt, 'gss15', 40), 216: (AGirlsShirt, 'c_ss1', 80), 217: (AGirlsShirt, 'c_ss2', 80), 218: (AGirlsShirt, 'c_gss1', 80), 219: (AGirlsShirt, 'c_gss2', 80), 220: (AGirlsShirt, 'c_ss3', 80), 221: (AGirlsShirt, 'c_gss3', 80), 222: (AGirlsShirt, 'c_gss4', 80), 223: (AGirlsShirt, 'c_gss5', 80), 224: (AGirlsShirt, 'c_ss4', 120), 225: (AGirlsShirt, 'c_ss13', 160), 301: (ABoysShorts, 'bbs1', 50), 302: (ABoysShorts, 'bbs2', 50), 303: (ABoysShorts, 'bbs3', 50), 304: (ABoysShorts, 'bbs4', 50), 305: (ABoysShorts, 'bbs5', 50), 308: (ABoysShorts, 'bbs8', 50), 310: (ABoysShorts, 'c_bs1', 120), 311: (ABoysShorts, 'c_bs2', 120), 312: (ABoysShorts, 'c_bs3', 120), 313: (ABoysShorts, 'c_bs4', 120), 314: (ABoysShorts, 'c_bs5', 160), 401: (AGirlsSkirt, 'gsk1', 50), 403: (AGirlsSkirt, 'gsk3', 50), 404: (AGirlsSkirt, 'gsk4', 50), 405: (AGirlsSkirt, 'gsk5', 50), 407: (AGirlsSkirt, 'gsk7', 50), 408: (AGirlsSkirt, 'c_gsk1', 100), 409: (AGirlsSkirt, 'c_gsk2', 100), 410: (AGirlsSkirt, 'c_gsk3', 100), 411: (AGirlsSkirt, 'c_gsk4', 120), 412: (AGirlsSkirt, 'c_gsk5', 120), 413: (AGirlsSkirt, 'c_gsk6', 120), 414: (AGirlsSkirt, 'c_gsk7', 160), 451: (AGirlsShorts, 'gsh1', 50), 452: (AGirlsShorts, 'gsh2', 50), 453: (AGirlsShorts, 'gsh3', 50), 1001: (AShirt, 'hw_ss1', 200), 1002: (AShirt, 'hw_ss2', 200), 1100: (AShirt, 'wh_ss1', 200), 1101: (AShirt, 'wh_ss2', 200), 1102: (AShirt, 'wh_ss3', 200), 1103: (AShirt, 'wh_ss4', 200), 1104: (ABoysShorts, 'wh_bs1', 200), 1105: (ABoysShorts, 'wh_bs2', 200), 1106: (ABoysShorts, 'wh_bs3', 200), 1107: (ABoysShorts, 'wh_bs4', 200), 1108: (AGirlsSkirt, 'wh_gsk1', 200), 1109: (AGirlsSkirt, 'wh_gsk2', 200), 1110: (AGirlsSkirt, 'wh_gsk3', 200), 1111: (AGirlsSkirt, 'wh_gsk4', 200), 1112: (AShirt, 'hw_ss5', 200), 1113: (AShirt, 'hw_ss6', 300), 1114: (AShirt, 'hw_ss7', 200), 1115: (AShirt, 'hw_ss8', 200), 1116: (AShirt, 'hw_ss9', 300), 1117: (ABoysShorts, 'hw_bs1', 200), 1118: (ABoysShorts, 'hw_bs2', 300), 1119: (ABoysShorts, 'hw_bs5', 200), 1120: (ABoysShorts, 'hw_bs6', 200), 1121: (ABoysShorts, 'hw_bs7', 300), 1122: (AGirlsShorts, 'hw_gs1', 200), 1123: (AGirlsShorts, 'hw_gs2', 300), 1124: (AGirlsShorts, 'hw_gs5', 200), 1125: (AGirlsShorts, 'hw_gs6', 200), 1126: (AGirlsShorts, 'hw_gs7', 300), 1127: (AGirlsSkirt, 'hw_gsk1', 300), 1200: (AGirlsShirt, 'vd_ss1', 200), 1201: (AShirt, 'vd_ss2', 200), 1202: (ABoysShirt, 'vd_ss3', 200), 1203: (AGirlsShirt, 'vd_ss4', 200), 1204: (AGirlsSkirt, 'vd_gs1', 200), 1205: (ABoysShorts, 'vd_bs1', 200), 1206: (AShirt, 'vd_ss5', 200), 1207: (AShirt, 'vd_ss6', 200), 1208: (ABoysShorts, 'vd_bs2', 200), 1209: (ABoysShorts, 'vd_bs3', 200), 1210: (AGirlsSkirt, 'vd_gs2', 200), 1211: (AGirlsSkirt, 'vd_gs3', 200), 1212: (AShirt, 'vd_ss7', 200), 1300: (AShirt, 'sd_ss1', 200), 1301: (AShirt, 'sd_ss2', 225), 1302: (AGirlsShorts, 'sd_gs1', 200), 1303: (ABoysShorts, 'sd_bs1', 200), 1304: (AShirt, 'sd_ss3', 25), 1305: (ABoysShorts, 'sd_bs2', 25), 1306: (AGirlsSkirt, 'sd_gs2', 25), 1400: (AShirt, 'tc_ss1', 200), 1401: (AShirt, 'tc_ss2', 200), 1402: (AShirt, 'tc_ss3', 200), 1403: (AShirt, 'tc_ss4', 200), 1404: (AShirt, 'tc_ss5', 200), 1405: (AShirt, 'tc_ss6', 200), 1406: (AShirt, 'tc_ss7', 200), 1500: (AShirt, 'j4_ss1', 200), 1501: (AShirt, 'j4_ss2', 200), 1502: (ABoysShorts, 'j4_bs1', 200), 1503: (AGirlsSkirt, 'j4_gs1', 200), 1600: (AShirt, 'pj_ss1', 500), 1601: (AShirt, 'pj_ss2', 500), 1602: (AShirt, 'pj_ss3', 500), 1603: (ABoysShorts, 'pj_bs1', 500), 1604: (ABoysShorts, 'pj_bs2', 500), 1605: (ABoysShorts, 'pj_bs3', 500), 1606: (AGirlsShorts, 'pj_gs1', 500), 1607: (AGirlsShorts, 'pj_gs2', 500), 1608: (AGirlsShorts, 'pj_gs3', 500), 1700: (AShirt, 'sa_ss1', 200), 1701: (AShirt, 'sa_ss2', 200), 1702: (AShirt, 'sa_ss3', 200), 1703: (AShirt, 'sa_ss4', 200), 1704: (AShirt, 'sa_ss5', 200), 1705: (AShirt, 'sa_ss6', 200), 1706: (AShirt, 'sa_ss7', 200), 1707: (AShirt, 'sa_ss8', 200), 1708: (AShirt, 'sa_ss9', 200), 1709: (AShirt, 'sa_ss10', 200), 1710: (AShirt, 'sa_ss11', 200), 1711: (ABoysShorts, 'sa_bs1', 200), 1712: (ABoysShorts, 'sa_bs2', 200), 1713: (ABoysShorts, 'sa_bs3', 200), 1714: (ABoysShorts, 'sa_bs4', 200), 1715: (ABoysShorts, 'sa_bs5', 200), 1716: (AGirlsSkirt, 'sa_gs1', 200), 1717: (AGirlsSkirt, 'sa_gs2', 200), 1718: (AGirlsSkirt, 'sa_gs3', 200), 1719: (AGirlsSkirt, 'sa_gs4', 200), 1720: (AGirlsSkirt, 'sa_gs5', 200), 1721: (AShirt, 'sa_ss12', 200), 1722: (AShirt, 'sa_ss13', 200), 1723: (AShirt, 'sa_ss14', 250), 1724: (AShirt, 'sa_ss15', 250), 1725: (AShirt, 'sa_ss16', 200), 1726: (AShirt, 'sa_ss17', 200), 1727: (AShirt, 'sa_ss18', 200), 1728: (AShirt, 'sa_ss19', 200), 1729: (AShirt, 'sa_ss20', 200), 1730: (AShirt, 'sa_ss21', 200), 1731: (AShirt, 'sa_ss22', 200), 1732: (AShirt, 'sa_ss23', 200), 1733: (ABoysShorts, 'sa_bs6', 200), 1734: (ABoysShorts, 'sa_bs7', 250), 1735: (ABoysShorts, 'sa_bs8', 250), 1736: (ABoysShorts, 'sa_bs9', 200), 1737: (ABoysShorts, 'sa_bs10', 200), 1738: (AGirlsSkirt, 'sa_gs6', 200), 1739: (AGirlsSkirt, 'sa_gs7', 250), 1740: (AGirlsSkirt, 'sa_gs8', 250), 1741: (AGirlsSkirt, 'sa_gs9', 200), 1742: (AGirlsSkirt, 'sa_gs10', 200), 1743: (AShirt, 'sa_ss24', 250), 1744: (AShirt, 'sa_ss25', 250), 1745: (ABoysShorts, 'sa_bs11', 250), 1746: (ABoysShorts, 'sa_bs12', 250), 1747: (AGirlsSkirt, 'sa_gs11', 250), 1748: (AGirlsSkirt, 'sa_gs12', 250), 1749: (AShirt, 'sil_1', 1), 1750: (AShirt, 'sil_2', 1), 1751: (AShirt, 'sil_3', 1), 1752: (AShirt, 'sil_4', 5000), 1753: (AShirt, 'sil_5', 5000), 1754: (AShirt, 'sil_6', 1), 1755: (ABoysShorts, 'sil_bs1', 1), 1756: (AGirlsShorts, 'sil_gs1', 1), 1757: (AShirt, 'sil_7', 20), 1758: (AShirt, 'sil_8', 20), 1759: (AShirt, 'emb_us1', 0, (20, 5)), 1760: (AShirt, 'emb_us2', 234, (0, 7)), 1761: (AShirt, 'emb_us3', 345, (8, 0)), 1762: (AShirt, 'sa_ss26', 5000), 1763: (AShirt, 'sb_1', 20), 1764: (AShirt, 'sa_ss27', 5000), 1765: (AShirt, 'sa_ss28', 5000), 1766: (ABoysShorts, 'sa_bs13', 5000), 1767: (AGirlsShorts, 'sa_gs13', 5000), 1768: (AShirt, 'jb_1', 20), 1769: (AShirt, 'jb_2', 20), 1770: (AShirt, 'hw_ss3', 250), 1771: (AShirt, 'hw_ss4', 250), 1772: (ABoysShorts, 'hw_bs3', 250), 1773: (AGirlsShorts, 'hw_gs3', 250), 1774: (ABoysShorts, 'hw_bs4', 250), 1775: (AGirlsShorts, 'hw_gs4', 250), 1776: (AShirt, 'ugcms', 15000), 1777: (AShirt, 'lb_1', 20), 1778: (AShirt, 'sa_ss29', 5000), 1779: (AShirt, 'sa_ss30', 5000), 1780: (ABoysShorts, 'sa_bs14', 5000), 1781: (AGirlsShorts, 'sa_gs14', 5000), 1782: (AShirt, 'sa_ss31', 5000), 1783: (ABoysShorts, 'sa_bs15', 5000), 1784: (AGirlsSkirt, 'sa_gs15', 5000), 1785: (AShirt, 'sa_ss32', 5000), 1786: (AShirt, 'sa_ss33', 5000), 1787: (AShirt, 'sa_ss34', 5000), 1788: (AShirt, 'sa_ss35', 5000), 1789: (AShirt, 'sa_ss36', 5000), 1790: (AShirt, 'sa_ss37', 5000), 1791: (ABoysShorts, 'sa_bs16', 5000), 1792: (ABoysShorts, 'sa_bs17', 5000), 1793: (AGirlsSkirt, 'sa_gs16', 5000), 1794: (AGirlsSkirt, 'sa_gs17', 5000), 1795: (AShirt, 'sa_ss38', 5000), 1796: (AShirt, 'sa_ss39', 5000), 1797: (ABoysShorts, 'sa_bs18', 5000), 1798: (AGirlsSkirt, 'sa_gs18', 5000), 1799: (AShirt, 'sa_ss40', 5000), 1800: (AShirt, 'sa_ss41', 5000), 1801: (AShirt, 'sa_ss42', 250), 1802: (AGirlsShirt, 'sa_ss43', 250), 1803: (AShirt, 'sa_ss44', 5000), 1804: (AShirt, 'sa_ss45', 5000), 1805: (AShirt, 'sa_ss46', 5000), 1806: (AShirt, 'sa_ss47', 5000), 1807: (AShirt, 'sa_ss48', 5000), 1808: (AShirt, 'sa_ss49', 5000), 1809: (AShirt, 'sa_ss50', 5000), 1810: (AShirt, 'sa_ss51', 5000), 1811: (AShirt, 'sa_ss52', 5000), 1812: (AShirt, 'sa_ss53', 5000), 1813: (AShirt, 'sa_ss54', 5000), 1814: (ABoysShorts, 'sa_bs19', 5000), 1815: (ABoysShorts, 'sa_bs20', 5000), 1816: (ABoysShorts, 'sa_bs21', 5000), 1817: (AGirlsSkirt, 'sa_gs19', 5000), 1818: (AGirlsSkirt, 'sa_gs20', 5000), 1819: (AGirlsSkirt, 'sa_gs21', 5000), 1820: (AShirt, 'sa_ss55', 5000), 1821: (AShirt, 'weed', 5000)} class CatalogClothingItem(CatalogItem.CatalogItem): def makeNewItem(self, clothingType, colorIndex, isSpecial = False): self.clothingType = clothingType self.colorIndex = colorIndex self.isSpecial = isSpecial CatalogItem.CatalogItem.makeNewItem(self) def storedInCloset(self): return 1 def notOfferedTo(self, avatar): article = ClothingTypes[self.clothingType][CTArticle] if article == AShirt or article == AShorts: return 0 forBoys = (article == ABoysShirt or article == ABoysShorts) if avatar.getStyle().getGender() == 'm': return not forBoys else: return forBoys def forBoysOnly(self): article = ClothingTypes[self.clothingType][CTArticle] if article == ABoysShirt or article == ABoysShorts: return 1 else: return 0 def forGirlsOnly(self): article = ClothingTypes[self.clothingType][CTArticle] if article == AGirlsShirt or article == AGirlsSkirt or article == AGirlsShorts: return 1 else: return 0 def getPurchaseLimit(self): return 1 def reachedPurchaseLimit(self, avatar): if avatar.onOrder.count(self) != 0: return 1 if avatar.onGiftOrder.count(self) != 0: return 1 if avatar.mailboxContents.count(self) != 0: return 1 if self in avatar.awardMailboxContents or self in avatar.onAwardOrder: return 1 str = ClothingTypes[self.clothingType][CTString] dna = avatar.getStyle() if self.isShirt(): defn = ToonDNA.ShirtStyles[str] 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 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 else: defn = ToonDNA.BottomStyles[str] if dna.botTex == defn[0] and dna.botTexColor == defn[1][self.colorIndex]: return 1 l = avatar.clothesBottomsList for i in range(0, len(l), 2): if l[i] == defn[0] and l[i + 1] == defn[1][self.colorIndex]: return 1 return 0 def getTypeName(self): return TTLocalizer.ClothingTypeName def getName(self): typeName = TTLocalizer.ClothingTypeNames.get(self.clothingType, 0) if typeName: return typeName else: article = ClothingTypes[self.clothingType][CTArticle] return TTLocalizer.ClothingArticleNames[article] def recordPurchase(self, avatar, optional): if avatar.isClosetFull(): return ToontownGlobals.P_NoRoomForItem str = ClothingTypes[self.clothingType][CTString] dna = avatar.getStyle() if self.isShirt(): added = avatar.addToClothesTopsList(dna.topTex, dna.topTexColor, dna.sleeveTex, dna.sleeveTexColor) if added: avatar.b_setClothesTopsList(avatar.getClothesTopsList()) self.notify.info('Avatar %s put shirt %d,%d,%d,%d in closet.' % (avatar.doId, dna.topTex, dna.topTexColor, dna.sleeveTex, dna.sleeveTexColor)) else: self.notify.warning('Avatar %s %s lost current shirt; closet full.' % (avatar.doId, dna.asTuple())) defn = ToonDNA.ShirtStyles[str] dna.topTex = defn[0] dna.topTexColor = defn[2][self.colorIndex][0] dna.sleeveTex = defn[1] dna.sleeveTexColor = defn[2][self.colorIndex][1] else: added = avatar.addToClothesBottomsList(dna.botTex, dna.botTexColor) if added: avatar.b_setClothesBottomsList(avatar.getClothesBottomsList()) self.notify.info('Avatar %s put bottoms %d,%d in closet.' % (avatar.doId, dna.botTex, dna.botTexColor)) else: self.notify.warning('Avatar %s %s lost current bottoms; closet full.' % (avatar.doId, dna.asTuple())) defn = ToonDNA.BottomStyles[str] dna.botTex = defn[0] dna.botTexColor = defn[1][self.colorIndex] if dna.getGender() == 'f': try: bottomPair = ToonDNA.GirlBottoms[dna.botTex] except: bottomPair = ToonDNA.GirlBottoms[0] if dna.torso[1] == 's' and bottomPair[1] == ToonDNA.SKIRT: dna.torso = dna.torso[0] + 'd' elif dna.torso[1] == 'd' and bottomPair[1] == ToonDNA.SHORTS: dna.torso = dna.torso[0] + 's' avatar.b_setDNAString(dna.makeNetString()) avatar.d_catalogGenClothes() return ToontownGlobals.P_ItemAvailable def getDeliveryTime(self): return 1 def getPicture(self, avatar): from toontown.toon import Toon self.hasPicture = True dna = ToonDNA.ToonDNA(type='t', dna=avatar.style) str = ClothingTypes[self.clothingType][CTString] if self.isShirt(): defn = ToonDNA.ShirtStyles[str] dna.topTex = defn[0] dna.topTexColor = defn[2][self.colorIndex][0] dna.sleeveTex = defn[1] dna.sleeveTexColor = defn[2][self.colorIndex][1] pieceNames = ('**/1000/**/torso-top', '**/1000/**/sleeves') else: defn = ToonDNA.BottomStyles[str] dna.botTex = defn[0] dna.botTexColor = defn[1][self.colorIndex] pieceNames = ('**/1000/**/torso-bot',) toon = Toon.Toon() toon.setDNA(dna) model = NodePath('clothing') for name in pieceNames: for piece in toon.findAllMatches(name): piece.wrtReparentTo(model) model.setH(180) toon.delete() return self.makeFrameModel(model) def requestPurchase(self, phone, callback): from toontown.toontowngui import TTDialog avatar = base.localAvatar clothesOnOrder = 0 for item in avatar.onOrder + avatar.mailboxContents: if item.storedInCloset(): clothesOnOrder += 1 if avatar.isClosetFull(clothesOnOrder): self.requestPurchaseCleanup() buttonCallback = PythonUtil.Functor(self.__handleFullPurchaseDialog, phone, callback) self.dialog = TTDialog.TTDialog(style=TTDialog.YesNo, text=TTLocalizer.CatalogPurchaseClosetFull, text_wordwrap=15, command=buttonCallback) self.dialog.show() else: CatalogItem.CatalogItem.requestPurchase(self, phone, callback) def requestPurchaseCleanup(self): if hasattr(self, 'dialog'): self.dialog.cleanup() del self.dialog def __handleFullPurchaseDialog(self, phone, callback, buttonValue): from toontown.toontowngui import TTDialog self.requestPurchaseCleanup() if buttonValue == DGG.DIALOG_OK: CatalogItem.CatalogItem.requestPurchase(self, phone, callback) else: callback(ToontownGlobals.P_UserCancelled, self) def getAcceptItemErrorText(self, retcode): if retcode == ToontownGlobals.P_ItemAvailable: if self.isShirt(): return TTLocalizer.CatalogAcceptShirt elif self.isSkirt(): return TTLocalizer.CatalogAcceptSkirt else: return TTLocalizer.CatalogAcceptShorts elif retcode == ToontownGlobals.P_NoRoomForItem: return TTLocalizer.CatalogAcceptClosetFull return CatalogItem.CatalogItem.getAcceptItemErrorText(self, retcode) def getColorChoices(self): str = ClothingTypes[self.clothingType][CTString] if self.isShirt(): return ToonDNA.ShirtStyles[str][2] else: return ToonDNA.BottomStyles[str][1] def isShirt(self): article = ClothingTypes[self.clothingType][CTArticle] return article < ABoysShorts def isSkirt(self): article = ClothingTypes[self.clothingType][CTArticle] return article == AGirlsSkirt def output(self, store = -1): return 'CatalogClothingItem(%s, %s%s)' % (self.clothingType, self.colorIndex, self.formatOptionalData(store)) def getFilename(self): str = ClothingTypes[self.clothingType][CTString] if self.isShirt(): defn = ToonDNA.ShirtStyles[str] topTex = defn[0] return ToonDNA.Shirts[topTex] else: defn = ToonDNA.BottomStyles[str] botTex = defn[0] article = ClothingTypes[self.clothingType][CTArticle] if article == ABoysShorts: return ToonDNA.BoyShorts[botTex] else: return ToonDNA.GirlBottoms[botTex][0] def getColor(self): str = ClothingTypes[self.clothingType][CTString] if self.isShirt(): defn = ToonDNA.ShirtStyles[str] topTexColor = defn[2][self.colorIndex][0] return ToonDNA.ClothesColors[topTexColor] else: defn = ToonDNA.BottomStyles[str] botTexColor = defn[1][self.colorIndex] return ToonDNA.ClothesColors[botTexColor] def compareTo(self, other): if self.clothingType != other.clothingType: return self.clothingType - other.clothingType return self.colorIndex - other.colorIndex def getHashContents(self): return (self.clothingType, self.colorIndex) def getBasePrice(self): return ClothingTypes[self.clothingType][CTBasePrice] def getEmblemPrices(self): result = () info = ClothingTypes[self.clothingType] if CTEmblemPrices <= len(info) - 1: result = info[CTEmblemPrices] return result def decodeDatagram(self, di, versionNumber, store): CatalogItem.CatalogItem.decodeDatagram(self, di, versionNumber, store) self.clothingType = di.getUint16() self.colorIndex = di.getUint8() self.isSpecial = di.getBool() str = ClothingTypes[self.clothingType][CTString] if self.isShirt(): color = ToonDNA.ShirtStyles[str][2][self.colorIndex] else: color = ToonDNA.BottomStyles[str][1][self.colorIndex] def encodeDatagram(self, dg, store): CatalogItem.CatalogItem.encodeDatagram(self, dg, store) dg.addUint16(self.clothingType) dg.addUint8(self.colorIndex) dg.addBool(self.isSpecial) def isGift(self): return not self.getEmblemPrices() def getAllClothes(*clothingTypes): list = [] for clothingType in clothingTypes: base = CatalogClothingItem(clothingType, 0) list.append(base) for n in range(1, len(base.getColorChoices())): list.append(CatalogClothingItem(clothingType, n)) return list