2019-11-02 17:27:54 -05:00
from direct . interval . IntervalGlobal import *
from direct . distributed import PyDatagram
from direct . distributed . MsgTypes import MsgName2Id
from pandac . PandaModules import *
from direct . distributed import DistributedObject
from toontown . toon import DistributedToon
from direct . directnotify import DirectNotifyGlobal
from toontown . town import TownBattleAttackPanel
from toontown . suit import RoguesGallery
from otp . avatar import Avatar
from otp . chat import ChatManager
from toontown . toonbase import ToontownGlobals
from toontown . toonbase import ToontownBattleGlobals
import string
from toontown . toon import Toon
from direct . showbase import PythonUtil
from toontown . suit import DistributedSuitPlanner
from toontown . suit import DistributedBossCog
from otp . otpbase import OTPGlobals
from direct . distributed . ClockDelta import *
from otp . ai import MagicWordManager
from toontown . hood import ZoneUtil
from toontown . battle import Fanfare
from toontown . golf import GolfGlobals
from toontown . distributed import ToontownDistrictStats
from toontown . coderedemption import TTCodeRedemptionConsts
from toontown . rpc import AwardManagerConsts
if base . wantKarts :
from toontown . racing . KartDNA import *
from toontown . racing . KartShopGui import *
if ( __debug__ ) :
import pdb
class ToontownMagicWordManager ( MagicWordManager . MagicWordManager ) :
notify = DirectNotifyGlobal . directNotify . newCategory ( ' ToontownMagicWordManager ' )
neverDisable = 1
GameAvatarClass = DistributedToon . DistributedToon
def __init__ ( self , cr ) :
MagicWordManager . MagicWordManager . __init__ ( self , cr )
self . rogues = None
self . ruler = None
self . dbg_running_fast = 0
return
def generate ( self ) :
MagicWordManager . MagicWordManager . generate ( self )
self . accept ( ' magicWord ' , self . b_setMagicWord )
def doLoginMagicWords ( self ) :
MagicWordManager . MagicWordManager . doLoginMagicWords ( self )
if base . config . GetBool ( ' want-chat ' , 0 ) :
self . d_setMagicWord ( ' ~chat ' , base . localAvatar . doId , 0 )
if base . config . GetBool ( ' want-run ' , 0 ) or base . config . GetBool ( ' want-toontown-run ' , 0 ) :
self . toggleRun ( )
if base . config . GetBool ( ' immortal-mode ' , 0 ) :
self . d_setMagicWord ( ' ~immortal ' , base . localAvatar . doId , 0 )
mintFloor = base . config . GetInt ( ' mint-floor ' , - 1 )
if mintFloor != - 1 :
self . d_setMagicWord ( ' ~mintFloor %s ' % mintFloor , base . localAvatar . doId , 0 )
mintId = base . config . GetInt ( ' mint-id ' , - 1 )
if mintId != - 1 :
self . d_setMagicWord ( ' ~mint %s ' % mintId , base . localAvatar . doId , 0 )
autoRestock = base . config . GetInt ( ' auto-restock ' , - 1 )
if autoRestock != - 1 :
self . d_setMagicWord ( ' ~autoRestock %s ' % autoRestock , base . localAvatar . doId , 0 )
autoRich = base . config . GetInt ( ' auto-rich ' , - 1 )
if autoRich != - 1 :
self . d_setMagicWord ( ' ~autoRich %s ' % autoRich , base . localAvatar . doId , 0 )
autoResistanceRestock = base . config . GetInt ( ' auto-resistance-restock ' , - 1 )
if autoResistanceRestock != - 1 :
self . d_setMagicWord ( ' ~autoResistanceRestock %s ' % autoResistanceRestock , base . localAvatar . doId , 0 )
autoRestockSOS = base . config . GetInt ( ' auto-restock-sos ' , - 1 )
if autoRestockSOS != - 1 :
self . d_setMagicWord ( ' ~autoRestockSOS %s ' % autoRestockSOS , base . localAvatar . doId , 0 )
autoRestockPinkSlips = base . config . GetInt ( ' auto-restock-pink-slips ' , - 1 )
if autoRestockPinkSlips != - 1 :
self . d_setMagicWord ( ' ~autoRestockPinkSlips %s ' % autoRestockPinkSlips , base . localAvatar . doId , 0 )
autoRestockSummons = base . config . GetInt ( ' auto-restock-summons ' , - 1 )
if autoRestockSummons != - 1 :
self . d_setMagicWord ( ' ~autoRestockSummons %s ' % autoRestockSummons , base . localAvatar . doId , 0 )
paidStatus = base . config . GetString ( ' force-paid-status ' , ' none ' )
if paidStatus != ' none ' :
self . d_setMagicWord ( ' ~setPaid %s ' % choice ( paidStatus == ' paid ' , 1 , 0 ) , localAvatar . doId , 0 )
self . doConfigMagicWords ( )
def doConfigMagicWords ( self ) :
autoMagicWords = base . config . GetString ( ' auto-magic-words ' , ' ' ) . split ( ' | ' )
for command in autoMagicWords :
if command :
self . d_setMagicWord ( command . strip ( ) , base . localAvatar . doId , 0 )
def disable ( self ) :
self . ignore ( ' magicWord ' )
if self . dbg_running_fast :
self . toggleRun ( )
MagicWordManager . MagicWordManager . disable ( self )
def doMagicWord ( self , word , avId , zoneId ) :
wordIs = Functor ( self . wordIs , word )
if MagicWordManager . MagicWordManager . doMagicWord ( self , word , avId , zoneId ) == 1 :
pass
elif wordIs ( ' ~fanfare ' ) :
go = Fanfare . makeFanfareWithMessageImage ( 0 , base . localAvatar , 1 , " You just did a ~fanfare. Here ' s a rake. " , Vec2 ( 0 , 0.2 ) , 0.08 , base . localAvatar . inventory . buttonLookup ( 1 , 1 ) , Vec3 ( 0 , 0 , 0 ) , 4 )
Sequence ( go [ 0 ] , Func ( go [ 1 ] . show ) , LerpColorScaleInterval ( go [ 1 ] , duration = 0.5 , startColorScale = Vec4 ( 1 , 1 , 1 , 0 ) , colorScale = Vec4 ( 1 , 1 , 1 , 1 ) ) , Wait ( 2 ) , LerpColorScaleInterval ( go [ 1 ] , duration = 0.5 , startColorScale = Vec4 ( 1 , 1 , 1 , 1 ) , colorScale = Vec4 ( 1 , 1 , 1 , 0 ) ) , Func ( go [ 1 ] . remove ) ) . start ( )
elif wordIs ( ' ~endgame ' ) :
2019-12-30 00:07:56 -06:00
print ( ' Requesting minigame abort... ' )
2019-11-02 17:27:54 -05:00
messenger . send ( ' minigameAbort ' )
elif wordIs ( ' ~wingame ' ) :
2019-12-30 00:07:56 -06:00
print ( ' Requesting minigame victory... ' )
2019-11-02 17:27:54 -05:00
messenger . send ( ' minigameVictory ' )
elif wordIs ( ' ~walk ' ) :
try :
fsm = base . cr . playGame . getPlace ( ) . fsm
fsm . forceTransition ( ' walk ' )
except :
pass
elif wordIs ( ' ~movie ' ) :
try :
fsm = base . cr . playGame . getPlace ( ) . fsm
fsm . forceTransition ( ' movie ' )
except :
pass
elif wordIs ( ' ~sit ' ) :
try :
base . cr . playGame . getPlace ( ) . fsm . request ( ' sit ' )
except :
pass
elif wordIs ( ' ~rogues ' ) :
suitname = None
if len ( word ) > 7 :
suitname = word [ 7 : ] . split ( ' ' ) [ 1 ]
self . rogues = RoguesGallery . RoguesGallery ( suitname )
self . rogues . enter ( )
if suitname != None :
self . rogues . animate ( )
self . acceptOnce ( ' mouse1 ' , self . exit_rogues )
elif wordIs ( ' ~showPaths ' ) :
2019-12-30 00:07:56 -06:00
for obj in list ( self . cr . doId2do . values ( ) ) :
2019-11-02 17:27:54 -05:00
if isinstance ( obj , DistributedSuitPlanner . DistributedSuitPlanner ) :
obj . showPaths ( )
place = base . cr . playGame . getPlace ( )
if hasattr ( place , ' showPaths ' ) :
place . showPaths ( )
elif wordIs ( ' ~hidePaths ' ) :
2019-12-30 00:07:56 -06:00
for obj in list ( self . cr . doId2do . values ( ) ) :
2019-11-02 17:27:54 -05:00
if isinstance ( obj , DistributedSuitPlanner . DistributedSuitPlanner ) :
obj . hidePaths ( )
place = base . cr . playGame . getPlace ( )
if hasattr ( place , ' hidePaths ' ) :
place . hidePaths ( )
elif wordIs ( ' ~raceForever ' ) :
base . raceForever = True
elif wordIs ( ' ~listen ' ) :
base . localAvatar . garbleChat = 0
elif wordIs ( ' ~nochat ' ) or wordIs ( ' ~chat ' ) or wordIs ( ' ~superchat ' ) :
base . localAvatar . garbleChat = 1
elif wordIs ( ' ~exec ' ) :
ChatManager . ChatManager . execChat = 1
elif wordIs ( ' ~photoshoot ' ) :
base . cr . playGame . hood . sky . hide ( )
base . cr . playGame . getPlace ( ) . loader . geom . hide ( )
base . win . setClearColor ( VBase4 ( 1 , 1 , 1 , 1 ) )
base . localAvatar . stopLookAroundNow ( )
base . localAvatar . stopBlink ( )
base . localAvatar . setNameVisible ( 0 )
elif wordIs ( ' ~hideAttack ' ) :
TownBattleAttackPanel . hideAttackPanel ( 1 )
elif wordIs ( ' ~showAttack ' ) :
TownBattleAttackPanel . hideAttackPanel ( 0 )
elif wordIs ( ' ~collisions_on ' ) :
base . localAvatar . collisionsOn ( )
elif wordIs ( ' ~collisions_off ' ) :
base . localAvatar . collisionsOff ( )
elif wordIs ( ' ~battle_detect_off ' ) :
from toontown . suit import DistributedSuit
DistributedSuit . ALLOW_BATTLE_DETECT = 0
elif wordIs ( ' ~battle_detect_on ' ) :
from toontown . suit import DistributedSuit
DistributedSuit . ALLOW_BATTLE_DETECT = 1
elif wordIs ( ' ~battles ' ) :
base . localAvatar . setWantBattles ( not base . localAvatar . wantBattles )
if base . localAvatar . wantBattles :
response = ' battles ON '
else :
response = ' battles OFF '
self . setMagicWordResponse ( response )
elif wordIs ( ' ~skipBattleMovie ' ) or wordIs ( ' ~sbm ' ) :
ToontownBattleGlobals . SkipMovie = not ToontownBattleGlobals . SkipMovie
if ToontownBattleGlobals . SkipMovie :
response = ' battle movies will be skipped '
else :
response = ' battle movies will be played '
self . setMagicWordResponse ( response )
elif wordIs ( ' ~addCameraPosition ' ) :
base . localAvatar . addCameraPosition ( )
elif wordIs ( ' ~removeCameraPosition ' ) :
base . localAvatar . removeCameraPosition ( )
elif wordIs ( ' ~printCameraPosition ' ) :
base . localAvatar . printCameraPosition ( base . localAvatar . cameraIndex )
elif wordIs ( ' ~printCameraPositions ' ) :
base . localAvatar . printCameraPositions ( )
elif wordIs ( ' ~worldCam ' ) or wordIs ( ' ~wc ' ) :
myCam = render . find ( ' **/camera ' )
if not myCam . isEmpty ( ) :
camParent = myCam . getParent ( )
myCam . wrtReparentTo ( render )
pos = myCam . getPos ( )
hpr = myCam . getHpr ( )
response = ' ( %.2f , %.2f , %.2f ,) ( %.2f , %.2f , %.2f ) ' % ( pos [ 0 ] ,
pos [ 1 ] ,
pos [ 2 ] ,
hpr [ 0 ] ,
hpr [ 1 ] ,
hpr [ 2 ] )
if not camParent . isEmpty ( ) :
myCam . wrtReparentTo ( camParent )
self . setMagicWordResponse ( response )
2019-12-30 00:07:56 -06:00
print ( response )
2019-11-02 17:27:54 -05:00
elif wordIs ( ' ~sync ' ) :
tm = base . cr . timeManager
if tm == None :
response = ' No TimeManager. '
self . setMagicWordResponse ( response )
else :
tm . extraSkew = 0.0
skew = string . strip ( word [ 5 : ] )
if skew != ' ' :
tm . extraSkew = float ( skew )
globalClockDelta . clear ( )
tm . handleHotkey ( )
elif wordIs ( ' ~period ' ) :
timeout = string . strip ( word [ 7 : ] )
if timeout != ' ' :
seconds = int ( timeout )
base . cr . stopPeriodTimer ( )
base . cr . resetPeriodTimer ( seconds )
base . cr . startPeriodTimer ( )
if base . cr . periodTimerExpired :
response = ' Period timer has expired. '
elif base . cr . periodTimerStarted :
elapsed = globalClock . getFrameTime ( ) - base . cr . periodTimerStarted
secondsRemaining = base . cr . periodTimerSecondsRemaining - elapsed
response = ' Period timer expires in %s seconds. ' % int ( secondsRemaining )
else :
response = ' Period timer not set. '
self . setMagicWordResponse ( response )
elif wordIs ( ' ~net ' ) :
if base . cr . networkPlugPulled ( ) :
base . cr . restoreNetworkPlug ( )
base . cr . startHeartbeat ( )
response = ' Network restored. '
else :
base . cr . pullNetworkPlug ( )
base . cr . stopHeartbeat ( )
response = ' Network disconnected. '
self . setMagicWordResponse ( response )
elif wordIs ( ' ~lag ' ) :
if not hasattr ( base . cr , ' magicLag ' ) :
base . cr . startDelay ( 0.1 , 0.35 )
base . cr . magicLag = None
response = ' Simulated Lag On '
else :
base . cr . stopDelay ( )
del base . cr . magicLag
response = ' Simulated Lag Off '
self . setMagicWordResponse ( response )
elif wordIs ( ' ~endlessquietzone ' ) :
base . endlessQuietZone = not base . endlessQuietZone
response = ' endless quiet zone %s ' % choice ( base . endlessQuietZone , ' ON ' , ' OFF ' )
self . setMagicWordResponse ( response )
elif wordIs ( ' ~cogPageFull ' ) :
base . localAvatar . suitPage . updateAllCogs ( 3 )
elif wordIs ( ' ~mintId ' ) :
args = word . split ( )
postName = ' mintIdOverride '
if len ( args ) < 2 :
if bboard . has ( postName ) :
bboard . remove ( postName )
else :
try :
id = int ( args [ 1 ] )
foo = ToontownGlobals . MintNumRooms [ id ]
except :
pass
else :
bboard . post ( postName , id )
elif wordIs ( ' ~mintRoom ' ) :
args = word . split ( )
postName = ' mintRoom '
if len ( args ) < 2 :
if bboard . has ( postName ) :
bboard . remove ( postName )
else :
try :
id = int ( args [ 1 ] )
except :
pass
else :
bboard . post ( postName , id )
elif wordIs ( ' ~mintWarp ' ) :
args = word . split ( )
if len ( args ) < 2 :
self . setMagicWordResponse ( ' Usage: ~mintWarp roomId ' )
return
try :
roomNum = int ( args [ 1 ] )
except :
self . setMagicWordResponse ( ' roomId not found: %s ' % args [ 1 ] )
return
if not bboard . has ( ' mint ' ) :
self . setMagicWordResponse ( ' not in a mint ' )
return
mint = bboard . get ( ' mint ' )
if not mint . warpToRoom ( roomNum ) :
self . setMagicWordResponse ( ' invalid roomId or roomId not in this mint: %s ' % args [ 1 ] )
return
elif wordIs ( ' ~mintLayouts ' ) :
from toontown . coghq import MintLayout
MintLayout . printAllCashbotInfo ( )
self . setMagicWordResponse ( ' logged mint layouts ' )
elif wordIs ( ' ~edit ' ) :
if not __dev__ :
self . setMagicWordResponse ( ' client not running in dev mode ' )
return
from otp . level import EditorGlobals
level = bboard . get ( EditorGlobals . EditTargetPostName )
if level == None :
self . setMagicWordResponse ( ' no level available for editing ' )
return
from toontown . coghq import DistributedInGameEditor
EditorGlobals . assertReadyToEdit ( )
editUsername = EditorGlobals . getEditUsername ( )
editors = base . cr . doFindAll ( ' DistributedInGameEditor ' )
for e in editors :
if isinstance ( e , DistributedInGameEditor . DistributedInGameEditor ) :
if e . getLevelDoId ( ) == level . doId :
if e . editorIsLocalToon ( ) or e . getEditUsername ( ) == editUsername :
self . setMagicWordResponse ( " you ( ' %s ' ) are already editing this level " % editUsername )
return
cmd = ' ~inGameEdit %s %s ' % ( level . doId , editUsername )
self . b_setMagicWord ( cmd )
elif wordIs ( ' ~fshow ' ) :
from toontown . coghq import DistributedFactory
factories = base . cr . doFindAll ( ' DistributedFactory ' )
factory = None
for f in factories :
if isinstance ( f , DistributedFactory . DistributedFactory ) :
factory = f
break
if factory is None :
self . setMagicWordResponse ( ' factory not found ' )
return
factory . setColorZones ( not factory . fColorZones )
elif wordIs ( ' ~fzone ' ) :
args = word . split ( )
if len ( args ) < 2 :
self . setMagicWordResponse ( ' Usage: ~fzone <zoneNum> ' )
return
zoneId = int ( args [ 1 ] )
from toontown . coghq import DistributedFactory
factories = base . cr . doFindAll ( ' DistributedFactory ' )
factory = None
for f in factories :
if isinstance ( f , DistributedFactory . DistributedFactory ) :
factory = f
break
if factory is None :
self . setMagicWordResponse ( ' factory not found ' )
return
factory . warpToZone ( zoneId )
elif wordIs ( ' ~undead ' ) :
try :
goons = base . cr . doFindAll ( ' Goon ' )
for goon in goons :
goon . undead ( )
except :
self . notify . warning ( ' Error in undead ' )
elif wordIs ( ' ~resyncGoons ' ) :
try :
goons = base . cr . doFindAll ( ' Goon ' )
for goon in goons :
goon . resync ( )
except :
self . notify . warning ( ' Error in resyncing ' )
elif wordIs ( ' ~catalog ' ) :
self . doCatalog ( word )
elif wordIs ( ' ~petCam ' ) and base . wantPets :
if hasattr ( base , ' petCamPrevParent ' ) :
base . cam . reparentTo ( base . petCamPrevParent )
del base . petCamPrevParent
else :
petId = base . localAvatar . getPetId ( )
pet = self . cr . doId2do . get ( petId )
if pet :
if not hasattr ( pet , ' camNode ' ) :
pet . camNode = pet . attachNewNode ( ' camNode ' )
pet . camNode . setPos ( 0 , 0 , 2.5 )
base . petCamPrevParent = base . cam . getParent ( )
base . cam . reparentTo ( pet . camNode )
elif wordIs ( ' ~lockPet ' ) and base . wantPets :
petId = base . localAvatar . getPetId ( )
pet = self . cr . doId2do . get ( petId )
if pet :
if not pet . isLockedDown ( ) :
pet . lockPet ( )
elif wordIs ( ' ~unlockPet ' ) and base . wantPets :
petId = base . localAvatar . getPetId ( )
pet = self . cr . doId2do . get ( petId )
if pet :
if pet . isLockedDown ( ) :
pet . unlockPet ( )
elif wordIs ( ' ~resetPetTutorial ' ) and base . wantPets :
base . localAvatar . setPetTutorialDone ( False )
response = ' Pet Tutorial flag reset '
self . setMagicWordResponse ( response )
elif wordIs ( ' ~bossBattle ' ) :
self . doBossBattle ( word )
elif wordIs ( ' ~RaceChat ' ) :
base . localAvatar . chatMgr . chatInputSpeedChat . addKartRacingMenu ( )
elif wordIs ( ' ~BuyKart ' ) :
if base . wantKarts :
def doShtikerLater ( task ) :
base . localAvatar . addKartPage ( )
return 0
if base . localAvatar . hasKart ( ) :
response = ' Returning Kart %s ' % base . localAvatar . getKartBodyType ( )
base . localAvatar . requestKartDNAFieldUpdate ( KartDNA . bodyType , InvalidEntry )
self . setMagicWordResponse ( response )
else :
base . localAvatar . requestKartDNAFieldUpdate ( KartDNA . rimsType , getDefaultRim ( ) )
taskMgr . doMethodLater ( 1.0 , doShtikerLater , ' doShtikerLater ' )
response = ' Kart %s has been purchased with body and accessory color %s . ' % ( word [ 9 ] , getDefaultColor ( ) )
base . localAvatar . requestKartDNAFieldUpdate ( KartDNA . bodyType , int ( word [ 9 ] ) )
self . setMagicWordResponse ( response )
else :
self . setMagicWordResponse ( ' Enable wantKarts in Config.prc ' )
elif wordIs ( ' ~leaveRace ' ) :
messenger . send ( ' leaveRace ' )
elif wordIs ( ' ~kartParticles ' ) :
b = ConfigVariableBool ( ' want-kart-particles ' , 0 )
b . setValue ( not b )
elif wordIs ( ' ~gardenGame ' ) :
messenger . send ( ' gardenGame ' )
response = ' You must be on your estate '
self . setMagicWordResponse ( response )
elif wordIs ( ' ~verboseState ' ) :
base . localAvatar . verboseState ( )
elif wordIs ( ' ~golf ' ) :
self . doGolf ( word )
elif wordIs ( ' ~whiteList ' ) :
base . localAvatar . chatMgr . chatInputSpeedChat . addWhiteList ( )
elif wordIs ( ' ~updateWhiteList ' ) :
self . notify . info ( ' Updating WhiteList ' )
base . whiteList . redownloadWhitelist ( )
elif wordIs ( ' ~noWhiteList ' ) :
base . localAvatar . chatMgr . chatInputSpeedChat . removeWhiteList ( )
elif wordIs ( ' ~setPaid ' ) :
args = word . split ( )
if len ( args ) > 1 :
paid = int ( args [ 1 ] )
statusString = base . config . GetString ( ' force-paid-status ' , ' none ' )
if paid :
paid = 1
if statusString != ' none ' :
if statusString == ' VELVET ' :
ConfigVariableString ( ' force-paid-status ' ) . setValue ( ' FULL ' )
elif statusString == ' unpaid ' :
ConfigVariableString ( ' force-paid-status ' ) . setValue ( ' paid ' )
base . cr . setIsPaid ( 1 )
else :
paid = 0
if statusString != ' none ' :
if statusString == ' FULL ' :
ConfigVariableString ( ' force-paid-status ' ) . setValue ( ' VELVET ' )
elif statusString == ' paid ' :
ConfigVariableString ( ' force-paid-status ' ) . setValue ( ' unpaid ' )
base . cr . setIsPaid ( 0 )
else :
return
elif wordIs ( ' ~party ' ) :
self . doParty ( word , avId , zoneId )
elif wordIs ( ' ~news ' ) :
self . doNews ( word , avId , zoneId )
elif wordIs ( ' ~bgui ' ) :
if not hasattr ( self , ' groupPanel ' ) :
from toontown . toon import GroupPanel
self . groupPanel = GroupPanel . GroupPanel ( base . localAvatar . boardingParty )
self . groupPanel . frame . show ( )
else :
self . groupPanel . frame . hide ( )
self . groupPanel . cleanup ( )
del self . groupPanel
elif wordIs ( ' ~generateOrder ' ) :
args = word . split ( )
if len ( args ) > 1 :
newOrder = int ( args [ 1 ] )
if newOrder > = 0 and newOrder < = 2 :
datagram = PyDatagram . PyDatagram ( )
datagram . addUint16 ( MsgName2Id [ ' CLIENT_CHANGE_GENERATE_ORDER ' ] )
datagram . addUint32 ( newOrder )
base . cr . send ( datagram )
response = ' changing generate order to %s ' % newOrder
self . setMagicWordResponse ( response )
else :
response = ' args: 0 default, 1 reversed, 2 shuffled '
self . setMagicWordResponse ( response )
elif wordIs ( ' ~ruler ' ) :
response = ' Each unit is equal to one foot '
self . setMagicWordResponse ( response )
if self . ruler :
self . ruler . detachNode ( )
del self . ruler
self . ruler = loader . loadModel ( ' phase_3/models/props/xyzAxis ' )
self . ruler . reparentTo ( render )
self . ruler . setPos ( base . localAvatar . getPos ( ) )
self . ruler . place ( )
elif wordIs ( ' ~toonIdTags ' ) :
otherToons = base . cr . doFindAllOfType ( ' DistributedToon ' )
if otherToons :
for toon in otherToons [ 0 ] :
toon . setNametagStyle ( 0 )
messenger . send ( ' nameTagShowAvId ' , [ ] )
base . idTags = 1
elif wordIs ( ' ~code ' ) :
args = word . split ( )
if len ( args ) > 1 :
code = word [ len ( args [ 0 ] ) + 1 : ]
base . codeRedemptionMgr . redeemCode ( code , self . _handleCodeRedemptionResponse )
response = ' sending code %s to server... ' % code
else :
response = ' ~code <code> '
self . setMagicWordResponse ( response )
return
def _handleCodeRedemptionResponse ( self , result , awardMgrResult ) :
if not result :
msg = ' code redeemed '
else :
if result != TTCodeRedemptionConsts . RedeemErrors . AwardCouldntBeGiven :
errMsg = TTCodeRedemptionConsts . RedeemErrorStrings [ result ]
else :
errMsg = AwardManagerConsts . GiveAwardErrorStrings [ awardMgrResult ]
msg = ' code NOT redeemed ( %s ) ' % ( errMsg , )
base . localAvatar . setChatAbsolute ( msg , CFSpeech | CFTimeout )
def doParty ( self , word , av , zoneId ) :
args = word . split ( )
response = None
action = None
if len ( args ) == 1 :
return
action = args [ 1 ]
if action == ' plan ' :
base . localAvatar . aboutToPlanParty = True
base . localAvatar . creatingNewPartyWithMagicWord = False
elif action == ' new ' :
base . localAvatar . aboutToPlanParty = False
base . localAvatar . creatingNewPartyWithMagicWord = True
elif action == ' start ' :
base . localAvatar . creatingNewPartyWithMagicWord = False
base . localAvatar . aboutToPlanParty = False
hoodId = ToontownGlobals . PartyHood
ToontownDistrictStats . refresh ( ' shardInfoUpdated ' )
curShardTuples = base . cr . listActiveShards ( )
2019-12-30 00:07:56 -06:00
lowestPop = 100000000000000000
2019-11-02 17:27:54 -05:00
shardId = None
for shardInfo in curShardTuples :
pop = shardInfo [ 2 ]
if pop < lowestPop :
lowestPop = pop
shardId = shardInfo [ 0 ]
if shardId == base . localAvatar . defaultShard :
shardId = None
base . cr . playGame . getPlace ( ) . requestLeave ( { ' loader ' : ' safeZoneLoader ' ,
' where ' : ' party ' ,
' how ' : ' teleportIn ' ,
' hoodId ' : hoodId ,
' zoneId ' : - 1 ,
' shardId ' : shardId ,
' avId ' : - 1 } )
elif action == ' unreleasedClient ' :
newVal = base . cr . partyManager . toggleAllowUnreleasedClient ( )
response = ' Allow Unreleased Client = %s ' % newVal
elif action == ' showdoid ' :
newVal = base . cr . partyManager . toggleShowDoid ( )
response = ' show doid = %s ' % newVal
elif action == ' debugGrid ' :
newVal = not ConfigVariableBool ( ' show-debug-party-grid ' )
ConfigVariableBool ( ' show-debug-party-grid ' ) . setValue ( newVal )
response = ' Grid: %s ; re-enter party to see changes. ' % newVal
if response is not None :
self . setMagicWordResponse ( response )
return
def doCatalog ( self , word ) :
args = word . split ( )
if len ( args ) == 1 :
return
elif args [ 1 ] == ' reload ' :
phone = base . cr . doFind ( ' phone ' )
if phone and phone . phoneGui :
phone . phoneGui . reload ( )
response = ' Reloaded catalog screen '
else :
response = ' Phone is not active. '
elif args [ 1 ] == ' dump ' :
if len ( args ) < = 2 :
response = ' Specify output filename. '
else :
from toontown . catalog import CatalogGenerator
cg = CatalogGenerator . CatalogGenerator ( )
cg . outputSchedule ( args [ 2 ] )
response = ' Catalog schedule written to file %s . ' % args [ 2 ]
else :
return
self . setMagicWordResponse ( response )
def toggleRun ( self ) :
if self . dbg_running_fast :
self . dbg_running_fast = 0
OTPGlobals . ToonForwardSpeed = self . save_fwdspeed
OTPGlobals . ToonReverseSpeed = self . save_revspeed
OTPGlobals . ToonRotateSpeed = self . save_rotspeed
base . localAvatar . setWalkSpeedNormal ( )
else :
self . dbg_running_fast = 1
self . save_fwdspeed = OTPGlobals . ToonForwardSpeed
self . save_revspeed = OTPGlobals . ToonReverseSpeed
self . save_rotspeed = OTPGlobals . ToonRotateSpeed
OTPGlobals . ToonForwardSpeed = 60
OTPGlobals . ToonReverseSpeed = 30
OTPGlobals . ToonRotateSpeed = 100
base . localAvatar . setWalkSpeedNormal ( )
def requestTeleport ( self , loaderId , whereId , hoodId , zoneId , avId ) :
place = base . cr . playGame . getPlace ( )
if loaderId == ' ' :
loaderId = ZoneUtil . getBranchLoaderName ( zoneId )
if whereId == ' ' :
whereId = ZoneUtil . getToonWhereName ( zoneId )
if hoodId == 0 :
hoodId = place . loader . hood . id
if avId == 0 :
avId = - 1
place . fsm . forceTransition ( ' teleportOut ' , [ { ' loader ' : loaderId ,
' where ' : whereId ,
' how ' : ' teleportIn ' ,
' hoodId ' : hoodId ,
' zoneId ' : zoneId ,
' shardId ' : None ,
' avId ' : avId } ] )
return
def exit_rogues ( self ) :
self . rogues . exit ( )
del self . rogues
self . rogues = None
return
def identifyDistributedObjects ( self , name ) :
result = [ ]
lowerName = string . lower ( name )
2019-12-30 00:07:56 -06:00
for obj in list ( base . cr . doId2do . values ( ) ) :
2019-11-02 17:27:54 -05:00
className = obj . __class__ . __name__
try :
name = obj . getName ( )
except :
name = className
if string . lower ( name ) == lowerName or string . lower ( className ) == lowerName or string . lower ( className ) == ' distributed ' + lowerName :
result . append ( ( name , obj ) )
return result
def getCSBitmask ( self , str ) :
words = string . lower ( str ) . split ( )
if len ( words ) == 0 :
return None
invalid = ' '
bitmask = BitMask32 . allOff ( )
for w in words :
if w == ' wall ' :
bitmask | = ToontownGlobals . WallBitmask
elif w == ' floor ' :
bitmask | = ToontownGlobals . FloorBitmask
elif w == ' cam ' :
bitmask | = ToontownGlobals . CameraBitmask
elif w == ' catch ' :
bitmask | = ToontownGlobals . CatchBitmask
elif w == ' ghost ' :
bitmask | = ToontownGlobals . GhostBitmask
elif w == ' furniture ' :
bitmask | = ToontownGlobals . FurnitureSideBitmask | ToontownGlobals . FurnitureTopBitmask | ToontownGlobals . FurnitureDragBitmask
elif w == ' furnitureside ' :
bitmask | = ToontownGlobals . FurnitureSideBitmask
elif w == ' furnituretop ' :
bitmask | = ToontownGlobals . FurnitureTopBitmask
elif w == ' furnituredrag ' :
bitmask | = ToontownGlobals . FurnitureDragBitmask
elif w == ' pie ' :
bitmask | = ToontownGlobals . PieBitmask
else :
invalid + = ' ' + w
if invalid :
self . setMagicWordResponse ( ' Unknown CS keyword(s): %s ' % invalid )
return bitmask
def getFontByName ( self , fontname ) :
if fontname == ' toon ' :
return ToontownGlobals . getToonFont ( )
elif fontname == ' building ' :
return ToontownGlobals . getBuildingNametagFont ( )
elif fontname == ' minnie ' :
return ToontownGlobals . getMinnieFont ( )
elif fontname == ' suit ' :
return ToontownGlobals . getSuitFont ( )
else :
return MagicWordManager . MagicWordManager . getFontByName ( self , fontname )
def doBossBattle ( self , word ) :
args = word . split ( )
bossCog = None
2019-12-30 00:07:56 -06:00
for distObj in list ( self . cr . doId2do . values ( ) ) :
2019-11-02 17:27:54 -05:00
if isinstance ( distObj , DistributedBossCog . DistributedBossCog ) :
bossCog = distObj
break
response = None
if len ( args ) == 1 :
pass
elif args [ 1 ] == ' safe ' :
if len ( args ) < = 2 :
flag = not bossCog . localToonIsSafe
else :
flag = int ( args [ 2 ] )
bossCog . localToonIsSafe = flag
if flag :
response = ' LocalToon is now safe from boss attacks '
else :
response = ' LocalToon is now vulnerable to boss attacks '
elif args [ 1 ] == ' stun ' :
bossCog . stunAllGoons ( )
elif args [ 1 ] == ' destroy ' :
bossCog . destroyAllGoons ( )
elif args [ 1 ] == ' avatarEnter ' :
bossCog . d_avatarEnter ( )
response = ' called d_avatarEnter '
if response :
self . setMagicWordResponse ( response )
return
def doGolf ( self , word ) :
args = word . split ( )
response = None
if len ( args ) == 1 :
pass
elif args [ 1 ] == ' debugBarrier ' :
golfHole = base . cr . doFind ( ' DistributedGolfHole ' )
if golfHole :
if hasattr ( golfHole , ' golfBarrier ' ) and not golfHole . golfBarrier . isEmpty ( ) :
if golfHole . golfBarrier . isHidden ( ) :
golfHole . golfBarrier . show ( )
response = ' showing golf barrier '
else :
golfHole . golfBarrier . hide ( )
response = ' hiding golf barrier '
else :
response = ' no golf hole '
elif args [ 1 ] == ' contact ' :
messenger . send ( ' ode toggle contacts ' )
elif args [ 1 ] == ' power ' :
if len ( args ) > 2 :
base . golfPower = args [ 2 ]
response = ' setting power to %s ' % args [ 2 ]
else :
base . golfPower = None
response = ' unsetting power '
elif args [ 1 ] == ' heading ' :
if len ( args ) > 2 :
golfHole = base . cr . doFind ( ' DistributedGolfHole ' )
if golfHole :
golfHole . doMagicWordHeading ( args [ 2 ] )
response = ' setting heading to %s ' % args [ 2 ]
else :
response = ' need heading parameter '
elif args [ 1 ] == ' list ' :
response = ' '
for holeId in GolfGlobals . HoleInfo :
if holeId < 18 :
response + = ' %d : %s \n ' % ( holeId , GolfGlobals . getHoleName ( holeId ) )
elif args [ 1 ] == ' list2 ' :
response = ' '
for holeId in GolfGlobals . HoleInfo :
if holeId > = 18 :
response + = ' %d : %s \n ' % ( holeId , GolfGlobals . getHoleName ( holeId ) )
if response :
self . setMagicWordResponse ( response )
return
def doNews ( self , word , av , zoneId ) :
args = word . split ( )
response = None
action = None
if len ( args ) == 1 :
return
action = args [ 1 ]
if action == ' frame ' :
NametagGlobals . setMasterArrowsOn ( 0 )
from toontown . shtiker import InGameNewsFrame
base . newsFrame = InGameNewsFrame . InGameNewsFrame ( )
base . newsFrame . activate ( )
response = ' putting in game news direct frame up '
elif action == ' snapshot ' :
response = localAvatar . newsPage . doSnapshot ( )
if response is not None :
self . setMagicWordResponse ( response )
return