Пример #1
0
 def startOverhaul(self, storeType):
     self.pickShipGUI = ShipShoppingPanel(
         PLocalizer.ShipOverhaul,
         doneCallback=self.confirmOverhaulShip,
         mode='overhaul')
     for shipId in base.localAvatar.getInventory().getShipDoIdList():
         self.pickShipGUI.addOwnShip(shipId, self.confirmOverhaulShip)
Пример #2
0
 def startRepair(self, storeType):
     self.pickShipGUI = ShipShoppingPanel(
         PLocalizer.ShipRepair,
         doneCallback=self.confirmRepairShip,
         mode='repair')
     for shipId in base.localAvatar.getInventory().getShipDoIdList():
         self.pickShipGUI.addOwnShip(shipId, self.confirmRepairShip)
Пример #3
0
 def startUpgrade(self, storeType):
     self.pickShipGUI = ShipShoppingPanel(PLocalizer.ShipOverhaul,
                                          doneCallback=self.openUpgradeShip,
                                          mode='upgrade')
     for shipId in base.localAvatar.getInventory().getShipDoIdList():
         self.pickShipGUI.addOwnShip(
             shipId,
             self.openUpgradeShip,
             callbackCallback=self.returnAfterUpgrade)
    def startSellShip(self, storeType):
        self.pickShipGUI = ShipShoppingPanel(PLocalizer.SellShip, doneCallback = self.confirmSellShip, mode = 'sell')
        
        def inventoryHere(inv):
            self._DistributedShopKeeper__invRequest = None
            if inv:
                for shipId in inv.getShipDoIdList():
                    self.pickShipGUI.addOwnShip(shipId, self.confirmSellShip)
                
            else:
                self.finishShopping()

        if self._DistributedShopKeeper__invRequest:
            DistributedInventoryBase.cancelGetInventory(self._DistributedShopKeeper__invRequest)
        
        self._DistributedShopKeeper__invRequest = DistributedInventoryBase.getInventory(localAvatar.getInventoryId(), inventoryHere)
    def startSellShip(self, storeType):
        self.pickShipGUI = ShipShoppingPanel(PLocalizer.SellShip, doneCallback = self.confirmSellShip, mode = 'sell')

        def inventoryHere(inv):
            self._DistributedShopKeeper__invRequest = None
            if inv:
                for shipId in inv.getShipDoIdList():
                    self.pickShipGUI.addOwnShip(shipId, self.confirmSellShip)

            else:
                self.finishShopping()

        if self._DistributedShopKeeper__invRequest:
            DistributedInventoryBase.cancelGetInventory(self._DistributedShopKeeper__invRequest)

        self._DistributedShopKeeper__invRequest = DistributedInventoryBase.getInventory(localAvatar.getInventoryId(), inventoryHere)
class DistributedShopKeeper:
    notify = directNotify.newCategory('DistributedShopKeeper')
    shopCoins = None
    barberCoin = None
    blacksmithCoin = None
    gunsmithCoin = None
    jewelerCoin = None
    shipwrightCoin = None
    tailorCoin = None
    tattooCoin = None
    gypsyCoin = None
    trainerCoin = None
    pvpRewardsCoin = None
    musicianCoin = None
    stowawayCoin = None
    cannonCoin = None
    fishingCoin = None
    catalogrepCoin = None
    
    def __init__(self):
        self.shopInventory = []
        self.shopCoin = None
        self.shopCoinGlow = None
        self._DistributedShopKeeper__invRequest = None
        self.storePush = False

    
    def generate(self):
        DistributedShopKeeper.notify.debug('generate(%s)' % self.doId)
        self.storeMenuGUI = None
        self.pickShipGUI = None
        self.confirmDialog = None
        self.fadeIval = None
        self.storeType = None

    
    def announceGenerate(self):
        DistributedShopKeeper.notify.debug('announceGenerate(%s)' % self.doId)
        self.loadShopCoin()
        if self.avatarType.isA(AvatarTypes.Cannoneer):
            self.shopInventory = CANNON_AMMO_SHELF_L1 + CANNON_AMMO_SHELF_L2 + CANNON_POUCH_SHELF
        elif self.avatarType.isA(AvatarTypes.Blacksmith):
            if base.config.GetBool('low-weapons-only', 0):
                self.shopInventory = MELEE_SHELF_L1 + MELEE_SHELF_L2 + DAGGER_AMMO_SHELF_L1 + DAGGER_AMMO_SHELF_L2 + DAGGER_POUCH_SHELF
            else:
                self.shopInventory = MELEE_SHELF_L1 + MELEE_SHELF_L2 + MELEE_SHELF_L3 + DAGGER_AMMO_SHELF_L1 + DAGGER_AMMO_SHELF_L2 + DAGGER_POUCH_SHELF
        elif self.avatarType.isA(AvatarTypes.Bartender):
            self.shopInventory = MELEE_SHELF_L1 + MISSILE_SHELF_L1 + BOMB_SHELF_L1
        elif self.avatarType.isA(AvatarTypes.Gunsmith):
            if base.config.GetBool('low-weapons-only', 0):
                self.shopInventory = MISSILE_SHELF_L1 + MISSILE_SHELF_L2 + PISTOL_AMMO_SHELF_L1 + PISTOL_AMMO_SHELF_L2 + PISTOL_POUCH_SHELF + BOMB_SHELF_L1 + BOMB_SHELF_L2 + BOMB_AMMO_SHELF_L1 + BOMB_AMMO_SHELF_L2 + GRENADE_POUCH_SHELF + CANNON_AMMO_SHELF_L1 + CANNON_AMMO_SHELF_L2 + CANNON_POUCH_SHELF
            else:
                self.shopInventory = MISSILE_SHELF_L1 + MISSILE_SHELF_L2 + MISSILE_SHELF_L3 + PISTOL_AMMO_SHELF_L1 + PISTOL_AMMO_SHELF_L2 + PISTOL_POUCH_SHELF + BOMB_SHELF_L1 + BOMB_SHELF_L2 + BOMB_SHELF_L3 + BOMB_AMMO_SHELF_L1 + BOMB_AMMO_SHELF_L2 + GRENADE_POUCH_SHELF + CANNON_AMMO_SHELF_L1 + CANNON_AMMO_SHELF_L2 + CANNON_POUCH_SHELF
        elif self.avatarType.isA(AvatarTypes.Grenadier):
            self.shopInventory = BOMB_SHELF_L1 + BOMB_SHELF_L2 + BOMB_SHELF_L3 + BOMB_AMMO_SHELF_L1 + BOMB_AMMO_SHELF_L2 + GRENADE_POUCH_SHELF
        elif self.avatarType.isA(AvatarTypes.Gypsy):
            if base.config.GetBool('low-weapons-only', 0):
                self.shopInventory = TONIC_SHELF_L1 + TONIC_SHELF_L2 + MOJO_SHELF_L1 + MOJO_SHELF_L2
            else:
                self.shopInventory = TONIC_SHELF_L1 + TONIC_SHELF_L2 + MOJO_SHELF_ALL
        elif self.avatarType.isA(AvatarTypes.Merchant):
            self.shopInventory = PISTOL_AMMO_SHELF_L1 + MELEE_SHELF_L1 + MISSILE_SHELF_L1
        elif self.avatarType.isA(AvatarTypes.MedicineMan):
            self.shopInventory = TONIC_SHELF_L1 + TONIC_SHELF_L2
        elif self.avatarType.isA(AvatarTypes.Musician):
            self.shopInventory = MUSIC_SHELF
        elif self.avatarType.isA(AvatarTypes.Stowaway):
            par = self.getParentObj()
            
            self.shopInventory = _[1]
        elif self.avatarType.isA(AvatarTypes.Fishmaster):
            self.shopInventory = FISHING_LURE_SHELF
        

    
    def loadShopCoin(self):
        if not DistributedShopKeeper.shopCoins:
            DistributedShopKeeper.shopCoins = loader.loadModel('models/textureCards/shopCoins')
        
        if not DistributedShopKeeper.barberCoin:
            DistributedShopKeeper.barberCoin = DistributedShopKeeper.shopCoins.find('**/shopCoin_barber')
        
        if not DistributedShopKeeper.blacksmithCoin:
            DistributedShopKeeper.blacksmithCoin = DistributedShopKeeper.shopCoins.find('**/shopCoin_blacksmith')
        
        if not DistributedShopKeeper.gunsmithCoin:
            DistributedShopKeeper.gunsmithCoin = DistributedShopKeeper.shopCoins.find('**/shopCoin_gunsmith')
        
        if not DistributedShopKeeper.jewelerCoin:
            DistributedShopKeeper.jewelerCoin = DistributedShopKeeper.shopCoins.find('**/shopCoin_jeweler')
        
        if not DistributedShopKeeper.shipwrightCoin:
            DistributedShopKeeper.shipwrightCoin = DistributedShopKeeper.shopCoins.find('**/shopCoin_shipwright')
        
        if not DistributedShopKeeper.tailorCoin:
            DistributedShopKeeper.tailorCoin = DistributedShopKeeper.shopCoins.find('**/shopCoin_tailor')
        
        if not DistributedShopKeeper.tattooCoin:
            DistributedShopKeeper.tattooCoin = DistributedShopKeeper.shopCoins.find('**/shopCoin_tattoo')
        
        if not DistributedShopKeeper.gypsyCoin:
            DistributedShopKeeper.gypsyCoin = DistributedShopKeeper.shopCoins.find('**/shopCoin_voodoo')
        
        if not DistributedShopKeeper.trainerCoin:
            DistributedShopKeeper.trainerCoin = DistributedShopKeeper.shopCoins.find('**/shopCoin_trainer')
        
        if not DistributedShopKeeper.pvpRewardsCoin:
            DistributedShopKeeper.pvpRewardsCoin = DistributedShopKeeper.shopCoins.find('**/shopCoin_jeweler')
        
        if not DistributedShopKeeper.musicianCoin:
            DistributedShopKeeper.musicianCoin = DistributedShopKeeper.shopCoins.find('**/shopCoin_music')
        
        if not DistributedShopKeeper.stowawayCoin:
            DistributedShopKeeper.stowawayCoin = DistributedShopKeeper.shopCoins.find('**/shopCoin_stowaway')
        
        if not DistributedShopKeeper.cannonCoin:
            DistributedShopKeeper.cannonCoin = DistributedShopKeeper.shopCoins.find('**/shopCoin_cannon')
        
        if not DistributedShopKeeper.fishingCoin:
            DistributedShopKeeper.fishingCoin = DistributedShopKeeper.shopCoins.find('**/shopCoin_fishing')
        
        if not DistributedShopKeeper.catalogrepCoin:
            DistributedShopKeeper.catalogrepCoin = DistributedShopKeeper.shopCoins.find('**/shopCoin_catalog')
        
        if not self.shopCoin:
            if DistributedShopKeeper.shopCoins:
                if self.avatarType.isA(AvatarTypes.Barber):
                    tex = DistributedShopKeeper.barberCoin.copyTo(self.nametag3d)
                elif self.avatarType.isA(AvatarTypes.Blacksmith):
                    tex = DistributedShopKeeper.blacksmithCoin.copyTo(self.nametag3d)
                elif self.avatarType.isA(AvatarTypes.Gunsmith):
                    tex = DistributedShopKeeper.gunsmithCoin.copyTo(self.nametag3d)
                elif self.avatarType.isA(AvatarTypes.Jeweler):
                    tex = DistributedShopKeeper.jewelerCoin.copyTo(self.nametag3d)
                elif self.avatarType.isA(AvatarTypes.Shipwright):
                    tex = DistributedShopKeeper.shipwrightCoin.copyTo(self.nametag3d)
                elif self.avatarType.isA(AvatarTypes.Tailor):
                    tex = DistributedShopKeeper.tailorCoin.copyTo(self.nametag3d)
                elif self.avatarType.isA(AvatarTypes.Tattoo):
                    tex = DistributedShopKeeper.tattooCoin.copyTo(self.nametag3d)
                elif self.avatarType.isA(AvatarTypes.Gypsy):
                    tex = DistributedShopKeeper.gypsyCoin.copyTo(self.nametag3d)
                elif self.avatarType.isA(AvatarTypes.Musician):
                    tex = DistributedShopKeeper.musicianCoin.copyTo(self.nametag3d)
                elif self.avatarType.isA(AvatarTypes.Trainer):
                    tex = DistributedShopKeeper.trainerCoin.copyTo(self.nametag3d)
                elif self.avatarType.isA(AvatarTypes.PvPRewards):
                    tex = DistributedShopKeeper.pvpRewardsCoin.copyTo(self.nametag3d)
                elif self.avatarType.isA(AvatarTypes.Stowaway):
                    tex = DistributedShopKeeper.stowawayCoin.copyTo(self.nametag3d)
                elif self.avatarType.isA(AvatarTypes.Cannonmaster):
                    tex = DistributedShopKeeper.cannonCoin.copyTo(self.nametag3d)
                elif self.avatarType.isA(AvatarTypes.Fishmaster):
                    tex = DistributedShopKeeper.fishingCoin.copyTo(self.nametag3d)
                elif self.avatarType.isA(AvatarTypes.CatalogRep):
                    tex = DistributedShopKeeper.catalogrepCoin.copyTo(self.nametag3d)
                else:
                    tex = None
                if tex:
                    self.shopCoin = tex
                    if self.nametagIcon:
                        self.shopCoin.setScale(2.0)
                        self.shopCoin.setPos(0.0, 0.0, 7.0)
                    else:
                        self.shopCoin.setScale(2.5)
                        self.shopCoin.setPos(0.0, 0.0, 3.5)
                    self.shopCoin.reparentTo(self.getNameText())
                    self.shopCoin.setDepthWrite(0)
                    self.shopCoinGlow = loader.loadModel('models/effects/lanternGlow')
                    self.shopCoinGlow.reparentTo(self.nametag.getNameIcon())
                    self.shopCoinGlow.setColorScaleOff()
                    self.shopCoinGlow.setFogOff()
                    self.shopCoinGlow.setLightOff()
                    if not self.nametagIcon:
                        self.shopCoinGlow.setScale(20.0)
                        self.shopCoinGlow.setPos(0, -0.050000000000000003, 3.0)
                    else:
                        self.shopCoinGlow.setScale(15.0)
                        self.shopCoinGlow.setPos(0, -0.050000000000000003, 6.5)
                    self.shopCoinGlow.setDepthWrite(0)
                    self.shopCoinGlow.node().setAttrib(ColorBlendAttrib.make(ColorBlendAttrib.MAdd, ColorBlendAttrib.OIncomingAlpha, ColorBlendAttrib.OOne))
                    self.shopCoinGlow.setColor(0.84999999999999998, 0.84999999999999998, 0.84999999999999998, 0.84999999999999998)
                
            
        elif self.nametagIcon:
            self.shopCoin.setScale(2.0)
            self.shopCoin.setPos(0.0, 0.0, 7.0)
        else:
            self.shopCoin.setScale(2.5)
            self.shopCoin.setPos(0.0, 0.0, 3.5)
        self.shopCoin.reparentTo(self.getNameText())
        self.shopCoinGlow.reparentTo(self.nametag.getNameIcon())
        if not self.nametagIcon:
            self.shopCoinGlow.setScale(20.0)
            self.shopCoinGlow.setPos(0, -0.050000000000000003, 3.0)
        else:
            self.shopCoinGlow.setScale(15.0)
            self.shopCoinGlow.setPos(0, -0.050000000000000003, 6.5)

    
    def disable(self):
        DistributedShopKeeper.notify.debug('disable(%s)' % self.doId)
        self.finishShopping()

    
    def delete(self):
        DistributedShopKeeper.notify.debug('delete(%s)' % self.doId)

    
    def resumeShopping(self):
        self.accept('makeSale', self.sendRequestMakeSale)
        self.acceptOnce('exitStore', self.finishShopping)
        self.acceptOnce('makeShipSale', self.sendRequestMakeShipSale)
        self.acceptOnce('purchaseAccessories', self.sendRequestAccessories)
        self.acceptOnce('requestMusic', self.sendRequestMusic)
        self.acceptOnce('requestStowaway', self.sendRequestStowaway)

    
    def startShopping(self, storeType):
        self.accept('makeSale', self.sendRequestMakeSale)
        self.acceptOnce('exitStore', self.finishShopping)
        self.acceptOnce('makeShipSale', self.sendRequestMakeShipSale)
        self.acceptOnce('purchaseAccessories', self.sendRequestAccessories)
        self.acceptOnce('requestMusic', self.sendRequestMusic)
        self.acceptOnce('requestStowaway', self.sendRequestStowaway)
        self.storeType = storeType
        simpleStoreList = getBase().config.GetString('want-simple-stores', '').lower()
        useSimpleStore = 1
        if storeType == InteractGlobals.STORE:
            storeItems = DropGlobals.getStoreItems(self.uniqueId)
            inventory = ItemGlobals.getLegalStoreItems(storeItems)
            if not inventory:
                inventory = self.shopInventory[:]
            elif self.avatarType.isA(AvatarTypes.Blacksmith):
                inventory += DAGGER_AMMO_SHELF_L1 + DAGGER_AMMO_SHELF_L2 + DAGGER_POUCH_SHELF
            elif self.avatarType.isA(AvatarTypes.Gunsmith):
                inventory += PISTOL_AMMO_SHELF_L1 + PISTOL_AMMO_SHELF_L2 + PISTOL_POUCH_SHELF + BOMB_AMMO_SHELF_L1 + BOMB_AMMO_SHELF_L2 + GRENADE_POUCH_SHELF + CANNON_AMMO_SHELF_L1 + CANNON_AMMO_SHELF_L2 + CANNON_POUCH_SHELF
            elif self.avatarType.isA(AvatarTypes.Grenadier):
                inventory += BOMB_AMMO_SHELF_L1 + BOMB_AMMO_SHELF_L2 + GRENADE_POUCH_SHELF
            elif self.avatarType.isA(AvatarTypes.Merchant):
                inventory += PISTOL_AMMO_SHELF_L1
            
            if hasattr(self.cr.distributedDistrict, 'siegeManager') and self.cr.distributedDistrict.siegeManager.getPvpEnabled() and self.cr.distributedDistrict.siegeManager.getUseRepairKit() and self.avatarType.isA(AvatarTypes.Gunsmith):
                inventory += SIEGE_SHELF
            
            if useSimpleStore:
                self.storeMenuGUI = SimpleStoreGUI.MerchantStoreGUI(inventory, PLocalizer.MerchantStore, self)
            else:
                self.storeMenuGUI = StoreGUI.StoreGUI(inventory, PLocalizer.MerchantStore)
        elif storeType == InteractGlobals.MUSICIAN:
            self.fadeIval = Sequence(Func(self.setTransparency, 1.0), self.colorScaleInterval(1.0, VBase4(1.0, 1.0, 1.0, 0.0)), Func(self.hide))
            self.fadeIval.start()
            inventory = self.shopInventory[:]
            self.storeMenuGUI = MusicianGUI.MusicianGUI(inventory, PLocalizer.InteractMusician)
        elif storeType == InteractGlobals.STOWAWAY:
            inventory = self.shopInventory[:]
            self.storeMenuGUI = StowawayGUI.StowawayGUI(inventory, PLocalizer.StowawayMenuTitle)
        elif storeType == InteractGlobals.SHIPS:
            self.storeMenuGUI = ShipStoreGUI.ShipStoreGUI(SHIP_SHELF, PLocalizer.Shipyard)
        elif storeType == InteractGlobals.TRAIN:
            pass
        elif storeType == InteractGlobals.UPGRADE:
            pass
        elif storeType == InteractGlobals.ACCESSORIES_STORE:
            self.fadeIval = Sequence(Func(self.setTransparency, 1.0), self.colorScaleInterval(1.0, VBase4(1.0, 1.0, 1.0, 0.0)), Func(self.hide))
            self.fadeIval.start()
            if useSimpleStore:
                self.storeMenuGUI = SimpleStoreGUI.AccessoriesStoreGUI(npc = self, shopId = self.getShopId())
            else:
                self.storeMenuGUI = AccessoriesStoreGUI.AccessoriesStoreGUI(npc = self, shopId = self.getShopId())
        elif storeType == InteractGlobals.TATTOO_STORE:
            self.fadeIval = Sequence(Func(self.setTransparency, 1.0), self.colorScaleInterval(1.0, VBase4(1.0, 1.0, 1.0, 0.0)), Func(self.hide))
            self.fadeIval.start()
            if useSimpleStore:
                self.storeMenuGUI = SimpleStoreGUI.TattooStoreGUI(npc = self, shopId = self.getShopId())
            else:
                self.storeMenuGUI = TattooStoreGUI.TattooStoreGUI(npc = self, shopId = self.getShopId())
        elif storeType == InteractGlobals.JEWELRY_STORE:
            self.fadeIval = Sequence(Func(self.setTransparency, 1.0), self.colorScaleInterval(1.0, VBase4(1.0, 1.0, 1.0, 0.0)), Func(self.hide))
            self.fadeIval.start()
            if useSimpleStore:
                self.storeMenuGUI = SimpleStoreGUI.JewelryStoreGUI(npc = self, shopId = self.getShopId())
            else:
                self.storeMenuGUI = JewelryStoreGUI.JewelryStoreGUI(npc = self, shopId = self.getShopId())
        elif storeType == InteractGlobals.BARBER_STORE:
            self.fadeIval = Sequence(Func(self.setTransparency, 1.0), self.colorScaleInterval(1.0, VBase4(1.0, 1.0, 1.0, 0.0)), Func(self.hide))
            self.fadeIval.start()
            self.storeMenuGUI = BarberStoreGUI.BarberStoreGUI(npc = self, shopId = self.getShopId())
        elif storeType == InteractGlobals.PVP_REWARDS_TATTOO:
            self.fadeIval = Sequence(Func(self.setTransparency, 1.0), self.colorScaleInterval(1.0, VBase4(1.0, 1.0, 1.0, 0.0)), Func(self.hide))
            self.fadeIval.start()
            self.storeMenuGUI = TattooStoreGUI.TattooStoreGUI(npc = self, shopId = PiratesGlobals.PRIVATEER_TATTOOS)
        elif storeType == InteractGlobals.PVP_REWARDS_HATS:
            self.fadeIval = Sequence(Func(self.setTransparency, 1.0), self.colorScaleInterval(1.0, VBase4(1.0, 1.0, 1.0, 0.0)), Func(self.hide))
            self.fadeIval.start()
            self.storeMenuGUI = AccessoriesStoreGUI.AccessoriesStoreGUI(npc = self, shopId = PiratesGlobals.PRIVATEER_HATS)
        elif storeType == InteractGlobals.PVP_REWARDS_COATS:
            self.fadeIval = Sequence(Func(self.setTransparency, 1.0), self.colorScaleInterval(1.0, VBase4(1.0, 1.0, 1.0, 0.0)), Func(self.hide))
            self.fadeIval.start()
            self.storeMenuGUI = AccessoriesStoreGUI.AccessoriesStoreGUI(npc = self, shopId = PiratesGlobals.PRIVATEER_COATS)
        elif storeType == InteractGlobals.CATALOG_STORE:
            self.storeMenuGUI = SimpleStoreGUI.CatalogStoreGUI(npc = self, shopId = self.getShopId())
        
        self.accept(InventoryGlobals.getCategoryChangeMsg(localAvatar.getInventoryId(), InventoryType.ItemTypeMoney), self.saleFinishedResponse)

    
    def finishShopping(self):
        if self.storePush and self.storeMenuGUI:
            if self.confirmDialog:
                self.confirmDialog.destroy()
                self.confirmDialog = None
            
            if self.interactGUI:
                self.interactGUI.hide()
            
            self.storeMenuGUI.show()
            self.storePush = False
            return None
        
        self.ignore('exitStore')
        self.ignore('makeSale')
        self.ignore('makeShipSale')
        self.ignore('purchaseAccessories')
        self.ignore('requestMusic')
        self.ignore('requestStowaway')
        messenger.send('stoppedShopping')
        self.ignore(InventoryGlobals.getCategoryChangeMsg(localAvatar.getInventoryId(), InventoryType.ItemTypeMoney))
        if self._DistributedShopKeeper__invRequest:
            DistributedInventoryBase.cancelGetInventory(self._DistributedShopKeeper__invRequest)
            self._DistributedShopKeeper__invRequest = None
        
        if self.storeMenuGUI:
            self.storeMenuGUI.destroy()
            self.storeMenuGUI = None
        
        if self.pickShipGUI:
            self.pickShipGUI.destroy()
            self.pickShipGUI = None
        
        if self.confirmDialog:
            self.confirmDialog.destroy()
            self.confirmDialog = None
        
        self.setColorScale(1, 1, 1, 1)
        self.setTransparency(0)
        self.show()
        if self.fadeIval:
            self.fadeIval.pause()
            self.fadeIval = None
        

    
    def saleFinishedResponse(self, extraArgs = None):
        if self.storeMenuGUI:
            if self.storeType in (InteractGlobals.STORE, InteractGlobals.SHIPS, InteractGlobals.ACCESSORIES_STORE, InteractGlobals.CATALOG_STORE, InteractGlobals.JEWELRY_STORE, InteractGlobals.TATTOO_STORE, InteractGlobals.BARBER_STORE):
                self.storeMenuGUI.updateBalance()
                if self.storeType in (InteractGlobals.ACCESSORIES_STORE, InteractGlobals.JEWELRY_STORE, InteractGlobals.TATTOO_STORE):
                    self.storeMenuGUI.changeMode(1, refresh = True)
                
            
        

    
    def sendRequestMakeSale(self, buying = [], selling = []):
        theBuying = prepareSwitchField(buying)
        theSelling = prepareSwitchField(selling)
        self.sendUpdate('requestMakeSale', [
            theBuying,
            theSelling])

    
    def sendRequestMakeShipSale(self, buying = [], selling = [], names = []):
        self.storeMenuGUI.hide()
        theBuying = prepareSwitchField(buying)
        theSelling = prepareSwitchField(selling)
        self.sendUpdate('requestMakeShipSale', [
            theBuying,
            theSelling,
            names])
        self.finishShopping()

    
    def sendRequestMusic(self, songId):
        self.storeMenuGUI.hide()
        self.sendUpdate('requestMusic', [
            songId])
        self.finishShopping()

    
    def sendRequestAccessoriesList(self, avId = None):
        if avId is None:
            avId = localAvatar.getDoId()
            self.sendUpdate('requestAccessoriesList', [
                avId])
        

    
    def sendRequestTattooList(self, avId = None):
        if avId is None:
            avId = localAvatar.getDoId()
            self.sendUpdate('requestTattooList', [
                avId])
        

    
    def sendRequestJewelryList(self, avId = None):
        if avId is None:
            avId = localAvatar.getDoId()
            self.sendUpdate('requestJewelryList', [
                avId])
        

    
    def responseClothingList(self, avId, accessories):
        if self.storeMenuGUI:
            self.storeMenuGUI.setWardrobe(accessories)
        

    
    def responseTattooList(self, avId, tattoos):
        if self.storeMenuGUI:
            self.storeMenuGUI.setWardrobe(tattoos)
        

    
    def responseJewelryList(self, avId, jewelry):
        if self.storeMenuGUI:
            self.storeMenuGUI.setWardrobe(jewelry)
        

    
    def sendRequestAccessories(self, purchases, selling):
        self.sendUpdate('requestAccessories', [
            purchases,
            selling])

    
    def sendRequestJewelry(self, purchases, selling):
        self.sendUpdate('requestJewelry', [
            purchases,
            selling])

    
    def sendRequestWeapon(self, purchases, selling):
        self.sendUpdate('requestWeapon', [
            purchases,
            selling])

    
    def sendRequestTattoo(self, purchases, selling):
        self.sendUpdate('requestTattoo', [
            purchases,
            selling])

    
    def sendRequestBarber(self, idx, color):
        self.sendUpdate('requestBarber', [
            idx,
            color])

    
    def makeTattooResponse(self, tattoo, zone, success):
        if self.storeMenuGUI and success:
            self.storeMenuGUI.tattooPurchase(zone, tattoo)
        

    
    def makeBarberResponse(self, uid, color, success):
        if self.storeMenuGUI and success:
            self.storeMenuGUI.barberPurchase(uid, color)
        

    
    def responseShipRepair(self, shipDoId):
        if self.pickShipGUI:
            self.pickShipGUI.updateShip(shipDoId)
            if self.confirmDialog:
                self.confirmDialog.destroy()
                self.confirmDialog = None
            
            self.confirmDialog = PDialog.PDialog(text = PLocalizer.ShipRepaired, style = OTPDialog.Acknowledge, command = self.handleRepairAcknowledge)
        

    
    def handleRepairAcknowledge(self, choice):
        if self.confirmDialog:
            self.confirmDialog.destroy()
            self.confirmDialog = None
        

    
    def makeSaleResponse(self, result):
        if result == RejectCode.OVERFLOW:
            localAvatar.guiMgr.createWarning(PLocalizer.TradeCannotHoldWarning, PiratesGuiGlobals.TextFG6)
        elif result == RejectCode.TIMEOUT:
            localAvatar.guiMgr.createWarning(PLocalizer.TradeTimeoutWarning, PiratesGuiGlobals.TextFG6)
        elif result == EconomyGlobals.RESULT_SUCCESS_UPGRADE_ROD:
            self.playQuestString(PLocalizer.FishmasterUpgradeRod, timeout = 10)
            localAvatar.guiMgr.createLevelUpText()
            localAvatar.guiMgr.levelUpLabel['text'] = PLocalizer.Minigame_Fishing_New_Rod
            localAvatar.guiMgr.levelUpIval.pause()
            localAvatar.guiMgr.levelUpIval.start()
            base.talkAssistant.receiveGameMessage(PLocalizer.Minigame_Fishing_New_Rod)
        elif result == 2:
            if self.storeMenuGUI:
                self.storeMenuGUI.updateBalance()
                self.storeMenuGUI.purchaseConfirmation()
            
        elif result != 1:
            localAvatar.guiMgr.createWarning(PLocalizer.TradeFailedWarning, PiratesGuiGlobals.TextFG6)
        else:
            localAvatar.guiMgr.combatTray.skillTray.updateSkillTrayAmounts()
            localAvatar.guiMgr.combatTray.tonicButton.getBestTonic()
            localAvatar.guiMgr.weaponPage.updateTonics()
            if self.storeMenuGUI:
                self.storeMenuGUI.updateBalance()
                self.storeMenuGUI.purchaseConfirmation()
            

    
    def startRepair(self, storeType):
        self.pickShipGUI = ShipShoppingPanel(PLocalizer.ShipRepair, doneCallback = self.confirmRepairShip, mode = 'repair')
        for shipId in base.localAvatar.getInventory().getShipDoIdList():
            self.pickShipGUI.addOwnShip(shipId, self.confirmRepairShip)
        

    
    def confirmRepairShip(self, shipId = None):
        if not shipId:
            return None
        
        shipOV = self.cr.getOwnerView(shipId)
        if not shipOV:
            return None
        
        cost = ShipGlobals.getRepairCost(shipOV)
        r = Functor(self.sendRequestRepairShip, shipId)
        if self.confirmDialog:
            self.confirmDialog.destroy()
            self.confirmDialog = None
        
        self.confirmDialog = PDialog.PDialog(text = PLocalizer.RepairConfirmDialog % {
            'gold': cost }, style = OTPDialog.YesNo, command = r)

    
    def sendRequestRepairShip(self, shipId, choice):
        shipOV = self.cr.getOwnerView(shipId)
        if not shipOV:
            return None
        
        cost = ShipGlobals.getRepairCost(shipOV)
        if choice == 1:
            inventory = base.localAvatar.getInventory()
            if inventory:
                if inventory.getGoldInPocket() < cost:
                    base.localAvatar.guiMgr.createWarning(PLocalizer.NotEnoughMoneyWarning, PiratesGuiGlobals.TextFG6)
                    return None
                
            
            self.sendUpdate('requestPurchaseRepair', [
                shipId])
        
        if self.confirmDialog:
            self.confirmDialog.destroy()
            self.confirmDialog = None
        

    
    def startSellShip(self, storeType):
        self.pickShipGUI = ShipShoppingPanel(PLocalizer.SellShip, doneCallback = self.confirmSellShip, mode = 'sell')
        
        def inventoryHere(inv):
            self._DistributedShopKeeper__invRequest = None
            if inv:
                for shipId in inv.getShipDoIdList():
                    self.pickShipGUI.addOwnShip(shipId, self.confirmSellShip)
                
            else:
                self.finishShopping()

        if self._DistributedShopKeeper__invRequest:
            DistributedInventoryBase.cancelGetInventory(self._DistributedShopKeeper__invRequest)
        
        self._DistributedShopKeeper__invRequest = DistributedInventoryBase.getInventory(localAvatar.getInventoryId(), inventoryHere)

    
    def confirmSellShip(self, shipId = None):
        if not shipId:
            return None
        
        shipOV = self.cr.getOwnerView(shipId)
        if not shipOV:
            return None
        
        if shipOV.state != 'Off':
            base.localAvatar.guiMgr.createWarning(PLocalizer.ShipNotInBottleWarning, PiratesGuiGlobals.TextFG6)
            return None
        
        modelType = ShipGlobals.getModelClass(shipOV.shipClass)
        cost = EconomyGlobals.getItemCost(modelType) / 2
        r = Functor(self.doubleConfirmSellShip, shipId)
        if self.confirmDialog:
            self.confirmDialog.destroy()
            self.confirmDialog = None
        
        self.confirmDialog = PDialog.PDialog(text = PLocalizer.SellShipConfirmDialog % {
            'gold': cost }, style = OTPDialog.YesNo, command = r)

    
    def doubleConfirmSellShip(self, shipId, choice):
        r = Functor(self.sendRequestSellShip, shipId)
        if self.confirmDialog:
            self.confirmDialog.destroy()
            self.confirmDialog = None
        
        if choice == 1:
            self.confirmDialog = PDialog.PDialog(text = PLocalizer.SellShipAreYouSureDialog, style = OTPDialog.YesNo, command = r)
        

    
    def sendRequestSellShip(self, shipId, choice):
        shipOV = self.cr.getOwnerView(shipId)
        if not shipOV:
            if self.pickShipGUI:
                self.pickShipGUI.hide()
            
            return None
        
        modelType = ShipGlobals.getModelClass(shipOV.shipClass)
        cost = EconomyGlobals.getItemCost(modelType) / 2
        if choice == 1:
            inventory = base.localAvatar.getInventory()
            if inventory:
                if cost > 0 and inventory.getGoldInPocket() + cost > InventoryGlobals.GOLD_CAP:
                    r = Functor(self.sendRequestSellShipGoldOverflow, shipId)
                    if self.confirmDialog:
                        self.confirmDialog.destroy()
                        self.confirmDialog = None
                    
                    self.confirmDialog = PDialog.PDialog(text = PLocalizer.ExcessGoldLost, style = OTPDialog.YesNo, command = r)
                    return None
                
            
            self.sendUpdate('requestSellShip', [
                shipId])
        
        if self.pickShipGUI:
            self.pickShipGUI.hide()
        
        self.finishShopping()

    
    def sendRequestSellShipGoldOverflow(self, shipId, choice):
        if self.pickShipGUI:
            self.pickShipGUI.hide()
        
        if choice == 1:
            self.sendUpdate('requestSellShip', [
                shipId])
        
        self.finishShopping()

    
    def startUpgrade(self, storeType):
        self.pickShipGUI = ShipShoppingPanel(PLocalizer.ShipOverhaul, doneCallback = self.openUpgradeShip, mode = 'upgrade')
        for shipId in base.localAvatar.getInventory().getShipDoIdList():
            self.pickShipGUI.addOwnShip(shipId, self.openUpgradeShip, callbackCallback = self.returnAfterUpgrade)
        

    
    def returnAfterUpgrade(self, shipId = None):
        if self.pickShipGUI:
            self.pickShipGUI.show()
        
        if self.interactGUI:
            self.interactGUI.show()
        

    
    def leaveFromUpgradeSelect(self):
        if self.interactGUI:
            self.interactGUI.show()
        

    
    def openUpgradeShip(self, shipId = None, callback = None):
        if not shipId:
            self.leaveFromUpgradeSelect()
            return None
        
        shipOV = self.cr.getOwnerView(shipId)
        if not shipOV:
            self.leaveFromUpgradeSelect()
            return None
        
        localAvatar.guiMgr.openShipUpgrades(shipId, callback)
        self.pickShipGUI.hide()
        self.interactGUI.hide()

    
    def startOverhaul(self, storeType):
        self.pickShipGUI = ShipShoppingPanel(PLocalizer.ShipOverhaul, doneCallback = self.confirmOverhaulShip, mode = 'overhaul')
        for shipId in base.localAvatar.getInventory().getShipDoIdList():
            self.pickShipGUI.addOwnShip(shipId, self.confirmOverhaulShip)
        

    
    def confirmOverhaulShip(self, shipId = None):
        if not shipId:
            return None
        
        shipOV = self.cr.getOwnerView(shipId)
        if not shipOV:
            return None
        
        if shipOV.state != 'Off':
            base.localAvatar.guiMgr.createWarning(PLocalizer.ShipNotInBottleWarning, PiratesGuiGlobals.TextFG6)
            return None
        
        shipClass = shipOV.getShipClass()
        cost = EconomyGlobals.getItemCost(shipClass) * EconomyGlobals.OVERHAUL_COST_PERCENTAGE
        if self.confirmDialog:
            self.confirmDialog.destroy()
            self.confirmDialog = None
        
        self.confirmDialog = PDialog.PDialog(text = PLocalizer.OverhaulConfirmDialog % {
            'gold': cost }, style = OTPDialog.YesNo, command = self.sendRequestOverhaulShip, extraArgs = [
            shipId])

    
    def sendRequestOverhaulShip(self, choice, extraArgs):
        if self.pickShipGUI:
            self.pickShipGUI.hide()
        
        shipId = extraArgs[0]
        shipOV = self.cr.getOwnerView(shipId)
        if not shipOV:
            return None
        
        shipClass = shipOV.getShipClass()
        cost = EconomyGlobals.getItemCost(shipClass) * EconomyGlobals.OVERHAUL_COST_PERCENTAGE
        if choice == 1:
            inventory = base.localAvatar.getInventory()
            if inventory:
                if inventory.getGoldInPocket() < cost:
                    base.localAvatar.guiMgr.createWarning(PLocalizer.NotEnoughMoneyWarning, PiratesGuiGlobals.TextFG6)
                    return None
                
            
            self.sendUpdate('requestPurchaseOverhaul', [
                shipId])
        
        self.finishShopping()

    
    def startSellItems(self, storeType = None, push = False):
        base.localAvatar.guiMgr.setIgnoreAllKeys(False)
        base.localAvatar.guiMgr.setSeaChestAllowed(True)
        base.localAvatar.guiMgr.showInventoryBagPanel()
        base.localAvatar.guiMgr.setIgnoreAllKeys(True)
        base.localAvatar.guiMgr.setSeaChestAllowed(False)
        self.storePush = push
        self.accept('sellItem', self.sendRequestSellItem)
        if self.confirmDialog:
            self.confirmDialog.destroy()
            self.confirmDialog = None
        
        self.confirmDialog = InventorySellConfirm.InventorySellConfirm(base.localAvatar.guiMgr.inventoryUIManager, self.finishShopping, pos = (-1.0, 0, -0.20000000000000001))

    
    def finishSelling(self):
        pass

    
    def sendRequestSellItem(self, item, amount = 1):
        if item[0] == InventoryType.ItemTypeClothing:
            amount = item[3]
        
        if item:
            self.sendUpdate('requestSellItem', [
                item[0],
                item[1],
                item[2],
                amount])
        

    
    def sendRequestStowaway(self, destUID):
        self.sendUpdate('requestStowaway', [
            destUID])
 def startOverhaul(self, storeType):
     self.pickShipGUI = ShipShoppingPanel(PLocalizer.ShipOverhaul, doneCallback = self.confirmOverhaulShip, mode = 'overhaul')
     for shipId in base.localAvatar.getInventory().getShipDoIdList():
         self.pickShipGUI.addOwnShip(shipId, self.confirmOverhaulShip)
 def startRepair(self, storeType):
     self.pickShipGUI = ShipShoppingPanel(PLocalizer.ShipRepair, doneCallback = self.confirmRepairShip, mode = 'repair')
     for shipId in base.localAvatar.getInventory().getShipDoIdList():
         self.pickShipGUI.addOwnShip(shipId, self.confirmRepairShip)
class DistributedShopKeeper:
    notify = directNotify.newCategory('DistributedShopKeeper')
    shopCoins = None
    barberCoin = None
    blacksmithCoin = None
    gunsmithCoin = None
    jewelerCoin = None
    shipwrightCoin = None
    tailorCoin = None
    tattooCoin = None
    gypsyCoin = None
    trainerCoin = None
    pvpRewardsCoin = None
    musicianCoin = None
    stowawayCoin = None
    cannonCoin = None
    fishingCoin = None
    catalogrepCoin = None

    def __init__(self):
        self.shopInventory = []
        self.shopCoin = None
        self.shopCoinGlow = None
        self._DistributedShopKeeper__invRequest = None
        self.storePush = False


    def generate(self):
        DistributedShopKeeper.notify.debug('generate(%s)' % self.doId)
        self.storeMenuGUI = None
        self.pickShipGUI = None
        self.confirmDialog = None
        self.fadeIval = None
        self.storeType = None


    def announceGenerate(self):
        DistributedShopKeeper.notify.debug('announceGenerate(%s)' % self.doId)
        self.loadShopCoin()
        if self.avatarType.isA(AvatarTypes.Cannoneer):
            self.shopInventory = CANNON_AMMO_SHELF_L1 + CANNON_AMMO_SHELF_L2 + CANNON_POUCH_SHELF
        elif self.avatarType.isA(AvatarTypes.Blacksmith):
            if base.config.GetBool('low-weapons-only', 0):
                self.shopInventory = MELEE_SHELF_L1 + MELEE_SHELF_L2 + DAGGER_AMMO_SHELF_L1 + DAGGER_AMMO_SHELF_L2 + DAGGER_POUCH_SHELF
            else:
                self.shopInventory = MELEE_SHELF_L1 + MELEE_SHELF_L2 + MELEE_SHELF_L3 + DAGGER_AMMO_SHELF_L1 + DAGGER_AMMO_SHELF_L2 + DAGGER_POUCH_SHELF
        elif self.avatarType.isA(AvatarTypes.Bartender):
            self.shopInventory = MELEE_SHELF_L1 + MISSILE_SHELF_L1 + BOMB_SHELF_L1
        elif self.avatarType.isA(AvatarTypes.Gunsmith):
            if base.config.GetBool('low-weapons-only', 0):
                self.shopInventory = MISSILE_SHELF_L1 + MISSILE_SHELF_L2 + PISTOL_AMMO_SHELF_L1 + PISTOL_AMMO_SHELF_L2 + PISTOL_POUCH_SHELF + BOMB_SHELF_L1 + BOMB_SHELF_L2 + BOMB_AMMO_SHELF_L1 + BOMB_AMMO_SHELF_L2 + GRENADE_POUCH_SHELF + CANNON_AMMO_SHELF_L1 + CANNON_AMMO_SHELF_L2 + CANNON_POUCH_SHELF
            else:
                self.shopInventory = MISSILE_SHELF_L1 + MISSILE_SHELF_L2 + MISSILE_SHELF_L3 + PISTOL_AMMO_SHELF_L1 + PISTOL_AMMO_SHELF_L2 + PISTOL_POUCH_SHELF + BOMB_SHELF_L1 + BOMB_SHELF_L2 + BOMB_SHELF_L3 + BOMB_AMMO_SHELF_L1 + BOMB_AMMO_SHELF_L2 + GRENADE_POUCH_SHELF + CANNON_AMMO_SHELF_L1 + CANNON_AMMO_SHELF_L2 + CANNON_POUCH_SHELF
        elif self.avatarType.isA(AvatarTypes.Grenadier):
            self.shopInventory = BOMB_SHELF_L1 + BOMB_SHELF_L2 + BOMB_SHELF_L3 + BOMB_AMMO_SHELF_L1 + BOMB_AMMO_SHELF_L2 + GRENADE_POUCH_SHELF
        elif self.avatarType.isA(AvatarTypes.Gypsy):
            if base.config.GetBool('low-weapons-only', 0):
                self.shopInventory = TONIC_SHELF_L1 + TONIC_SHELF_L2 + MOJO_SHELF_L1 + MOJO_SHELF_L2
            else:
                self.shopInventory = TONIC_SHELF_L1 + TONIC_SHELF_L2 + MOJO_SHELF_ALL
        elif self.avatarType.isA(AvatarTypes.Merchant):
            self.shopInventory = PISTOL_AMMO_SHELF_L1 + MELEE_SHELF_L1 + MISSILE_SHELF_L1
        elif self.avatarType.isA(AvatarTypes.MedicineMan):
            self.shopInventory = TONIC_SHELF_L1 + TONIC_SHELF_L2
        elif self.avatarType.isA(AvatarTypes.Musician):
            self.shopInventory = MUSIC_SHELF
        elif self.avatarType.isA(AvatarTypes.Stowaway):
            par = self.getParentObj()
            self.shopInventory = [1]
        elif self.avatarType.isA(AvatarTypes.Fishmaster):
            self.shopInventory = FISHING_LURE_SHELF



    def loadShopCoin(self):
        if not DistributedShopKeeper.shopCoins:
            DistributedShopKeeper.shopCoins = loader.loadModel('models/textureCards/shopCoins')

        if not DistributedShopKeeper.barberCoin:
            DistributedShopKeeper.barberCoin = DistributedShopKeeper.shopCoins.find('**/shopCoin_barber')

        if not DistributedShopKeeper.blacksmithCoin:
            DistributedShopKeeper.blacksmithCoin = DistributedShopKeeper.shopCoins.find('**/shopCoin_blacksmith')

        if not DistributedShopKeeper.gunsmithCoin:
            DistributedShopKeeper.gunsmithCoin = DistributedShopKeeper.shopCoins.find('**/shopCoin_gunsmith')

        if not DistributedShopKeeper.jewelerCoin:
            DistributedShopKeeper.jewelerCoin = DistributedShopKeeper.shopCoins.find('**/shopCoin_jeweler')

        if not DistributedShopKeeper.shipwrightCoin:
            DistributedShopKeeper.shipwrightCoin = DistributedShopKeeper.shopCoins.find('**/shopCoin_shipwright')

        if not DistributedShopKeeper.tailorCoin:
            DistributedShopKeeper.tailorCoin = DistributedShopKeeper.shopCoins.find('**/shopCoin_tailor')

        if not DistributedShopKeeper.tattooCoin:
            DistributedShopKeeper.tattooCoin = DistributedShopKeeper.shopCoins.find('**/shopCoin_tattoo')

        if not DistributedShopKeeper.gypsyCoin:
            DistributedShopKeeper.gypsyCoin = DistributedShopKeeper.shopCoins.find('**/shopCoin_voodoo')

        if not DistributedShopKeeper.trainerCoin:
            DistributedShopKeeper.trainerCoin = DistributedShopKeeper.shopCoins.find('**/shopCoin_trainer')

        if not DistributedShopKeeper.pvpRewardsCoin:
            DistributedShopKeeper.pvpRewardsCoin = DistributedShopKeeper.shopCoins.find('**/shopCoin_jeweler')

        if not DistributedShopKeeper.musicianCoin:
            DistributedShopKeeper.musicianCoin = DistributedShopKeeper.shopCoins.find('**/shopCoin_music')

        if not DistributedShopKeeper.stowawayCoin:
            DistributedShopKeeper.stowawayCoin = DistributedShopKeeper.shopCoins.find('**/shopCoin_stowaway')

        if not DistributedShopKeeper.cannonCoin:
            DistributedShopKeeper.cannonCoin = DistributedShopKeeper.shopCoins.find('**/shopCoin_cannon')

        if not DistributedShopKeeper.fishingCoin:
            DistributedShopKeeper.fishingCoin = DistributedShopKeeper.shopCoins.find('**/shopCoin_fishing')

        if not DistributedShopKeeper.catalogrepCoin:
            DistributedShopKeeper.catalogrepCoin = DistributedShopKeeper.shopCoins.find('**/shopCoin_catalog')

        if not self.shopCoin:
            if DistributedShopKeeper.shopCoins:
                if self.avatarType.isA(AvatarTypes.Barber):
                    tex = DistributedShopKeeper.barberCoin.copyTo(self.nametag3d)
                elif self.avatarType.isA(AvatarTypes.Blacksmith):
                    tex = DistributedShopKeeper.blacksmithCoin.copyTo(self.nametag3d)
                elif self.avatarType.isA(AvatarTypes.Gunsmith):
                    tex = DistributedShopKeeper.gunsmithCoin.copyTo(self.nametag3d)
                elif self.avatarType.isA(AvatarTypes.Jeweler):
                    tex = DistributedShopKeeper.jewelerCoin.copyTo(self.nametag3d)
                elif self.avatarType.isA(AvatarTypes.Shipwright):
                    tex = DistributedShopKeeper.shipwrightCoin.copyTo(self.nametag3d)
                elif self.avatarType.isA(AvatarTypes.Tailor):
                    tex = DistributedShopKeeper.tailorCoin.copyTo(self.nametag3d)
                elif self.avatarType.isA(AvatarTypes.Tattoo):
                    tex = DistributedShopKeeper.tattooCoin.copyTo(self.nametag3d)
                elif self.avatarType.isA(AvatarTypes.Gypsy):
                    tex = DistributedShopKeeper.gypsyCoin.copyTo(self.nametag3d)
                elif self.avatarType.isA(AvatarTypes.Musician):
                    tex = DistributedShopKeeper.musicianCoin.copyTo(self.nametag3d)
                elif self.avatarType.isA(AvatarTypes.Trainer):
                    tex = DistributedShopKeeper.trainerCoin.copyTo(self.nametag3d)
                elif self.avatarType.isA(AvatarTypes.PvPRewards):
                    tex = DistributedShopKeeper.pvpRewardsCoin.copyTo(self.nametag3d)
                elif self.avatarType.isA(AvatarTypes.Stowaway):
                    tex = DistributedShopKeeper.stowawayCoin.copyTo(self.nametag3d)
                elif self.avatarType.isA(AvatarTypes.Cannonmaster):
                    tex = DistributedShopKeeper.cannonCoin.copyTo(self.nametag3d)
                elif self.avatarType.isA(AvatarTypes.Fishmaster):
                    tex = DistributedShopKeeper.fishingCoin.copyTo(self.nametag3d)
                elif self.avatarType.isA(AvatarTypes.CatalogRep):
                    tex = DistributedShopKeeper.catalogrepCoin.copyTo(self.nametag3d)
                else:
                    tex = None
                if tex:
                    self.shopCoin = tex
                    if self.nametagIcon:
                        self.shopCoin.setScale(2.0)
                        self.shopCoin.setPos(0.0, 0.0, 7.0)
                    else:
                        self.shopCoin.setScale(2.5)
                        self.shopCoin.setPos(0.0, 0.0, 3.5)
                    self.shopCoin.reparentTo(self.getNameText())
                    self.shopCoin.setDepthWrite(0)
                    self.shopCoinGlow = loader.loadModel('models/effects/lanternGlow')
                    self.shopCoinGlow.reparentTo(self.nametag.getNameIcon())
                    self.shopCoinGlow.setColorScaleOff()
                    self.shopCoinGlow.setFogOff()
                    self.shopCoinGlow.setLightOff()
                    if not self.nametagIcon:
                        self.shopCoinGlow.setScale(20.0)
                        self.shopCoinGlow.setPos(0, -0.050000000000000003, 3.0)
                    else:
                        self.shopCoinGlow.setScale(15.0)
                        self.shopCoinGlow.setPos(0, -0.050000000000000003, 6.5)
                    self.shopCoinGlow.setDepthWrite(0)
                    self.shopCoinGlow.node().setAttrib(ColorBlendAttrib.make(ColorBlendAttrib.MAdd, ColorBlendAttrib.OIncomingAlpha, ColorBlendAttrib.OOne))
                    self.shopCoinGlow.setColor(0.84999999999999998, 0.84999999999999998, 0.84999999999999998, 0.84999999999999998)


        elif self.nametagIcon:
            self.shopCoin.setScale(2.0)
            self.shopCoin.setPos(0.0, 0.0, 7.0)
        else:
            self.shopCoin.setScale(2.5)
            self.shopCoin.setPos(0.0, 0.0, 3.5)
        self.shopCoin.reparentTo(self.getNameText())
        self.shopCoinGlow.reparentTo(self.nametag.getNameIcon())
        if not self.nametagIcon:
            self.shopCoinGlow.setScale(20.0)
            self.shopCoinGlow.setPos(0, -0.050000000000000003, 3.0)
        else:
            self.shopCoinGlow.setScale(15.0)
            self.shopCoinGlow.setPos(0, -0.050000000000000003, 6.5)


    def disable(self):
        DistributedShopKeeper.notify.debug('disable(%s)' % self.doId)
        self.finishShopping()


    def delete(self):
        DistributedShopKeeper.notify.debug('delete(%s)' % self.doId)


    def resumeShopping(self):
        self.accept('makeSale', self.sendRequestMakeSale)
        self.acceptOnce('exitStore', self.finishShopping)
        self.acceptOnce('makeShipSale', self.sendRequestMakeShipSale)
        self.acceptOnce('purchaseAccessories', self.sendRequestAccessories)
        self.acceptOnce('requestMusic', self.sendRequestMusic)
        self.acceptOnce('requestStowaway', self.sendRequestStowaway)


    def startShopping(self, storeType):
        self.accept('makeSale', self.sendRequestMakeSale)
        self.acceptOnce('exitStore', self.finishShopping)
        self.acceptOnce('makeShipSale', self.sendRequestMakeShipSale)
        self.acceptOnce('purchaseAccessories', self.sendRequestAccessories)
        self.acceptOnce('requestMusic', self.sendRequestMusic)
        self.acceptOnce('requestStowaway', self.sendRequestStowaway)
        self.storeType = storeType
        simpleStoreList = getBase().config.GetString('want-simple-stores', '').lower()
        useSimpleStore = 1
        if storeType == InteractGlobals.STORE:
            storeItems = DropGlobals.getStoreItems(self.uniqueId)
            inventory = ItemGlobals.getLegalStoreItems(storeItems)
            if not inventory:
                inventory = self.shopInventory[:]
            elif self.avatarType.isA(AvatarTypes.Blacksmith):
                inventory += DAGGER_AMMO_SHELF_L1 + DAGGER_AMMO_SHELF_L2 + DAGGER_POUCH_SHELF
            elif self.avatarType.isA(AvatarTypes.Gunsmith):
                inventory += PISTOL_AMMO_SHELF_L1 + PISTOL_AMMO_SHELF_L2 + PISTOL_POUCH_SHELF + BOMB_AMMO_SHELF_L1 + BOMB_AMMO_SHELF_L2 + GRENADE_POUCH_SHELF + CANNON_AMMO_SHELF_L1 + CANNON_AMMO_SHELF_L2 + CANNON_POUCH_SHELF
            elif self.avatarType.isA(AvatarTypes.Grenadier):
                inventory += BOMB_AMMO_SHELF_L1 + BOMB_AMMO_SHELF_L2 + GRENADE_POUCH_SHELF
            elif self.avatarType.isA(AvatarTypes.Merchant):
                inventory += PISTOL_AMMO_SHELF_L1

            if hasattr(self.cr.distributedDistrict, 'siegeManager') and self.cr.distributedDistrict.siegeManager.getPvpEnabled() and self.cr.distributedDistrict.siegeManager.getUseRepairKit() and self.avatarType.isA(AvatarTypes.Gunsmith):
                inventory += SIEGE_SHELF

            if useSimpleStore:
                self.storeMenuGUI = SimpleStoreGUI.MerchantStoreGUI(inventory, PLocalizer.MerchantStore, self)
            else:
                self.storeMenuGUI = StoreGUI.StoreGUI(inventory, PLocalizer.MerchantStore)
        elif storeType == InteractGlobals.MUSICIAN:
            self.fadeIval = Sequence(Func(self.setTransparency, 1.0), self.colorScaleInterval(1.0, VBase4(1.0, 1.0, 1.0, 0.0)), Func(self.hide))
            self.fadeIval.start()
            inventory = self.shopInventory[:]
            self.storeMenuGUI = MusicianGUI.MusicianGUI(inventory, PLocalizer.InteractMusician)
        elif storeType == InteractGlobals.STOWAWAY:
            inventory = self.shopInventory[:]
            self.storeMenuGUI = StowawayGUI.StowawayGUI(inventory, PLocalizer.StowawayMenuTitle)
        elif storeType == InteractGlobals.SHIPS:
            self.storeMenuGUI = ShipStoreGUI.ShipStoreGUI(SHIP_SHELF, PLocalizer.Shipyard)
        elif storeType == InteractGlobals.TRAIN:
            pass
        elif storeType == InteractGlobals.UPGRADE:
            pass
        elif storeType == InteractGlobals.ACCESSORIES_STORE:
            self.fadeIval = Sequence(Func(self.setTransparency, 1.0), self.colorScaleInterval(1.0, VBase4(1.0, 1.0, 1.0, 0.0)), Func(self.hide))
            self.fadeIval.start()
            if useSimpleStore:
                self.storeMenuGUI = SimpleStoreGUI.AccessoriesStoreGUI(npc = self, shopId = self.getShopId())
            else:
                self.storeMenuGUI = AccessoriesStoreGUI.AccessoriesStoreGUI(npc = self, shopId = self.getShopId())
        elif storeType == InteractGlobals.TATTOO_STORE:
            self.fadeIval = Sequence(Func(self.setTransparency, 1.0), self.colorScaleInterval(1.0, VBase4(1.0, 1.0, 1.0, 0.0)), Func(self.hide))
            self.fadeIval.start()
            if useSimpleStore:
                self.storeMenuGUI = SimpleStoreGUI.TattooStoreGUI(npc = self, shopId = self.getShopId())
            else:
                self.storeMenuGUI = TattooStoreGUI.TattooStoreGUI(npc = self, shopId = self.getShopId())
        elif storeType == InteractGlobals.JEWELRY_STORE:
            self.fadeIval = Sequence(Func(self.setTransparency, 1.0), self.colorScaleInterval(1.0, VBase4(1.0, 1.0, 1.0, 0.0)), Func(self.hide))
            self.fadeIval.start()
            if useSimpleStore:
                self.storeMenuGUI = SimpleStoreGUI.JewelryStoreGUI(npc = self, shopId = self.getShopId())
            else:
                self.storeMenuGUI = JewelryStoreGUI.JewelryStoreGUI(npc = self, shopId = self.getShopId())
        elif storeType == InteractGlobals.BARBER_STORE:
            self.fadeIval = Sequence(Func(self.setTransparency, 1.0), self.colorScaleInterval(1.0, VBase4(1.0, 1.0, 1.0, 0.0)), Func(self.hide))
            self.fadeIval.start()
            self.storeMenuGUI = BarberStoreGUI.BarberStoreGUI(npc = self, shopId = self.getShopId())
        elif storeType == InteractGlobals.PVP_REWARDS_TATTOO:
            self.fadeIval = Sequence(Func(self.setTransparency, 1.0), self.colorScaleInterval(1.0, VBase4(1.0, 1.0, 1.0, 0.0)), Func(self.hide))
            self.fadeIval.start()
            self.storeMenuGUI = TattooStoreGUI.TattooStoreGUI(npc = self, shopId = PiratesGlobals.PRIVATEER_TATTOOS)
        elif storeType == InteractGlobals.PVP_REWARDS_HATS:
            self.fadeIval = Sequence(Func(self.setTransparency, 1.0), self.colorScaleInterval(1.0, VBase4(1.0, 1.0, 1.0, 0.0)), Func(self.hide))
            self.fadeIval.start()
            self.storeMenuGUI = AccessoriesStoreGUI.AccessoriesStoreGUI(npc = self, shopId = PiratesGlobals.PRIVATEER_HATS)
        elif storeType == InteractGlobals.PVP_REWARDS_COATS:
            self.fadeIval = Sequence(Func(self.setTransparency, 1.0), self.colorScaleInterval(1.0, VBase4(1.0, 1.0, 1.0, 0.0)), Func(self.hide))
            self.fadeIval.start()
            self.storeMenuGUI = AccessoriesStoreGUI.AccessoriesStoreGUI(npc = self, shopId = PiratesGlobals.PRIVATEER_COATS)
        elif storeType == InteractGlobals.CATALOG_STORE:
            self.storeMenuGUI = SimpleStoreGUI.CatalogStoreGUI(npc = self, shopId = self.getShopId())

        self.accept(InventoryGlobals.getCategoryChangeMsg(localAvatar.getInventoryId(), InventoryType.ItemTypeMoney), self.saleFinishedResponse)


    def finishShopping(self):
        if self.storePush and self.storeMenuGUI:
            if self.confirmDialog:
                self.confirmDialog.destroy()
                self.confirmDialog = None

            if self.interactGUI:
                self.interactGUI.hide()

            self.storeMenuGUI.show()
            self.storePush = False
            return None

        self.ignore('exitStore')
        self.ignore('makeSale')
        self.ignore('makeShipSale')
        self.ignore('purchaseAccessories')
        self.ignore('requestMusic')
        self.ignore('requestStowaway')
        messenger.send('stoppedShopping')
        self.ignore(InventoryGlobals.getCategoryChangeMsg(localAvatar.getInventoryId(), InventoryType.ItemTypeMoney))
        if self._DistributedShopKeeper__invRequest:
            DistributedInventoryBase.cancelGetInventory(self._DistributedShopKeeper__invRequest)
            self._DistributedShopKeeper__invRequest = None

        if self.storeMenuGUI:
            self.storeMenuGUI.destroy()
            self.storeMenuGUI = None

        if self.pickShipGUI:
            self.pickShipGUI.destroy()
            self.pickShipGUI = None

        if self.confirmDialog:
            self.confirmDialog.destroy()
            self.confirmDialog = None

        self.setColorScale(1, 1, 1, 1)
        self.setTransparency(0)
        self.show()
        if self.fadeIval:
            self.fadeIval.pause()
            self.fadeIval = None



    def saleFinishedResponse(self, extraArgs = None):
        if self.storeMenuGUI:
            if self.storeType in (InteractGlobals.STORE, InteractGlobals.SHIPS, InteractGlobals.ACCESSORIES_STORE, InteractGlobals.CATALOG_STORE, InteractGlobals.JEWELRY_STORE, InteractGlobals.TATTOO_STORE, InteractGlobals.BARBER_STORE):
                self.storeMenuGUI.updateBalance()
                if self.storeType in (InteractGlobals.ACCESSORIES_STORE, InteractGlobals.JEWELRY_STORE, InteractGlobals.TATTOO_STORE):
                    self.storeMenuGUI.changeMode(1, refresh = True)





    def sendRequestMakeSale(self, buying = [], selling = []):
        theBuying = prepareSwitchField(buying)
        theSelling = prepareSwitchField(selling)
        self.sendUpdate('requestMakeSale', [
            theBuying,
            theSelling])


    def sendRequestMakeShipSale(self, buying = [], selling = [], names = []):
        self.storeMenuGUI.hide()
        theBuying = prepareSwitchField(buying)
        theSelling = prepareSwitchField(selling)
        self.sendUpdate('requestMakeShipSale', [
            theBuying,
            theSelling,
            names])
        self.finishShopping()


    def sendRequestMusic(self, songId):
        self.storeMenuGUI.hide()
        self.sendUpdate('requestMusic', [
            songId])
        self.finishShopping()


    def sendRequestAccessoriesList(self, avId = None):
        if avId is None:
            avId = localAvatar.getDoId()
            self.sendUpdate('requestAccessoriesList', [
                avId])



    def sendRequestTattooList(self, avId = None):
        if avId is None:
            avId = localAvatar.getDoId()
            self.sendUpdate('requestTattooList', [
                avId])



    def sendRequestJewelryList(self, avId = None):
        if avId is None:
            avId = localAvatar.getDoId()
            self.sendUpdate('requestJewelryList', [
                avId])



    def responseClothingList(self, avId, accessories):
        if self.storeMenuGUI:
            self.storeMenuGUI.setWardrobe(accessories)



    def responseTattooList(self, avId, tattoos):
        if self.storeMenuGUI:
            self.storeMenuGUI.setWardrobe(tattoos)



    def responseJewelryList(self, avId, jewelry):
        if self.storeMenuGUI:
            self.storeMenuGUI.setWardrobe(jewelry)



    def sendRequestAccessories(self, purchases, selling):
        self.sendUpdate('requestAccessories', [
            purchases,
            selling])


    def sendRequestJewelry(self, purchases, selling):
        self.sendUpdate('requestJewelry', [
            purchases,
            selling])


    def sendRequestWeapon(self, purchases, selling):
        self.sendUpdate('requestWeapon', [
            purchases,
            selling])


    def sendRequestTattoo(self, purchases, selling):
        self.sendUpdate('requestTattoo', [
            purchases,
            selling])


    def sendRequestBarber(self, idx, color):
        self.sendUpdate('requestBarber', [
            idx,
            color])


    def makeTattooResponse(self, tattoo, zone, success):
        if self.storeMenuGUI and success:
            self.storeMenuGUI.tattooPurchase(zone, tattoo)



    def makeBarberResponse(self, uid, color, success):
        if self.storeMenuGUI and success:
            self.storeMenuGUI.barberPurchase(uid, color)



    def responseShipRepair(self, shipDoId):
        if self.pickShipGUI:
            self.pickShipGUI.updateShip(shipDoId)
            if self.confirmDialog:
                self.confirmDialog.destroy()
                self.confirmDialog = None

            self.confirmDialog = PDialog.PDialog(text = PLocalizer.ShipRepaired, style = OTPDialog.Acknowledge, command = self.handleRepairAcknowledge)



    def handleRepairAcknowledge(self, choice):
        if self.confirmDialog:
            self.confirmDialog.destroy()
            self.confirmDialog = None



    def makeSaleResponse(self, result):
        if result == RejectCode.OVERFLOW:
            localAvatar.guiMgr.createWarning(PLocalizer.TradeCannotHoldWarning, PiratesGuiGlobals.TextFG6)
        elif result == RejectCode.TIMEOUT:
            localAvatar.guiMgr.createWarning(PLocalizer.TradeTimeoutWarning, PiratesGuiGlobals.TextFG6)
        elif result == EconomyGlobals.RESULT_SUCCESS_UPGRADE_ROD:
            self.playQuestString(PLocalizer.FishmasterUpgradeRod, timeout = 10)
            localAvatar.guiMgr.createLevelUpText()
            localAvatar.guiMgr.levelUpLabel['text'] = PLocalizer.Minigame_Fishing_New_Rod
            localAvatar.guiMgr.levelUpIval.pause()
            localAvatar.guiMgr.levelUpIval.start()
            base.talkAssistant.receiveGameMessage(PLocalizer.Minigame_Fishing_New_Rod)
        elif result == 2:
            if self.storeMenuGUI:
                self.storeMenuGUI.updateBalance()
                self.storeMenuGUI.purchaseConfirmation()

        elif result != 1:
            localAvatar.guiMgr.createWarning(PLocalizer.TradeFailedWarning, PiratesGuiGlobals.TextFG6)
        else:
            localAvatar.guiMgr.combatTray.skillTray.updateSkillTrayAmounts()
            localAvatar.guiMgr.combatTray.tonicButton.getBestTonic()
            localAvatar.guiMgr.weaponPage.updateTonics()
            if self.storeMenuGUI:
                self.storeMenuGUI.updateBalance()
                self.storeMenuGUI.purchaseConfirmation()



    def startRepair(self, storeType):
        self.pickShipGUI = ShipShoppingPanel(PLocalizer.ShipRepair, doneCallback = self.confirmRepairShip, mode = 'repair')
        for shipId in base.localAvatar.getInventory().getShipDoIdList():
            self.pickShipGUI.addOwnShip(shipId, self.confirmRepairShip)



    def confirmRepairShip(self, shipId = None):
        if not shipId:
            return None

        shipOV = self.cr.getOwnerView(shipId)
        if not shipOV:
            return None

        cost = ShipGlobals.getRepairCost(shipOV)
        r = Functor(self.sendRequestRepairShip, shipId)
        if self.confirmDialog:
            self.confirmDialog.destroy()
            self.confirmDialog = None

        self.confirmDialog = PDialog.PDialog(text = PLocalizer.RepairConfirmDialog % {
            'gold': cost }, style = OTPDialog.YesNo, command = r)


    def sendRequestRepairShip(self, shipId, choice):
        shipOV = self.cr.getOwnerView(shipId)
        if not shipOV:
            return None

        cost = ShipGlobals.getRepairCost(shipOV)
        if choice == 1:
            inventory = base.localAvatar.getInventory()
            if inventory:
                if inventory.getGoldInPocket() < cost:
                    base.localAvatar.guiMgr.createWarning(PLocalizer.NotEnoughMoneyWarning, PiratesGuiGlobals.TextFG6)
                    return None


            self.sendUpdate('requestPurchaseRepair', [
                shipId])

        if self.confirmDialog:
            self.confirmDialog.destroy()
            self.confirmDialog = None



    def startSellShip(self, storeType):
        self.pickShipGUI = ShipShoppingPanel(PLocalizer.SellShip, doneCallback = self.confirmSellShip, mode = 'sell')

        def inventoryHere(inv):
            self._DistributedShopKeeper__invRequest = None
            if inv:
                for shipId in inv.getShipDoIdList():
                    self.pickShipGUI.addOwnShip(shipId, self.confirmSellShip)

            else:
                self.finishShopping()

        if self._DistributedShopKeeper__invRequest:
            DistributedInventoryBase.cancelGetInventory(self._DistributedShopKeeper__invRequest)

        self._DistributedShopKeeper__invRequest = DistributedInventoryBase.getInventory(localAvatar.getInventoryId(), inventoryHere)


    def confirmSellShip(self, shipId = None):
        if not shipId:
            return None

        shipOV = self.cr.getOwnerView(shipId)
        if not shipOV:
            return None

        if shipOV.state != 'Off':
            base.localAvatar.guiMgr.createWarning(PLocalizer.ShipNotInBottleWarning, PiratesGuiGlobals.TextFG6)
            return None

        modelType = ShipGlobals.getModelClass(shipOV.shipClass)
        cost = EconomyGlobals.getItemCost(modelType) / 2
        r = Functor(self.doubleConfirmSellShip, shipId)
        if self.confirmDialog:
            self.confirmDialog.destroy()
            self.confirmDialog = None

        self.confirmDialog = PDialog.PDialog(text = PLocalizer.SellShipConfirmDialog % {
            'gold': cost }, style = OTPDialog.YesNo, command = r)


    def doubleConfirmSellShip(self, shipId, choice):
        r = Functor(self.sendRequestSellShip, shipId)
        if self.confirmDialog:
            self.confirmDialog.destroy()
            self.confirmDialog = None

        if choice == 1:
            self.confirmDialog = PDialog.PDialog(text = PLocalizer.SellShipAreYouSureDialog, style = OTPDialog.YesNo, command = r)



    def sendRequestSellShip(self, shipId, choice):
        shipOV = self.cr.getOwnerView(shipId)
        if not shipOV:
            if self.pickShipGUI:
                self.pickShipGUI.hide()

            return None

        modelType = ShipGlobals.getModelClass(shipOV.shipClass)
        cost = EconomyGlobals.getItemCost(modelType) / 2
        if choice == 1:
            inventory = base.localAvatar.getInventory()
            if inventory:
                if cost > 0 and inventory.getGoldInPocket() + cost > InventoryGlobals.GOLD_CAP:
                    r = Functor(self.sendRequestSellShipGoldOverflow, shipId)
                    if self.confirmDialog:
                        self.confirmDialog.destroy()
                        self.confirmDialog = None

                    self.confirmDialog = PDialog.PDialog(text = PLocalizer.ExcessGoldLost, style = OTPDialog.YesNo, command = r)
                    return None


            self.sendUpdate('requestSellShip', [
                shipId])

        if self.pickShipGUI:
            self.pickShipGUI.hide()

        self.finishShopping()


    def sendRequestSellShipGoldOverflow(self, shipId, choice):
        if self.pickShipGUI:
            self.pickShipGUI.hide()

        if choice == 1:
            self.sendUpdate('requestSellShip', [
                shipId])

        self.finishShopping()


    def startOverhaul(self, storeType):
        self.pickShipGUI = ShipShoppingPanel(PLocalizer.ShipOverhaul, doneCallback = self.confirmOverhaulShip, mode = 'overhaul')
        for shipId in base.localAvatar.getInventory().getShipDoIdList():
            self.pickShipGUI.addOwnShip(shipId, self.confirmOverhaulShip)



    def confirmOverhaulShip(self, shipId = None):
        if not shipId:
            return None

        shipOV = self.cr.getOwnerView(shipId)
        if not shipOV:
            return None

        if shipOV.state != 'Off':
            base.localAvatar.guiMgr.createWarning(PLocalizer.ShipNotInBottleWarning, PiratesGuiGlobals.TextFG6)
            return None

        shipClass = shipOV.getShipClass()
        cost = EconomyGlobals.getItemCost(shipClass) * EconomyGlobals.OVERHAUL_COST_PERCENTAGE
        if self.confirmDialog:
            self.confirmDialog.destroy()
            self.confirmDialog = None

        self.confirmDialog = PDialog.PDialog(text = PLocalizer.OverhaulConfirmDialog % {
            'gold': cost }, style = OTPDialog.YesNo, command = self.sendRequestOverhaulShip, extraArgs = [
            shipId])


    def sendRequestOverhaulShip(self, choice, extraArgs):
        if self.pickShipGUI:
            self.pickShipGUI.hide()

        shipId = extraArgs[0]
        shipOV = self.cr.getOwnerView(shipId)
        if not shipOV:
            return None

        shipClass = shipOV.getShipClass()
        cost = EconomyGlobals.getItemCost(shipClass) * EconomyGlobals.OVERHAUL_COST_PERCENTAGE
        if choice == 1:
            inventory = base.localAvatar.getInventory()
            if inventory:
                if inventory.getGoldInPocket() < cost:
                    base.localAvatar.guiMgr.createWarning(PLocalizer.NotEnoughMoneyWarning, PiratesGuiGlobals.TextFG6)
                    return None


            self.sendUpdate('requestPurchaseOverhaul', [
                shipId])

        self.finishShopping()


    def startSellItems(self, storeType = None, push = False):
        print 'startSellItems'
        base.localAvatar.guiMgr.setIgnoreAllKeys(False)
        base.localAvatar.guiMgr.setSeaChestAllowed(True)
        base.localAvatar.guiMgr.showInventoryBagPanel()
        base.localAvatar.guiMgr.setIgnoreAllKeys(True)
        base.localAvatar.guiMgr.setSeaChestAllowed(False)
        self.storePush = push
        self.accept('sellItem', self.sendRequestSellItem)
        if self.confirmDialog:
            self.confirmDialog.destroy()
            self.confirmDialog = None

        self.confirmDialog = InventorySellConfirm.InventorySellConfirm(base.localAvatar.guiMgr.inventoryUIManager, self.finishShopping, pos = (-1.0, 0, -0.20000000000000001))


    def finishSelling(self):
        pass


    def sendRequestSellItem(self, item, amount = 1):
        if item[0] == InventoryType.ItemTypeClothing:
            amount = item[3]

        if item:
            self.sendUpdate('requestSellItem', [
                item[0],
                item[1],
                item[2],
                amount])



    def sendRequestStowaway(self, destUID):
        self.sendUpdate('requestStowaway', [
            destUID])