From 49b24221875d10b3e6bbdedf87e96d641ea82dd5 Mon Sep 17 00:00:00 2001 From: John Date: Fri, 31 Jul 2015 01:15:21 +0300 Subject: [PATCH] Chairs.. my blood went into this.. --- dependencies/astron/dclass/stride.dc | 7 + otp/avatar/LocalAvatar.py | 14 +- toontown/catalog/CatalogFurnitureItem.py | 80 +++++++--- toontown/coghq/DistributedLevelBattleAI.py | 5 +- toontown/estate/DistributedChair.py | 145 ++++++++++++++++++ toontown/estate/DistributedChairAI.py | 57 +++++++ .../estate/DistributedFurnitureManagerAI.py | 5 +- toontown/safezone/Walk.py | 5 +- toontown/shtiker/ShtikerBook.py | 4 +- toontown/toon/LocalToon.py | 6 +- toontown/toonbase/TTLocalizerEnglish.py | 2 + toontown/toonbase/ToontownGlobals.py | 9 +- 12 files changed, 300 insertions(+), 39 deletions(-) create mode 100644 toontown/estate/DistributedChair.py create mode 100644 toontown/estate/DistributedChairAI.py diff --git a/dependencies/astron/dclass/stride.dc b/dependencies/astron/dclass/stride.dc index 0557a596..2735eafa 100644 --- a/dependencies/astron/dclass/stride.dc +++ b/dependencies/astron/dclass/stride.dc @@ -291,6 +291,7 @@ from toontown.estate import DistributedCloset/AI from toontown.estate import DistributedTrunk/AI from toontown.estate import DistributedPhone/AI from toontown.estate import DistributedRewardCrate/AI +from toontown.estate import DistributedChair/AI from toontown.effects import DistributedFireworkShow/AI from toontown.estate import DistributedFireworksCannon/AI from toontown.coghq import LobbyManager/AI @@ -2097,6 +2098,12 @@ dclass DistributedRewardCrate : DistributedFurnitureItem { useKeyResponse(uint8, uint32); }; +dclass DistributedChair : DistributedFurnitureItem { + setAvId(uint32) broadcast ram; + requestSit(uint8) airecv clsend; + setStatus(uint8) broadcast ram; +}; + dclass DistributedFireworkShow : DistributedObject { startShow(uint8, uint8, uint8, int16) broadcast ram; requestFirework(int16/10, int16/10, int16/100, uint8, uint8, uint8) airecv clsend; diff --git a/otp/avatar/LocalAvatar.py b/otp/avatar/LocalAvatar.py index 21bdf275..6b4d393d 100755 --- a/otp/avatar/LocalAvatar.py +++ b/otp/avatar/LocalAvatar.py @@ -62,6 +62,7 @@ class LocalAvatar(DistributedAvatar.DistributedAvatar, DistributedSmoothNode.Dis self.sleepFlag = 0 self.isDisguised = 0 self.movingFlag = 0 + self.preventCameraDisable = False self.lastNeedH = None self.accept('friendOnline', self.__friendOnline) self.accept('friendOffline', self.__friendOffline) @@ -73,6 +74,9 @@ class LocalAvatar(DistributedAvatar.DistributedAvatar, DistributedSmoothNode.Dis self.accept('avatarMoving', self.clearPageUpDown) self.showNametag2d() self.setPickable(0) + + def setPreventCameraDisable(self, prevent): + self.preventCameraDisable = prevent def useSwimControls(self): self.controlManager.use('swim', self) @@ -421,7 +425,7 @@ class LocalAvatar(DistributedAvatar.DistributedAvatar, DistributedSmoothNode.Dis self.controlManager.setSpeeds(OTPGlobals.ToonForwardSlowSpeed, OTPGlobals.ToonJumpSlowForce, OTPGlobals.ToonReverseSlowSpeed, OTPGlobals.ToonRotateSlowSpeed) def pageUp(self): - if not self.avatarControlsEnabled: + if not (self.avatarControlsEnabled or self.preventCameraDisable): return self.wakeUp() if not self.isPageUp: @@ -433,7 +437,7 @@ class LocalAvatar(DistributedAvatar.DistributedAvatar, DistributedSmoothNode.Dis self.clearPageUpDown() def pageDown(self): - if not self.avatarControlsEnabled: + if not (self.avatarControlsEnabled and self.preventCameraDisable): return self.wakeUp() if not self.isPageDown: @@ -452,7 +456,7 @@ class LocalAvatar(DistributedAvatar.DistributedAvatar, DistributedSmoothNode.Dis self.setCameraPositionByIndex(self.cameraIndex) def nextCameraPos(self, forward): - if not self.avatarControlsEnabled: + if not (self.avatarControlsEnabled or self.preventCameraDisable): return self.wakeUp() self.__cameraHasBeenMoved = 1 @@ -465,6 +469,10 @@ class LocalAvatar(DistributedAvatar.DistributedAvatar, DistributedSmoothNode.Dis if self.cameraIndex < 0: self.cameraIndex = len(self.cameraPositions) - 1 self.setCameraPositionByIndex(self.cameraIndex) + + def setCameraPosition(self, index): + self.cameraIndex = index + self.setCameraPositionByIndex(index) def initCameraPositions(self): camHeight = self.getClampedAvatarHeight() diff --git a/toontown/catalog/CatalogFurnitureItem.py b/toontown/catalog/CatalogFurnitureItem.py index 21e10d13..4992befe 100755 --- a/toontown/catalog/CatalogFurnitureItem.py +++ b/toontown/catalog/CatalogFurnitureItem.py @@ -17,12 +17,13 @@ FLRug = 4 FLPainting = 8 FLOnTable = 16 FLIsTable = 32 -FLPhone = 64 -FLCrate = 128 -FLBillboard = 256 -FLTrunk = 512 -FLBoysOnly = 1024 -FLGirlsOnly = 2048 +FLBillboard = 64 +FLPhone = 128 +FLCrate = 256 +FLChair = 512 +FLTrunk = 1024 +FLBoysOnly = 2048 +FLGirlsOnly = 4096 furnitureColors = [ (0.792, 0.353, 0.29, 1.0), (0.176, 0.592, 0.439, 1.0), @@ -74,16 +75,36 @@ MaxClosetIds = (508, 518) TvToPosScale = { 1530: ((-1.15, -0.5, 1.1), (2.5, 1.7, 1.4)), - 1531: ((-2.3, -0.2, 1.6), (5, 5, 5)), - 1532: ((-7, -0.2, 1.8), (15, 10, 8.5)) + 1531: ((-2.3, -0.2, 2.522), (5, 3.75, 3.187)), + 1532: ((-7, -0.2, 2.8), (15, 10, 7.8)) } +ChairToPosHpr = { + 100: ((0, -3.9, 0.88), (180, 0, 0), (0, -4.9, 0), -3.0), + 105: ((0, -3.9, 0.88), (180, 0, 0), (0, -4.9, 0), -3.0), + 110: ((0, -1.6, 0.5), (180, 0, 0), (0, -2.6, 0), 0.0), + 120: ((0, -1.6, 0.5), (180, 0, 0), (0, -2.6, 0), 0.0), + 130: ((0, -2.8, 0.5), (180, 0, 0), (0, -3.8, 0), -2.0), + 140: ((0, -1.6, 0.5), (180, 0, 0), (0, -2.6, 0), 0.0), + 145: ((0, -2.1, 0.2), (180, 0, 0), (0, -3.1, 0), 0.0), + 160: ((-1.7, 0, 0.9), (90, 0, 0), (-2.7, 0, 0), 0.0), + 170: ((0, 1.8, 0.4), (0, 0, 0), (0, 2.8, 0), 0.0), + 700: ((0, -1.2, 0.5), (180, 0, 0), (0, -2.2, 0), 0.0), + 705: ((0, -1.2, 0.5), (180, 0, 0), (0, -2.2, 0), 0.0), + 710: ((0, -1.1, 0.4), (180, 0, 0), (0, -2.1, 0), 0.0), + 715: ((0, -1.1, 0.4), (180, 0, 0), (0, -2.1, 0), 0.0), + 720: ((0, -2.7, 0.2), (180, 0, 0), (0, -3.7, 0), -3.0) +} + +def getChairCollOffset(furnitureId): + return ChairToPosHpr[furnitureId][3] + FurnitureTypes = { 100: ('phase_5.5/models/estate/chairA', # Model None, # Color None, # Color Options - 80), # Base Price - # Flags + 80, # Base Price + FLChair), # Flags # Scale 105: ('phase_5.5/models/estate/chairAdesat', None, @@ -93,27 +114,33 @@ FurnitureTypes = { 3: (('**/cushion*', furnitureColors[3]), ('**/arm*', furnitureColors[3])), 4: (('**/cushion*', furnitureColors[4]), ('**/arm*', furnitureColors[4])), 5: (('**/cushion*', furnitureColors[5]), ('**/arm*', furnitureColors[5]))}, - 160), + 160, + FLChair), 110: ('phase_3.5/models/modules/chair', None, None, - 40), + 40, + FLChair), 120: ('phase_5.5/models/estate/deskChair', None, None, - 60), + 60, + FLChair), 130: ('phase_5.5/models/estate/BugRoomChair', None, None, - 160), + 160, + FLChair), 140: ('phase_5.5/models/estate/UWlobsterChair', None, None, - 200), + 200, + FLChair), 145: ('phase_5.5/models/estate/UWlifeSaverChair', None, None, - 200), + 200, + FLChair), 150: ('phase_5.5/models/estate/West_saddleStool2', None, None, @@ -121,11 +148,13 @@ FurnitureTypes = { 160: ('phase_5.5/models/estate/West_nativeChair', None, None, - 160), + 160, + FLChair), 170: ('phase_5.5/models/estate/cupcakeChair', None, None, - 240), + 240, + FLChair), 200: ('phase_5.5/models/estate/regular_bed', None, None, @@ -415,7 +444,8 @@ FurnitureTypes = { 700: ('phase_3.5/models/modules/couch_1person', None, None, - 230), + 230, + FLChair), 705: ('phase_5.5/models/estate/couch_1personDesat', None, {0: (('**/*couch', furnitureColors[0]),), @@ -424,11 +454,13 @@ FurnitureTypes = { 3: (('**/*couch', furnitureColors[3]),), 4: (('**/*couch', furnitureColors[4]),), 5: (('**/*couch', furnitureColors[5]),)}, - 460), + 460, + FLChair), 710: ('phase_3.5/models/modules/couch_2person', None, None, - 230), + 230, + FLChair), 715: ('phase_5.5/models/estate/couch_2personDesat', None, {0: (('**/*couch', furnitureColors[0]),), @@ -437,11 +469,13 @@ FurnitureTypes = { 3: (('**/*couch', furnitureColors[3]),), 4: (('**/*couch', furnitureColors[4]),), 5: (('**/*couch', furnitureColors[5]),)}, - 460), + 460, + FLChair), 720: ('phase_5.5/models/estate/West_HayCouch', None, None, - 420), + 420, + FLChair), 730: ('phase_5.5/models/estate/twinkieCouch', None, None, diff --git a/toontown/coghq/DistributedLevelBattleAI.py b/toontown/coghq/DistributedLevelBattleAI.py index 06d85f96..6eac9f16 100755 --- a/toontown/coghq/DistributedLevelBattleAI.py +++ b/toontown/coghq/DistributedLevelBattleAI.py @@ -7,7 +7,6 @@ from direct.fsm import ClassicFSM from toontown.battle.BattleBase import * import CogDisguiseGlobals from direct.showbase.PythonUtil import addListsByValue -import time class DistributedLevelBattleAI(DistributedBattleAI.DistributedBattleAI): notify = DirectNotifyGlobal.directNotify.newCategory('DistributedLevelBattleAI') @@ -105,11 +104,9 @@ class DistributedLevelBattleAI(DistributedBattleAI.DistributedBattleAI): self.sendUpdate('announceCrateReward') item = CatalogFurnitureItem.CatalogFurnitureItem(10040) - item.deliveryDate = int(time.time() / 60. + .5) for toon in toons: - toon.onOrder.append(item) - toon.b_setDeliverySchedule(toon.onOrder) + toon.addToDeliverySchedule(item) def enterFaceOff(self): self.notify.debug('DistributedLevelBattleAI.enterFaceOff()') diff --git a/toontown/estate/DistributedChair.py b/toontown/estate/DistributedChair.py new file mode 100644 index 00000000..355469d0 --- /dev/null +++ b/toontown/estate/DistributedChair.py @@ -0,0 +1,145 @@ +from direct.interval.IntervalGlobal import * +from direct.gui.DirectGui import * +from toontown.effects import DustCloud +from toontown.toonbase import ToontownGlobals, TTLocalizer +from toontown.toontowngui import TTDialog +from toontown.quest import Quests +import DistributedFurnitureItem +from toontown.catalog import CatalogFurnitureItem + +class DistributedChair(DistributedFurnitureItem.DistributedFurnitureItem): + + def __init__(self, cr): + DistributedFurnitureItem.DistributedFurnitureItem.__init__(self, cr) + self.dialog = None + self.exitButton = None + self.locked = False + self.avId = ToontownGlobals.CHAIR_NONE + + def loadModel(self): + model = DistributedFurnitureItem.DistributedFurnitureItem.loadModel(self) + cSphere = CollisionSphere(0.0, CatalogFurnitureItem.getChairCollOffset(self.item.furnitureType), 1.0, 1.575) + cSphere.setTangible(0) + colNode = CollisionNode('Chair-%s' % self.doId) + colNode.addSolid(cSphere) + cSpherePath = model.attachNewNode(colNode) + cSpherePath.setCollideMask(ToontownGlobals.WallBitmask) + self.accept('enterChair-%s' % self.doId, self.__enterSphere) + return model + + def disable(self): + av = base.cr.doId2do.get(self.avId) + if av: + self.resetAvatar(av) + self.ignoreAll() + DistributedFurnitureItem.DistributedFurnitureItem.disable(self) + + def getChair(self): + return CatalogFurnitureItem.ChairToPosHpr[self.item.furnitureType] + + def destroyGui(self): + if self.exitButton: + self.exitButton.destroy() + self.exitButton = None + + if self.dialog: + self.dialog.destroy() + self.dialog = None + + def setupGui(self): + castGui = loader.loadModel('phase_4/models/gui/fishingGui') + self.exitButton = DirectButton(parent=base.a2dBottomRight, relief=None, text=('', TTLocalizer.FishingExit, TTLocalizer.FishingExit), text_align=TextNode.ACenter, text_scale=0.1, text_fg=Vec4(1, 1, 1, 1), text_shadow=Vec4(0, 0, 0, 1), text_pos=(0.0, -0.12), pos=(-0.158, 0, 0.14), image=(castGui.find('**/exit_buttonUp'), castGui.find('**/exit_buttonDown'), castGui.find('**/exit_buttonRollover')), command=self.sendUpdate, extraArgs=['requestSit', [ToontownGlobals.CHAIR_STOP]]) + castGui.removeNode() + + base.localAvatar.stopSleepWatch() + base.localAvatar.startSleepWatch(self.__handleFallingAsleep) + + def resetAvatar(self, av): + av.loop('neutral') + av.setPos(av.getPos(render)) + av.getGeomNode().setHpr(0, 0, 0) + av.setH(self.getH() + self.getChair()[1][0]) + av.reparentTo(render) + + if av == base.localAvatar: + base.localAvatar.setPreventCameraDisable(False) + base.cr.playGame.getPlace().setState('walk') + + def setAvId(self, avId): + print 'Get av id %s' % avId + if avId == ToontownGlobals.CHAIR_NONE: + self.avId = avId + return + + chair = self.getChair() + av = base.cr.doId2do.get(avId) + + if not av: + return + + sitStartDuration = av.getDuration('sit-start') + sequence = Sequence(Func(av.loop, 'walk'), av.getGeomNode().hprInterval(0.25, chair[1]), Parallel(Sequence(Wait(sitStartDuration * 0.25), av.posInterval(sitStartDuration * 0.25, chair[0])), ActorInterval(av, 'sit-start')), Func(av.setAnimState, 'Sit', 1.0)) + + av.setPosHpr(chair[2], (0, 0, 0)) + av.reparentTo(self) + + if av == base.localAvatar: + base.cr.playGame.getPlace().setState('walk') + base.localAvatar.setPreventCameraDisable(True) + base.cr.playGame.getPlace().setState('stopped') + sequence.append(Func(self.setupGui)) + + sequence.start() + self.avId = avId + + def setStatus(self, status): + print 'Got status %s %s' % (status, self.avId) + av = base.cr.doId2do.get(self.avId) + + if not av: + print 'RIP' + return + + if status == ToontownGlobals.CHAIR_LOCKED: + print 'locked' + self.locked = True + + if status == ToontownGlobals.CHAIR_UNEXPECTED_EXIT: + print 'unexpected' + self.resetAvatar(av) + else: + print 'rektangle' + sitStartDuration = av.getDuration('sit-start') + self.destroyGui() + Sequence(Parallel(ActorInterval(av, 'sit-start', startTime=sitStartDuration, endTime=0.0), Sequence(Wait(sitStartDuration * 0.25), av.posInterval(sitStartDuration * 0.25, self.getChair()[2]))), Func(self.resetAvatar, av)).start() + + def resetAvatar(self, av): + av.loop('neutral') + av.setPos(av.getPos(render)) + av.getGeomNode().setHpr(0, 0, 0) + av.setH(self.getH() + self.getChair()[1][0]) + av.reparentTo(render) + + if av == base.localAvatar: + base.localAvatar.setPreventCameraDisable(False) + base.cr.playGame.getPlace().setState('walk') + self.destroyGui() + + def __enterSphere(self, collisionEntry): + if self.locked or self.avId in base.cr.doId2do: + return + + base.cr.playGame.getPlace().setState('stopped') + self.dialog = TTDialog.TTDialog(style=TTDialog.TwoChoice, text=TTLocalizer.ChairAskToUse, fadeScreen=1, command=self.__handleDialogResponse) + + def __handleDialogResponse(self, response): + self.destroyGui() + + if response < 0: + base.cr.playGame.getPlace().setState('walk') + return + + self.sendUpdate('requestSit', [ToontownGlobals.CHAIR_START]) + + def __handleFallingAsleep(self, arg): + self.sendUpdate('requestSit', [ToontownGlobals.CHAIR_STOP]) \ No newline at end of file diff --git a/toontown/estate/DistributedChairAI.py b/toontown/estate/DistributedChairAI.py new file mode 100644 index 00000000..a07d58c7 --- /dev/null +++ b/toontown/estate/DistributedChairAI.py @@ -0,0 +1,57 @@ +from toontown.catalog import CatalogAccessoryItem, CatalogClothingItem, CatalogNametagItem, CatalogEmoteItem +from toontown.catalog.CatalogAccessoryItemGlobals import * +from toontown.toonbase import ToontownGlobals, TTLocalizer +from toontown.toon import ToonDNA +from toontown.quest import Quests +from DistributedFurnitureItemAI import DistributedFurnitureItemAI +import random, time + +class DistributedChairAI(DistributedFurnitureItemAI): + + def __init__(self, air, furnitureMgr, itemType): + DistributedFurnitureItemAI.__init__(self, air, furnitureMgr, itemType) + self.avId = ToontownGlobals.CHAIR_NONE + + def destroy(self): + self.ignoreAll() + DistributedFurnitureItemAI.destroy(self) + + def b_setAvId(self, avId): + self.avId = avId + self.sendUpdate('setAvId', [avId]) + + def b_resetAvId(self): + self.b_setAvId(ToontownGlobals.CHAIR_NONE) + + def b_resetAvWithAnim(self, reason): + self.sendUpdate('setStatus', [reason]) + self.b_resetAvId() + + def getAvId(self): + return self.avId + + def getSitResponse(self): + return ToontownGlobals.CHAIR_NONE + + def requestSit(self, requestCode): + avId = self.air.getAvatarIdFromSender() + av = self.air.doId2do.get(avId) + + if not av: + return + + if requestCode == ToontownGlobals.CHAIR_START: + if self.avId in self.air.doId2do: + return + + self.b_setAvId(avId) + self.acceptOnce(self.air.getAvatarExitEvent(avId), self.__handleUnexpectedExit) + elif requestCode == ToontownGlobals.CHAIR_STOP: + if self.avId != avId: + return + + self.b_resetAvWithAnim(ToontownGlobals.CHAIR_EXIT) + self.ignoreAll() + + def __handleUnexpectedExit(self): + self.b_resetAvWithAnim(ToontownGlobals.CHAIR_UNEXPECTED_EXIT) \ No newline at end of file diff --git a/toontown/estate/DistributedFurnitureManagerAI.py b/toontown/estate/DistributedFurnitureManagerAI.py index 03a8fdc9..33e241eb 100755 --- a/toontown/estate/DistributedFurnitureManagerAI.py +++ b/toontown/estate/DistributedFurnitureManagerAI.py @@ -1,7 +1,7 @@ from direct.distributed.DistributedObjectAI import DistributedObjectAI from toontown.catalog.CatalogItemList import CatalogItemList from toontown.catalog import CatalogItem -from toontown.catalog.CatalogFurnitureItem import CatalogFurnitureItem, FLTrunk, FLCloset, FLBank, FLPhone, FLCrate +from toontown.catalog.CatalogFurnitureItem import CatalogFurnitureItem, FLTrunk, FLCloset, FLBank, FLPhone, FLCrate, FLChair from toontown.catalog.CatalogWallpaperItem import CatalogWallpaperItem from toontown.catalog.CatalogMouldingItem import CatalogMouldingItem from toontown.catalog.CatalogFlooringItem import CatalogFlooringItem @@ -13,6 +13,7 @@ from DistributedClosetAI import DistributedClosetAI from DistributedTrunkAI import DistributedTrunkAI from DistributedBankAI import DistributedBankAI from DistributedRewardCrateAI import DistributedRewardCrateAI +from DistributedChairAI import DistributedChairAI from otp.ai.MagicWordGlobal import * class FurnitureError(Exception): @@ -246,6 +247,8 @@ class DistributedFurnitureManagerAI(DistributedObjectAI): do = DistributedPhoneAI(self.air, self, item) elif item.getFlags() & FLCrate: do = DistributedRewardCrateAI(self.air, self, item) + elif item.getFlags() & FLChair: + do = DistributedChairAI(self.air, self, item) else: do = DistributedFurnitureItemAI(self.air, self, item) diff --git a/toontown/safezone/Walk.py b/toontown/safezone/Walk.py index 6e72faa9..bbd4c0aa 100755 --- a/toontown/safezone/Walk.py +++ b/toontown/safezone/Walk.py @@ -40,10 +40,11 @@ class Walk(StateData.StateData): self.fsm.request('off') self.ignore('control') base.localAvatar.disableAvatarControls() - base.localAvatar.stopUpdateSmartCamera() + if not base.localAvatar.preventCameraDisable: + base.localAvatar.stopUpdateSmartCamera() + base.localAvatar.detachCamera() base.localAvatar.stopPosHprBroadcast() base.localAvatar.stopBlink() - base.localAvatar.detachCamera() base.localAvatar.stopGlitchKiller() base.localAvatar.collisionsOff() base.localAvatar.controlManager.placeOnFloor() diff --git a/toontown/shtiker/ShtikerBook.py b/toontown/shtiker/ShtikerBook.py index 711ac54f..0874ac99 100755 --- a/toontown/shtiker/ShtikerBook.py +++ b/toontown/shtiker/ShtikerBook.py @@ -34,7 +34,6 @@ class ShtikerBook(DirectFrame, StateData.StateData): self.pageOrder = [TTLocalizer.OptionsPageTitle, TTLocalizer.ShardPageTitle, TTLocalizer.MapPageTitle, - TTLocalizer.StatPageTitle, TTLocalizer.InventoryPageTitle, TTLocalizer.QuestPageToonTasks, TTLocalizer.TrackPageShortTitle, @@ -46,7 +45,8 @@ class ShtikerBook(DirectFrame, StateData.StateData): TTLocalizer.GardenPageTitle, TTLocalizer.GolfPageTitle, TTLocalizer.PhotoPageTitle, - TTLocalizer.EventsPageName] + TTLocalizer.EventsPageName, + TTLocalizer.StatPageTitle] def setSafeMode(self, setting): self.safeMode = setting diff --git a/toontown/toon/LocalToon.py b/toontown/toon/LocalToon.py index 1f45ee9a..580159a4 100755 --- a/toontown/toon/LocalToon.py +++ b/toontown/toon/LocalToon.py @@ -307,9 +307,6 @@ class LocalToon(DistributedToon.DistributedToon, LocalAvatar.LocalAvatar): self.shardPage = ShardPage.ShardPage() self.shardPage.load() self.book.addPage(self.shardPage, pageName=TTLocalizer.ShardPageTitle) - self.statPage = StatPage.StatPage() - self.statPage.load() - self.book.addPage(self.statPage, pageName=TTLocalizer.StatPageTitle) self.mapPage = MapPage.MapPage() self.mapPage.load() self.book.addPage(self.mapPage, pageName=TTLocalizer.MapPageTitle) @@ -342,6 +339,9 @@ class LocalToon(DistributedToon.DistributedToon, LocalAvatar.LocalAvatar): self.photoPage.load() self.book.addPage(self.photoPage, pageName=TTLocalizer.PhotoPageTitle) self.addEventsPage() + self.statPage = StatPage.StatPage() + self.statPage.load() + self.book.addPage(self.statPage, pageName=TTLocalizer.StatPageTitle) self.book.setPage(self.mapPage, enterPage=False) self.laffMeter = LaffMeter.LaffMeter(self.style, self.hp, self.maxHp) self.laffMeter.setAvatar(self) diff --git a/toontown/toonbase/TTLocalizerEnglish.py b/toontown/toonbase/TTLocalizerEnglish.py index b5e6266e..e7489cbc 100755 --- a/toontown/toonbase/TTLocalizerEnglish.py +++ b/toontown/toonbase/TTLocalizerEnglish.py @@ -8652,6 +8652,8 @@ Stats = [ StatResetAsk = 'Are you sure you want to reset your stats? This is an irreversible action!' StatResetDone = 'Your stats have been reset.' +ChairAskToUse = 'Would you like to sit on this chair?' + Blacklist = [ "$1ut", "$h1t", diff --git a/toontown/toonbase/ToontownGlobals.py b/toontown/toonbase/ToontownGlobals.py index 3d7ae65c..3d0878cf 100755 --- a/toontown/toonbase/ToontownGlobals.py +++ b/toontown/toonbase/ToontownGlobals.py @@ -1665,4 +1665,11 @@ STAT_GOLF = 17 STAT_SOS = 18 STAT_UNITES = 19 STAT_SLIPS = 20 -STAT_GAGS = 21 \ No newline at end of file +STAT_GAGS = 21 + +CHAIR_START = 0 +CHAIR_STOP = 1 +CHAIR_NONE = 0 +CHAIR_EXIT = 1 +CHAIR_LOCKED = 2 +CHAIR_UNEXPECTED_EXIT = 3 \ No newline at end of file