Beispiel #1
0
 def createGui(self):
     reward = self.quest.getRewardText()
     if len(reward) > 1:
         if self.quest.isCompleteWithBonus():
             textFg = (0.1, 0.8, 0.1, 1)
             text = PLocalizer.QuestItemGuiCompleteFormat % {
                 'desc': self.quest.getStatusText(),
                 'return': self.quest.getReturnText(),
                 'reward': reward
             }
         else:
             textFg = PiratesGuiGlobals.TextFG2
             text = PLocalizer.QuestItemGuiIncompleteFormat % {
                 'desc': self.quest.getStatusText(),
                 'reward': reward
             }
     else:
         if self.quest.isCompleteWithBonus():
             textFg = (0.1, 0.8, 0.1, 1)
             text = PLocalizer.QuestItemGuiCompleteFormatNoReward % {
                 'desc': self.quest.getStatusText(),
                 'return': self.quest.getReturnText()
             }
         else:
             textFg = PiratesGuiGlobals.TextFG2
             text = PLocalizer.QuestItemGuiIncompleteFormatNoReward % {
                 'desc': self.quest.getStatusText()
             }
     self.descText = DirectLabel(
         parent=self,
         relief=None,
         text=text,
         text_align=TextNode.ALeft,
         text_scale=PiratesGuiGlobals.TextScaleLarge,
         text_fg=textFg,
         text_shadow=PiratesGuiGlobals.TextShadow,
         textMayChange=1,
         pos=(-0.1, 0, 0.1))
     bWidth = 0.2
     bHeight = 0.05
     bBorder = 0.005
     if self.quest.isDroppable():
         self.dropButton = GuiButton(parent=self,
                                     text=PLocalizer.Drop,
                                     pos=(0.8, 0, -0.02),
                                     command=self._dropQuest)
     else:
         self.dropButton = None
     self.shareButton = None
     return
 def createGui(self):
     reward = self.quest.getRewardText()
     if len(reward) > 1:
         if self.quest.isCompleteWithBonus():
             textFg = (0.10000000000000001, 0.80000000000000004, 0.10000000000000001, 1)
             text = PLocalizer.QuestItemGuiCompleteFormat % {
                 'desc': self.quest.getStatusText(),
                 'return': self.quest.getReturnText(),
                 'reward': reward }
         else:
             textFg = PiratesGuiGlobals.TextFG2
             text = PLocalizer.QuestItemGuiIncompleteFormat % {
                 'desc': self.quest.getStatusText(),
                 'reward': reward }
     elif self.quest.isCompleteWithBonus():
         textFg = (0.10000000000000001, 0.80000000000000004, 0.10000000000000001, 1)
         text = PLocalizer.QuestItemGuiCompleteFormatNoReward % {
             'desc': self.quest.getStatusText(),
             'return': self.quest.getReturnText() }
     else:
         textFg = PiratesGuiGlobals.TextFG2
         text = PLocalizer.QuestItemGuiIncompleteFormatNoReward % {
             'desc': self.quest.getStatusText() }
     self.descText = DirectLabel(parent = self, relief = None, text = text, text_align = TextNode.ALeft, text_scale = PiratesGuiGlobals.TextScaleLarge, text_fg = textFg, text_shadow = PiratesGuiGlobals.TextShadow, textMayChange = 1, pos = (-0.10000000000000001, 0, 0.10000000000000001))
     bWidth = 0.20000000000000001
     bHeight = 0.050000000000000003
     bBorder = 0.0050000000000000001
     if self.quest.isDroppable():
         self.dropButton = GuiButton(parent = self, text = PLocalizer.Drop, pos = (0.80000000000000004, 0, -0.02), command = self._dropQuest)
     else:
         self.dropButton = None
     self.shareButton = None
class QuestItemGui(InventoryItemGui):
    Width = PiratesGuiGlobals.InventoryPageWidth - PiratesGuiGlobals.GridSize
    Height = 0.20000000000000001
    
    def __init__(self, quest):
        self.loadGui()
        questScroll = self.topGui.find('**/main_gui_quest_scroll')
        data = (UberDogGlobals.InventoryCategory.QUESTS, quest.getDoId())
        self.quest = quest
        InventoryItemGui.__init__(self, data, image = questScroll, image_color = (0.69999999999999996, 0.69999999999999996, 0.69999999999999996, 1))
        self.initialiseoptions(QuestItemGui)
        self.accept(self.quest.getChangeEvent(), self._handleQuestChange)

    
    def destroy(self):
        self.destroyGui()
        DirectFrame.destroy(self)
        del self.quest
        self.ignoreAll()

    
    def createGui(self):
        reward = self.quest.getRewardText()
        if len(reward) > 1:
            if self.quest.isCompleteWithBonus():
                textFg = (0.10000000000000001, 0.80000000000000004, 0.10000000000000001, 1)
                text = PLocalizer.QuestItemGuiCompleteFormat % {
                    'desc': self.quest.getStatusText(),
                    'return': self.quest.getReturnText(),
                    'reward': reward }
            else:
                textFg = PiratesGuiGlobals.TextFG2
                text = PLocalizer.QuestItemGuiIncompleteFormat % {
                    'desc': self.quest.getStatusText(),
                    'reward': reward }
        elif self.quest.isCompleteWithBonus():
            textFg = (0.10000000000000001, 0.80000000000000004, 0.10000000000000001, 1)
            text = PLocalizer.QuestItemGuiCompleteFormatNoReward % {
                'desc': self.quest.getStatusText(),
                'return': self.quest.getReturnText() }
        else:
            textFg = PiratesGuiGlobals.TextFG2
            text = PLocalizer.QuestItemGuiIncompleteFormatNoReward % {
                'desc': self.quest.getStatusText() }
        self.descText = DirectLabel(parent = self, relief = None, text = text, text_align = TextNode.ALeft, text_scale = PiratesGuiGlobals.TextScaleLarge, text_fg = textFg, text_shadow = PiratesGuiGlobals.TextShadow, textMayChange = 1, pos = (-0.10000000000000001, 0, 0.10000000000000001))
        bWidth = 0.20000000000000001
        bHeight = 0.050000000000000003
        bBorder = 0.0050000000000000001
        if self.quest.isDroppable():
            self.dropButton = GuiButton(parent = self, text = PLocalizer.Drop, pos = (0.80000000000000004, 0, -0.02), command = self._dropQuest)
        else:
            self.dropButton = None
        self.shareButton = None

    
    def destroyGui(self):
        self.descText.destroy()
        del self.descText
        if self.dropButton:
            self.dropButton.destroy()
            del self.dropButton
        
        if self.shareButton:
            self.shareButton.destroy()
            del self.shareButton
        

    
    def _handleQuestChange(self):
        self.destroyGui()
        self.createGui()

    
    def _dropQuest(self):
        self.dropButton.hide()
        localAvatar.requestDropQuest(self.quest.getQuestId())

    
    def _shareQuest(self):
        localAvatar.requestShareQuest(self.quest.getQuestId())
Beispiel #4
0
class QuestItemGui(InventoryItemGui):
    __module__ = __name__
    Width = PiratesGuiGlobals.InventoryPageWidth - PiratesGuiGlobals.GridSize
    Height = 0.2

    def __init__(self, quest):
        self.loadGui()
        questScroll = self.topGui.find('**/main_gui_quest_scroll')
        data = (UberDogGlobals.InventoryCategory.QUESTS, quest.getDoId())
        self.quest = quest
        InventoryItemGui.__init__(self,
                                  data,
                                  image=questScroll,
                                  image_color=(0.7, 0.7, 0.7, 1))
        self.initialiseoptions(QuestItemGui)
        self.accept(self.quest.getChangeEvent(), self._handleQuestChange)

    def destroy(self):
        self.destroyGui()
        DirectFrame.destroy(self)
        del self.quest
        self.ignoreAll()

    def createGui(self):
        reward = self.quest.getRewardText()
        if len(reward) > 1:
            if self.quest.isCompleteWithBonus():
                textFg = (0.1, 0.8, 0.1, 1)
                text = PLocalizer.QuestItemGuiCompleteFormat % {
                    'desc': self.quest.getStatusText(),
                    'return': self.quest.getReturnText(),
                    'reward': reward
                }
            else:
                textFg = PiratesGuiGlobals.TextFG2
                text = PLocalizer.QuestItemGuiIncompleteFormat % {
                    'desc': self.quest.getStatusText(),
                    'reward': reward
                }
        else:
            if self.quest.isCompleteWithBonus():
                textFg = (0.1, 0.8, 0.1, 1)
                text = PLocalizer.QuestItemGuiCompleteFormatNoReward % {
                    'desc': self.quest.getStatusText(),
                    'return': self.quest.getReturnText()
                }
            else:
                textFg = PiratesGuiGlobals.TextFG2
                text = PLocalizer.QuestItemGuiIncompleteFormatNoReward % {
                    'desc': self.quest.getStatusText()
                }
        self.descText = DirectLabel(
            parent=self,
            relief=None,
            text=text,
            text_align=TextNode.ALeft,
            text_scale=PiratesGuiGlobals.TextScaleLarge,
            text_fg=textFg,
            text_shadow=PiratesGuiGlobals.TextShadow,
            textMayChange=1,
            pos=(-0.1, 0, 0.1))
        bWidth = 0.2
        bHeight = 0.05
        bBorder = 0.005
        if self.quest.isDroppable():
            self.dropButton = GuiButton(parent=self,
                                        text=PLocalizer.Drop,
                                        pos=(0.8, 0, -0.02),
                                        command=self._dropQuest)
        else:
            self.dropButton = None
        self.shareButton = None
        return

    def destroyGui(self):
        self.descText.destroy()
        del self.descText
        if self.dropButton:
            self.dropButton.destroy()
            del self.dropButton
        if self.shareButton:
            self.shareButton.destroy()
            del self.shareButton

    def _handleQuestChange(self):
        self.destroyGui()
        self.createGui()

    def _dropQuest(self):
        self.dropButton.hide()
        localAvatar.requestDropQuest(self.quest.getQuestId())

    def _shareQuest(self):
        localAvatar.requestShareQuest(self.quest.getQuestId())
 def rePanel(self, inventory):
     if not self.showing:
         self.needRefresh = 1
         return None
     
     skillTokens = {
         InventoryType.CutlassToken: (ItemGlobals.RUSTY_CUTLASS,),
         InventoryType.PistolToken: (ItemGlobals.FLINTLOCK_PISTOL,),
         InventoryType.DollToken: (ItemGlobals.VOODOO_DOLL,),
         InventoryType.DaggerToken: (ItemGlobals.BASIC_DAGGER,),
         InventoryType.GrenadeToken: (ItemGlobals.GRENADE_POUCH,),
         InventoryType.WandToken: (ItemGlobals.CURSED_STAFF,) }
     zIndex = 1
     for skillTokenKey in TOKEN_LIST:
         quantity = 0
         if localAvatar.getInventory().stacks.get(skillTokenKey):
             quantity = 1
         
         skillData = skillTokens[skillTokenKey]
         weaponId = skillData[0]
         key = None
         panel = WeaponPanel.WeaponPanel((weaponId, quantity), key)
         panel.reparentTo(self)
         panel.setZ(PiratesGuiGlobals.InventoryPanelHeight - 0.17999999999999999 - zIndex * panel.height)
         zIndex += 1
         repCat = WeaponGlobals.getRepId(weaponId)
         self.weaponPanels[repCat] = panel
         self.ignore('inventoryQuantity-%s' % inventory.getDoId())
         self.acceptOnce('inventoryQuantity-%s-%s' % (inventory.getDoId(), skillTokenKey), self.refreshList)
     
     repIcon_gui = loader.loadModel('models/textureCards/skillIcons')
     repIcon = repIcon_gui.find('**/box_base')
     if config.GetBool('want-fishing-game', 0):
         self.fishingIcon = GuiButton(pos = (0.16600000000000001, 0, 0.044999999999999998 + (PiratesGuiGlobals.InventoryPanelHeight - 0.17999999999999999) - zIndex * panel.height), helpText = PLocalizer.FishingRepDescription, helpOpaque = True, image = (repIcon, repIcon, repIcon, repIcon), image_scale = (0.14399999999999999, 0.14399999999999999, 0.14399999999999999))
         fishIconCard = loader.loadModel('models/textureCards/fishing_icons')
         inv = localAvatar.getInventory()
         fishingChangeMsg = InventoryGlobals.getCategoryQuantChangeMsg(inv.doId, InventoryType.FishingRod)
         if self.fishingChangeMsg:
             self.ignore(fishingChangeMsg)
         
         self.fishingChangeMsg = fishingChangeMsg
         self.acceptOnce(fishingChangeMsg, self.refreshList)
         rodIcons = [
             'pir_t_gui_fsh_smRodIcon',
             'pir_t_gui_fsh_mdRodIcon',
             'pir_t_gui_fsh_lgRodIcon']
         rodLvl = inv.getStackQuantity(InventoryType.FishingRod)
         rodIcon = rodIcons[rodLvl - 1]
         rodText = PLocalizer.FishingRodNames[rodLvl]
         if rodLvl >= 1:
             self.fishingIcon['geom'] = fishIconCard.find('**/' + rodIcon)
         
         self.fishingIcon['geom_scale'] = 0.10000000000000001
         self.fishingIcon['geom_pos'] = (0, 0, 0)
         self.fishingIcon.reparentTo(self)
         fishingRepValue = localAvatar.getInventory().getReputation(InventoryType.FishingRep)
         self.fishingRepMeter = ReputationMeter(InventoryType.FishingRep, width = 0.66000000000000003)
         self.fishingRepMeter.setPos(0.62, 0, 0.041000000000000002 + (PiratesGuiGlobals.InventoryPanelHeight - 0.17999999999999999) - zIndex * panel.height)
         self.fishingRepMeter.update(fishingRepValue)
         self.fishingRepMeter.reparentTo(self)
         self.fishingRepMeter.flattenLight()
         self.fishingPoleName = DirectLabel(parent = self, relief = None, state = DGG.DISABLED, text = rodText, text_scale = PiratesGuiGlobals.TextScaleSmall, text_align = TextNode.ALeft, text_fg = PiratesGuiGlobals.TextFG2, text_shadow = PiratesGuiGlobals.TextShadow, pos = (0.28999999999999998, 0, -0.0050000000000000001 + (PiratesGuiGlobals.InventoryPanelHeight - 0.17999999999999999) - 7 * panel.height), text_font = PiratesGlobals.getInterfaceFont())
         self.fishingPoleName.reparentTo(self)
         zIndex += 1
     
     iconCard = loader.loadModel('models/textureCards/skillIcons')
     if config.GetBool('want-potion-game', 0):
         self.potionIcon = GuiButton(pos = (0.16600000000000001, 0, 0.044999999999999998 + (PiratesGuiGlobals.InventoryPanelHeight - 0.17999999999999999) - zIndex * panel.height), helpText = PLocalizer.PotionRepDescription, helpOpaque = True, image = (repIcon, repIcon, repIcon, repIcon), image_scale = (0.14399999999999999, 0.14399999999999999, 0.14399999999999999))
         self.potionIcon['geom'] = iconCard.find('**/pir_t_gui_pot_base')
         self.potionIcon['geom_scale'] = 0.10000000000000001
         self.potionIcon['geom_pos'] = (0, 0, 0)
         self.potionIcon.reparentTo(self)
         potionRepValue = localAvatar.getInventory().getReputation(InventoryType.PotionsRep)
         self.potionRepMeter = ReputationMeter(InventoryType.PotionsRep, width = 0.66000000000000003)
         self.potionRepMeter.setPos(0.62, 0, 0.041000000000000002 + (PiratesGuiGlobals.InventoryPanelHeight - 0.17999999999999999) - zIndex * panel.height)
         self.potionRepMeter.update(potionRepValue)
         self.potionRepMeter.reparentTo(self)
         self.potionRepMeter.flattenLight()
         zIndex += 1
     
     items = dict(map(lambda x: (x.getType(), x.getCount()), inventory.getConsumables().values()))
     possibleItems = ItemGlobals.getAllHealthIds()
     havePorky = items.get(ItemGlobals.ROAST_PORK)
     if not havePorky and ItemGlobals.ROAST_PORK in possibleItems:
         possibleItems.remove(ItemGlobals.ROAST_PORK)
     
     offset = 0
     if base.config.GetBool('want-potion-game', 0):
         items = inventory.getConsumables()
         listLength = len(InventoryType.PotionMinigamePotions)
         count = 0
         for i in range(listLength):
             tonicId = InventoryType.PotionMinigamePotions[i]
             if items.get(tonicId):
                 button = SkillButton(tonicId, self.tonicCallback, items.get(tonicId), showQuantity = True, showHelp = True, showRing = True)
                 button.skillButton['geom_scale'] = 0.080000000000000002
                 x = 0.16 * (count % 6) + -1.2
                 z = 1.0 - int(count / 6) * 0.16
                 button.setPos(x, 0, z)
                 button.reparentTo(self)
                 self.tonicButtons[tonicId] = button
                 count += 1
                 continue
Beispiel #6
0
class WeaponPage(InventoryPage.InventoryPage):
    def __init__(self):
        InventoryPage.InventoryPage.__init__(self)
        self.initialiseoptions(WeaponPage)
        self.weaponPanels = {}
        self.tonicButtons = {}
        self.fishingIcon = None
        self.potionIcon = None
        self.fishingRepMeter = None
        self.potionRepMeter = None
        self.fishingPoleName = None
        self.fishingChangeMsg = None
        self.needRefresh = 1
        self.showing = 0

    def show(self):
        self.showing = 1
        InventoryPage.InventoryPage.show(self)
        if self.needRefresh:
            self.refreshList()
            self.needRefresh = 0

    def hide(self):
        self.showing = 0
        self.equipStatus = 0
        InventoryPage.InventoryPage.hide(self)

    def tonicCallback(self, skillId):
        localAvatar.guiMgr.combatTray.trySkill(InventoryType.UseItem, skillId, 0)

    def rePanel(self, inventory):
        if not self.showing:
            self.needRefresh = 1
            return None

        skillTokens = {
            InventoryType.CutlassToken: (ItemGlobals.RUSTY_CUTLASS,),
            InventoryType.PistolToken: (ItemGlobals.FLINTLOCK_PISTOL,),
            InventoryType.DollToken: (ItemGlobals.VOODOO_DOLL,),
            InventoryType.DaggerToken: (ItemGlobals.BASIC_DAGGER,),
            InventoryType.GrenadeToken: (ItemGlobals.GRENADE_POUCH,),
            InventoryType.WandToken: (ItemGlobals.CURSED_STAFF,),
        }
        zIndex = 1
        for skillTokenKey in TOKEN_LIST:
            quantity = 0
            if localAvatar.getInventory().stacks.get(skillTokenKey):
                quantity = 1

            skillData = skillTokens[skillTokenKey]
            weaponId = skillData[0]
            key = None
            panel = WeaponPanel.WeaponPanel((weaponId, quantity), key)
            panel.reparentTo(self)
            panel.setZ(PiratesGuiGlobals.InventoryPanelHeight - 0.17999999999999999 - zIndex * panel.height)
            zIndex += 1
            repCat = WeaponGlobals.getRepId(weaponId)
            self.weaponPanels[repCat] = panel
            self.ignore("inventoryQuantity-%s" % inventory.getDoId())
            self.acceptOnce("inventoryQuantity-%s-%s" % (inventory.getDoId(), skillTokenKey), self.refreshList)

        repIcon_gui = loader.loadModel("models/textureCards/skillIcons")
        repIcon = repIcon_gui.find("**/box_base")
        if config.GetBool("want-fishing-game", 0):
            self.fishingIcon = GuiButton(
                pos=(
                    0.16600000000000001,
                    0,
                    0.044999999999999998
                    + (PiratesGuiGlobals.InventoryPanelHeight - 0.17999999999999999)
                    - zIndex * panel.height,
                ),
                helpText=PLocalizer.FishingRepDescription,
                helpOpaque=True,
                image=(repIcon, repIcon, repIcon, repIcon),
                image_scale=(0.14399999999999999, 0.14399999999999999, 0.14399999999999999),
            )
            fishIconCard = loader.loadModel("models/textureCards/fishing_icons")
            inv = localAvatar.getInventory()
            fishingChangeMsg = InventoryGlobals.getCategoryQuantChangeMsg(inv.doId, InventoryType.FishingRod)
            if self.fishingChangeMsg:
                self.ignore(fishingChangeMsg)

            self.fishingChangeMsg = fishingChangeMsg
            self.acceptOnce(fishingChangeMsg, self.refreshList)
            rodIcons = ["pir_t_gui_fsh_smRodIcon", "pir_t_gui_fsh_mdRodIcon", "pir_t_gui_fsh_lgRodIcon"]
            rodLvl = inv.getStackQuantity(InventoryType.FishingRod)
            rodIcon = rodIcons[rodLvl - 1]
            rodText = PLocalizer.FishingRodNames[rodLvl]
            if rodLvl >= 1:
                self.fishingIcon["geom"] = fishIconCard.find("**/" + rodIcon)

            self.fishingIcon["geom_scale"] = 0.10000000000000001
            self.fishingIcon["geom_pos"] = (0, 0, 0)
            self.fishingIcon.reparentTo(self)
            fishingRepValue = localAvatar.getInventory().getReputation(InventoryType.FishingRep)
            self.fishingRepMeter = ReputationMeter(InventoryType.FishingRep, width=0.66000000000000003)
            self.fishingRepMeter.setPos(
                0.62,
                0,
                0.041000000000000002
                + (PiratesGuiGlobals.InventoryPanelHeight - 0.17999999999999999)
                - zIndex * panel.height,
            )
            self.fishingRepMeter.update(fishingRepValue)
            self.fishingRepMeter.reparentTo(self)
            self.fishingRepMeter.flattenLight()
            self.fishingPoleName = DirectLabel(
                parent=self,
                relief=None,
                state=DGG.DISABLED,
                text=rodText,
                text_scale=PiratesGuiGlobals.TextScaleSmall,
                text_align=TextNode.ALeft,
                text_fg=PiratesGuiGlobals.TextFG2,
                text_shadow=PiratesGuiGlobals.TextShadow,
                pos=(
                    0.28999999999999998,
                    0,
                    -0.0050000000000000001
                    + (PiratesGuiGlobals.InventoryPanelHeight - 0.17999999999999999)
                    - 7 * panel.height,
                ),
                text_font=PiratesGlobals.getInterfaceFont(),
            )
            self.fishingPoleName.reparentTo(self)
            zIndex += 1

        iconCard = loader.loadModel("models/textureCards/skillIcons")
        if config.GetBool("want-potion-game", 0):
            self.potionIcon = GuiButton(
                pos=(
                    0.16600000000000001,
                    0,
                    0.044999999999999998
                    + (PiratesGuiGlobals.InventoryPanelHeight - 0.17999999999999999)
                    - zIndex * panel.height,
                ),
                helpText=PLocalizer.PotionRepDescription,
                helpOpaque=True,
                image=(repIcon, repIcon, repIcon, repIcon),
                image_scale=(0.14399999999999999, 0.14399999999999999, 0.14399999999999999),
            )
            self.potionIcon["geom"] = iconCard.find("**/pir_t_gui_pot_base")
            self.potionIcon["geom_scale"] = 0.10000000000000001
            self.potionIcon["geom_pos"] = (0, 0, 0)
            self.potionIcon.reparentTo(self)
            potionRepValue = localAvatar.getInventory().getReputation(InventoryType.PotionsRep)
            self.potionRepMeter = ReputationMeter(InventoryType.PotionsRep, width=0.66000000000000003)
            self.potionRepMeter.setPos(
                0.62,
                0,
                0.041000000000000002
                + (PiratesGuiGlobals.InventoryPanelHeight - 0.17999999999999999)
                - zIndex * panel.height,
            )
            self.potionRepMeter.update(potionRepValue)
            self.potionRepMeter.reparentTo(self)
            self.potionRepMeter.flattenLight()
            zIndex += 1

        items = dict(map(lambda x: (x.getType(), x.getCount()), inventory.getConsumables().values()))
        possibleItems = ItemGlobals.getAllHealthIds()
        havePorky = items.get(ItemGlobals.ROAST_PORK)
        if not havePorky and ItemGlobals.ROAST_PORK in possibleItems:
            possibleItems.remove(ItemGlobals.ROAST_PORK)

        offset = 0
        if base.config.GetBool("want-potion-game", 0):
            items = inventory.getConsumables()
            listLength = len(InventoryType.PotionMinigamePotions)
            count = 0
            for i in range(listLength):
                tonicId = InventoryType.PotionMinigamePotions[i]
                if items.get(tonicId):
                    button = SkillButton(
                        tonicId, self.tonicCallback, items.get(tonicId), showQuantity=True, showHelp=True, showRing=True
                    )
                    button.skillButton["geom_scale"] = 0.080000000000000002
                    x = 0.16 * (count % 6) + -1.2
                    z = 1.0 - int(count / 6) * 0.16
                    button.setPos(x, 0, z)
                    button.reparentTo(self)
                    self.tonicButtons[tonicId] = button
                    count += 1
                    continue

    def refreshList(self, newWeaponId=None):
        for panel in self.weaponPanels.values():
            panel.destroy()

        for panel in self.tonicButtons.values():
            panel.destroy()

        if self.fishingIcon is not None:
            self.fishingIcon.destroy()

        if self.potionIcon is not None:
            self.potionIcon.destroy()

        if self.fishingRepMeter is not None:
            self.fishingRepMeter.destroy()

        if self.potionRepMeter is not None:
            self.potionRepMeter.destroy()

        if self.fishingPoleName is not None:
            self.fishingPoleName.destroy()

        inventory = localAvatar.getInventory()
        if inventory:
            if inventory.isReady():
                self.rePanel(inventory)
            else:
                self.ignore("inventoryReady-%s" % inventory.getDoId())
                self.acceptOnce("inventoryReady-%s" % inventory.getDoId(), self.rePanel)

    def destroy(self):
        if self.fishingChangeMsg:
            self.ignore(self.fishingChangeMsg)

        InventoryPage.InventoryPage.destroy(self)

    def updateTonics(self):
        if not hasattr(base, "localAvatar"):
            return None

        inv = localAvatar.getInventory()
        if not inv:
            return None

        possibleTonics = ItemGlobals.getAllHealthIds()
        for tonicId in possibleTonics:
            tonicAmt = inv.getItemQuantity(InventoryType.ItemTypeConsumable, tonicId)
            if self.tonicButtons.has_key(tonicId):
                self.tonicButtons[tonicId].updateQuantity(tonicAmt)
                self.tonicButtons[tonicId].checkAmount()
                continue
class WeaponPage(InventoryPage.InventoryPage):
    __module__ = __name__

    def __init__(self):
        InventoryPage.InventoryPage.__init__(self)
        self.initialiseoptions(WeaponPage)
        self.weaponPanels = {}
        self.tonicButtons = {}
        self.fishingIcon = None
        self.potionIcon = None
        self.fishingRepMeter = None
        self.potionRepMeter = None
        self.fishingPoleName = None
        self.fishingChangeMsg = None
        self.needRefresh = 1
        self.showing = 0
        return

    def show(self):
        self.showing = 1
        InventoryPage.InventoryPage.show(self)
        if self.needRefresh:
            self.refreshList()
            self.needRefresh = 0

    def hide(self):
        self.showing = 0
        self.equipStatus = 0
        InventoryPage.InventoryPage.hide(self)

    def tonicCallback(self, skillId):
        localAvatar.guiMgr.combatTray.trySkill(InventoryType.UseItem, skillId,
                                               0)

    def rePanel(self, inventory):
        if not self.showing:
            self.needRefresh = 1
            return
        skillTokens = {
            InventoryType.CutlassToken: (ItemGlobals.RUSTY_CUTLASS, ),
            InventoryType.PistolToken: (ItemGlobals.FLINTLOCK_PISTOL, ),
            InventoryType.DollToken: (ItemGlobals.VOODOO_DOLL, ),
            InventoryType.DaggerToken: (ItemGlobals.BASIC_DAGGER, ),
            InventoryType.GrenadeToken: (ItemGlobals.GRENADE_POUCH, ),
            InventoryType.WandToken: (ItemGlobals.CURSED_STAFF, )
        }
        zIndex = 1
        for skillTokenKey in TOKEN_LIST:
            quantity = 0
            if localAvatar.getInventory().stacks.get(skillTokenKey):
                quantity = 1
            skillData = skillTokens[skillTokenKey]
            weaponId = skillData[0]
            key = None
            panel = WeaponPanel.WeaponPanel((weaponId, quantity), key)
            panel.reparentTo(self)
            panel.setZ(PiratesGuiGlobals.InventoryPanelHeight - 0.18 -
                       zIndex * panel.height)
            zIndex += 1
            repCat = WeaponGlobals.getRepId(weaponId)
            self.weaponPanels[repCat] = panel
            self.ignore('inventoryQuantity-%s' % inventory.getDoId())
            self.acceptOnce(
                'inventoryQuantity-%s-%s' %
                (inventory.getDoId(), skillTokenKey), self.refreshList)

        repIcon_gui = loader.loadModel('models/textureCards/skillIcons')
        repIcon = repIcon_gui.find('**/box_base')
        if config.GetBool('want-fishing-game', 0):
            self.fishingIcon = GuiButton(
                pos=(0.166, 0,
                     0.045 + (PiratesGuiGlobals.InventoryPanelHeight - 0.18) -
                     zIndex * panel.height),
                helpText=PLocalizer.FishingRepDescription,
                helpOpaque=True,
                image=(repIcon, repIcon, repIcon, repIcon),
                image_scale=(0.144, 0.144, 0.144))
            fishIconCard = loader.loadModel(
                'models/textureCards/fishing_icons')
            inv = localAvatar.getInventory()
            fishingChangeMsg = InventoryGlobals.getCategoryQuantChangeMsg(
                inv.doId, InventoryType.FishingRod)
            if self.fishingChangeMsg:
                self.ignore(fishingChangeMsg)
            self.fishingChangeMsg = fishingChangeMsg
            self.acceptOnce(fishingChangeMsg, self.refreshList)
            rodIcons = [
                'pir_t_gui_fsh_smRodIcon', 'pir_t_gui_fsh_mdRodIcon',
                'pir_t_gui_fsh_lgRodIcon'
            ]
            rodLvl = inv.getStackQuantity(InventoryType.FishingRod)
            rodIcon = rodIcons[rodLvl - 1]
            rodText = PLocalizer.FishingRodNames[rodLvl]
            if rodLvl >= 1:
                self.fishingIcon['geom'] = fishIconCard.find('**/' + rodIcon)
            self.fishingIcon['geom_scale'] = 0.1
            self.fishingIcon['geom_pos'] = (0, 0, 0)
            self.fishingIcon.reparentTo(self)
            fishingRepValue = localAvatar.getInventory().getReputation(
                InventoryType.FishingRep)
            self.fishingRepMeter = ReputationMeter(InventoryType.FishingRep,
                                                   width=0.66)
            self.fishingRepMeter.setPos(
                0.62, 0,
                0.041 + (PiratesGuiGlobals.InventoryPanelHeight - 0.18) -
                zIndex * panel.height)
            self.fishingRepMeter.update(fishingRepValue)
            self.fishingRepMeter.reparentTo(self)
            self.fishingRepMeter.flattenLight()
            self.fishingPoleName = DirectLabel(
                parent=self,
                relief=None,
                state=DGG.DISABLED,
                text=rodText,
                text_scale=PiratesGuiGlobals.TextScaleSmall,
                text_align=TextNode.ALeft,
                text_fg=PiratesGuiGlobals.TextFG2,
                text_shadow=PiratesGuiGlobals.TextShadow,
                pos=(0.29, 0,
                     -0.005 + (PiratesGuiGlobals.InventoryPanelHeight - 0.18) -
                     7 * panel.height),
                text_font=PiratesGlobals.getInterfaceFont())
            self.fishingPoleName.reparentTo(self)
            zIndex += 1
        iconCard = loader.loadModel('models/textureCards/skillIcons')
        if config.GetBool('want-potion-game', 0):
            self.potionIcon = GuiButton(
                pos=(0.166, 0,
                     0.045 + (PiratesGuiGlobals.InventoryPanelHeight - 0.18) -
                     zIndex * panel.height),
                helpText=PLocalizer.PotionRepDescription,
                helpOpaque=True,
                image=(repIcon, repIcon, repIcon, repIcon),
                image_scale=(0.144, 0.144, 0.144))
            self.potionIcon['geom'] = iconCard.find('**/pir_t_gui_pot_base')
            self.potionIcon['geom_scale'] = 0.1
            self.potionIcon['geom_pos'] = (0, 0, 0)
            self.potionIcon.reparentTo(self)
            potionRepValue = localAvatar.getInventory().getReputation(
                InventoryType.PotionsRep)
            self.potionRepMeter = ReputationMeter(InventoryType.PotionsRep,
                                                  width=0.66)
            self.potionRepMeter.setPos(
                0.62, 0,
                0.041 + (PiratesGuiGlobals.InventoryPanelHeight - 0.18) -
                zIndex * panel.height)
            self.potionRepMeter.update(potionRepValue)
            self.potionRepMeter.reparentTo(self)
            self.potionRepMeter.flattenLight()
            zIndex += 1
        items = dict(
            map(lambda x: (x.getType(), x.getCount()),
                inventory.getConsumables().values()))
        possibleItems = ItemGlobals.getAllHealthIds()
        havePorky = items.get(ItemGlobals.ROAST_PORK)
        if not havePorky and ItemGlobals.ROAST_PORK in possibleItems:
            possibleItems.remove(ItemGlobals.ROAST_PORK)
        offset = 0
        if base.config.GetBool('want-potion-game', 0):
            items = inventory.getConsumables()
            listLength = len(InventoryType.PotionMinigamePotions)
            count = 0
            for i in range(listLength):
                tonicId = InventoryType.PotionMinigamePotions[i]
                if items.get(tonicId):
                    button = SkillButton(tonicId,
                                         self.tonicCallback,
                                         items.get(tonicId),
                                         showQuantity=True,
                                         showHelp=True,
                                         showRing=True)
                    button.skillButton['geom_scale'] = 0.08
                    x = 0.16 * (count % 6) + -1.2
                    z = 1.0 - int(count / 6) * 0.16
                    button.setPos(x, 0, z)
                    button.reparentTo(self)
                    self.tonicButtons[tonicId] = button
                    count += 1

        return

    def refreshList(self, newWeaponId=None):
        for panel in self.weaponPanels.values():
            panel.destroy()

        for panel in self.tonicButtons.values():
            panel.destroy()

        if self.fishingIcon is not None:
            self.fishingIcon.destroy()
        if self.potionIcon is not None:
            self.potionIcon.destroy()
        if self.fishingRepMeter is not None:
            self.fishingRepMeter.destroy()
        if self.potionRepMeter is not None:
            self.potionRepMeter.destroy()
        if self.fishingPoleName is not None:
            self.fishingPoleName.destroy()
        inventory = localAvatar.getInventory()
        if inventory:
            if inventory.isReady():
                self.rePanel(inventory)
            else:
                self.ignore('inventoryReady-%s' % inventory.getDoId())
                self.acceptOnce('inventoryReady-%s' % inventory.getDoId(),
                                self.rePanel)
        return

    def destroy(self):
        if self.fishingChangeMsg:
            self.ignore(self.fishingChangeMsg)
        InventoryPage.InventoryPage.destroy(self)

    def updateTonics(self):
        if not hasattr(base, 'localAvatar'):
            return
        inv = localAvatar.getInventory()
        if not inv:
            return
        possibleTonics = ItemGlobals.getAllHealthIds()
        for tonicId in possibleTonics:
            tonicAmt = inv.getItemQuantity(InventoryType.ItemTypeConsumable,
                                           tonicId)
            if self.tonicButtons.has_key(tonicId):
                self.tonicButtons[tonicId].updateQuantity(tonicAmt)
                self.tonicButtons[tonicId].checkAmount()