Poodletooth-iLand/toontown/shtiker/ShardPage.py
2015-03-07 02:56:06 -06:00

618 lines
28 KiB
Python

from direct.directnotify import DirectNotifyGlobal
from direct.gui.DirectGui import *
from direct.task.Task import Task
from pandac.PandaModules import *
from toontown.distributed import ToontownDistrictStats
from toontown.hood import ZoneUtil
from toontown.shtiker import ShtikerPage
from toontown.coghq import CogDisguiseGlobals
from toontown.suit import SuitDNA
from toontown.suit import Suit
from toontown.toonbase import TTLocalizer
from toontown.toonbase import ToontownGlobals
from toontown.toontowngui import TTDialog
ICON_COLORS = (Vec4(0.863, 0.776, 0.769, 1.0), Vec4(0.749, 0.776, 0.824, 1.0),
Vec4(0.749, 0.769, 0.749, 1.0), Vec4(0.843, 0.745, 0.745, 1.0))
POP_COLORS = (Vec4(0.4, 0.4, 1.0, 1.0), Vec4(0.4, 1.0, 0.4, 1.0),
Vec4(1.0, 0.4, 0.4, 1.0))
def compareShardTuples(a, b):
if a[1] < b[1]:
return -1
elif b[1] < a[1]:
return 1
else:
return 0
def setupInvasionMarkerAny(node):
pass # TODO
def setupInvasionMarker(node, invasionStatus):
if node.find('**/*invasion-marker'):
return
markerNode = node.attachNewNode('invasion-marker')
if invasionStatus == 5:
setupInvasionMarkerAny(markerNode)
return
icons = loader.loadModel('phase_3/models/gui/cog_icons')
if invasionStatus == 1:
icon = icons.find('**/CorpIcon').copyTo(markerNode)
elif invasionStatus == 2:
icon = icons.find('**/LegalIcon').copyTo(markerNode)
elif invasionStatus == 3:
icon = icons.find('**/MoneyIcon').copyTo(markerNode)
else:
icon = icons.find('**/SalesIcon').copyTo(markerNode)
icons.removeNode()
icon.setColor(ICON_COLORS[invasionStatus - 1])
icon.setPos(0.50, 0, 0.01225)
icon.setScale(0.0535)
def removeInvasionMarker(node):
markerNode = node.find('**/*invasion-marker')
if not markerNode.isEmpty():
markerNode.removeNode()
class ShardPage(ShtikerPage.ShtikerPage):
notify = DirectNotifyGlobal.directNotify.newCategory('ShardPage')
def __init__(self):
ShtikerPage.ShtikerPage.__init__(self)
self.shardButtonMap = {}
self.shardButtons = []
self.scrollList = None
self.currentBTL = None
self.currentBTR = None
self.textRolloverColor = Vec4(1, 1, 0, 1)
self.textDownColor = Vec4(0.5, 0.9, 1, 1)
self.textDisabledColor = Vec4(0.4, 0.8, 0.4, 1)
self.ShardInfoUpdateInterval = 5.0
self.lowPop = config.GetInt('shard-low-pop', 150)
self.midPop = config.GetInt('shard-mid-pop', 300)
self.highPop = -1
self.showPop = config.GetBool('show-population', 0)
self.showTotalPop = config.GetBool('show-total-population', 0)
self.noTeleport = config.GetBool('shard-page-disable', 0)
self.groupTypes = ['VP Group', 'CFO Group', 'CJ Group', 'CEO Group']
self.shardGroups = None
self.currentGroupJoined = None
def load(self):
main_text_scale = 0.06
title_text_scale = 0.12
self.title = DirectLabel(parent=self, relief=None, text=TTLocalizer.ShardPageTitle, text_scale=title_text_scale, textMayChange=0, pos=(0, 0, 0.6))
helpText_ycoord = 0.403
self.helpText = DirectLabel(parent=self, relief=None, text='', text_scale=main_text_scale, text_wordwrap=12, text_align=TextNode.ALeft, textMayChange=1, pos=(0.058, 0, helpText_ycoord))
shardPop_ycoord = helpText_ycoord - 0.523
totalPop_ycoord = shardPop_ycoord - 0.44
self.districtInfo = NodePath('Selected-Shard-Info')
self.districtInfo.reparentTo(self)
self.totalPopulationText = DirectLabel(parent=self.districtInfo, relief=None, text=TTLocalizer.ShardPagePopulationTotal % 1, text_scale=main_text_scale, text_wordwrap=8, textMayChange=1, text_align=TextNode.ACenter, pos=(0.4247, 0, totalPop_ycoord))
if self.showTotalPop:
self.totalPopulationText.show()
else:
self.totalPopulationText.hide()
self.gui = loader.loadModel('phase_3.5/models/gui/friendslist_gui')
self.listXorigin = -0.02
self.listFrameSizeX = 0.67
self.listZorigin = -0.96
self.listFrameSizeZ = 1.04
self.arrowButtonScale = 1.3
self.itemFrameXorigin = -0.247
self.itemFrameZorigin = 0.365
self.buttonXstart = self.itemFrameXorigin + 0.293
self.regenerateScrollList()
scrollTitle = DirectFrame(parent=self.scrollList, text=TTLocalizer.ShardPageScrollTitle, text_scale=main_text_scale, text_align=TextNode.ACenter, relief=None, pos=(self.buttonXstart, 0, self.itemFrameZorigin + 0.127))
def firstLoadShard(self, buttonTuple):
curShardTuples = base.cr.listActiveShards()
curShardTuples.sort(compareShardTuples)
actualShardId = base.localAvatar.defaultShard
base.cr.groupManager.d_getInfo(1)
for i in xrange(len(curShardTuples)):
shardId, name, pop, WVPop, invasionStatus = curShardTuples[i]
if shardId == actualShardId:
self.currentBTL = buttonTuple[1]
self.currentBTR = buttonTuple[2]
self.currentBTL['state'] = DGG.DISABLED
self.currentBTR['state'] = DGG.DISABLED
self.reloadRightBrain(pop, name, shardId, buttonTuple)
def unload(self):
self.gui.removeNode()
del self.title
self.scrollList.destroy()
del self.scrollList
del self.shardButtons
taskMgr.remove('ShardPageUpdateTask-doLater')
ShtikerPage.ShtikerPage.unload(self)
def regenerateScrollList(self):
selectedIndex = 0
if self.scrollList:
selectedIndex = self.scrollList.getSelectedIndex()
for button in self.shardButtons:
button.detachNode()
self.scrollList.destroy()
self.scrollList = None
self.scrollList = DirectScrolledList(parent=self, relief=None, pos=(-0.51, 0, 0), incButton_image=(self.gui.find('**/FndsLst_ScrollUp'),
self.gui.find('**/FndsLst_ScrollDN'),
self.gui.find('**/FndsLst_ScrollUp_Rllvr'),
self.gui.find('**/FndsLst_ScrollUp')), incButton_relief=None, incButton_scale=(self.arrowButtonScale, self.arrowButtonScale, -self.arrowButtonScale), incButton_pos=(self.buttonXstart + 0.005, 0, self.itemFrameZorigin - 1.000), incButton_image3_color=Vec4(1, 1, 1, 0.2), decButton_image=(self.gui.find('**/FndsLst_ScrollUp'),
self.gui.find('**/FndsLst_ScrollDN'),
self.gui.find('**/FndsLst_ScrollUp_Rllvr'),
self.gui.find('**/FndsLst_ScrollUp')), decButton_relief=None, decButton_scale=(self.arrowButtonScale, self.arrowButtonScale, self.arrowButtonScale), decButton_pos=(self.buttonXstart, 0.0025, self.itemFrameZorigin + 0.130), decButton_image3_color=Vec4(1, 1, 1, 0.2), itemFrame_pos=(self.itemFrameXorigin, 0, self.itemFrameZorigin), itemFrame_scale=1.0, itemFrame_relief=DGG.SUNKEN, itemFrame_frameSize=(self.listXorigin,
self.listXorigin + self.listFrameSizeX,
self.listZorigin,
self.listZorigin + self.listFrameSizeZ), itemFrame_frameColor=(0.85, 0.95, 1, 1), itemFrame_borderWidth=(0.01, 0.01), numItemsVisible=15, forceHeight=0.065, items=self.shardButtons)
self.scrollList.scrollTo(selectedIndex)
def askForShardInfoUpdate(self, task = None):
ToontownDistrictStats.refresh('shardInfoUpdated')
taskMgr.doMethodLater(self.ShardInfoUpdateInterval, self.askForShardInfoUpdate, 'ShardPageUpdateTask-doLater')
return Task.done
def makeShardButton(self, shardId, shardName, shardPop):
shardButtonParent = DirectFrame()
shardButtonL = DirectButton(parent=shardButtonParent, relief=None, text=shardName, text_scale=0.06, text_align=TextNode.ALeft, text_fg=Vec4(0, 0, 0, 1), text3_fg=self.textDisabledColor, text1_bg=self.textDownColor, text2_bg=self.textRolloverColor, textMayChange=0, command=self.reloadRightBrain)
popText = str(shardPop)
if popText is None:
popText = ''
model = loader.loadModel('phase_3.5/models/gui/matching_game_gui')
button = model.find('**/minnieCircle')
shardButtonR = DirectButton(parent=shardButtonParent, relief=None,
image=button,
image_scale=(0.3, 1, 0.3),
image2_scale=(0.35, 1, 0.35),
image_color=self.getPopColor(shardPop),
pos=(0.58, 0, 0.0125),
text=popText,
text_scale=0.06,
text_align=TextNode.ACenter,
text_pos=(-0.215, -0.0165), text_fg=Vec4(0, 0, 0, 1), text3_fg=self.textDisabledColor, text1_bg=self.textRolloverColor, text2_bg=self.textRolloverColor, textMayChange=1, command=self.reloadRightBrain)
model.removeNode()
button.removeNode()
invasionMarker = NodePath('InvasionMarker-%s' % shardId)
invasionMarker.reparentTo(shardButtonParent)
buttonTuple = (shardButtonParent, shardButtonR, shardButtonL, invasionMarker)
shardButtonL['extraArgs'] = extraArgs=[shardPop, shardName, shardId, buttonTuple]
shardButtonR['extraArgs'] = extraArgs=[shardPop, shardName, shardId, buttonTuple]
return buttonTuple
def makeGroupButton(self, shardId, groupType, groupPop, groupId):
if not groupType in self.groupTypes:
return
groupButtonParent = DirectFrame()
groupButtonL = DirectButton(parent=groupButtonParent, relief=None, text=groupType, text_pos=(0.0, -0.0225), text_scale=0.06, text_align=TextNode.ALeft, text_fg=Vec4(0, 0, 0, 1), text3_fg=self.textDisabledColor, text1_bg=self.textDownColor, text2_bg=self.textRolloverColor, textMayChange=0, command=self.joinGroup)
popText = str(groupPop)
if popText is None:
return
model = loader.loadModel('phase_3.5/models/gui/matching_game_gui')
button = model.find('**/minnieCircle')
groupButtonR = DirectButton(parent=groupButtonParent, relief=None,
image=button,
image_scale=(0.3, 1, 0.3),
image2_scale=(0.35, 1, 0.35),
image_color=Vec4(0, 0.8, 0, 1),
pos=(0.58, 0, -0.0125),
text=popText,
text_scale=0.055,
text_align=TextNode.ACenter,
text_pos=(-0.00575, -0.0125), text_fg=Vec4(0, 0, 0, 1), text3_fg=Vec4(0, 0, 0, 1), text1_bg=self.textRolloverColor, text2_bg=self.textRolloverColor, textMayChange=1)
leaveButton = DirectButton(parent=groupButtonParent, relief=None,
image=button,
image_scale=(0.3, 1, 0.3),
image2_scale=(0.35, 1, 0.35),
image_color=Vec4(0, 0.8, 0, 1),
pos=(0.50, 0, -0.0125),
text='Leave',
text_scale=0.055,
text_align=TextNode.ACenter,
text_pos=(-0.00575, -0.0125),
text_fg=Vec4(0, 0, 0, 0),
text2_fg=Vec4(0, 0, 0, 1),
command=self.leaveGroup)
leaveButton.hide()
model.removeNode()
button.removeNode()
buttonTuple = (groupButtonParent, groupButtonR, groupButtonL, leaveButton)
groupButtonL['extraArgs'] = [shardId, groupId, buttonTuple]
leaveButton['extraArgs'] = [shardId, groupId, buttonTuple]
return buttonTuple
def removeRightBrain(self):
self.districtInfo.find('**/*district-info').removeNode()
def reloadRightBrain(self, shardPop, shardName, shardId, buttonTuple):
base.cr.groupManager.d_getInfo(1)
self.currentRightBrain = (shardPop, shardName, shardId, buttonTuple)
if self.districtInfo.find('**/*district-info'):
self.removeRightBrain()
if self.currentBTL:
self.currentBTL['state'] = DGG.NORMAL
if self.currentBTR:
self.currentBTR['state'] = DGG.NORMAL
popText = self.getPopText(shardPop)
districtInfoNode = self.districtInfo.attachNewNode('district-info')
self.districtStatusLabel = DirectLabel(parent=districtInfoNode, relief=None, pos=(0.4247, 0, 0.45), text=popText, text_scale=0.09, text_fg=Vec4(0, 0, 0, 1), textMayChange=1)
pText = '%s Population: %s' % (shardName, str(shardPop))
self.populationStatusLabel = DirectLabel(parent=districtInfoNode, relief=None, pos=(0.4247, 0, 0.38), text=pText, text_scale=0.04, text_fg=Vec4(0, 0, 0, 1), textMayChange=1)
tText = 'Teleport to\n%s' % shardName
tImage = loader.loadModel('phase_4/models/gui/purchase_gui')
tImage.setSz(1.35)
self.shardTeleportButton = DirectButton(parent=districtInfoNode, relief=None, pos=(0.4247, 0, 0.25), image=(tImage.find('**/PurchScrn_BTN_UP'), tImage.find('**/PurchScrn_BTN_DN'), tImage.find('**/PurchScrn_BTN_RLVR')), text=tText, text_scale=0.065, text_pos=(0.0, 0.015), text_fg=Vec4(0, 0, 0, 1), textMayChange=1, command=self.choseShard, extraArgs=[shardId])
self.currentBTL = buttonTuple[1]
self.currentBTR = buttonTuple[2]
self.currentBTL['state'] = DGG.DISABLED
self.currentBTR['state'] = DGG.DISABLED
if shardId == self.getCurrentShardId():
self.shardTeleportButton['state'] = DGG.DISABLED
if self.shardGroups is not None:
for button in self.shardGroups:
button.detachNode()
self.shardGroups = []
base.cr.groupManager.d_getInfo(1)
shardId = base.localAvatar.defaultShard - (base.localAvatar.defaultShard % 100000000 % 1000000)
for gid, ginfo in base.cr.groupManager.groupStatus[shardId].items():
btuple = self.makeGroupButton(shardId, ginfo[0], len(ginfo[1]), gid)
if base.localAvatar.doId in ginfo[1]:
btuple[1]['state'] = DGG.DISABLED
btuple[2]['state'] = DGG.DISABLED
btuple[3].show()
self.shardGroups.append(btuple[0])
self.districtGroups = DirectScrolledList(parent=districtInfoNode, relief=None,
pos=(0.38, 0, -0.34),
incButton_image=(self.gui.find('**/FndsLst_ScrollUp'),
self.gui.find('**/FndsLst_ScrollDN'),
self.gui.find('**/FndsLst_ScrollUp_Rllvr'),
self.gui.find('**/FndsLst_ScrollUp')),
incButton_relief=None,
incButton_scale=(self.arrowButtonScale,
self.arrowButtonScale,
-self.arrowButtonScale),
incButton_pos=(self.buttonXstart + 0.005, 0, -0.125),
incButton_image3_color=Vec4(1, 1, 1, 0.2),
decButton_image=(self.gui.find('**/FndsLst_ScrollUp'),
self.gui.find('**/FndsLst_ScrollDN'),
self.gui.find('**/FndsLst_ScrollUp_Rllvr'),
self.gui.find('**/FndsLst_ScrollUp')),
decButton_relief=None,
decButton_scale=(self.arrowButtonScale,
self.arrowButtonScale,
self.arrowButtonScale),
decButton_pos=(self.buttonXstart, 0.0025, 0.445),
decButton_image3_color=Vec4(1, 1, 1, 0.2),
itemFrame_pos=(self.itemFrameXorigin, 0, self.itemFrameZorigin),
itemFrame_scale=1.0,
itemFrame_relief=DGG.SUNKEN,
itemFrame_frameSize=(self.listXorigin,
(self.listXorigin + self.listFrameSizeX),
self.listZorigin/2.1,
(self.listZorigin + self.listFrameSizeZ)/2.1),
itemFrame_frameColor=(0.85, 0.95, 1, 1),
itemFrame_borderWidth=(0.01, 0.01),
numItemsVisible=15,
forceHeight=0.065,
items=self.shardGroups)
def joinGroup(self, shardId, groupId, buttonTuple):
self.acceptOnce('confJoin', self.confirmJoinGroup, extraArgs=[shardId, groupId, buttonTuple])
self.joinDialog = TTDialog.TTGlobalDialog(message='Would you like to join this group?', doneEvent='confJoin', style=4)
def rejectGroup(self, reason, suitType=0):
self.acceptOnce('remRjD', self.doneReject)
if reason == 1:
self.rejectDialog = TTDialog.TTGlobalDialog(message='You need more suit parts!', doneEvent='remRjD', style=1)
elif reason == 2:
if suitType == 0:
meritType = 'Stock Options'
elif suitType == 1:
meritType = 'Merits'
elif suitType == 2:
meritType = 'Cogbucks'
elif suitType == 3:
meritType = 'Notices'
print(meritType, suitType, meritType[suitType])
self.rejectDialog = TTDialog.TTGlobalDialog(message='You need more %s!'%meritType, doneEvent='remRjD', style=1)
elif reason == 3:
self.rejectDialog = TTDialog.TTGlobalDialog(message='That group is full!', doneEvent='remRjD', style=1)
elif reason == 4:
self.rejectDialog = TTDialog.TTGlobalDialog(message='You\'re already in a group!', doneEvent='remRjD', style=1)
elif reason == 5:
self.rejectDialog = TTDialog.TTGlobalDialog(message='You can\'t leave the district while you\'re in a group!', doneEvent='remRjD', style=1)
def doneReject(self):
self.rejectDialog.cleanup()
del self.rejectDialog
def confirmJoinGroup(self, shardId, groupId, buttonTuple):
doneStatus = self.joinDialog.doneStatus
self.joinDialog.cleanup()
del self.joinDialog
if doneStatus is not 'ok':
return
for gid in base.cr.groupManager.groupStatus[shardId].keys():
if base.localAvatar.doId in base.cr.groupManager.groupStatus[shardId][gid][1]:
self.rejectGroup(4)
return
if len(base.cr.groupManager.groupStatus[shardId][groupId][1]) >= 8:
self.rejectGroup(3)
return
suitIdx = -1
if groupId == 10000:
suitIdx = 0
elif groupId == 11000:
suitIdx = 1
elif groupId == 12000:
suitIdx = 2
elif groupId == 13000:
suitIdx = 3
merits = base.localAvatar.cogMerits[suitIdx]
if CogDisguiseGlobals.getTotalMerits(base.localAvatar, suitIdx) > merits:
self.rejectGroup(2, suitIdx)
return
parts = base.localAvatar.getCogParts()
if not CogDisguiseGlobals.isSuitComplete(parts, suitIdx):
self.rejectGroup(1)
return
base.cr.groupManager.d_addPlayerId(shardId, groupId, base.localAvatar.doId)
base.cr.groupManager.d_getInfo(1)
try:
place = base.cr.playGame.getPlace()
except:
try:
place = base.cr.playGame.hood.loader.place
except:
place = base.cr.playGame.hood.place
self.currentGroupJoined = [shardId, groupId]
if ZoneUtil.getCanonicalHoodId(self.getCurrentZoneId()) == groupId:
return
base.cr.groupManager.d_getInfo(1)
place.requestTeleport(groupId, groupId, shardId, -1)
def leaveGroup(self, shardId, groupId, buttonTuple):
self.acceptOnce('confLeave', self.confirmLeaveGroup, extraArgs=[shardId, groupId, buttonTuple])
self.joinDialog = TTDialog.TTGlobalDialog(message='Are you sure you want to leave this group?', doneEvent='confLeave', style=4)
def confirmLeaveGroup(self, shardId, groupId, buttonTuple):
doneStatus = self.joinDialog.doneStatus
self.joinDialog.cleanup()
del self.joinDialog
if doneStatus is not 'ok':
return
self.currentGroupJoined = None
if not base.localAvatar.doId in base.cr.groupManager.groupStatus[shardId][groupId][1]:
return
base.cr.groupManager.d_removePlayerId(shardId, groupId, base.localAvatar.doId)
base.cr.groupManager.d_getInfo(1)
try:
place = base.cr.playGame.getPlace()
except:
try:
place = base.cr.playGame.hood.loader.place
except:
place = base.cr.playGame.hood.place
hoodId = -1
if groupId == 10000:
hoodId = 1000
elif groupId == 11000:
hoodId = 5000
elif groupId == 12000:
hoodId = 9000
elif groupId == 13000:
hoodId = 3000
base.cr.groupManager.d_getInfo(1)
place.requestTeleport(hoodId, hoodId, shardId, -1)
def getPopColor(self, pop):
if pop <= self.lowPop:
newColor = POP_COLORS[0]
elif pop <= self.midPop:
newColor = POP_COLORS[1]
else:
newColor = POP_COLORS[2]
return newColor
def getPopText(self, pop):
if pop <= self.lowPop:
popText = TTLocalizer.ShardPageLow
elif pop <= self.midPop:
popText = TTLocalizer.ShardPageMed
else:
popText = TTLocalizer.ShardPageHigh
return popText
def getPopChoiceHandler(self, pop):
if pop <= self.midPop:
if self.noTeleport and not self.showPop:
handler = self.shardChoiceReject
else:
handler = self.choseShard
elif self.showPop:
handler = self.choseShard
else:
if localAvatar.adminAccess >= 200:
handler = self.choseShard
else:
handler = self.shardChoiceReject
return handler
def getCurrentZoneId(self):
try:
zoneId = base.cr.playGame.getPlace().getZoneId()
except:
zoneId = None
return zoneId
def getCurrentShardId(self):
zoneId = self.getCurrentZoneId()
if zoneId != None and ZoneUtil.isWelcomeValley(zoneId):
return ToontownGlobals.WelcomeValleyToken
else:
return base.localAvatar.defaultShard
def createSuitHead(self, suitName):
suitDNA = SuitDNA.SuitDNA()
suitDNA.newSuit(suitName)
suit = Suit.Suit()
suit.setDNA(suitDNA)
headParts = suit.getHeadParts()
head = hidden.attachNewNode('head')
for part in headParts:
copyPart = part.copyTo(head)
copyPart.setDepthTest(1)
copyPart.setDepthWrite(1)
self.fitGeometry(head, fFlip=1)
suit.delete()
suit = None
return head
def updateScrollList(self):
curShardTuples = base.cr.listActiveShards()
curShardTuples.sort(compareShardTuples)
currentShardId = self.getCurrentShardId()
actualShardId = base.localAvatar.defaultShard
actualShardName = None
anyChanges = 0
totalPop = 0
totalWVPop = 0
currentMap = {}
self.shardButtons = []
for i in xrange(len(curShardTuples)):
shardId, name, pop, WVPop, invasionStatus = curShardTuples[i]
if shardId == actualShardId:
actualShardName = name
totalPop += pop
totalWVPop += WVPop
currentMap[shardId] = 1
buttonTuple = self.shardButtonMap.get(shardId)
if buttonTuple == None:
buttonTuple = self.makeShardButton(shardId, name, pop)
self.shardButtonMap[shardId] = buttonTuple
anyChanges = 1
else:
buttonTuple[1]['image_color'] = self.getPopColor(pop)
buttonTuple[1]['text'] = str(pop)
buttonTuple[1]['command'] = self.reloadRightBrain
buttonTuple[1]['extraArgs'] = [pop, name, shardId, buttonTuple]
buttonTuple[2]['command'] = self.reloadRightBrain
buttonTuple[2]['extraArgs'] = [pop, name, shardId, buttonTuple]
self.shardButtons.append(buttonTuple[0])
if invasionStatus:
setupInvasionMarker(buttonTuple[3], invasionStatus)
else:
removeInvasionMarker(buttonTuple[3])
for shardId, buttonTuple in self.shardButtonMap.items():
if shardId not in currentMap:
buttonTuple[3].removeNode()
buttonTuple[0].destroy()
del self.shardButtonMap[shardId]
anyChanges = 1
if anyChanges:
self.regenerateScrollList()
self.totalPopulationText['text'] = TTLocalizer.ShardPagePopulationTotal % totalPop
helpText = TTLocalizer.ShardPageHelpIntro
if actualShardName:
helpText += TTLocalizer.ShardPageHelpWhere % actualShardName
if not self.book.safeMode:
helpText += TTLocalizer.ShardPageHelpMove
def enter(self):
base.cr.groupManager.d_getInfo(1)
self.askForShardInfoUpdate()
self.updateScrollList()
currentShardId = self.getCurrentShardId()
buttonTuple = self.shardButtonMap.get(currentShardId)
if buttonTuple:
i = self.shardButtons.index(buttonTuple[0])
self.scrollList.scrollTo(i, centered=1)
self.firstLoadShard(buttonTuple)
ShtikerPage.ShtikerPage.enter(self)
self.accept('shardInfoUpdated', self.updateScrollList)
def exit(self):
for shardId, buttonTuple in self.shardButtonMap.items():
buttonTuple[1]['state'] = DGG.NORMAL
buttonTuple[2]['state'] = DGG.NORMAL
self.ignore('shardInfoUpdated')
self.ignore('ShardPageConfirmDone')
taskMgr.remove('ShardPageUpdateTask-doLater')
ShtikerPage.ShtikerPage.exit(self)
def shardChoiceReject(self, shardId):
self.confirm = TTDialog.TTGlobalDialog(doneEvent='ShardPageConfirmDone', message=TTLocalizer.ShardPageChoiceReject, style=TTDialog.Acknowledge)
self.confirm.show()
self.accept('ShardPageConfirmDone', self.__handleConfirm)
def __handleConfirm(self):
self.ignore('ShardPageConfirmDone')
self.confirm.cleanup()
del self.confirm
def choseShard(self, shardId):
zoneId = self.getCurrentZoneId()
canonicalHoodId = ZoneUtil.getCanonicalHoodId(base.localAvatar.lastHood)
currentShardId = self.getCurrentShardId()
if self.currentGroupJoined:
self.rejectGroup(5)
return
if shardId == currentShardId:
return
elif shardId == base.localAvatar.defaultShard:
self.doneStatus = {'mode': 'teleport', 'hood': canonicalHoodId}
messenger.send(self.doneEvent)
else:
try:
place = base.cr.playGame.getPlace()
except:
try:
place = base.cr.playGame.hood.loader.place
except:
place = base.cr.playGame.hood.place
place.requestTeleport(canonicalHoodId, canonicalHoodId, shardId, -1)