DANIEL: New npc friends page

This commit is contained in:
John 2015-06-01 22:07:59 +03:00 committed by Loudrob
parent 7c0ba851c7
commit 7bad238cbe
7 changed files with 72 additions and 135 deletions

View file

@ -637,7 +637,6 @@ dclass DistributedToon : DistributedPlayer {
setTrackProgress(int8 = -1, uint32 = 0) required ownrecv db; setTrackProgress(int8 = -1, uint32 = 0) required ownrecv db;
setTrackBonusLevel(int8[] = [-1,-1,-1,-1,-1,-1,-1]) required broadcast ownrecv db; setTrackBonusLevel(int8[] = [-1,-1,-1,-1,-1,-1,-1]) required broadcast ownrecv db;
setInventory(blob = [0*7, 0*7, 0*7, 0*7, 0, 0*6, 0, 0*6, 0*7]) required ownrecv db; setInventory(blob = [0*7, 0*7, 0*7, 0*7, 0, 0*6, 0, 0*6, 0*7]) required ownrecv db;
setMaxNPCFriends(uint16 = 16) required ownrecv db;
setNPCFriendsDict(FriendEntry[] = []) required ownrecv db; setNPCFriendsDict(FriendEntry[] = []) required ownrecv db;
setDefaultShard(uint32 = 0) required ownrecv broadcast db; setDefaultShard(uint32 = 0) required ownrecv broadcast db;
setDefaultZone(uint32 = 0) required ownrecv broadcast db; setDefaultZone(uint32 = 0) required ownrecv broadcast db;

View file

@ -11,7 +11,7 @@ class NPCFriendPage(ShtikerPage.ShtikerPage):
def load(self): def load(self):
self.title = DirectLabel(parent=self, relief=None, text=TTLocalizer.NPCFriendPageTitle, text_scale=0.12, textMayChange=0, pos=(0, 0, 0.6)) self.title = DirectLabel(parent=self, relief=None, text=TTLocalizer.NPCFriendPageTitle, text_scale=0.12, textMayChange=0, pos=(0, 0, 0.6))
self.friendPanel = NPCFriendPanel.NPCFriendPanel(parent=self) self.friendPanel = NPCFriendPanel.NPCFriendPanel(parent=self, callable=False)
self.friendPanel.setScale(0.1225) self.friendPanel.setScale(0.1225)
self.friendPanel.setZ(-0.03) self.friendPanel.setZ(-0.03)
return return
@ -22,7 +22,8 @@ class NPCFriendPage(ShtikerPage.ShtikerPage):
del self.friendPanel del self.friendPanel
def updatePage(self): def updatePage(self):
self.friendPanel.update(base.localAvatar.NPCFriendsDict, fCallable=0) self.friendPanel.setFriends(base.localAvatar.NPCFriendsDict)
self.friendPanel.update()
def enter(self): def enter(self):
self.updatePage() self.updatePage()

View file

@ -149,7 +149,6 @@ class DistributedToon(DistributedPlayer.DistributedPlayer, Toon.Toon, Distribute
self.maxMoney = 0 self.maxMoney = 0
self.maxBankMoney = 0 self.maxBankMoney = 0
self.emblems = [0, 0] self.emblems = [0, 0]
self.maxNPCFriends = 16
self.petId = 0 self.petId = 0
self.petTutorialDone = False self.petTutorialDone = False
self.fishBingoTutorialDone = False self.fishBingoTutorialDone = False
@ -552,17 +551,6 @@ class DistributedToon(DistributedPlayer.DistributedPlayer, Toon.Toon, Distribute
if chatString: if chatString:
self.displayWhisper(fromId, chatString, WTQuickTalker) self.displayWhisper(fromId, chatString, WTQuickTalker)
def setMaxNPCFriends(self, max):
max &= 32767
if max != self.maxNPCFriends:
self.maxNPCFriends = max
messenger.send(self.uniqueName('maxNPCFriendsChange'))
else:
self.maxNPCFriends = max
def getMaxNPCFriends(self):
return self.maxNPCFriends
def getNPCFriendsDict(self): def getNPCFriendsDict(self):
return self.NPCFriendsDict return self.NPCFriendsDict

View file

@ -516,31 +516,6 @@ class DistributedToonAI(DistributedPlayerAI.DistributedPlayerAI, DistributedSmoo
self.friendsList.append(friendId) self.friendsList.append(friendId)
self.air.questManager.toonMadeFriend(self) self.air.questManager.toonMadeFriend(self)
def d_setMaxNPCFriends(self, max):
self.sendUpdate('setMaxNPCFriends', [max])
def setMaxNPCFriends(self, max):
if max & 32768:
self.b_setSosPageFlag(1)
max &= 32767
configMax = simbase.config.GetInt('max-sos-cards', 16)
if configMax != max:
if self.sosPageFlag == 0:
self.b_setMaxNPCFriends(configMax)
else:
self.b_setMaxNPCFriends(configMax | 32768)
else:
self.maxNPCFriends = max
if self.maxNPCFriends != 8 and self.maxNPCFriends != 16:
self.notify.warning('Wrong max SOS cards %s, %d' % (self.maxNPCFriends, self.doId))
def b_setMaxNPCFriends(self, max):
self.setMaxNPCFriends(max)
self.d_setMaxNPCFriends(max)
def getMaxNPCFriends(self):
return self.maxNPCFriends
def getBattleId(self): def getBattleId(self):
if self.battleId >= 0: if self.battleId >= 0:
return self.battleId return self.battleId
@ -591,8 +566,6 @@ class DistributedToonAI(DistributedPlayerAI.DistributedPlayerAI, DistributedSmoo
if npcFriend in self.NPCFriendsDict: if npcFriend in self.NPCFriendsDict:
self.NPCFriendsDict[npcFriend] += numCalls self.NPCFriendsDict[npcFriend] += numCalls
elif npcFriend in npcFriends: elif npcFriend in npcFriends:
if len(self.NPCFriendsDict.keys()) >= self.maxNPCFriends:
return 0
self.NPCFriendsDict[npcFriend] = numCalls self.NPCFriendsDict[npcFriend] = numCalls
else: else:
self.notify.warning('invalid NPC: %d' % npcFriend) self.notify.warning('invalid NPC: %d' % npcFriend)
@ -600,8 +573,6 @@ class DistributedToonAI(DistributedPlayerAI.DistributedPlayerAI, DistributedSmoo
if self.NPCFriendsDict[npcFriend] > self.maxCallsPerNPC: if self.NPCFriendsDict[npcFriend] > self.maxCallsPerNPC:
self.NPCFriendsDict[npcFriend] = self.maxCallsPerNPC self.NPCFriendsDict[npcFriend] = self.maxCallsPerNPC
self.d_setNPCFriendsDict(self.NPCFriendsDict) self.d_setNPCFriendsDict(self.NPCFriendsDict)
if self.sosPageFlag == 0:
self.b_setMaxNPCFriends(self.maxNPCFriends | 32768)
self.air.questManager.toonMadeNPCFriend(self, numCalls, method) self.air.questManager.toonMadeNPCFriend(self, numCalls, method)
return 1 return 1

View file

@ -55,9 +55,6 @@ class DistributedToonUD(DistributedObjectUD):
def setInventory(self, todo0): def setInventory(self, todo0):
pass pass
def setMaxNPCFriends(self, todo0):
pass
def setNPCFriendsDict(self, todo0): def setNPCFriendsDict(self, todo0):
pass pass

View file

@ -1,79 +1,86 @@
from direct.gui.DirectGui import * from direct.gui.DirectGui import *
from direct.directnotify import DirectNotifyGlobal from toontown.toonbase import TTLocalizer, ToontownGlobals, ToontownBattleGlobals
from pandac.PandaModules import * import NPCToons, ToonDNA, ToonHead
import NPCToons
import ToonHead
import ToonDNA
from toontown.toonbase import TTLocalizer
from toontown.toonbase import ToontownGlobals
from toontown.toonbase import ToontownBattleGlobals
from toontown.toon import LaughingManGlobals
class NPCFriendPanel(DirectFrame): class NPCFriendPanel(DirectFrame):
notify = DirectNotifyGlobal.directNotify.newCategory('NPCFriendPanel')
def __init__(self, parent = aspect2d, **kw): def __init__(self, parent = aspect2d, callable = False, **kw):
optiondefs = (('relief', None, None), ('doneEvent', None, None)) optiondefs = (('relief', None, None), ('doneEvent', None, None))
self.defineoptions(kw, optiondefs) self.defineoptions(kw, optiondefs)
DirectFrame.__init__(self, parent=parent) DirectFrame.__init__(self, parent=parent)
base.cr.lol = self
self.callable = callable
self.cardList = [] self.cardList = []
self.friendDict = {}
self.pos = 0
self.updateLayout() self.updateLayout()
self.initialiseoptions(NPCFriendPanel) self.initialiseoptions(NPCFriendPanel)
self.accept(localAvatar.uniqueName('maxNPCFriendsChange'), self.updateLayout)
return None
def update(self, friendDict, fCallable = 0): gui = loader.loadModel('phase_3.5/models/gui/battle_gui')
friendList = friendDict.keys() buttonImage = (gui.find('**/PckMn_BackBtn'), gui.find('**/PckMn_BackBtn_Dn'), gui.find('**/PckMn_BackBtn_Rlvr'))
for i in xrange(self.maxNPCFriends): self.leftArrow = DirectButton(parent=self, relief=None, image=buttonImage, pos=(-6.8, 0, 0), scale=3.8, command=self.addPageIndex, extraArgs=[-1])
card = self.cardList[i] self.rightArrow = DirectButton(parent=self, relief=None, image=buttonImage, pos=(6.8, 0, 0), scale=-3.8, command=self.addPageIndex, extraArgs=[1])
try: gui.removeNode()
NPCID = friendList[i]
count = friendDict[NPCID]
except IndexError:
NPCID = None
count = 0
card.update(NPCID, count, fCallable) self.leftArrow.hide()
return def addPageIndex(self, index):
self.pos += (16 * index)
if self.pos > 0:
self.leftArrow.show()
else:
self.leftArrow.hide()
self.update()
def update(self):
friendList = self.friendDict.keys()
cardNum = 0
for i in xrange(self.pos, self.pos + 16):
card = self.cardList[cardNum]
if len(friendList) > i:
npcId = friendList[i]
card.update(npcId, self.friendDict[npcId], self.callable)
self.rightArrow.show()
else:
card.update(None, 0, self.callable)
self.rightArrow.hide()
cardNum += 1
def updateLayout(self): def updateLayout(self):
for card in self.cardList: for card in self.cardList:
card.destroy() card.destroy()
self.cardList = [] self.cardList = []
self.maxNPCFriends = localAvatar.getMaxNPCFriends() xOffset = -5.2
rotateCard = False yOffset = 3.5
if self.maxNPCFriends == 8:
rotateCard = True
xOffset = -5.25
yOffset = 2.3
yOffset2 = -4.7
elif self.maxNPCFriends == 16:
xOffset = -5.2
yOffset = 3.5
yOffset2 = -2.45
else:
self.notify.error('got wrong max SOS cards %s' % self.maxNPCFriends)
count = 0 count = 0
for i in xrange(self.maxNPCFriends):
card = NPCFriendCard(parent=self, rotateCard=rotateCard, doneEvent=self['doneEvent']) for i in xrange(16):
card = NPCFriendCard(parent=self, doneEvent=self['doneEvent'])
self.cardList.append(card) self.cardList.append(card)
card.setPos(xOffset, 1, yOffset) card.setPos(xOffset, 1, yOffset)
card.setScale(0.75) card.setScale(0.75)
xOffset += 3.5 xOffset += 3.5
count += 1 count += 1
if count % 4 == 0: if count % 4 == 0:
xOffset = -5.25 xOffset = -5.25
yOffset += yOffset2 yOffset += -2.45
def setFriends(self, friends):
self.friendDict = friends
class NPCFriendCard(DirectFrame): class NPCFriendCard(DirectFrame):
normalTextColor = (0.3, 0.25, 0.2, 1) normalTextColor = (0.3, 0.25, 0.2, 1)
maxRarity = 5 maxRarity = 5
sosTracks = ToontownBattleGlobals.Tracks + ToontownBattleGlobals.NPCTracks sosTracks = ToontownBattleGlobals.Tracks + ToontownBattleGlobals.NPCTracks
def __init__(self, parent = aspect2dp, rotateCard = False, **kw): def __init__(self, parent = aspect2dp, **kw):
optiondefs = (('NPCID', 'Uninitialized', None), ('relief', None, None), ('doneEvent', None, None)) optiondefs = (('NPCID', 'Uninitialized', None), ('relief', None, None), ('doneEvent', None, None))
self.defineoptions(kw, optiondefs) self.defineoptions(kw, optiondefs)
DirectFrame.__init__(self, parent=parent) DirectFrame.__init__(self, parent=parent)
@ -81,41 +88,10 @@ class NPCFriendCard(DirectFrame):
cardModel = loader.loadModel('phase_3.5/models/gui/playingCard') cardModel = loader.loadModel('phase_3.5/models/gui/playingCard')
self.front = DirectFrame(parent=self, relief=None, image=cardModel.find('**/card_front')) self.front = DirectFrame(parent=self, relief=None, image=cardModel.find('**/card_front'))
self.front.hide() self.front.hide()
self.back = DirectFrame(parent=self, relief=None, image=cardModel.find('**/card_back'), geom=cardModel.find('**/logo')) self.back = DirectFrame(parent=self, relief=None, image=cardModel.find('**/card_back'))
callButtonPosZ = -0.9 self.sosTypeInfo = DirectLabel(parent=self.front, relief=None, text='', text_font=ToontownGlobals.getMinnieFont(), text_fg=self.normalTextColor, text_scale=0.35, text_align=TextNode.ACenter, text_wordwrap=16.0, pos=(0, 0, 1.15))
textWordWrap = 16.0
textScale = 0.35
textPosZ = 1.15
nameScale = 0.4
namePosZ = -0.45
rarityScale = 0.2
rarityPosZ = -1.2
self.NPCHeadDim = 1.2
self.NPCHeadPosZ = 0.45
self.sosCountInfoPosZ = -0.9
self.sosCountInfoScale = 0.4
self.sosCountInfo2PosZ = -0.9
self.sosCountInfo2Scale = 0.5
if rotateCard:
self.front.component('image0').configure(pos=(0, 0, 0.22), hpr=(0, 0, -90), scale=1.35)
self.back.component('image0').configure(hpr=(0, 0, -90), scale=(-1.35, 1.35, 1.35))
callButtonPosZ = -2.1
textWordWrap = 7.0
textScale = 0.5
textPosZ = 2.0
nameScale = 0.5
namePosZ = -0.89
rarityScale = 0.25
rarityPosZ = -2.4
self.NPCHeadDim = 1.8
self.NPCHeadPosZ = 0.4
self.sosCountInfoPosZ = -2.1
self.sosCountInfoScale = 0.4
self.sosCountInfo2PosZ = -2.0
self.sosCountInfo2Scale = 0.55
self.sosTypeInfo = DirectLabel(parent=self.front, relief=None, text='', text_font=ToontownGlobals.getMinnieFont(), text_fg=self.normalTextColor, text_scale=textScale, text_align=TextNode.ACenter, text_wordwrap=textWordWrap, pos=(0, 0, textPosZ))
self.NPCHead = None self.NPCHead = None
self.NPCName = DirectLabel(parent=self.front, relief=None, text='', text_fg=self.normalTextColor, text_scale=nameScale, text_align=TextNode.ACenter, text_wordwrap=8.0, pos=(0, 0, namePosZ)) self.NPCName = DirectLabel(parent=self.front, relief=None, text='', text_fg=self.normalTextColor, text_scale=0.4, text_align=TextNode.ACenter, text_wordwrap=8.0, pos=(0, 0, -0.45))
buttonModels = loader.loadModel('phase_3.5/models/gui/inventory_gui') buttonModels = loader.loadModel('phase_3.5/models/gui/inventory_gui')
upButton = buttonModels.find('**/InventoryButtonUp') upButton = buttonModels.find('**/InventoryButtonUp')
downButton = buttonModels.find('**/InventoryButtonDown') downButton = buttonModels.find('**/InventoryButtonDown')
@ -123,18 +99,17 @@ class NPCFriendCard(DirectFrame):
self.sosCallButton = DirectButton(parent=self.front, relief=None, text=TTLocalizer.NPCCallButtonLabel, text_fg=self.normalTextColor, text_scale=0.28, text_align=TextNode.ACenter, image=(upButton, self.sosCallButton = DirectButton(parent=self.front, relief=None, text=TTLocalizer.NPCCallButtonLabel, text_fg=self.normalTextColor, text_scale=0.28, text_align=TextNode.ACenter, image=(upButton,
downButton, downButton,
rolloverButton, rolloverButton,
upButton), image_color=(1.0, 0.2, 0.2, 1), image0_color=Vec4(1.0, 0.4, 0.4, 1), image3_color=Vec4(1.0, 0.4, 0.4, 0.4), image_scale=(4.4, 1, 3.6), image_pos=Vec3(0, 0, 0.08), pos=(-1.15, 0, callButtonPosZ), scale=1.25, command=self.__chooseNPCFriend) upButton), image_color=(1.0, 0.2, 0.2, 1), image0_color=Vec4(1.0, 0.4, 0.4, 1), image3_color=Vec4(1.0, 0.4, 0.4, 0.4), image_scale=(4.4, 1, 3.6), image_pos=Vec3(0, 0, 0.08), pos=(-1.15, 0, -0.9), scale=1.25, command=self.__chooseNPCFriend)
self.sosCallButton.hide() self.sosCallButton.hide()
self.sosCountInfo = DirectLabel(parent=self.front, relief=None, text='', text_fg=self.normalTextColor, text_scale=0.75, text_align=TextNode.ALeft, textMayChange=1, pos=(0.0, 0, -1.0)) self.sosCountInfo = DirectLabel(parent=self.front, relief=None, text='', text_fg=self.normalTextColor, text_scale=0.75, text_align=TextNode.ALeft, textMayChange=1, pos=(0.0, 0, -1.0))
star = loader.loadModel('phase_3.5/models/gui/name_star') star = loader.loadModel('phase_3.5/models/gui/name_star')
self.rarityStars = [] self.rarityStars = []
for i in xrange(self.maxRarity): for i in xrange(self.maxRarity):
label = DirectLabel(parent=self.front, relief=None, image=star, image_scale=rarityScale, image_color=Vec4(0.502, 0.251, 0.251, 1.0), pos=(1.1 - i * 0.24, 0, rarityPosZ)) label = DirectLabel(parent=self.front, relief=None, image=star, image_scale=0.2, image_color=Vec4(0.502, 0.251, 0.251, 1.0), pos=(1.1 - i * 0.24, 0, -1.2))
label.hide() label.hide()
self.rarityStars.append(label) self.rarityStars.append(label)
return
def __chooseNPCFriend(self): def __chooseNPCFriend(self):
if self['NPCID'] and self['doneEvent']: if self['NPCID'] and self['doneEvent']:
doneStatus = {} doneStatus = {}
@ -146,11 +121,13 @@ class NPCFriendCard(DirectFrame):
if self.NPCHead: if self.NPCHead:
self.NPCHead.detachNode() self.NPCHead.detachNode()
self.NPCHead.delete() self.NPCHead.delete()
DirectFrame.destroy(self) DirectFrame.destroy(self)
def update(self, NPCID, count = 0, fCallable = 0): def update(self, NPCID, count = 0, fCallable = 0):
oldNPCID = self['NPCID'] oldNPCID = self['NPCID']
self['NPCID'] = NPCID self['NPCID'] = NPCID
if NPCID != oldNPCID: if NPCID != oldNPCID:
if self.NPCHead: if self.NPCHead:
self.NPCHead.detachNode() self.NPCHead.detachNode()
@ -158,14 +135,16 @@ class NPCFriendCard(DirectFrame):
if NPCID is None: if NPCID is None:
self.showBack() self.showBack()
return return
self.front.show() self.front.show()
self.back.hide() self.back.hide()
self.NPCName['text'] = TTLocalizer.NPCToonNames[NPCID] self.NPCName['text'] = TTLocalizer.NPCToonNames[NPCID]
self.NPCHead = self.createNPCToonHead(NPCID, dimension=self.NPCHeadDim) self.NPCHead = self.createNPCToonHead(NPCID, dimension=1.2)
self.NPCHead.reparentTo(self.front) self.NPCHead.reparentTo(self.front)
self.NPCHead.setZ(self.NPCHeadPosZ) self.NPCHead.setZ(0.45)
track, level, hp, rarity = NPCToons.getNPCTrackLevelHpRarity(NPCID) track, level, hp, rarity = NPCToons.getNPCTrackLevelHpRarity(NPCID)
sosText = self.sosTracks[track] sosText = self.sosTracks[track]
if track == ToontownBattleGlobals.NPC_RESTOCK_GAGS: if track == ToontownBattleGlobals.NPC_RESTOCK_GAGS:
if level == -1: if level == -1:
sosText += ' All' sosText += ' All'
@ -173,6 +152,7 @@ class NPCFriendCard(DirectFrame):
sosText += ' ' + self.sosTracks[level] sosText += ' ' + self.sosTracks[level]
sosText = TextEncoder.upper(sosText) sosText = TextEncoder.upper(sosText)
self.sosTypeInfo['text'] = sosText self.sosTypeInfo['text'] = sosText
for i in xrange(self.maxRarity): for i in xrange(self.maxRarity):
if i < rarity: if i < rarity:
self.rarityStars[i].show() self.rarityStars[i].show()
@ -181,13 +161,13 @@ class NPCFriendCard(DirectFrame):
if fCallable: if fCallable:
self.sosCallButton.show() self.sosCallButton.show()
self.sosCountInfo.setPos(-0.4, 0, self.sosCountInfoPosZ) self.sosCountInfo.setPos(-0.4, 0, -0.9)
self.sosCountInfo['text_scale'] = self.sosCountInfoScale self.sosCountInfo['text_scale'] = 0.4
self.sosCountInfo['text_align'] = TextNode.ALeft self.sosCountInfo['text_align'] = TextNode.ALeft
else: else:
self.sosCallButton.hide() self.sosCallButton.hide()
self.sosCountInfo.setPos(0, 0, self.sosCountInfo2PosZ) self.sosCountInfo.setPos(0, 0, -0.9)
self.sosCountInfo['text_scale'] = self.sosCountInfo2Scale self.sosCountInfo['text_scale'] = 0.5
self.sosCountInfo['text_align'] = TextNode.ACenter self.sosCountInfo['text_align'] = TextNode.ACenter
if count > 0: if count > 0:
countText = TTLocalizer.NPCFriendPanelRemaining % count countText = TTLocalizer.NPCFriendPanelRemaining % count

View file

@ -40,7 +40,7 @@ class TownBattleSOSPanel(DirectFrame, StateData.StateData):
self['image_pos'] = (0.0, 0.1, -0.08) self['image_pos'] = (0.0, 0.1, -0.08)
self.setScale(0.3) self.setScale(0.3)
self.title = DirectLabel(parent=self, relief=None, text=TTLocalizer.TownBattleSOSNoFriends, text_scale=0.4, text_fg=(1, 1, 1, 1), text_shadow=(0, 0, 0, 1), pos=(0.0, 0.0, 1.5)) self.title = DirectLabel(parent=self, relief=None, text=TTLocalizer.TownBattleSOSNoFriends, text_scale=0.4, text_fg=(1, 1, 1, 1), text_shadow=(0, 0, 0, 1), pos=(0.0, 0.0, 1.5))
self.NPCFriendPanel = NPCFriendPanel.NPCFriendPanel(parent=self, doneEvent=self.doneEvent) self.NPCFriendPanel = NPCFriendPanel.NPCFriendPanel(parent=self, callable=True, doneEvent=self.doneEvent)
self.NPCFriendPanel.setPos(-0.75, 0, -0.15) self.NPCFriendPanel.setPos(-0.75, 0, -0.15)
self.NPCFriendPanel.setScale(0.325) self.NPCFriendPanel.setScale(0.325)
self.NPCFriendsLabel = DirectLabel(parent=self, relief=None, text=TTLocalizer.TownBattleSOSNPCFriends, text_scale=0.3, text_fg=(1, 1, 1, 1), text_shadow=(0, 0, 0, 1), pos=(-0.75, 0.0, -2.0)) self.NPCFriendsLabel = DirectLabel(parent=self, relief=None, text=TTLocalizer.TownBattleSOSNPCFriends, text_scale=0.3, text_fg=(1, 1, 1, 1), text_shadow=(0, 0, 0, 1), pos=(-0.75, 0.0, -2.0))
@ -195,7 +195,8 @@ class TownBattleSOSPanel(DirectFrame, StateData.StateData):
else: else:
self.NPCFriends[friend] = count self.NPCFriends[friend] = count
self.NPCFriendPanel.update(self.NPCFriends, fCallable=1) self.NPCFriendPanel.setFriends(self.NPCFriends)
self.NPCFriendPanel.update()
def __updateTitleText(self): def __updateTitleText(self):
isEmpty = (len(self.friends) == 0 and len(self.NPCFriends) == 0) isEmpty = (len(self.friends) == 0 and len(self.NPCFriends) == 0)