automation: add bot scripts, quest task autoers, and custom autoer shtiker page
This commit is contained in:
parent
04599db6d6
commit
ebdae1b2ad
|
|
@ -0,0 +1,262 @@
|
|||
import time as timeModule
|
||||
import datetime
|
||||
|
||||
class Ticker:
|
||||
def __init__(self,logName):
|
||||
self.line=[]
|
||||
self.display=[]
|
||||
self.lineNum=0
|
||||
self.lastMessages=['','']
|
||||
self.bottemDisplayNum=0
|
||||
self.isScrolled=False
|
||||
self.logName=logName
|
||||
for i in range(9):
|
||||
self.display.append("")
|
||||
self.lines=[]
|
||||
for i in range(11,20,1):
|
||||
self.lines.append(OnscreenText(text='', style=1, fg=(1,1,1,1), pos=(-.81,i/20.0,0), scale=.04, align=TextNode.ALeft))
|
||||
|
||||
def newLine(self,text):
|
||||
runTime=[]
|
||||
for item in timeModule.localtime():
|
||||
runTime.append(item)
|
||||
for i in range(3,6,1):
|
||||
if len(str(runTime[i]))==1:
|
||||
runTime[i]='0'+str(runTime[i])
|
||||
else:
|
||||
runTime[i]=str(runTime[i])
|
||||
text='::'+runTime[3]+':'+runTime[4]+':'+runTime[5]+' - '+self.logName+': '+text
|
||||
self.line.append(text)
|
||||
self.lineNum+=1
|
||||
|
||||
if not self.isScrolled:
|
||||
self.bottemDisplayNum=self.lineNum
|
||||
self.tick()
|
||||
self.printDisplay()
|
||||
|
||||
else:
|
||||
self.scrollDown()
|
||||
|
||||
def showLines(self):
|
||||
for line in self.lines:
|
||||
line.show()
|
||||
|
||||
def hideLines(self):
|
||||
for line in self.lines:
|
||||
line.hide()
|
||||
|
||||
def tick(self):
|
||||
for i in range(8,0,-1):
|
||||
self.display[i]=self.display[i-1]
|
||||
self.display[0]=self.line[-1]
|
||||
|
||||
def printDisplay(self):
|
||||
i=8
|
||||
for line in reversed(self.display):
|
||||
self.lines[i].setText(line)
|
||||
i-=1
|
||||
|
||||
def scrollUp(self):
|
||||
original=self.bottemDisplayNum
|
||||
if self.isScrolled:
|
||||
option=1
|
||||
self.bottemDisplayNum-=1
|
||||
else:
|
||||
option=2
|
||||
self.bottemDisplayNum=self.lineNum-1
|
||||
self.isScrolled=True
|
||||
|
||||
if self.bottemDisplayNum-9>-1:
|
||||
for i in range(1,9):
|
||||
self.display[i-1]=self.display[i]
|
||||
self.display[8]=self.line[self.bottemDisplayNum-9]
|
||||
else:
|
||||
self.bottemDisplayNum=original
|
||||
if option==2:
|
||||
self.isScrolled=False
|
||||
self.printDisplay()
|
||||
|
||||
def scrollDown(self):
|
||||
if self.isScrolled:
|
||||
if self.bottemDisplayNum+1==self.lineNum:
|
||||
self.isScrolled=False
|
||||
|
||||
self.bottemDisplayNum+=1
|
||||
for i in range(8,0,-1):
|
||||
self.display[i]=self.display[i-1]
|
||||
self.display[0]=self.line[self.bottemDisplayNum-1]
|
||||
self.printDisplay()
|
||||
|
||||
def checkLine(self,line):
|
||||
letterInLine=False
|
||||
for letter in line:
|
||||
if letter!=" ":
|
||||
letterInLine=True
|
||||
break
|
||||
return letterInLine
|
||||
|
||||
def destroy(self):
|
||||
for line in self.lines:
|
||||
line.destroy()
|
||||
del self.line
|
||||
|
||||
class AutoerGui:
|
||||
def __init__(self,logName,catagories,statsMethods,title,icon):
|
||||
self.startTime=None
|
||||
self.catagories=catagories[:]
|
||||
self.statsMethods=statsMethods[:]
|
||||
self.panel=[]
|
||||
self.formattedTime=str(datetime.timedelta(seconds=0))
|
||||
for i in range(3):
|
||||
self.panel.append(guiTools.loadImageAsPlane('phase_12/maps/WallBricksBig2.jpg',170,170))
|
||||
self.panel[i].reparentTo(aspect2d)
|
||||
self.panel[0].setPos(0,0,.77)
|
||||
self.panel[1].setPos(.566,0,.77)
|
||||
self.panel[2].setPos(-.566,0,.77)
|
||||
|
||||
self.overLay=guiTools.loadImageAsPlane('phase_11/maps/lawbotHQ_palette_2tmla_1.jpg',510,170)
|
||||
self.overLay.reparentTo(aspect2d)
|
||||
self.overLay.setPos(0,0,.77)
|
||||
self.overLay.setTransparency(TransparencyAttrib.MAlpha)
|
||||
self.overLay.setAlphaScale(0.6)
|
||||
|
||||
self.sides=[]
|
||||
self.corner=[]
|
||||
for i in range(2):
|
||||
self.corner.append(guiTools.loadImageAsPlane("phase_9/maps/CeilingMetalPlate2.jpg",20,20))
|
||||
self.corner[i].reparentTo(aspect2d)
|
||||
self.corner[0].setPos(-.85,0,.504)
|
||||
self.corner[1].setPos(.147,0,.504)
|
||||
for i in range(4):
|
||||
self.sides.append(guiTools.loadImageAsPlane("phase_7/maps/screwsBar.jpg",140,20))
|
||||
self.sides[i].reparentTo(aspect2d)
|
||||
self.sides[0].setHpr(0,0,90)
|
||||
self.sides[0].setPos(.147,0,.77)
|
||||
self.sides[1].setHpr(0,0,270)
|
||||
self.sides[1].setPos(-.85,0,.77)
|
||||
self.sides[2].setPos(-.586,0,.504)
|
||||
self.sides[3].setPos(-.119,0,.504)
|
||||
|
||||
self.frame=guiTools.loadImageAsPlane('phase_5/maps/tt_t_gui_cmg_miniMap_frame.jpg',220,159)
|
||||
self.frame.reparentTo(aspect2d)
|
||||
self.frame.setTransparency(TransparencyAttrib.MBinary, 1)
|
||||
self.frame.setPos(.547,0,.735)
|
||||
if icon!=None:
|
||||
if icon.lower()=='boss':
|
||||
icon='CorpIcon'
|
||||
elif icon.lower()=='sell':
|
||||
icon='SalesIcon'
|
||||
elif icon.lower()=='law':
|
||||
icon='LegalIcon'
|
||||
elif icon.lower()=='cash':
|
||||
icon='MoneyIcon'
|
||||
cogLogoModel=loader.loadModel('phase_3/models/gui/cog_icons.bam')
|
||||
self.cogLogo=cogLogoModel.find('**/'+icon)
|
||||
self.cogLogo.reparentTo(aspect2d)
|
||||
self.cogLogo.setScale(0.15)
|
||||
self.cogLogo.setPos(.76,0,.88)
|
||||
|
||||
self.display=Ticker(logName)
|
||||
|
||||
textList=[catagories[0]+': N/A',catagories[1]+': N/A',catagories[2]+': N/A', catagories[3]+': N/A', catagories[4]+': N/A']
|
||||
|
||||
posList=[.77,.72,.67,.62,.57]
|
||||
self.text=[]
|
||||
for i in range(5):
|
||||
self.text.append(OnscreenText(text=textList[i], style=1, fg=(1,1,1,1), pos=(.27,posList[i],0), scale=.05, align=TextNode.ALeft))
|
||||
self.title=OnscreenText(text='\x01shadow\x01'+title+'\x02', style=1, fg=(1,1,1,1), pos=(.26,.85,0), scale=.1, align=TextNode.ALeft)
|
||||
self.buttons=[]
|
||||
self.buttons.append(guiTools.createButton(self.display.scrollUp,(.15,0,.85),'phase_3.5/models/gui/friendslist_gui.bam',['Horiz_Arrow_UP','Horiz_Arrow_DN','Horiz_Arrow_Rllvr']))
|
||||
self.buttons.append(guiTools.createButton(self.display.scrollDown,(.15,0,.68),'phase_3.5/models/gui/friendslist_gui.bam',['Horiz_Arrow_UP','Horiz_Arrow_DN','Horiz_Arrow_Rllvr']))
|
||||
|
||||
self.buttons[0].setHpr(0,0,270)
|
||||
self.buttons[1].setHpr(0,0,90)
|
||||
base.accept('wheel_up',self.display.scrollUp)
|
||||
base.accept('wheel_down',self.display.scrollDown)
|
||||
|
||||
def startTimer(self):
|
||||
self.formattedTime=str(datetime.timedelta(seconds=0))
|
||||
self.startTime=time.time()
|
||||
self.display.newLine('Started')
|
||||
taskMgr.add(self.updateAllText,'Autogui Clock')
|
||||
|
||||
def stopTimer(self):
|
||||
taskMgr.remove('Autogui Clock')
|
||||
|
||||
def updateAllText(self,task):
|
||||
if self.startTime:
|
||||
self.formattedTime=str(datetime.timedelta(seconds=round(time.time()-self.startTime)))
|
||||
|
||||
self.text[0].setText(self.catagories[0]+': '+eval(self.statsMethods[0]))
|
||||
self.text[1].setText(self.catagories[1]+': '+eval(self.statsMethods[1]))
|
||||
self.text[2].setText(self.catagories[2]+': '+eval(self.statsMethods[2]))
|
||||
self.text[3].setText(self.catagories[3]+': '+eval(self.statsMethods[3]))
|
||||
self.text[4].setText(self.catagories[4]+': '+eval(self.statsMethods[4]))
|
||||
return task.cont
|
||||
|
||||
def workOutNumberAnHour(self,number):
|
||||
if round(time.time()-self.startTime)==0:
|
||||
return 0
|
||||
else:
|
||||
return int((number/(time.time()-self.startTime))*3600)
|
||||
|
||||
def hideAll(self):
|
||||
for panel in self.panel:
|
||||
panel.hide()
|
||||
for side in self.sides:
|
||||
side.hide()
|
||||
for corner in self.corner:
|
||||
corner.hide()
|
||||
for text in self.text:
|
||||
text.hide()
|
||||
for button in self.buttons:
|
||||
button.hide()
|
||||
self.title.hide()
|
||||
self.frame.hide()
|
||||
self.overLay.hide()
|
||||
try:self.cogLogo.hide()
|
||||
except:pass
|
||||
self.display.hideLines()
|
||||
base.ignore('wheel_up')
|
||||
base.ignore('wheel_down')
|
||||
|
||||
def showAll(self):
|
||||
for panel in self.panel:
|
||||
panel.show()
|
||||
for side in self.sides:
|
||||
side.show()
|
||||
for corner in self.corner:
|
||||
corner.show()
|
||||
for text in self.text:
|
||||
text.show()
|
||||
for button in self.buttons:
|
||||
button.show()
|
||||
self.title.show()
|
||||
self.frame.show()
|
||||
self.overLay.show()
|
||||
try:self.cogLogo.show()
|
||||
except:pass
|
||||
self.display.showLines()
|
||||
base.accept('wheel_up',self.display.scrollUp)
|
||||
base.accept('wheel_down',self.display.scrollDown)
|
||||
|
||||
def destroy(self):
|
||||
for panel in self.panel:
|
||||
panel.removeNode()
|
||||
for side in self.sides:
|
||||
side.removeNode()
|
||||
for corner in self.corner:
|
||||
corner.removeNode()
|
||||
for text in self.text:
|
||||
text.removeNode()
|
||||
for button in self.buttons:
|
||||
button.removeNode()
|
||||
self.title.removeNode()
|
||||
self.frame.removeNode()
|
||||
self.overLay.removeNode()
|
||||
try:self.cogLogo.removeNode()
|
||||
except:pass
|
||||
self.display.destroy()
|
||||
base.ignore('wheel_up')
|
||||
base.ignore('wheel_down')
|
||||
del self.display
|
||||
|
|
@ -0,0 +1,464 @@
|
|||
from toontown.town import Street
|
||||
from toontown.toon import HealthForceAcknowledge
|
||||
from toontown.safezone import *
|
||||
from toontown.toonbase import ToontownBattleGlobals
|
||||
from toontown.battle import DistributedBattleBldg
|
||||
from toontown.building import SuitInterior
|
||||
from toontown.building import DistributedBuilding
|
||||
from toontown.building import DistributedElevatorExt
|
||||
from toontown.building import DistributedSuitInterior
|
||||
from direct.interval.IntervalGlobal import *
|
||||
|
||||
ToontownBattleGlobals.SkipMovie=1
|
||||
|
||||
faceOffHook = lambda self, ts, name, callback:self._DistributedBattleBldg__handleFaceOffDone()
|
||||
DistributedBattleBldg.DistributedBattleBldg._DistributedBattleBldg__faceOff = faceOffHook
|
||||
|
||||
class BuildingAutoer:
|
||||
oldTeleportInPlayground=Playground.Playground.exitTeleportIn
|
||||
oldTeleportInStreet=Street.Street.exitTeleportIn
|
||||
|
||||
oldExitBecomingToon=DistributedBuilding.DistributedBuilding.exitBecomingToon
|
||||
oldEnterHealth=HealthForceAcknowledge.HealthForceAcknowledge.enter
|
||||
oldEnterElevator=DistributedSuitInterior.DistributedSuitInterior.enterElevator
|
||||
oldEnterFloorReward=DistributedBattleBldg.DistributedBattleBldg.enterReward
|
||||
oldEnterBuildingReward=DistributedBattleBldg.DistributedBattleBldg.enterBuildingReward
|
||||
|
||||
def __init__(self):
|
||||
Street.Street.exitTeleportIn=lambda newSelf,*args,**kwds: self.newTeleportInStreet(newSelf,*args,**kwds)
|
||||
Playground.Playground.exitTeleportIn=lambda newSelf,*args,**kwds: self.newTeleportInPlayground(newSelf,*args,**kwds)
|
||||
|
||||
DistributedBuilding.DistributedBuilding.exitBecomingToon=lambda newSelf: self.newExitBecomingToon(newSelf)
|
||||
DistributedSuitInterior.DistributedSuitInterior.enterElevator=lambda newSelf,*args: self.newEnterElevator(newSelf,*args)
|
||||
DistributedBattleBldg.DistributedBattleBldg.enterReward=lambda newSelf,*args: self.newEnterFloorReward(newSelf,*args)
|
||||
DistributedBattleBldg.DistributedBattleBldg.enterBuildingReward=lambda newSelf,*args: self.newEnterBuildingReward(newSelf,*args)
|
||||
HealthForceAcknowledge.HealthForceAcknowledge.enter=lambda newSelf,hplevel: self.newEnterHealth(newSelf,hplevel)
|
||||
self.attackSeq=Sequence(Func(self.attack),Wait(1),Func(self.restock),Wait(1))
|
||||
self.invisibleSeq=Sequence(Func(base.localAvatar.d_setParent,1),Wait(1))
|
||||
self.shouldChangeDistrict=False
|
||||
self.shouldChangeStreet=True
|
||||
self.shouldChangeHood=True
|
||||
self.shouldContinue=False
|
||||
self.shouldStop=False
|
||||
self.findDistrictIds()
|
||||
self.buildingLevel=1
|
||||
self.buildingType=''
|
||||
self.foundElevator=False
|
||||
self.bldgCount=0
|
||||
self.hoods=['1','3','4','5','9']
|
||||
self.lastElevators=None
|
||||
self.killElevators=[]
|
||||
|
||||
self.firstTrack=0
|
||||
self.secondTrack=4
|
||||
self.thirdTrack=2
|
||||
|
||||
desiredInv=""
|
||||
desiredLevel1=5
|
||||
desiredLevel2=5
|
||||
desiredLevel3=4
|
||||
|
||||
self.gagshop_zoneId = 4503
|
||||
self.autoerGui=AutoerGui('Bldg Autoer',['Run Time',"Number of Bldgs","Bldg's/Hour",'Type','Story'],\
|
||||
['self.formattedTime',\
|
||||
'str(buildingAutoer.bldgCount)',\
|
||||
'str(self.workOutNumberAnHour(buildingAutoer.bldgCount))'\
|
||||
,'buildingAutoer.getBuildingType()'\
|
||||
,'str(buildingAutoer.getBuildingLevel())+"+"'],\
|
||||
'BLDG AUTOER',None)
|
||||
|
||||
def newEnterHealth(self,newSelf,hplevel):
|
||||
try:
|
||||
self.oldEnterHealth(newSelf,hplevel)
|
||||
newSelf.handleOk(base.localAvatar.getHp())
|
||||
newSelf.exit()
|
||||
self.autoerGui.display.newLine('Tp failed, trying again')
|
||||
if self.shouldContinue:
|
||||
Sequence(Wait(2),Func(self.teleportBackToStreet)).start()
|
||||
except:
|
||||
pass
|
||||
|
||||
def createInventory(self):
|
||||
desiredInv=""
|
||||
for i in range(7*7):
|
||||
if i==((self.firstTrack*7)+self.desiredLevel1):
|
||||
if self.firstTrack==1:
|
||||
desiredInv+="\x02"
|
||||
elif self.desiredLevel1>3:
|
||||
desiredInv+="\x02"
|
||||
else:
|
||||
desiredInv+="\x04"
|
||||
elif i==((self.secondTrack*7)+self.desiredLevel2):
|
||||
if self.secondTrack==1:
|
||||
desiredInv+="\x02"
|
||||
elif self.desiredLevel2>3:
|
||||
desiredInv+="\x02"
|
||||
else:
|
||||
desiredInv+="\x04"
|
||||
elif i==((self.thirdTrack*7)+self.desiredLevel3) and base.localAvatar.getTrackAccess()[self.thirdTrack]:
|
||||
if self.thirdTrack==1:
|
||||
desiredInv+="\x02"
|
||||
elif self.desiredLevel3>3:
|
||||
desiredInv+="\x02"
|
||||
else:
|
||||
desiredInv+="\x04"
|
||||
else:
|
||||
desiredInv+="\x00"
|
||||
self.desiredInv=desiredInv
|
||||
|
||||
def teleportBackToStreet(self):
|
||||
self.foundElevator=False
|
||||
self.walk()
|
||||
for treasure in base.cr.doFindAll('Treasure'):
|
||||
treasure.sendUpdate('requestGrab')
|
||||
base.cr.playGame.getPlace().requestTeleport(round(self.startId,-3),self.startId,None,None)
|
||||
|
||||
def findBuilding(self):
|
||||
self.checkStop()
|
||||
|
||||
if self.shouldContinue:
|
||||
for elevator in base.cr.doFindAllInstances(DistributedElevatorExt.DistributedElevatorExt):
|
||||
if 'sbfo' not in str(elevator.getElevatorModel()) and 'waitEmpty' in str(elevator.fsm) and elevator.bldg.numFloors>=self.buildingLevel and self.buildingType in str(elevator.getElevatorModel()) and elevator.doId not in self.killElevators:
|
||||
self.walk()
|
||||
elevator.sendUpdate('requestBoard')
|
||||
self.lastElevator=elevator.doId
|
||||
self.autoerGui.display.newLine('Entering Building')
|
||||
self.foundElevator=True
|
||||
return
|
||||
self.nextZone()
|
||||
|
||||
def newTeleportInStreet(self,newSelf,*args,**kwds):
|
||||
self.oldTeleportInStreet(newSelf,*args,**kwds)
|
||||
self.checkStop()
|
||||
|
||||
if self.shouldContinue:
|
||||
self.autoerGui.display.newLine('Searching for building')
|
||||
Sequence(Wait(2),Func(self.findBuilding)).start()
|
||||
|
||||
def newTeleportInPlayground(self,newSelf,*args,**kwds):
|
||||
self.oldTeleportInPlayground(newSelf,*args,**kwds)
|
||||
self.checkStop()
|
||||
|
||||
if self.shouldContinue:
|
||||
self.autoerGui.display.newLine('Died - Tping back')
|
||||
self.killElevators.append(self.lastElevator)
|
||||
Sequence(Wait(2),Func(self.teleportBackToStreet)).start()
|
||||
|
||||
def newExitBecomingToon(self,newSelf):
|
||||
self.oldExitBecomingToon(newSelf)
|
||||
self.checkStop()
|
||||
|
||||
if self.shouldContinue and not self.foundElevator:
|
||||
self.autoerGui.display.newLine('Searching for building')
|
||||
self.findBuilding()
|
||||
|
||||
def newEnterFloorReward(self,newSelf,*args):
|
||||
self.oldEnterFloorReward(newSelf,*args)
|
||||
if self.shouldContinue:
|
||||
self.autoerGui.display.newLine('Finished Battle')
|
||||
Sequence(Wait(7),Func(self.boardElevator)).start()
|
||||
|
||||
def boardElevator(self):
|
||||
if self.shouldContinue and base.cr.doFind('Elevator'):
|
||||
base.cr.doFind('Elevator').sendUpdate('requestBoard')
|
||||
self.autoerGui.display.newLine('Next Floor...')
|
||||
Sequence(Wait(2),Func(base.cr.doFind('Elevator').sendUpdate,'requestExit'),Wait(0.5),Func(base.cr.doFind('Elevator').sendUpdate,'requestBoard')).start()
|
||||
|
||||
def newEnterBuildingReward(self,newSelf,*args):
|
||||
self.oldEnterBuildingReward(newSelf,*args)
|
||||
if self.shouldContinue:
|
||||
newSelf._DistributedBattleBldg__handleBuildingRewardDone()
|
||||
self.autoerGui.display.newLine('Finished Building')
|
||||
self.foundElevator=False
|
||||
self.bldgCount+=1
|
||||
|
||||
def newEnterElevator(self,newSelf,*args):
|
||||
self.oldEnterElevator(newSelf,*args)
|
||||
if self.shouldContinue:
|
||||
newSelf.sendUpdate('elevatorDone', [])
|
||||
for x in base.cr.doFindAll('DistributedCogdoInterior'):
|
||||
x.sendUpdate('elevatorDone', [])
|
||||
self.autoerGui.display.newLine('Skipping Elevator')
|
||||
|
||||
def checkStop(self):
|
||||
if self.shouldStop:
|
||||
self.shouldContinue=False
|
||||
self.shouldStop=False
|
||||
self.attackSeq.finish()
|
||||
self.invisibleSeq.finish()
|
||||
self.autoerGui.display.newLine('Stopped')
|
||||
|
||||
def findDistrictIds(self):
|
||||
self.shardIds=[]
|
||||
for shard in base.cr.activeDistrictMap:
|
||||
if base.cr.activeDistrictMap[shard].avatarCount<30:
|
||||
self.shardIds.append(shard)
|
||||
|
||||
def nextZone(self):
|
||||
try:
|
||||
base.cr.playGame.getPlace().enterZone(base.localAvatar.getZoneId()+1)
|
||||
Sequence(Wait(0.5),Func(self.findBuilding)).start()
|
||||
except KeyError:
|
||||
if self.shouldChangeStreet:
|
||||
self.newStreet()
|
||||
else:
|
||||
base.cr.playGame.getPlace().enterZone(self.startId)
|
||||
Sequence(Wait(0.5),Func(self.findBuilding)).start()
|
||||
|
||||
def checkWhatToDo(self):
|
||||
if hasattr(base.cr.playGame.getPlace(),'enterZone'):
|
||||
self.workOutStreetId()
|
||||
self.findBuilding()
|
||||
else:
|
||||
base.localAvatar.setSystemMessage(0,'The building auto needs to be started on a street')
|
||||
|
||||
def newDistrict(self):
|
||||
if self.shardIds[0] == base.localAvatar.defaultShard:
|
||||
self.shardIds.append(self.shardIds[0])
|
||||
del self.shardIds[0]
|
||||
|
||||
base.cr.playGame.getPlace().requestTeleport(round(base.localAvatar.getZoneId(),-3),self.startId,self.shardIds[0],None)
|
||||
self.shardIds.append(self.shardIds[0])
|
||||
del self.shardIds[0]
|
||||
self.autoerGui.display.newLine('Tping to new district')
|
||||
|
||||
def newStreet(self):
|
||||
todo='street'
|
||||
if self.startId<9000:
|
||||
if int(str(self.startId)[1:])>300:
|
||||
if self.shouldChangeDistrict:
|
||||
self.startId-=200
|
||||
todo='district'
|
||||
elif self.shouldChangeHood:
|
||||
todo='hood'
|
||||
else:
|
||||
self.startId-=200
|
||||
else:
|
||||
self.startId+=100
|
||||
elif int(str(self.startId)[1:])>200:
|
||||
if self.shouldChangeDistrict:
|
||||
self.startId-=100
|
||||
todo='district'
|
||||
|
||||
elif self.shouldChangeHood:
|
||||
todo='hood'
|
||||
else:
|
||||
self.startId-=100
|
||||
else:
|
||||
self.startId+=100
|
||||
|
||||
if todo=='district':
|
||||
self.newDistrict()
|
||||
elif todo=='hood':
|
||||
self.newHood()
|
||||
else:
|
||||
self.teleportBackToStreet()
|
||||
self.autoerGui.display.newLine('TPing to a new Street')
|
||||
|
||||
def newHood(self):
|
||||
self.startId=int(self.hoods[0]+'101')
|
||||
self.hoods.append(self.hoods[0])
|
||||
del self.hoods[0]
|
||||
self.autoerGui.display.newLine('Changing hood')
|
||||
self.teleportBackToStreet()
|
||||
|
||||
def workOutStreetId(self):
|
||||
zoneId=base.localAvatar.getZoneId()
|
||||
self.startId=int(str(zoneId)[:2]+'01')
|
||||
self.autoerGui.display.newLine('Street Zone: '+str(self.startId))
|
||||
|
||||
def loadGagshop(self):
|
||||
if not base.cr.doFind('Clerk'):
|
||||
self.contextId = base.cr.addInterest(base.localAvatar.defaultShard, self.gagshop_zoneId, '4', event=None)
|
||||
try:
|
||||
if not int(render.find('**/*gagShop_interior_english*').getZ()) == 8**8:
|
||||
render.find('**/*gagShop_interior_english*').setZ(8**8)
|
||||
for k in base.cr.doFindAll('Clerk'):
|
||||
k.nametag.unmanage(base.marginManager)
|
||||
except:
|
||||
pass
|
||||
|
||||
def buyGags(self):
|
||||
desiredInv=self.desiredInv
|
||||
try:
|
||||
maxCarryGags = base.localAvatar.getMaxCarry()
|
||||
if base.cr.doFind('Clerk'):
|
||||
num_gags = 0
|
||||
for inventory_number in base.localAvatar.inventory.makeFromNetString(desiredInv):
|
||||
for k in inventory_number[:-1]:
|
||||
num_gags += k
|
||||
change = base.localAvatar.getMoney() - num_gags
|
||||
oldString = base.localAvatar.inventory.makeNetString()
|
||||
newString = desiredInv[:6] + oldString[6] + desiredInv[7:13] + oldString[13] + desiredInv[14:20] + oldString[20] + desiredInv[21:27] + oldString[27] + desiredInv[28:34] + oldString[34] + desiredInv[35:41] + oldString[41] + desiredInv[42:48] + oldString[48]
|
||||
for clerk in base.cr.doFindAll('Clerk'):
|
||||
clerk.setMovie=lambda *args,**kwds: None
|
||||
clerk.freeAvatar=lambda *args: None
|
||||
clerk.sendUpdate('avatarEnter')
|
||||
for clerk in base.cr.doFindAll('Clerk'):
|
||||
clerk.sendUpdate('setInventory', [newString, change, 1])
|
||||
|
||||
money = base.localAvatar.getMoney()
|
||||
maxMoney = base.localAvatar.getMaxMoney()
|
||||
base.cr.bankManager.d_transferMoney(money - maxMoney)
|
||||
except:
|
||||
pass
|
||||
|
||||
def unloadGagshop(self):
|
||||
if hasattr(self, 'contextId'):
|
||||
try:
|
||||
base.cr.removeInterest(self.contextId)
|
||||
except:
|
||||
pass
|
||||
|
||||
def restock(self):
|
||||
self.desiredLevel1=base.localAvatar.experience.getExpLevel(self.firstTrack)
|
||||
if self.desiredLevel1 in [1,3,5]:
|
||||
self.desiredLevel1-=1
|
||||
self.desiredLevel2=base.localAvatar.experience.getExpLevel(self.secondTrack)
|
||||
self.desiredLevel3=base.localAvatar.experience.getExpLevel(self.thirdTrack)
|
||||
if self.desiredLevel1>5:
|
||||
self.desiredLevel1=4
|
||||
if self.desiredLevel2>5:
|
||||
self.desiredLevel2=5
|
||||
if self.desiredLevel3>5:
|
||||
self.desiredLevel3=5
|
||||
self.createInventory()
|
||||
if base.localAvatar.inventory.inventory[self.firstTrack][self.desiredLevel1]<2 or base.localAvatar.inventory.inventory[self.secondTrack][self.desiredLevel2]<2 or (base.localAvatar.inventory.inventory[self.thirdTrack][self.desiredLevel3]<2 and base.localAvatar.getTrackAccess()[self.thirdTrack]):
|
||||
Sequence(Func(self.loadGagshop),Wait(1),Func(self.buyGags),Wait(0.5),Func(self.unloadGagshop)).start()
|
||||
|
||||
def attack(self):
|
||||
try:
|
||||
for battle in base.cr.doFindAll('battle'):
|
||||
if base.localAvatar.getTrackAccess()[2]:
|
||||
if base.localAvatar.inventory.inventory[2][self.desiredLevel3]>0:
|
||||
battle.sendUpdate('requestAttack', [2, self.desiredLevel3, battle.suits[0].doId])
|
||||
battle.sendUpdate('movieDone')
|
||||
else:
|
||||
break
|
||||
|
||||
if base.localAvatar.getHp()<(base.localAvatar.getMaxHp()*0.9):
|
||||
|
||||
if base.localAvatar.inventory.inventory[0][self.desiredLevel1]>0:
|
||||
battle.sendUpdate('requestAttack', [0, self.desiredLevel1, base.localAvatar.doId])
|
||||
battle.sendUpdate('movieDone')
|
||||
else:
|
||||
break
|
||||
|
||||
if base.localAvatar.inventory.inventory[4][self.desiredLevel2]>0:
|
||||
battle.sendUpdate('requestAttack', [4, self.desiredLevel2, battle.suits[0].doId])
|
||||
battle.sendUpdate('movieDone')
|
||||
else:
|
||||
break
|
||||
|
||||
else:
|
||||
if base.localAvatar.inventory.inventory[4][self.desiredLevel2]>0:
|
||||
battle.sendUpdate('requestAttack', [4, self.desiredLevel2, battle.suits[0].doId])
|
||||
battle.sendUpdate('movieDone')
|
||||
else:
|
||||
break
|
||||
except:
|
||||
pass
|
||||
|
||||
def walk(self):
|
||||
try:
|
||||
base.cr.playGame.getPlace().fsm.forceTransition('walk')
|
||||
except:
|
||||
pass
|
||||
|
||||
def setLawbot(self):
|
||||
self.buildingType='legal'
|
||||
|
||||
def setSellbot(self):
|
||||
self.buildingType='sales'
|
||||
|
||||
def setCashbot(self):
|
||||
self.buildingType='money'
|
||||
|
||||
def setBossbot(self):
|
||||
self.buildingType='corp'
|
||||
|
||||
def setLevel1(self):
|
||||
self.buildingLevel=1
|
||||
|
||||
def setLevel2(self):
|
||||
self.buildingLevel=2
|
||||
|
||||
def setLevel3(self):
|
||||
self.buildingLevel=3
|
||||
|
||||
def setLevel4(self):
|
||||
self.buildingLevel=4
|
||||
|
||||
def setLevel5(self):
|
||||
self.buildingLevel=5
|
||||
|
||||
def setAll(self):
|
||||
self.buildingType=''
|
||||
|
||||
def changeDistrict(self):
|
||||
self.shouldChangeDistrict=True
|
||||
base.localAvatar.setSystemMessage(0,'Building Autoer set to change district if no buildings are found')
|
||||
|
||||
def noChangeDistrict(self):
|
||||
self.shouldChangeDistrict=False
|
||||
base.localAvatar.setSystemMessage(0,'Building Autoer set not to change district if no buildings are found')
|
||||
|
||||
def changeStreet(self):
|
||||
self.shouldChangeStreet=True
|
||||
base.localAvatar.setSystemMessage(0,'Building Autoer set to change street if no buildings are found')
|
||||
|
||||
def noChangeStreet(self):
|
||||
self.shouldChangeStreet=False
|
||||
base.localAvatar.setSystemMessage(0,'Building Autoer set not to change street if no buildings are found')
|
||||
|
||||
def changeHood(self):
|
||||
self.shouldChangeHood=True
|
||||
base.localAvatar.setSystemMessage(0,'Building Autoer set to change hood if no buildings are found')
|
||||
|
||||
def noChangeHood(self):
|
||||
self.shouldChangeHood=False
|
||||
base.localAvatar.setSystemMessage(0,'Building Autoer set not to change street if no buildings are found')
|
||||
|
||||
def getBuildingType(self):
|
||||
if self.buildingType=='legal':
|
||||
return 'Lawbot'
|
||||
elif self.buildingType=='sales':
|
||||
return 'Sellbot'
|
||||
elif self.buildingType=='money':
|
||||
return 'Cashbot'
|
||||
elif self.buildingType=='corp':
|
||||
return 'Bossbot'
|
||||
else:
|
||||
return 'All'
|
||||
|
||||
def getBuildingLevel(self):
|
||||
return self.buildingLevel
|
||||
|
||||
def start(self):
|
||||
self.shouldContinue=True
|
||||
self.bldgCount=0
|
||||
self.shouldStop=False
|
||||
self.autoerGui.startTimer()
|
||||
self.attackSeq.loop()
|
||||
self.invisibleSeq.loop()
|
||||
self.checkWhatToDo()
|
||||
|
||||
def stop(self):
|
||||
self.shouldStop=True
|
||||
self.autoerGui.stopTimer()
|
||||
base.localAvatar.setSystemMessage(1,"The Autoer will stop at the end of this run")
|
||||
|
||||
def revert(self):
|
||||
Playground.Playground.exitTeleportIn=self.oldTeleportInPlayground
|
||||
Street.Street.exitTeleportIn=self.oldTeleportInStreet
|
||||
|
||||
DistributedBuilding.DistributedBuilding.exitBecomingToon=self.oldExitBecomingToon
|
||||
HealthForceAcknowledge.HealthForceAcknowledge.enter=self.oldEnterHealth
|
||||
DistributedSuitInterior.DistributedSuitInterior.enterElevator=self.oldEnterElevator
|
||||
DistributedBattleBldg.DistributedBattleBldg.enterReward=self.oldEnterFloorReward
|
||||
DistributedBattleBldg.DistributedBattleBldg.enterBuildingReward=self.oldEnterBuildingReward
|
||||
self.autoerGui.destroy()
|
||||
ToontownBattleGlobals.SkipMovie=0
|
||||
self.attackSeq.finish()
|
||||
|
||||
buildingAutoer=BuildingAutoer()
|
||||
|
|
@ -0,0 +1,411 @@
|
|||
from toontown.town import Street
|
||||
from toontown.toon import HealthForceAcknowledge
|
||||
from toontown.safezone import *
|
||||
from toontown.toonbase import ToontownBattleGlobals
|
||||
from toontown.battle import DistributedBattleBldg
|
||||
from toontown.building import SuitInterior
|
||||
from toontown.building import DistributedBuilding
|
||||
from toontown.building import DistributedElevatorExt
|
||||
from toontown.building import DistributedSuitInterior
|
||||
from direct.interval.IntervalGlobal import *
|
||||
|
||||
ToontownBattleGlobals.SkipMovie=1
|
||||
|
||||
faceOffHook = lambda self, ts, name, callback:self._DistributedBattleBldg__handleFaceOffDone()
|
||||
DistributedBattleBldg.DistributedBattleBldg._DistributedBattleBldg__faceOff = faceOffHook
|
||||
|
||||
class BuildingAutoer:
|
||||
oldTeleportInStreet=Street.Street.exitTeleportIn
|
||||
|
||||
oldExitBecomingToon=DistributedBuilding.DistributedBuilding.exitBecomingToon
|
||||
oldEnterHealth=HealthForceAcknowledge.HealthForceAcknowledge.enter
|
||||
oldEnterElevator=DistributedSuitInterior.DistributedSuitInterior.enterElevator
|
||||
oldEnterFloorReward=DistributedBattleBldg.DistributedBattleBldg.enterReward
|
||||
oldEnterBuildingReward=DistributedBattleBldg.DistributedBattleBldg.enterBuildingReward
|
||||
|
||||
def __init__(self):
|
||||
Street.Street.exitTeleportIn=lambda newSelf,*args,**kwds: self.newTeleportInStreet(newSelf,*args,**kwds)
|
||||
|
||||
DistributedBuilding.DistributedBuilding.exitBecomingToon=lambda newSelf: self.newExitBecomingToon(newSelf)
|
||||
DistributedSuitInterior.DistributedSuitInterior.enterElevator=lambda newSelf,*args: self.newEnterElevator(newSelf,*args)
|
||||
DistributedBattleBldg.DistributedBattleBldg.enterReward=lambda newSelf,*args: self.newEnterFloorReward(newSelf,*args)
|
||||
DistributedBattleBldg.DistributedBattleBldg.enterBuildingReward=lambda newSelf,*args: self.newEnterBuildingReward(newSelf,*args)
|
||||
HealthForceAcknowledge.HealthForceAcknowledge.enter=lambda newSelf,hplevel: self.newEnterHealth(newSelf,hplevel)
|
||||
self.attackSeq=Sequence(Func(self.attack),Wait(1),Func(self.restock),Wait(1))
|
||||
self.invisibleSeq=Sequence(Func(base.localAvatar.d_setParent,1),Wait(1))
|
||||
self.shouldChangeDistrict=True
|
||||
self.shouldChangeStreet=True
|
||||
self.shouldChangeHood=False
|
||||
self.shouldContinue=False
|
||||
self.shouldStop=False
|
||||
self.findDistrictIds()
|
||||
self.buildingLevel=1
|
||||
self.buildingType=''
|
||||
self.foundElevator=False
|
||||
self.bldgCount=0
|
||||
self.hoods=['1','3','4','5','9']
|
||||
self.lastElevator=None
|
||||
self.killElevators=[]
|
||||
self.gagshop_zoneId = 4503
|
||||
self.firstTrack=0
|
||||
self.secondTrack=4
|
||||
self.thirdTrack=2
|
||||
|
||||
self.desiredLevel1=4
|
||||
self.desiredLevel2=5
|
||||
self.desiredLevel3=5
|
||||
|
||||
|
||||
|
||||
def newEnterHealth(self,newSelf,hplevel):
|
||||
try:
|
||||
self.oldEnterHealth(newSelf,hplevel)
|
||||
newSelf.handleOk(base.localAvatar.getHp())
|
||||
newSelf.exit()
|
||||
if self.shouldContinue:
|
||||
Sequence(Wait(2),Func(self.teleportBackToStreet)).start()
|
||||
except:
|
||||
pass
|
||||
|
||||
def createInventory(self):
|
||||
desiredInv=""
|
||||
for i in range(7*7):
|
||||
if i==((self.firstTrack*7)+self.desiredLevel1):
|
||||
if self.firstTrack==1:
|
||||
desiredInv+="\x02"
|
||||
elif self.desiredLevel1>3:
|
||||
desiredInv+="\x02"
|
||||
else:
|
||||
desiredInv+="\x04"
|
||||
elif i==((self.secondTrack*7)+self.desiredLevel2):
|
||||
if self.secondTrack==1:
|
||||
desiredInv+="\x02"
|
||||
elif self.desiredLevel2>3:
|
||||
desiredInv+="\x02"
|
||||
else:
|
||||
desiredInv+="\x04"
|
||||
elif i==((self.thirdTrack*7)+self.desiredLevel3) and base.localAvatar.getTrackAccess()[self.thirdTrack]:
|
||||
if self.thirdTrack==1:
|
||||
desiredInv+="\x02"
|
||||
elif self.desiredLevel3>3:
|
||||
desiredInv+="\x02"
|
||||
else:
|
||||
desiredInv+="\x04"
|
||||
else:
|
||||
desiredInv+="\x00"
|
||||
self.desiredInv=desiredInv
|
||||
|
||||
def clearSettings(self):
|
||||
self.buildingType=''
|
||||
self.numFloors=1
|
||||
|
||||
def teleportBackToStreet(self):
|
||||
print('Teleporting back')
|
||||
self.foundElevator=False
|
||||
self.walk()
|
||||
for treasure in base.cr.doFindAll('Treasure'):
|
||||
treasure.sendUpdate('requestGrab')
|
||||
base.cr.playGame.getPlace().requestTeleport(round(self.startId,-3),self.startId,None,None)
|
||||
|
||||
def findBuilding(self):
|
||||
self.checkStop()
|
||||
|
||||
if self.shouldContinue:
|
||||
for elevator in base.cr.doFindAllInstances(DistributedElevatorExt.DistributedElevatorExt):
|
||||
if 'sbfo' not in str(elevator.getElevatorModel()) and 'waitEmpty' in str(elevator.fsm) and elevator.bldg.numFloors>=self.numFloors and self.buildingType in str(elevator.getElevatorModel()) and elevator.doId not in self.killElevators:
|
||||
self.walk()
|
||||
elevator.sendUpdate('requestBoard')
|
||||
self.lastElevator=elevator.doId
|
||||
self.foundElevator=True
|
||||
return
|
||||
self.nextZone()
|
||||
|
||||
def newTeleportInStreet(self,newSelf,*args,**kwds):
|
||||
self.oldTeleportInStreet(newSelf,*args,**kwds)
|
||||
self.checkStop()
|
||||
|
||||
if self.shouldContinue:
|
||||
Sequence(Wait(2),Func(self.findBuilding)).start()
|
||||
|
||||
def newExitBecomingToon(self,newSelf):
|
||||
self.oldExitBecomingToon(newSelf)
|
||||
self.checkStop()
|
||||
|
||||
if self.shouldContinue and not self.foundElevator:
|
||||
if not taskAutoer.isQuestComplete():
|
||||
Sequence(Wait(1),Func(self.findBuilding)).start()
|
||||
else:
|
||||
self.stop()
|
||||
taskAutoer.checkWhatToDo()
|
||||
|
||||
def newEnterFloorReward(self,newSelf,*args):
|
||||
self.oldEnterFloorReward(newSelf,*args)
|
||||
if self.shouldContinue:
|
||||
Sequence(Wait(7),Func(self.boardElevator)).start()
|
||||
|
||||
def boardElevator(self):
|
||||
if self.shouldContinue and base.cr.doFind('Elevator'):
|
||||
base.cr.doFind('Elevator').sendUpdate('requestBoard')
|
||||
Sequence(Wait(2),Func(base.cr.doFind('Elevator').sendUpdate,'requestExit'),Wait(0.5),Func(base.cr.doFind('Elevator').sendUpdate,'requestBoard')).start()
|
||||
|
||||
def newEnterBuildingReward(self,newSelf,*args):
|
||||
self.oldEnterBuildingReward(newSelf,*args)
|
||||
if self.shouldContinue:
|
||||
newSelf._DistributedBattleBldg__handleBuildingRewardDone()
|
||||
self.foundElevator=False
|
||||
self.bldgCount+=1
|
||||
|
||||
def newEnterElevator(self,newSelf,*args):
|
||||
self.oldEnterElevator(newSelf,*args)
|
||||
if self.shouldContinue:
|
||||
newSelf.sendUpdate('elevatorDone', [])
|
||||
for x in base.cr.doFindAll('DistributedCogdoInterior'):
|
||||
x.sendUpdate('elevatorDone', [])
|
||||
|
||||
def checkStop(self):
|
||||
if self.shouldStop:
|
||||
self.shouldContinue=False
|
||||
self.shouldStop=False
|
||||
self.attackSeq.finish()
|
||||
self.invisibleSeq.finish()
|
||||
|
||||
def findDistrictIds(self):
|
||||
self.shardIds=[]
|
||||
for shard in base.cr.activeDistrictMap:
|
||||
if base.cr.activeDistrictMap[shard].avatarCount<50:
|
||||
self.shardIds.append(shard)
|
||||
|
||||
def nextZone(self):
|
||||
try:
|
||||
base.cr.playGame.getPlace().enterZone(base.localAvatar.getZoneId()+1)
|
||||
Sequence(Wait(0.5),Func(self.findBuilding)).start()
|
||||
except KeyError:
|
||||
if self.shouldChangeStreet:
|
||||
self.newStreet()
|
||||
else:
|
||||
base.cr.playGame.getPlace().enterZone(self.startId)
|
||||
Sequence(Wait(0.5),Func(self.findBuilding)).start()
|
||||
|
||||
def checkWhatToDo(self):
|
||||
if hasattr(base.cr.playGame.getPlace(),'enterZone') and round(base.localAvatar.getZoneId(),-2)==round(self.startId,-2):
|
||||
self.findBuilding()
|
||||
|
||||
else:
|
||||
if self.startId!=0:
|
||||
self.teleportBackToStreet()
|
||||
else:
|
||||
base.localAvatar.setSystemMessage(0,'The building auto needs to be started on a street')
|
||||
|
||||
def newDistrict(self):
|
||||
if self.shardIds[0] == base.localAvatar.defaultShard:
|
||||
self.shardIds.append(self.shardIds[0])
|
||||
del self.shardIds[0]
|
||||
|
||||
base.cr.playGame.getPlace().requestTeleport(round(base.localAvatar.getZoneId(),-3),self.startId,self.shardIds[0],None)
|
||||
self.shardIds.append(self.shardIds[0])
|
||||
del self.shardIds[0]
|
||||
|
||||
def newStreet(self):
|
||||
todo='street'
|
||||
|
||||
if self.startId<9000:
|
||||
if int(str(self.startId)[1:])>300:
|
||||
if self.shouldChangeDistrict:
|
||||
self.startId-=200
|
||||
todo='district'
|
||||
elif self.shouldChangeHood:
|
||||
todo='hood'
|
||||
else:
|
||||
self.startId-=200
|
||||
else:
|
||||
self.startId+=100
|
||||
|
||||
elif int(str(self.startId)[1:])>200:
|
||||
if self.shouldChangeDistrict:
|
||||
self.startId-=100
|
||||
todo='district'
|
||||
|
||||
elif self.shouldChangeHood:
|
||||
todo='hood'
|
||||
else:
|
||||
self.startId-=100
|
||||
else:
|
||||
self.startId+=100
|
||||
|
||||
if todo=='district':
|
||||
self.newDistrict()
|
||||
elif todo=='hood':
|
||||
Sequence(Wait(3),Func(self.newHood)).start()
|
||||
else:
|
||||
self.teleportBackToStreet()
|
||||
|
||||
def newHood(self):
|
||||
if self.hoods[0] == str(base.localAvatar.getZoneId())[0]:
|
||||
self.hoods.append(self.hoods[0])
|
||||
del self.hoods[0]
|
||||
|
||||
self.startId=int(self.hoods[0]+'102')
|
||||
self.teleportBackToStreet()
|
||||
|
||||
def setLocation(self,zoneId):
|
||||
self.startId=int(str(zoneId)[0]+'102')
|
||||
|
||||
def setNumFloors(self,numFloors):
|
||||
self.numFloors=numFloors
|
||||
|
||||
def setBuildingType(self,type):
|
||||
if type=='l':
|
||||
type='legal'
|
||||
elif type=='s':
|
||||
type='sales'
|
||||
elif type=='m':
|
||||
type='money'
|
||||
elif type=='c':
|
||||
type='corp'
|
||||
self.buildingType=type
|
||||
|
||||
def workOutStreetId(self):
|
||||
zoneId=base.localAvatar.getZoneId()
|
||||
self.startId=int(str(zoneId)[:2]+'01')
|
||||
|
||||
def loadGagshop(self):
|
||||
if not base.cr.doFind('Clerk'):
|
||||
self.contextId = base.cr.addInterest(base.localAvatar.defaultShard, self.gagshop_zoneId, description='4', event=None)
|
||||
try:
|
||||
if not int(render.find('**/*gagShop_interior_english*').getZ()) == 8**8:
|
||||
render.find('**/*gagShop_interior_english*').setZ(8**8)
|
||||
for k in base.cr.doFindAll('Clerk'):
|
||||
k.nametag.unmanage(base.marginManager)
|
||||
except:
|
||||
pass
|
||||
|
||||
def buyGags(self):
|
||||
desiredInv=self.desiredInv
|
||||
try:
|
||||
maxCarryGags = base.localAvatar.getMaxCarry()
|
||||
if base.cr.doFind('Clerk'):
|
||||
num_gags = 0
|
||||
for inventory_number in base.localAvatar.inventory.makeFromNetString(desiredInv):
|
||||
for k in inventory_number[:-1]:
|
||||
num_gags += k
|
||||
change = base.localAvatar.getMoney() - num_gags
|
||||
oldString = base.localAvatar.inventory.makeNetString()
|
||||
newString = desiredInv[:6] + oldString[6] + desiredInv[7:13] + oldString[13] + desiredInv[14:20] + oldString[20] + desiredInv[21:27] + oldString[27] + desiredInv[28:34] + oldString[34] + desiredInv[35:41] + oldString[41] + desiredInv[42:48] + oldString[48]
|
||||
for clerk in base.cr.doFindAll('Clerk'):
|
||||
clerk.setMovie=lambda *args,**kwds: None
|
||||
clerk.freeAvatar=lambda *args: None
|
||||
clerk.sendUpdate('avatarEnter')
|
||||
for clerk in base.cr.doFindAll('Clerk'):
|
||||
clerk.sendUpdate('setInventory', [newString, change, 1])
|
||||
|
||||
money = base.localAvatar.getMoney()
|
||||
maxMoney = base.localAvatar.getMaxMoney()
|
||||
try:
|
||||
base.cr.bankManager.d_transferMoney(money - maxMoney)
|
||||
except AttributeError:
|
||||
pass
|
||||
except:
|
||||
pass
|
||||
|
||||
def unloadGagshop(self):
|
||||
if hasattr(self, 'contextId'):
|
||||
try:
|
||||
base.cr.removeInterest(self.contextId)
|
||||
except:
|
||||
pass
|
||||
|
||||
def restock(self):
|
||||
self.desiredLevel1=base.localAvatar.experience.getExpLevel(self.firstTrack)
|
||||
if self.desiredLevel1 in [1,3,5]:
|
||||
self.desiredLevel1-=1
|
||||
self.desiredLevel2=base.localAvatar.experience.getExpLevel(self.secondTrack)
|
||||
self.desiredLevel3=base.localAvatar.experience.getExpLevel(self.thirdTrack)
|
||||
if self.desiredLevel1>5:
|
||||
self.desiredLevel1=4
|
||||
if self.desiredLevel2>5:
|
||||
self.desiredLevel2=5
|
||||
if self.desiredLevel3>5:
|
||||
self.desiredLevel3=5
|
||||
self.createInventory()
|
||||
if base.localAvatar.inventory.inventory[self.firstTrack][self.desiredLevel1]<2 or base.localAvatar.inventory.inventory[self.secondTrack][self.desiredLevel2]<2 or (base.localAvatar.inventory.inventory[self.thirdTrack][self.desiredLevel3]<2 and base.localAvatar.getTrackAccess()[self.thirdTrack]):
|
||||
Sequence(Func(self.loadGagshop),Wait(1),Func(self.buyGags),Wait(0.5),Func(self.unloadGagshop)).start()
|
||||
|
||||
def attack(self):
|
||||
try:
|
||||
for battle in base.cr.doFindAll('battle'):
|
||||
if base.localAvatar.getTrackAccess()[2]:
|
||||
if base.localAvatar.inventory.inventory[2][self.desiredLevel3]>0:
|
||||
battle.sendUpdate('requestAttack', [2, self.desiredLevel3, battle.suits[0].doId])
|
||||
battle.sendUpdate('movieDone')
|
||||
else:
|
||||
break
|
||||
|
||||
if base.localAvatar.getHp()<(base.localAvatar.getMaxHp()*0.9):
|
||||
|
||||
if base.localAvatar.inventory.inventory[0][self.desiredLevel1]>0:
|
||||
battle.sendUpdate('requestAttack', [0, self.desiredLevel1, base.localAvatar.doId])
|
||||
battle.sendUpdate('movieDone')
|
||||
else:
|
||||
break
|
||||
|
||||
if base.localAvatar.inventory.inventory[4][self.desiredLevel2]>0:
|
||||
battle.sendUpdate('requestAttack', [4, self.desiredLevel2, battle.suits[0].doId])
|
||||
battle.sendUpdate('movieDone')
|
||||
else:
|
||||
break
|
||||
|
||||
else:
|
||||
if base.localAvatar.inventory.inventory[4][self.desiredLevel2]>0:
|
||||
battle.sendUpdate('requestAttack', [4, self.desiredLevel2, battle.suits[0].doId])
|
||||
battle.sendUpdate('movieDone')
|
||||
else:
|
||||
break
|
||||
except:
|
||||
pass
|
||||
|
||||
def walk(self):
|
||||
try:
|
||||
base.cr.playGame.getPlace().fsm.forceTransition('walk')
|
||||
except:
|
||||
pass
|
||||
|
||||
def getBuildingType(self):
|
||||
if self.buildingType=='legal':
|
||||
return 'Lawbot'
|
||||
elif self.buildingType=='sales':
|
||||
return 'Sellbot'
|
||||
elif self.buildingType=='money':
|
||||
return 'Cashbot'
|
||||
elif self.buildingType=='corp':
|
||||
return 'Bossbot'
|
||||
else:
|
||||
return 'All'
|
||||
|
||||
def getBuildingLevel(self):
|
||||
return self.buildingLevel
|
||||
|
||||
def start(self):
|
||||
print('starting')
|
||||
self.shouldContinue=True
|
||||
self.shouldStop=False
|
||||
self.createInventory()
|
||||
self.attackSeq.loop()
|
||||
self.invisibleSeq.loop()
|
||||
self.checkWhatToDo()
|
||||
|
||||
def stop(self):
|
||||
self.shouldContinue=False
|
||||
self.shouldStop=False
|
||||
self.attackSeq.finish()
|
||||
self.invisibleSeq.finish()
|
||||
|
||||
def revert(self):
|
||||
Street.Street.exitTeleportIn=self.oldTeleportInStreet
|
||||
|
||||
DistributedBuilding.DistributedBuilding.exitBecomingToon=self.oldExitBecomingToon
|
||||
HealthForceAcknowledge.HealthForceAcknowledge.enter=self.oldEnterHealth
|
||||
DistributedSuitInterior.DistributedSuitInterior.enterElevator=self.oldEnterElevator
|
||||
DistributedBattleBldg.DistributedBattleBldg.enterReward=self.oldEnterFloorReward
|
||||
DistributedBattleBldg.DistributedBattleBldg.enterBuildingReward=self.oldEnterBuildingReward
|
||||
ToontownBattleGlobals.SkipMovie=0
|
||||
self.attackSeq.finish()
|
||||
|
|
@ -0,0 +1,839 @@
|
|||
import random
|
||||
from direct.interval.IntervalGlobal import *
|
||||
from direct.distributed import DistributedObject
|
||||
from toontown.distributed import ToontownClientRepository
|
||||
from toontown.battle import DistributedBattleFinal
|
||||
from toontown.battle import DistributedBattle
|
||||
from toontown.toonbase import ToontownBattleGlobals
|
||||
from toontown.toon import *
|
||||
from toontown.coghq import DistributedCountryClubBattle
|
||||
from toontown.coghq import DistributedCountryClub
|
||||
from toontown.coghq import DistributedGolfGreenGame
|
||||
from toontown.coghq import DistributedCogHQDoor
|
||||
from toontown.coghq import CogDisguiseGlobals
|
||||
from toontown.coghq import BossbotHQExterior
|
||||
from toontown.coghq import CashbotHQExterior
|
||||
from toontown.coghq import CountryClubInterior
|
||||
from toontown.suit.DistributedMintSuit import DistributedMintSuit
|
||||
from toontown.suit.DistributedSuit import DistributedSuit
|
||||
from toontown.suit import DistributedBossbotBoss
|
||||
from toontown.safezone import DDPlayground
|
||||
from toontown.safezone import DistributedPartyGate
|
||||
from toontown.safezone import DistributedTrolley
|
||||
from toontown.building import DistributedDoor
|
||||
from toontown.building import DistributedBoardingParty
|
||||
|
||||
ToontownBattleGlobals.SkipMovie=1
|
||||
ToontownClientRepository.ToontownClientRepository.forbidCheesyEffects=lambda *x,**kwds: None
|
||||
ToontownClientRepository.ToontownClientRepository.dumpAllSubShardObjects=lambda self: None
|
||||
|
||||
faceOffHook = lambda self, ts, name, callback:self.d_faceOffDone(self)
|
||||
DistributedCountryClubBattle.DistributedCountryClubBattle._DistributedLevelBattle__faceOff = faceOffHook
|
||||
DistributedBattle.DistributedBattle._DistributedBattle__faceOff = faceOffHook
|
||||
|
||||
oldTrolleyInit = DistributedTrolley.DistributedTrolley.__init__
|
||||
oldPartyInit = DistributedPartyGate.DistributedPartyGate.__init__
|
||||
oldDoorInit = DistributedDoor.DistributedDoor.__init__
|
||||
|
||||
oldHandleEnterCollisionSphereParty=DistributedNPCPartyPerson.DistributedNPCPartyPerson.handleCollisionSphereEnter
|
||||
DistributedNPCPartyPerson.DistributedNPCPartyPerson.handleCollisionSphereEnter=lambda *args: None
|
||||
oldHandleEnterCollisionSphereFisherman=DistributedNPCFisherman.DistributedNPCFisherman.handleCollisionSphereEnter
|
||||
DistributedNPCFisherman.DistributedNPCFisherman.handleEnterCollisionSphere=lambda *args: None
|
||||
|
||||
oldFisherAnnounceGenerate = DistributedNPCFisherman.DistributedNPCFisherman.announceGenerate
|
||||
def newFishermanAnnounceGenerate(self):
|
||||
try:
|
||||
oldFisherAnnounceGenerate(self)
|
||||
except:
|
||||
return None
|
||||
|
||||
oldPartyPlannerAnnounceGenerate = DistributedNPCPartyPerson.DistributedNPCPartyPerson.announceGenerate
|
||||
def newPartyPlannerAnnounceGenerate(self):
|
||||
try:
|
||||
oldPartyPlannerAnnounceGenerate(self)
|
||||
except:
|
||||
return None
|
||||
|
||||
def newInit(self, cr):
|
||||
for obj in dir(self):
|
||||
exec('self.%s = lambda *x:None' % obj, globals(), locals())
|
||||
return None
|
||||
|
||||
|
||||
class restock:
|
||||
|
||||
def __init__(self):
|
||||
self.firstTrack=2
|
||||
self.secondTrack=0
|
||||
self.thirdTrack=4
|
||||
self.fourthTrack=3
|
||||
self.desiredLevel1=5
|
||||
self.desiredLevel2=4
|
||||
self.desiredLevel3=5
|
||||
self.desiredLevel4=5
|
||||
self.desiredInv='\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
|
||||
self.maxCarryGags = base.localAvatar.getMaxCarry()
|
||||
self.gagshop_zoneId = 4503
|
||||
self.noToons=Sequence(Func(self.removeToons), Wait(1.5))
|
||||
self.noTrolley=False
|
||||
self.unloaded=True
|
||||
self.wasInBattle=False
|
||||
|
||||
DistributedNPCFisherman.DistributedNPCFisherman.announceGenerate = newFishermanAnnounceGenerate
|
||||
DistributedNPCPartyPerson.DistributedNPCPartyPerson.announceGenerate = newPartyPlannerAnnounceGenerate
|
||||
|
||||
self.lookAroundHookSeq = Sequence(Func(self.lookAroundHookFunc), Wait(2.5))
|
||||
self.lookAroundHookSeq.loop()
|
||||
ToonHead.ToonHead._ToonHead__lookAround = lambda *x:None
|
||||
|
||||
def lookAroundHookFunc(self):
|
||||
if hasattr(base, 'localAvatar'):
|
||||
base.localAvatar.findSomethingToLookAt = lambda *x:None
|
||||
self.oldFindSomethingToLookAt = base.localAvatar.findSomethingToLookAt
|
||||
self.lookAroundHookSeq.finish()
|
||||
self.oldLookAround = ToonHead.ToonHead._ToonHead__lookAround
|
||||
|
||||
def collectLaff(self):
|
||||
for treasure in base.cr.doFindAll('Treasure'):
|
||||
treasure.d_requestGrab()
|
||||
|
||||
def removeToons(self):
|
||||
for x in base.cr.doFindAll('Fisherman'):
|
||||
try:
|
||||
if x.zoneId != base.localAvatar.zoneId:
|
||||
x.removeNode()
|
||||
x.nametag.unmanage(base.marginManager)
|
||||
except:
|
||||
pass
|
||||
|
||||
for x in base.cr.doFindAll('Party Planner'):
|
||||
try:
|
||||
if x.zoneId != base.localAvatar.zoneId:
|
||||
x.removeNode()
|
||||
x.nametag.unmanage(base.marginManager)
|
||||
except:
|
||||
pass
|
||||
|
||||
for x in base.cr.doFindAll('render/donald'):
|
||||
try:
|
||||
if x.zoneId != base.localAvatar.zoneId:
|
||||
x.removeNode()
|
||||
x.nametag.unmanage(base.marginManager)
|
||||
except:
|
||||
pass
|
||||
|
||||
for x in base.cr.doFindAll('render/minnie'):
|
||||
try:
|
||||
if x.zoneId != base.localAvatar.zoneId:
|
||||
x.removeNode()
|
||||
x.nametag.unmanage(base.marginManager)
|
||||
except:
|
||||
pass
|
||||
|
||||
for x in base.cr.doFindAll('render/mickey'):
|
||||
try:
|
||||
if x.zoneId != base.localAvatar.zoneId:
|
||||
x.removeNode()
|
||||
x.nametag.unmanage(base.marginManager)
|
||||
except:
|
||||
pass
|
||||
|
||||
for x in base.cr.doFindAll('render/pluto'):
|
||||
try:
|
||||
if x.zoneId != base.localAvatar.zoneId:
|
||||
x.removeNode()
|
||||
x.nametag.unmanage(base.marginManager)
|
||||
except:
|
||||
pass
|
||||
|
||||
for x in base.cr.doFindAll('render/daisy'):
|
||||
try:
|
||||
if x.zoneId != base.localAvatar.zoneId:
|
||||
x.removeNode()
|
||||
x.nametag.unmanage(base.marginManager)
|
||||
except:
|
||||
pass
|
||||
|
||||
for x in base.localAvatar.getNearbyPlayers(100000000000000, False):
|
||||
try:
|
||||
y = base.cr.doId2do.get(x)
|
||||
if y.zoneId != base.localAvatar.zoneId:
|
||||
y.removeNode()
|
||||
y.nametag.unmanage(base.marginManager)
|
||||
except:
|
||||
pass
|
||||
|
||||
for x in base.cr.doFindAll('Butterfly'):
|
||||
x.butterflyNode.remove()
|
||||
|
||||
for x in base.cr.doFindAll('Flower'):
|
||||
x.bigFlower.removeNode()
|
||||
|
||||
for x in base.cr.doFindAll('Treasure'):
|
||||
x.setPosition(0, 0, 8**8)
|
||||
|
||||
for x in base.cr.doFindAll('render/DistributedFishingTarget'):
|
||||
x.bubbles.removeNode()
|
||||
x.removeNode()
|
||||
|
||||
def gainLaff(self):
|
||||
if base.localAvatar.getHp()!=base.localAvatar.getMaxHp():
|
||||
if self.unloaded:
|
||||
ceoMaxer.countryClubAutoer.preTele()
|
||||
self.interest1=base.cr.addInterest(base.localAvatar.defaultShard, 9000, 5, None)
|
||||
self.interest2=base.cr.addInterest(base.localAvatar.defaultShard, 3000, 5, None)
|
||||
self.unloaded=False
|
||||
self.collectLaff()
|
||||
if self.wasInBattle:
|
||||
ceoMaxer.countryClubAutoer.enterBattle()
|
||||
|
||||
def loadGagshop(self):
|
||||
if not base.cr.doFind('Clerk'):
|
||||
self.contextId = base.cr.addInterest(base.localAvatar.defaultShard, self.gagshop_zoneId, 4, event=None)
|
||||
try:
|
||||
if not int(render.find('**/*gagShop_interior_english*').getZ()) == 8**8:
|
||||
render.find('**/*gagShop_interior_english*').setZ(8**8)
|
||||
for k in base.cr.doFindAll('Clerk'):
|
||||
k.nametag.unmanage(base.marginManager)
|
||||
except:
|
||||
pass
|
||||
|
||||
def buyGags(self):
|
||||
desiredInv=self.desiredInv
|
||||
try:
|
||||
maxCarryGags = base.localAvatar.getMaxCarry()
|
||||
if base.cr.doFind('Clerk'):
|
||||
num_gags = 0
|
||||
for inventory_number in base.localAvatar.inventory.makeFromNetString(desiredInv):
|
||||
for k in inventory_number[:-1]:
|
||||
num_gags += k
|
||||
change = base.localAvatar.getMoney() - num_gags
|
||||
oldString = base.localAvatar.inventory.makeNetString()
|
||||
newString = desiredInv[:6] + oldString[6] + desiredInv[7:13] + oldString[13] + desiredInv[14:20] + oldString[20] + desiredInv[21:27] + oldString[27] + desiredInv[28:34] + oldString[34] + desiredInv[35:41] + oldString[41] + desiredInv[42:48] + oldString[48]
|
||||
for clerk in base.cr.doFindAll('Clerk'):
|
||||
clerk.setMovie=lambda *args,**kwds: None
|
||||
clerk.freeAvatar=lambda *args: None
|
||||
clerk.sendUpdate('avatarEnter')
|
||||
clerk.sendUpdate('setInventory', [newString, change, 1])
|
||||
|
||||
money = base.localAvatar.getMoney()
|
||||
maxMoney = base.localAvatar.getMaxMoney()
|
||||
base.cr.bankManager.d_transferMoney(money - maxMoney)
|
||||
except:
|
||||
pass
|
||||
|
||||
def unloadGagshop(self):
|
||||
if hasattr(self, 'contextId'):
|
||||
try:
|
||||
base.cr.removeInterest(self.contextId)
|
||||
except:
|
||||
pass
|
||||
|
||||
def restock(self):
|
||||
try:
|
||||
if base.localAvatar.inventory.inventory[self.firstTrack][self.desiredLevel1]<2 or base.localAvatar.inventory.inventory[self.secondTrack][self.desiredLevel2]<2 or base.localAvatar.inventory.inventory[self.thirdTrack][self.desiredLevel3]<2:
|
||||
Sequence(Func(self.loadGagshop),Wait(1),Func(self.buyGags),Wait(0.5),Func(self.unloadGagshop)).start()
|
||||
|
||||
except:
|
||||
pass
|
||||
|
||||
def revertFunctions(self):
|
||||
self.noToons.finish()
|
||||
try:
|
||||
base.cr.removeInterest(self.interest1)
|
||||
base.cr.removeInterest(self.interest2)
|
||||
self.unloaded=True
|
||||
except:
|
||||
pass
|
||||
|
||||
class OtherFunctions:
|
||||
oldDockEnterTeleportIn=DDPlayground.DDPlayground.enterTeleportIn
|
||||
oldBossEnterWalk=BossbotHQExterior.BossbotHQExterior.enterWalk
|
||||
oldCashEnterWalk=CashbotHQExterior.CashbotHQExterior.enterWalk
|
||||
oldEnterReward=DistributedBattle.DistributedBattle.enterReward
|
||||
oldDenyBattle=DistributedSuit.denyBattle
|
||||
oldSendUpdate=DistributedObject.DistributedObject.sendUpdate
|
||||
oldEnterHealth=HealthForceAcknowledge.HealthForceAcknowledge.enter
|
||||
oldSetAnim=LocalToon.LocalToon.setAnimState
|
||||
oldPostInvite=DistributedBoardingParty.DistributedBoardingParty.postInvite
|
||||
oldNpcFreeAvatar=DistributedNPCToonBase.DistributedNPCToonBase.freeAvatar
|
||||
|
||||
def __init__(self):
|
||||
self.shouldContinue=False
|
||||
self.bossCount=0
|
||||
self.limit10=True
|
||||
self.onlyClub=False
|
||||
self.isHealing=False
|
||||
self.canSetParentAgain=True
|
||||
self.numberToSuit={0:'Flunky',1:'Pencil Pusher',2:'Yesman',3:'Micromanager',
|
||||
4:'Downsizer',5:'Head Hunter',6:'Corporate Raider',7:'The Big Cheese'}
|
||||
DDPlayground.DDPlayground.enterTeleportIn=lambda newSelf,*args:self.newDockEnterTeleportIn(newSelf,*args)
|
||||
BossbotHQExterior.BossbotHQExterior.enterWalk=lambda newSelf,*args: self.newBossEnterWalk(newSelf,*args)
|
||||
CashbotHQExterior.CashbotHQExterior.enterWalk=lambda newSelf,*args: self.newCashEnterWalk(newSelf,*args)
|
||||
DistributedBattle.DistributedBattle.enterReward=lambda newSelf,*args: self.newEnterReward(newSelf,*args)
|
||||
DistributedSuit.denyBattle=lambda *args: self.newDenyBattle(*args)
|
||||
LocalToon.LocalToon.setAnimState=lambda *args,**kwds:self.newSetAnimState(*args,**kwds)
|
||||
HealthForceAcknowledge.HealthForceAcknowledge.enter=lambda newSelf,hplevel: self.newEnterHealth(newSelf,hplevel)
|
||||
DistributedBoardingParty.DistributedBoardingParty.postInvite=lambda newSelf,leaderId,inviterId: self.newPostInvite(newSelf,leaderId,inviterId)
|
||||
DistributedNPCToonBase.DistributedNPCToonBase.freeAvatar=lambda *args: None
|
||||
|
||||
def attack(self):
|
||||
try:
|
||||
for battle in base.cr.doFindAll('battle'):
|
||||
if base.localAvatar.inventory.inventory[ceoMaxer.restock.firstTrack][ceoMaxer.restock.desiredLevel1]>0:
|
||||
battle.sendUpdate('requestAttack', [ceoMaxer.restock.firstTrack, ceoMaxer.restock.desiredLevel1, battle.suits[0].doId])
|
||||
else:
|
||||
break
|
||||
|
||||
if base.localAvatar.getHp()<(base.localAvatar.getMaxHp()*0.9) or self.isHealing:
|
||||
|
||||
if base.localAvatar.inventory.inventory[ceoMaxer.restock.secondTrack][ceoMaxer.restock.desiredLevel2]>0:
|
||||
battle.sendUpdate('requestAttack', [ceoMaxer.restock.secondTrack, ceoMaxer.restock.desiredLevel2, base.localAvatar.doId])
|
||||
else:
|
||||
break
|
||||
|
||||
if base.localAvatar.inventory.inventory[ceoMaxer.restock.thirdTrack][ceoMaxer.restock.desiredLevel3]>0:
|
||||
battle.sendUpdate('requestAttack', [ceoMaxer.restock.thirdTrack, ceoMaxer.restock.desiredLevel3, battle.suits[0].doId])
|
||||
else:
|
||||
break
|
||||
|
||||
else:
|
||||
if base.localAvatar.inventory.inventory[ceoMaxer.restock.thirdTrack][ceoMaxer.restock.desiredLevel3]>0:
|
||||
battle.sendUpdate('requestAttack', [ceoMaxer.restock.thirdTrack, ceoMaxer.restock.desiredLevel3, battle.suits[0].doId])
|
||||
else:
|
||||
break
|
||||
except:
|
||||
pass
|
||||
|
||||
def sendUpdateHook(self, newself, fieldName, args=[], sendToId=None):
|
||||
if fieldName=="requestAttack":
|
||||
self.oldSendUpdate(newself,"requestAttack", args, sendToId)
|
||||
self.oldSendUpdate(newself,"movieDone",[])
|
||||
newself.d_rewardDone(base.localAvatar.doId)
|
||||
else:
|
||||
self.oldSendUpdate(newself,fieldName, args, sendToId)
|
||||
|
||||
def newDockEnterTeleportIn(self,newSelf,*args):
|
||||
self.oldDockEnterTeleportIn(newSelf,*args)
|
||||
if self.shouldContinue:
|
||||
ceoMaxer.countryClubAutoer.gainLaffSeq.finish()
|
||||
ceoMaxer.countryClubAutoer.attackSeq.finish()
|
||||
Sequence(Wait(2),Func(self.checkStocks)).start()
|
||||
|
||||
def newPostInvite(self,newSelf,leaderId,inviterId):
|
||||
if leaderId==base.localAvatar.doId:
|
||||
newSelf.sendUpdate('requestAcceptInvite',[inviterId,leaderId])
|
||||
else:
|
||||
self.oldPostInvite(newSelf,leaderId,inviterId)
|
||||
|
||||
def newEnterHealth(self,newSelf,hplevel):
|
||||
try:
|
||||
self.oldEnterHealth(newSelf,hplevel)
|
||||
newSelf.handleOk(base.localAvatar.getHp())
|
||||
newSelf.exit()
|
||||
if self.shouldContinue:
|
||||
Sequence(Wait(2),Func(self.checkStocks)).start()
|
||||
except:
|
||||
pass
|
||||
|
||||
def newCashEnterWalk(self,newSelf,*args):
|
||||
self.oldCashEnterWalk(newSelf,*args)
|
||||
if len(args)>0:
|
||||
if self.shouldContinue and args[0]:
|
||||
ceoMaxer.countryClubAutoer.attackSeq.loop()
|
||||
self.enterRandomBattle()
|
||||
|
||||
def newBossEnterWalk(self,newSelf,*args):
|
||||
self.oldBossEnterWalk(newSelf,*args)
|
||||
if len(args)>0:
|
||||
if self.shouldContinue and args[0]:
|
||||
self.checkStocks()
|
||||
|
||||
def newEnterReward(self,newSelf,*args):
|
||||
self.oldEnterReward(newSelf,*args)
|
||||
if self.shouldContinue and self.isHealing:
|
||||
if base.localAvatar.getHp()>105:
|
||||
self.isHealing=False
|
||||
ceoMaxer.countryClubAutoer.attackSeq.finish()
|
||||
Sequence(Wait(2),Func(self.teleBack)).start()
|
||||
else:
|
||||
self.enterRandomBattle()
|
||||
|
||||
def newDenyBattle(self,*args):
|
||||
self.oldDenyBattle(*args)
|
||||
if self.shouldContinue and self.isHealing and self.lastCogId==args[0].doId:
|
||||
self.enterRandomBattle()
|
||||
|
||||
def newSetAnimState(self,*args,**kwds):
|
||||
self.oldSetAnim(*args,**kwds)
|
||||
if self.canSetParentAgain:
|
||||
base.localAvatar.d_setParent(1)
|
||||
self.canSetParentAgain=False
|
||||
Sequence(Wait(1),Func(self.doUnsetCanSetParentAgain)).start()
|
||||
|
||||
def doUnsetCanSetParentAgain(self):
|
||||
self.canSetParentAgain=True
|
||||
|
||||
def checkStocks(self):
|
||||
if self.onlyClub:
|
||||
base.localAvatar.cogMerits[0]=-4000
|
||||
if self.limit10 and self.bossCount>9:
|
||||
self.shouldContinue=False
|
||||
if self.shouldEnd:
|
||||
self.shouldContinue=False
|
||||
if self.haveJb():
|
||||
if self.shouldContinue:
|
||||
if self.getStocksLeft()==0 and not self.onlyClub:
|
||||
if base.cr.doFind('DistributedCogHQDoor') and base.localAvatar.getZoneId()>=10000 and base.localAvatar.getZoneId()<10100:
|
||||
ceoMaxer.ceoAutoer.start()
|
||||
else:
|
||||
ceoMaxer.restock.restock()
|
||||
ceoMaxer.restock.collectLaff()
|
||||
self.walk()
|
||||
ceoMaxer.autoerGui.display.newLine('Teleporting to bossbot hq')
|
||||
self.teleBack()
|
||||
else:
|
||||
if base.cr.doFind('DistributedCogHQDoor') and base.localAvatar.getZoneId()>=10000 and base.localAvatar.getZoneId()<10100:
|
||||
if base.localAvatar.getHp()>105:
|
||||
ceoMaxer.countryClubAutoer.start()
|
||||
else:
|
||||
self.isHealing=True
|
||||
ceoMaxer.autoerGui.display.newLine('Gaining laff back')
|
||||
ceoMaxer.restock.restock()
|
||||
ceoMaxer.restock.collectLaff()
|
||||
self.walk()
|
||||
self.teleBack(12000)
|
||||
else:
|
||||
ceoMaxer.restock.restock()
|
||||
ceoMaxer.restock.collectLaff()
|
||||
self.walk()
|
||||
if base.localAvatar.getHp()>105:
|
||||
ceoMaxer.autoerGui.display.newLine('Teleporting to bossbot hq')
|
||||
self.walk()
|
||||
self.teleBack()
|
||||
else:
|
||||
self.isHealing=True
|
||||
ceoMaxer.autoerGui.display.newLine('Gaining laff back')
|
||||
self.walk()
|
||||
self.teleBack(12000)
|
||||
else:
|
||||
ceoMaxer.restock.noToons.finish()
|
||||
try:
|
||||
base.cr.removeInterest(ceoMaxer.restock.interest1)
|
||||
base.cr.removeInterest(ceoMaxer.restock.interest2)
|
||||
ceoMaxer.restock.unloaded=True
|
||||
except:
|
||||
pass
|
||||
base.localAvatar.setSystemMessage(0,"Thanks for using freshollie's ceo maxer")
|
||||
ceoMaxer.autoerGui.display.newLine('Stopped')
|
||||
else:
|
||||
ceoMaxer.autoerGui.display.newLine('Out of jellybeans')
|
||||
base.localAvatar.setSystemMessage(0,'You have run out of jelly beans, please use the fishing code to gain some')
|
||||
|
||||
def getStocksLeft(self):
|
||||
return CogDisguiseGlobals.getTotalMerits(base.localAvatar,0)-base.localAvatar.cogMerits[0]
|
||||
|
||||
def walk(self):
|
||||
try:
|
||||
base.cr.playGame.getPlace().fsm.forceTransition('walk')
|
||||
except:
|
||||
pass
|
||||
|
||||
def teleBack(self,zone=10000):
|
||||
try:
|
||||
self.walk()
|
||||
base.cr.playGame.getPlace().handleBookCloseTeleport(zone, zone)
|
||||
except:
|
||||
pass
|
||||
|
||||
def onlyDoClub(self):
|
||||
self.onlyClub=True
|
||||
base.localAvatar.setSystemMessage(0,'CEO maxer set to only do the Country Club')
|
||||
|
||||
def doBoth(self):
|
||||
self.onlyClub=False
|
||||
base.localAvatar.setSystemMessage(0,'CEO maxer set to do both the Country Club and the CEO')
|
||||
|
||||
def haveJb(self):
|
||||
if base.localAvatar.cogLevels[0]==49:
|
||||
return True
|
||||
elif base.localAvatar.getTotalMoney()<100:
|
||||
return False
|
||||
else:
|
||||
return True
|
||||
|
||||
def enterRandomBattle(self):
|
||||
battles = []
|
||||
cogList = base.cr.doFindAll("render")
|
||||
for x in cogList:
|
||||
if isinstance(x, DistributedSuit):
|
||||
if x.activeState == 6:
|
||||
battles.append(x)
|
||||
if battles != []:
|
||||
self.walk()
|
||||
battle = random.choice(battles)
|
||||
pos, hpr = battle.getPos(), battle.getHpr()
|
||||
base.localAvatar.setPosHpr(pos, hpr)
|
||||
battle.d_requestBattle(pos, hpr)
|
||||
self.lastCogId=battle.doId
|
||||
else:
|
||||
pass
|
||||
|
||||
def limiterOn(self):
|
||||
self.limit10=True
|
||||
base.localAvatar.setSystemMessage(0,'CEO maxer set to be limited to only 10 CEOs')
|
||||
|
||||
def limiterOff(self):
|
||||
self.limit10=False
|
||||
base.localAvatar.setSystemMessage(0,'CEO maxer set to unlimited number of CEOs')
|
||||
|
||||
def setStop(self):
|
||||
self.shouldEnd=True
|
||||
base.localAvatar.setSystemMessage(1,"The Autoer will stop at the end of this run")
|
||||
ceoMaxer.autoerGui.stopTimer()
|
||||
|
||||
def start(self):
|
||||
DistributedObject.DistributedObject.sendUpdate=lambda newself, fieldName, args=[], sendToId=None: self.sendUpdateHook(newself, fieldName, args, sendToId)
|
||||
self.bossCount=0
|
||||
self.shouldContinue=True
|
||||
self.shouldEnd=False
|
||||
ceoMaxer.autoerGui.startTimer()
|
||||
emptyShardList=[]
|
||||
for shard in base.cr.activeDistrictMap:
|
||||
if base.cr.activeDistrictMap[shard].avatarCount<30:
|
||||
emptyShardList.append(shard)
|
||||
if emptyShardList==[]:
|
||||
emptyShardList=[650000000, 754000000, 608000000, 756000000, 658000000, 712000000, 360000000, 410000000, 620000000, 454000000, 726000000, 362000000, 688000000, 316000000]
|
||||
if base.localAvatar.defaultShard not in emptyShardList:
|
||||
ceoMaxer.autoerGui.display.newLine('TPing to an empty district')
|
||||
base.cr.playGame.getPlace().requestTeleport(10000,10000,random.choice(emptyShardList),None)
|
||||
else:
|
||||
self.checkStocks()
|
||||
ceoMaxer.restock.noToons.loop()
|
||||
|
||||
def revertFunctions(self):
|
||||
DDPlayground.DDPlayground.enterTeleportIn=self.oldDockEnterTeleportIn
|
||||
BossbotHQExterior.BossbotHQExterior.enterWalk=self.oldBossEnterWalk
|
||||
CashbotHQExterior.CashbotHQExterior.enterWalk=self.oldCashEnterWalk
|
||||
DistributedBattle.DistributedBattle.enterReward=self.oldEnterReward
|
||||
DistributedSuit.denyBattle=self.oldDenyBattle
|
||||
DistributedObject.DistributedObject.sendUpdate=self.oldSendUpdate
|
||||
HealthForceAcknowledge.HealthForceAcknowledge.enter=self.oldEnterHealth
|
||||
DistributedBoardingParty.DistributedBoardingParty.postInvite=self.oldPostInvite
|
||||
LocalToon.LocalToon.setAnimState=self.oldSetAnim
|
||||
DistributedNPCToonBase.DistributedNPCToonBase.freeAvatar=self.oldNpcFreeAvatar
|
||||
|
||||
class CeoAutoer:
|
||||
oldBossEnterElevator=DistributedBossbotBoss.DistributedBossbotBoss.enterElevator
|
||||
oldEnterBattleTwo=DistributedBossbotBoss.DistributedBossbotBoss.enterBattleTwo
|
||||
oldEnterBattleFour=DistributedBossbotBoss.DistributedBossbotBoss.enterBattleFour
|
||||
oldEnterPrepareBattleTwo=DistributedBossbotBoss.DistributedBossbotBoss.enterPrepareBattleTwo
|
||||
oldEnterPrepareBattleThree=DistributedBossbotBoss.DistributedBossbotBoss.enterPrepareBattleThree
|
||||
oldEnterPrepareBattleFour=DistributedBossbotBoss.DistributedBossbotBoss.enterPrepareBattleFour
|
||||
oldEnterEpilogue=DistributedBossbotBoss.DistributedBossbotBoss.enterEpilogue
|
||||
oldEnterWaitForInput=DistributedBattleFinal.DistributedBattleFinal.enterWaitForInput
|
||||
oldBossEnterIntro=DistributedBossbotBoss.DistributedBossbotBoss.enterIntroduction
|
||||
oldAvatarExit=DistributedCogHQDoor.DistributedCogHQDoor.avatarExit
|
||||
|
||||
def __init__(self):
|
||||
DistributedCogHQDoor.DistributedCogHQDoor.avatarExit=lambda newSelf,id: self.newAvatarExit(newSelf,id)
|
||||
DistributedBossbotBoss.DistributedBossbotBoss.enterElevator=lambda newSelf: self.newBossEnterElevator(newSelf)
|
||||
DistributedBossbotBoss.DistributedBossbotBoss.enterIntroduction=lambda newSelf,*args: self.newBossEnterIntro(newSelf,*args)
|
||||
DistributedBossbotBoss.DistributedBossbotBoss.enterBattleFour=lambda newSelf: self.newEnterBattleFour(newSelf)
|
||||
DistributedBossbotBoss.DistributedBossbotBoss.enterBattleTwo=lambda newSelf: self.newEnterBattleTwo(newSelf)
|
||||
DistributedBattleFinal.DistributedBattleFinal.enterWaitForInput=lambda *args: self.newEnterWaitForInput(*args)
|
||||
DistributedBossbotBoss.DistributedBossbotBoss.enterPrepareBattleThree=lambda newSelf: self.newEnterPrepareBattleThree(newSelf)
|
||||
DistributedBossbotBoss.DistributedBossbotBoss.enterPrepareBattleTwo=lambda newSelf: self.newEnterPrepareBattleTwo(newSelf)
|
||||
DistributedBossbotBoss.DistributedBossbotBoss.enterPrepareBattleFour=lambda newSelf: self.newEnterPrepareBattleFour(newSelf)
|
||||
DistributedBossbotBoss.DistributedBossbotBoss.enterEpilogue=lambda newSelf: self.newEnterEpilogue(newSelf)
|
||||
|
||||
def newAvatarExit(self,newSelf,id):
|
||||
self.oldAvatarExit(newSelf,id)
|
||||
if base.cr.doFind('Elevator') and id==base.localAvatar.doId and ceoMaxer.otherFunctions.shouldContinue:
|
||||
ceoMaxer.otherFunctions.walk()
|
||||
ceoMaxer.autoerGui.display.newLine('Heading to CEO')
|
||||
base.cr.doFind('Boarding').sendUpdate('requestInvite',[base.localAvatar.doId])
|
||||
base.cr.doFind('Boarding').sendUpdate('requestGoToSecondTime',[base.cr.doFind('Elevator').doId])
|
||||
|
||||
def newBossEnterIntro(self,newSelf,*args):
|
||||
self.oldBossEnterIntro(newSelf,*args)
|
||||
if ceoMaxer.otherFunctions.shouldContinue:
|
||||
newSelf.exitIntroduction()
|
||||
ceoMaxer.autoerGui.display.newLine('Skipping CEO introduction')
|
||||
|
||||
def newEnterPrepareBattleTwo(self,newSelf):
|
||||
self.oldEnterPrepareBattleTwo(newSelf)
|
||||
if ceoMaxer.otherFunctions.shouldContinue:
|
||||
newSelf.exitPrepareBattleTwo()
|
||||
ceoMaxer.autoerGui.display.newLine('Skipping cutscene')
|
||||
|
||||
def newEnterEpilogue(self,newSelf):
|
||||
self.oldEnterEpilogue(newSelf)
|
||||
if ceoMaxer.otherFunctions.shouldContinue:
|
||||
ceoMaxer.otherFunctions.bossCount+=1
|
||||
ceoMaxer.otherFunctions.teleBack()
|
||||
ceoMaxer.autoerGui.display.newLine('Finished CEO')
|
||||
|
||||
def newEnterPrepareBattleThree(self,newSelf):
|
||||
self.oldEnterPrepareBattleThree(newSelf)
|
||||
newSelf.exitPrepareBattleThree()
|
||||
ceoMaxer.autoerGui.display.newLine('Skipping cutscene')
|
||||
|
||||
def newEnterPrepareBattleFour(self,newSelf):
|
||||
self.oldEnterPrepareBattleFour(newSelf)
|
||||
newSelf.exitPrepareBattleFour()
|
||||
ceoMaxer.autoerGui.display.newLine('Skipping cutscene')
|
||||
|
||||
def destroyBattle(self):
|
||||
base.cr.doFind('SafeZone').sendUpdate('enterSafeZone')
|
||||
|
||||
def exploit(self):
|
||||
Sequence(Func(self.destroyBattle), Wait(.5), Func(ceoMaxer.otherFunctions.walk)).start()
|
||||
|
||||
def newEnterWaitForInput(self,*args):
|
||||
self.oldEnterWaitForInput(*args)
|
||||
if ceoMaxer.otherFunctions.shouldContinue:
|
||||
self.exploit()
|
||||
ceoMaxer.autoerGui.display.newLine('Skipping Battle')
|
||||
|
||||
def newBossEnterElevator(self,newSelf):
|
||||
self.oldBossEnterElevator(newSelf)
|
||||
if ceoMaxer.otherFunctions.shouldContinue:
|
||||
ceoMaxer.autoerGui.display.newLine('Skipping Elevator')
|
||||
newSelf._DistributedBossCog__doneElevator()
|
||||
|
||||
def newEnterBattleTwo(self,newSelf):
|
||||
self.oldEnterBattleTwo(newSelf)
|
||||
ceoMaxer.autoerGui.display.newLine('Waiting for timer')
|
||||
|
||||
def newEnterBattleFour(self,newSelf):
|
||||
self.oldEnterBattleFour(newSelf)
|
||||
self.endBattle(newSelf)
|
||||
|
||||
def start(self):
|
||||
base.cr.doFind('DistributedCogHQDoor').sendUpdate('requestEnter')
|
||||
ceoMaxer.autoerGui.display.newLine('Starting the CEO')
|
||||
ceoMaxer.autoerGui.display.newLine('Entering Lobby')
|
||||
|
||||
def endBattle(self,newSelf):
|
||||
newSelf.sendUpdate('hitBoss', [250])
|
||||
ceoMaxer.autoerGui.display.newLine('Killing CEO')
|
||||
newSelf.exitBattleFour()
|
||||
|
||||
def revertFunctions(self):
|
||||
DistributedBossbotBoss.DistributedBossbotBoss.enterElevator=self.oldBossEnterElevator
|
||||
DistributedBossbotBoss.DistributedBossbotBoss.enterBattleTwo=self.oldEnterBattleTwo
|
||||
DistributedBossbotBoss.DistributedBossbotBoss.enterBattleFour=self.oldEnterBattleFour
|
||||
DistributedBossbotBoss.DistributedBossbotBoss.enterPrepareBattleTwo=self.oldEnterPrepareBattleTwo
|
||||
DistributedBossbotBoss.DistributedBossbotBoss.enterPrepareBattleThree=self.oldEnterPrepareBattleThree
|
||||
DistributedBossbotBoss.DistributedBossbotBoss.enterPrepareBattleFour=self.oldEnterPrepareBattleFour
|
||||
DistributedBossbotBoss.DistributedBossbotBoss.enterEpilogue=self.oldEnterEpilogue
|
||||
DistributedBattleFinal.DistributedBattleFinal.enterWaitForInput=self.oldEnterWaitForInput
|
||||
DistributedBossbotBoss.DistributedBossbotBoss.enterIntroduction=self.oldBossEnterIntro
|
||||
DistributedCogHQDoor.DistributedCogHQDoor.avatarExit=self.oldAvatarExit
|
||||
|
||||
class CountryClubAutoer:
|
||||
oldCountryClubInit=DistributedCountryClub.DistributedCountryClub.__init__
|
||||
oldEnterReward=DistributedCountryClubBattle.DistributedCountryClubBattle.enterReward
|
||||
oldGolfGameToonEnter=DistributedGolfGreenGame.DistributedGolfGreenGame._DistributedGolfGreenGame__handleToonEnter
|
||||
oldEnterCountryClubReward=DistributedCountryClubBattle.DistributedCountryClubBattle.enterCountryClubReward
|
||||
|
||||
def __init__(self,ceoMaxer):
|
||||
self.attackSeq=Sequence(Func(ceoMaxer.restock.restock),Wait(1.0),Func(ceoMaxer.otherFunctions.attack),Wait(1.0))
|
||||
self.gainLaffSeq=Sequence(Func(ceoMaxer.restock.gainLaff),Wait(3.0))
|
||||
self.battleNum=1
|
||||
DistributedCountryClub.DistributedCountryClub.__init__=lambda *args:self.newCountryClubInit(*args)
|
||||
DistributedCountryClubBattle.DistributedCountryClubBattle.enterReward=lambda *args:self.newEnterReward(*args)
|
||||
DistributedGolfGreenGame.DistributedGolfGreenGame._DistributedGolfGreenGame__handleToonEnter=lambda *args:self.newGolfGameToonEnter(*args)
|
||||
base.localAvatar.died=lambda *args: self.newSafeZone(*args)
|
||||
DistributedCountryClubBattle.DistributedCountryClubBattle.enterCountryClubReward=lambda *args:self.newEnterCountryClubReward(*args)
|
||||
|
||||
def setFrontThree(self):
|
||||
self.floorNumToKartRoomNum={0:17,1:17,2:18}
|
||||
self.battles=[1,3,5]
|
||||
self.greenRoom=9
|
||||
self.countryClubName='The Front Three'
|
||||
|
||||
def setMiddleSix(self):
|
||||
self.greenRoom=29
|
||||
self.battles=[1,3,5,7,9,11]
|
||||
self.floorNumToKartRoomNum={0:17,1:17,2:17,3:17,4:17,5:18}
|
||||
self.countryClubName='The Middle Six'
|
||||
|
||||
def setBackNine(self):
|
||||
self.greenRoom=39
|
||||
self.battles=[1,3,5,7,9,11,13,15,17]
|
||||
self.floorNumToKartRoomNum={0:17,1:17,2:17,3:17,4:17,5:17,6:17,7:17,8:18}
|
||||
self.countryClubName='The Back Nine'
|
||||
|
||||
def preTele(self):
|
||||
DistributedTrolley.DistributedTrolley.__init__ = newInit
|
||||
DistributedPartyGate.DistributedPartyGate.__init__ = newInit
|
||||
DistributedDoor.DistributedDoor.__init__ = newInit
|
||||
base.localAvatar.stopLookAroundNow()
|
||||
|
||||
def generateAgain(self):
|
||||
DistributedTrolley.DistributedTrolley.__init__ = oldTrolleyInit
|
||||
DistributedPartyGate.DistributedPartyGate.__init__ = oldPartyInit
|
||||
DistributedDoor.DistributedDoor.__init__ = oldDoorInit
|
||||
base.localAvatar.findSomethingToLookAt = ceoMaxer.restock.oldFindSomethingToLookAt
|
||||
ToonHead.ToonHead._ToonHead__lookAround = ceoMaxer.restock.oldLookAround
|
||||
|
||||
def enterBattle(self):
|
||||
if base.localAvatar.getHp()>0:
|
||||
ceoMaxer.restock.wasInBattle=False
|
||||
battles = []
|
||||
cogList = base.cr.doFindAll("render")
|
||||
for x in cogList:
|
||||
if isinstance(x, DistributedMintSuit):
|
||||
if x.activeState == 6:
|
||||
if self.battleNum in self.battles:
|
||||
if x.doId not in base.cr.doFind('DistributedCountryClubRoom '+str(self.floorNumToKartRoomNum[base.cr.doFind('DistributedCountryClub.DistributedCountryClub').floorNum])).suitIds:
|
||||
battles.append(x)
|
||||
else:
|
||||
if x.doId in base.cr.doFind('DistributedCountryClubRoom '+str(self.floorNumToKartRoomNum[base.cr.doFind('DistributedCountryClub.DistributedCountryClub').floorNum])).suitIds:
|
||||
battles.append(x)
|
||||
|
||||
if battles != []:
|
||||
battle=battles[0]
|
||||
ceoMaxer.otherFunctions.walk()
|
||||
pos, hpr = battle.getPos(), battle.getHpr()
|
||||
base.localAvatar.collisionsOn()
|
||||
base.localAvatar.setPosHpr(pos, hpr)
|
||||
battle.d_requestBattle(pos, hpr)
|
||||
ceoMaxer.autoerGui.display.newLine('Entering Battle '+str(self.battleNum))
|
||||
return True
|
||||
else:
|
||||
return False
|
||||
else:
|
||||
return True
|
||||
|
||||
def doMoles(self):
|
||||
moleSeq=Sequence()
|
||||
ceoMaxer.autoerGui.display.newLine('Entering Floor '+str(base.cr.doFind('DistributedCountryClub.DistributedCountryClub').floorNum+1))
|
||||
ceoMaxer.autoerGui.display.newLine('Completing Mole Field')
|
||||
for moleField in base.cr.doFindAll('MoleField'):
|
||||
for i in range(moleField.numMoles):
|
||||
moleSeq.append(Func(moleField.sendUpdate,'whackedMole', [0, i]))
|
||||
moleSeq.append(Wait(0.05))
|
||||
moleSeq.append(Wait(0.5))
|
||||
moleSeq.append(Func(self.enterBattle))
|
||||
moleSeq.start()
|
||||
|
||||
def doGolf(self):
|
||||
gameSeq=Sequence()
|
||||
ceoMaxer.autoerGui.display.newLine('Completing Golf')
|
||||
for greenGame in base.cr.doFindAll('GolfGreenGame'):
|
||||
for i in range(greenGame.boardsLeft):
|
||||
gameSeq.append(Func(greenGame.sendUpdate,'requestBoard', [1]))
|
||||
gameSeq.append(Wait(2))
|
||||
gameSeq.append(Func(self.endFloor))
|
||||
gameSeq.start()
|
||||
|
||||
def enterCountryClub(self):
|
||||
for kart in base.cr.doFindAll('DistributedCogKart'):
|
||||
if kart.getDestName()==self.countryClubName:
|
||||
base.cr.doFind('Boarding').sendUpdate('requestInvite',[base.localAvatar.doId])
|
||||
base.cr.doFind('Boarding').sendUpdate('requestGoToSecondTime',[kart.doId])
|
||||
break
|
||||
|
||||
def boardKart(self):
|
||||
ceoMaxer.otherFunctions.walk()
|
||||
self.attackSeq.finish()
|
||||
self.gainLaffSeq.finish()
|
||||
for kart in base.cr.doFindAll('DistributedClubElevator'):
|
||||
kart.handleEnterSphere(base.localAvatar.doId)
|
||||
ceoMaxer.autoerGui.display.newLine('Boarding Kart')
|
||||
return
|
||||
ceoMaxer.otherFunctions.walk()
|
||||
ceoMaxer.autoerGui.display.newLine('Finishing Country Club')
|
||||
ceoMaxer.otherFunctions.teleBack()
|
||||
self.generateAgain()
|
||||
|
||||
def warpToRoom(self,room):
|
||||
if base.cr.doFind('DistributedCountryClub.DistributedCountryClub'):
|
||||
base.cr.doFind('DistributedCountryClub.DistributedCountryClub').warpToRoom(room)
|
||||
|
||||
def newCountryClubInit(self,*args):
|
||||
self.oldCountryClubInit(*args)
|
||||
self.attackSeq.loop()
|
||||
self.gainLaffSeq.loop()
|
||||
Sequence(Wait(3),Func(self.doMoles)).start()
|
||||
|
||||
def newGolfGameToonEnter(self,*args):
|
||||
self.oldGolfGameToonEnter(*args)
|
||||
if ceoMaxer.otherFunctions.shouldContinue:
|
||||
Sequence(Wait(3),Func(self.doGolf)).start()
|
||||
|
||||
def newEnterReward(self,*args):
|
||||
self.oldEnterReward(*args)
|
||||
if ceoMaxer.otherFunctions.shouldContinue:
|
||||
ceoMaxer.autoerGui.display.newLine('Finished Battle '+str(self.battleNum))
|
||||
base.cr.doFind('battle').d_rewardDone(base.localAvatar.doId)
|
||||
self.battleNum+=1
|
||||
ceoMaxer.otherFunctions.walk()
|
||||
if not self.enterBattle():
|
||||
self.warpToRoom(self.greenRoom)
|
||||
ceoMaxer.otherFunctions.walk()
|
||||
|
||||
def newSafeZone(self,*args):
|
||||
Sequence(Wait(1),Func(ceoMaxer.otherFunctions.walk)).start()
|
||||
ceoMaxer.restock.wasInBattle=True
|
||||
ceoMaxer.autoerGui.display.newLine('Died, recovering')
|
||||
|
||||
def newEnterCountryClubReward(self,*args):
|
||||
self.oldEnterCountryClubReward(*args)
|
||||
if ceoMaxer.otherFunctions.shouldContinue:
|
||||
ceoMaxer.autoerGui.display.newLine('Finished Predident')
|
||||
Sequence(Wait(1.5),Func(self.boardKart)).start()
|
||||
|
||||
def endFloor(self):
|
||||
ceoMaxer.otherFunctions.walk()
|
||||
self.warpToRoom(self.floorNumToKartRoomNum[base.cr.doFind('DistributedCountryClub.DistributedCountryClub').floorNum])
|
||||
Sequence(Wait(1),Func(self.boardKart)).start()
|
||||
|
||||
def start(self):
|
||||
self.battleNum=1
|
||||
if ceoMaxer.otherFunctions.getStocksLeft()>953 and base.localAvatar.getCogParts()[0]!=0:
|
||||
ceoMaxer.autoerGui.display.newLine('Entering The Back Nine')
|
||||
self.setBackNine()
|
||||
elif ceoMaxer.otherFunctions.getStocksLeft()>386 and base.localAvatar.getCogParts()[0]!=0:
|
||||
ceoMaxer.autoerGui.display.newLine('Entering The Middle Six')
|
||||
self.setMiddleSix()
|
||||
else:
|
||||
ceoMaxer.autoerGui.display.newLine('Entering The Front Three')
|
||||
self.setFrontThree()
|
||||
Sequence(Wait(1),Func(self.enterCountryClub)).start()
|
||||
|
||||
def revertFunctions(self):
|
||||
DistributedCountryClub.DistributedCountryClub.__init__=self.oldCountryClubInit
|
||||
DistributedCountryClubBattle.DistributedCountryClubBattle.enterReward=self.oldEnterReward
|
||||
DistributedGolfGreenGame.DistributedGolfGreenGame._DistributedGolfGreenGame__handleToonEnter=self.oldGolfGameToonEnter
|
||||
DistributedCountryClubBattle.DistributedCountryClubBattle.enterCountryClubReward=self.oldEnterCountryClubReward
|
||||
base.localAvatar.died=lambda *args: None
|
||||
self.generateAgain()
|
||||
|
||||
class CEOMaxer:
|
||||
|
||||
def __init__(self):
|
||||
self.restock=restock()
|
||||
self.otherFunctions=OtherFunctions()
|
||||
self.ceoAutoer=CeoAutoer()
|
||||
self.countryClubAutoer=CountryClubAutoer(self)
|
||||
self.autoerGui=AutoerGui('CEO Maxer',['Run Time',"Number of ceo's","Ceo's/Hour",'Suit','Stocks needed'],\
|
||||
['self.hours+":"+self.minutes+":"+self.seconds','str(ceoMaxer.otherFunctions.bossCount)','str(self.workOutNumberAnHour(ceoMaxer.otherFunctions.bossCount))'\
|
||||
,'str(ceoMaxer.otherFunctions.numberToSuit[base.localAvatar.cogTypes[0]])+" Lvl "+str(base.localAvatar.cogLevels[0]+1)','str(ceoMaxer.otherFunctions.getStocksLeft())'],\
|
||||
'CEO MXR','boss')
|
||||
|
||||
def revert(self):
|
||||
self.restock.revertFunctions()
|
||||
self.countryClubAutoer.revertFunctions()
|
||||
self.ceoAutoer.revertFunctions()
|
||||
self.otherFunctions.revertFunctions()
|
||||
self.autoerGui.destroy()
|
||||
DistributedNPCFisherman.DistributedNPCFisherman.handleCollisionSphereEnter=oldHandleEnterCollisionSphereFisherman
|
||||
DistributedNPCPartyPerson.DistributedNPCPartyPerson.handleCollisionSphereEnter=oldHandleEnterCollisionSphereParty
|
||||
DistributedNPCFisherman.DistributedNPCFisherman.announceGenerate=oldFisherAnnounceGenerate
|
||||
DistributedNPCPartyPerson.DistributedNPCPartyPerson.announceGenerate=oldPartyPlannerAnnounceGenerate
|
||||
|
||||
ceoMaxer=CEOMaxer()
|
||||
|
|
@ -0,0 +1,759 @@
|
|||
import __main__
|
||||
import random
|
||||
from direct.interval.IntervalGlobal import *
|
||||
from direct.distributed import DistributedObject
|
||||
from toontown.distributed import ToontownClientRepository
|
||||
from toontown.battle import DistributedBattleFinal
|
||||
from toontown.battle import DistributedBattle
|
||||
from toontown.toonbase import ToontownBattleGlobals
|
||||
from toontown.toon import *
|
||||
from toontown.coghq import DistributedCountryClubBattle
|
||||
from toontown.coghq import DistributedCountryClub
|
||||
from toontown.coghq import DistributedGolfGreenGame
|
||||
from toontown.coghq import DistributedCogHQDoor
|
||||
from toontown.coghq import CogDisguiseGlobals
|
||||
from toontown.coghq import BossbotHQExterior
|
||||
from toontown.coghq import CashbotHQExterior
|
||||
from toontown.coghq import CountryClubInterior
|
||||
from toontown.suit.DistributedMintSuit import DistributedMintSuit
|
||||
from toontown.suit import DistributedSuit
|
||||
from toontown.suit import DistributedBossbotBoss
|
||||
from toontown.safezone import DDPlayground
|
||||
|
||||
ToontownBattleGlobals.SkipMovie=1
|
||||
ToontownClientRepository.ToontownClientRepository.forbidCheesyEffects=lambda *x,**kwds: None
|
||||
|
||||
faceOffHook = lambda self, ts, name, callback:self.d_faceOffDone(self)
|
||||
DistributedCountryClubBattle.DistributedCountryClubBattle._DistributedLevelBattle__faceOff = faceOffHook
|
||||
DistributedBattle.DistributedBattle._DistributedBattle__faceOff = faceOffHook
|
||||
|
||||
oldHandleEnterCollisionSphereParty=DistributedNPCPartyPerson.DistributedNPCPartyPerson.handleCollisionSphereEnter
|
||||
DistributedNPCPartyPerson.DistributedNPCPartyPerson.handleCollisionSphereEnter=lambda *args: None
|
||||
oldHandleEnterCollisionSphereFisherman=DistributedNPCFisherman.DistributedNPCFisherman.handleCollisionSphereEnter
|
||||
DistributedNPCFisherman.DistributedNPCFisherman.handleEnterCollisionSphere=lambda *args: None
|
||||
|
||||
|
||||
class restock:
|
||||
|
||||
def __init__(self):
|
||||
self.firstTrack=2
|
||||
self.secondTrack=0
|
||||
self.thirdTrack=4
|
||||
self.fourthTrack=3
|
||||
self.desiredLevel1=5
|
||||
self.desiredLevel2=4
|
||||
self.desiredLevel3=5
|
||||
self.desiredLevel4=5
|
||||
self.desiredInv='\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
|
||||
self.maxCarryGags = base.localAvatar.getMaxCarry()
|
||||
self.gagshop_zoneId = 4503
|
||||
self.noToons=Sequence(Func(self.removeToons), Wait(1.5))
|
||||
self.noTrolley=False
|
||||
self.unloaded=True
|
||||
self.wasInBattle=False
|
||||
|
||||
self.lookAroundHookSeq = Sequence(Func(self.lookAroundHookFunc), Wait(2.5))
|
||||
self.lookAroundHookSeq.loop()
|
||||
ToonHead.ToonHead._ToonHead__lookAround = lambda *x:None
|
||||
|
||||
def lookAroundHookFunc(self):
|
||||
if hasattr(base, 'localAvatar'):
|
||||
base.localAvatar.findSomethingToLookAt = lambda *x:None
|
||||
self.oldFindSomethingToLookAt = base.localAvatar.findSomethingToLookAt
|
||||
self.lookAroundHookSeq.finish()
|
||||
self.oldLookAround = ToonHead.ToonHead._ToonHead__lookAround
|
||||
|
||||
def collectLaff(self):
|
||||
for treasure in base.cr.doFindAll('Treasure'):
|
||||
treasure.d_requestGrab()
|
||||
|
||||
def removeToons(self):
|
||||
for x in base.cr.doFindAll('Fisherman'):
|
||||
try:
|
||||
if x.zoneId != base.localAvatar.zoneId:
|
||||
x.removeNode()
|
||||
x.nametag.unmanage(base.marginManager)
|
||||
except:
|
||||
pass
|
||||
|
||||
for x in base.cr.doFindAll('Party Planner'):
|
||||
try:
|
||||
if x.zoneId != base.localAvatar.zoneId:
|
||||
x.removeNode()
|
||||
x.nametag.unmanage(base.marginManager)
|
||||
except:
|
||||
pass
|
||||
|
||||
for x in base.cr.doFindAll('render/donald'):
|
||||
try:
|
||||
if x.zoneId != base.localAvatar.zoneId:
|
||||
x.removeNode()
|
||||
x.nametag.unmanage(base.marginManager)
|
||||
except:
|
||||
pass
|
||||
|
||||
for x in base.cr.doFindAll('render/minnie'):
|
||||
try:
|
||||
if x.zoneId != base.localAvatar.zoneId:
|
||||
x.removeNode()
|
||||
x.nametag.unmanage(base.marginManager)
|
||||
except:
|
||||
pass
|
||||
|
||||
for x in base.cr.doFindAll('render/mickey'):
|
||||
try:
|
||||
if x.zoneId != base.localAvatar.zoneId:
|
||||
x.removeNode()
|
||||
x.nametag.unmanage(base.marginManager)
|
||||
except:
|
||||
pass
|
||||
|
||||
for x in base.cr.doFindAll('render/pluto'):
|
||||
try:
|
||||
if x.zoneId != base.localAvatar.zoneId:
|
||||
x.removeNode()
|
||||
x.nametag.unmanage(base.marginManager)
|
||||
except:
|
||||
pass
|
||||
|
||||
for x in base.cr.doFindAll('render/daisy'):
|
||||
try:
|
||||
if x.zoneId != base.localAvatar.zoneId:
|
||||
x.removeNode()
|
||||
x.nametag.unmanage(base.marginManager)
|
||||
except:
|
||||
pass
|
||||
|
||||
for x in base.localAvatar.getNearbyPlayers(100000000000000, False):
|
||||
try:
|
||||
y = base.cr.doId2do.get(x)
|
||||
if y.zoneId != base.localAvatar.zoneId:
|
||||
y.removeNode()
|
||||
y.nametag.unmanage(base.marginManager)
|
||||
except:
|
||||
pass
|
||||
|
||||
for x in base.cr.doFindAll('Butterfly'):
|
||||
x.butterflyNode.remove()
|
||||
|
||||
for x in base.cr.doFindAll('Flower'):
|
||||
x.bigFlower.removeNode()
|
||||
|
||||
for x in base.cr.doFindAll('Treasure'):
|
||||
x.setPosition(0, 0, 8**8)
|
||||
|
||||
for x in base.cr.doFindAll('render/DistributedFishingTarget'):
|
||||
x.bubbles.removeNode()
|
||||
x.removeNode()
|
||||
|
||||
def gainLaff(self):
|
||||
if base.localAvatar.getHp()!=base.localAvatar.getMaxHp():
|
||||
if self.unloaded:
|
||||
ceoMaxer.countryClubAutoer.preTele()
|
||||
self.interest1=base.cr.addInterest(base.localAvatar.defaultShard, 9000, description='5', event=None)
|
||||
self.interest2=base.cr.addInterest(base.localAvatar.defaultShard, 3000, description='5', event=None)
|
||||
self.unloaded=False
|
||||
self.collectLaff()
|
||||
if self.wasInBattle:
|
||||
ceoMaxer.countryClubAutoer.enterBattle()
|
||||
|
||||
def loadGagshop(self):
|
||||
if not base.cr.doFind('Clerk'):
|
||||
self.contextId = base.cr.addInterest(base.localAvatar.defaultShard, self.gagshop_zoneId, description='4', event=None)
|
||||
try:
|
||||
if not int(render.find('**/*gagShop_interior_english*').getZ()) == 8**8:
|
||||
render.find('**/*gagShop_interior_english*').setZ(8**8)
|
||||
for k in base.cr.doFindAll('Clerk'):
|
||||
k.nametag.unmanage(base.marginManager)
|
||||
except:
|
||||
pass
|
||||
|
||||
def buyGags(self):
|
||||
desiredInv=self.desiredInv
|
||||
try:
|
||||
maxCarryGags = base.localAvatar.getMaxCarry()
|
||||
if base.cr.doFind('Clerk'):
|
||||
num_gags = 0
|
||||
for inventory_number in base.localAvatar.inventory.makeFromNetString(desiredInv):
|
||||
for k in inventory_number[:-1]:
|
||||
num_gags += k
|
||||
change = base.localAvatar.getMoney() - num_gags
|
||||
oldString = base.localAvatar.inventory.makeNetString()
|
||||
newString = desiredInv[:6] + oldString[6] + desiredInv[7:13] + oldString[13] + desiredInv[14:20] + oldString[20] + desiredInv[21:27] + oldString[27] + desiredInv[28:34] + oldString[34] + desiredInv[35:41] + oldString[41] + desiredInv[42:48] + oldString[48]
|
||||
for clerk in base.cr.doFindAll('Clerk'):
|
||||
clerk.setMovie=lambda *args,**kwds: None
|
||||
clerk.freeAvatar=lambda *args: None
|
||||
clerk.sendUpdate('avatarEnter')
|
||||
clerk.sendUpdate('setInventory', [newString, change, 1])
|
||||
|
||||
money = base.localAvatar.getMoney()
|
||||
maxMoney = base.localAvatar.getMaxMoney()
|
||||
base.cr.bankManager.d_transferMoney(money - maxMoney)
|
||||
except:
|
||||
pass
|
||||
|
||||
def unloadGagshop(self):
|
||||
if hasattr(self, 'contextId'):
|
||||
try:
|
||||
base.cr.removeInterest(self.contextId)
|
||||
except:
|
||||
pass
|
||||
|
||||
def restock(self):
|
||||
try:
|
||||
if base.localAvatar.inventory.inventory[self.firstTrack][self.desiredLevel1]<2 or base.localAvatar.inventory.inventory[self.secondTrack][self.desiredLevel2]<2 or base.localAvatar.inventory.inventory[self.thirdTrack][self.desiredLevel3]<2:
|
||||
Sequence(Func(self.loadGagshop),Wait(1),Func(self.buyGags),Wait(0.5),Func(self.unloadGagshop)).start()
|
||||
|
||||
except:
|
||||
pass
|
||||
|
||||
def revertFunctions(self):
|
||||
self.noToons.finish()
|
||||
try:
|
||||
base.cr.removeInterest(self.interest1)
|
||||
base.cr.removeInterest(self.interest2)
|
||||
self.unloaded=True
|
||||
except:
|
||||
pass
|
||||
|
||||
class OtherFunctions:
|
||||
oldDockEnterTeleportIn=DDPlayground.DDPlayground.enterTeleportIn
|
||||
oldBossEnterWalk=BossbotHQExterior.BossbotHQExterior.enterWalk
|
||||
oldCashEnterWalk=CashbotHQExterior.CashbotHQExterior.enterWalk
|
||||
oldEnterReward=DistributedBattle.DistributedBattle.enterReward
|
||||
oldDenyBattle=DistributedSuit.DistributedSuit.denyBattle
|
||||
oldSendUpdate=DistributedObject.DistributedObject.sendUpdate
|
||||
oldEnterHealth=HealthForceAcknowledge.HealthForceAcknowledge.enter
|
||||
oldSetAnim=LocalToon.LocalToon.setAnimState
|
||||
oldPostInvite=DistributedBoardingParty.DistributedBoardingParty.postInvite
|
||||
oldNpcFreeAvatar=DistributedNPCToonBase.DistributedNPCToonBase.freeAvatar
|
||||
|
||||
def __init__(self):
|
||||
self.shouldContinue=False
|
||||
self.bossCount=0
|
||||
self.limit10=True
|
||||
self.onlyClub=False
|
||||
self.isHealing=False
|
||||
self.canSetParentAgain=True
|
||||
self.numberToSuit={0:'Flunky',1:'Pencil Pusher',2:'Yesman',3:'Micromanager',
|
||||
4:'Downsizer',5:'Head Hunter',6:'Corporate Raider',7:'The Big Cheese'}
|
||||
DDPlayground.DDPlayground.enterTeleportIn=lambda newSelf,*args:self.newDockEnterTeleportIn(newSelf,*args)
|
||||
BossbotHQExterior.BossbotHQExterior.enterWalk=lambda newSelf,*args: self.newBossEnterWalk(newSelf,*args)
|
||||
CashbotHQExterior.CashbotHQExterior.enterWalk=lambda newSelf,*args: self.newCashEnterWalk(newSelf,*args)
|
||||
DistributedBattle.DistributedBattle.enterReward=lambda newSelf,*args: self.newEnterReward(newSelf,*args)
|
||||
DistributedSuit.DistributedSuit.denyBattle=lambda *args: self.newDenyBattle(*args)
|
||||
LocalToon.LocalToon.setAnimState=lambda *args,**kwds:self.newSetAnimState(*args,**kwds)
|
||||
HealthForceAcknowledge.HealthForceAcknowledge.enter=lambda newSelf,hplevel: self.newEnterHealth(newSelf,hplevel)
|
||||
DistributedBoardingParty.DistributedBoardingParty.postInvite=lambda newSelf,leaderId,inviterId: self.newPostInvite(newSelf,leaderId,inviterId)
|
||||
DistributedNPCToonBase.DistributedNPCToonBase.freeAvatar=lambda *args: None
|
||||
|
||||
def attack(self):
|
||||
try:
|
||||
for battle in base.cr.doFindAll('battle'):
|
||||
if base.localAvatar.inventory.inventory[ceoMaxer.restock.firstTrack][ceoMaxer.restock.desiredLevel1]>0:
|
||||
battle.sendUpdate('requestAttack', [ceoMaxer.restock.firstTrack, ceoMaxer.restock.desiredLevel1, battle.suits[0].doId])
|
||||
else:
|
||||
break
|
||||
|
||||
if base.localAvatar.getHp()<(base.localAvatar.getMaxHp()*0.9) or self.isHealing:
|
||||
|
||||
if base.localAvatar.inventory.inventory[ceoMaxer.restock.secondTrack][ceoMaxer.restock.desiredLevel2]>0:
|
||||
battle.sendUpdate('requestAttack', [ceoMaxer.restock.secondTrack, ceoMaxer.restock.desiredLevel2, base.localAvatar.doId])
|
||||
else:
|
||||
break
|
||||
|
||||
if base.localAvatar.inventory.inventory[ceoMaxer.restock.thirdTrack][ceoMaxer.restock.desiredLevel3]>0:
|
||||
battle.sendUpdate('requestAttack', [ceoMaxer.restock.thirdTrack, ceoMaxer.restock.desiredLevel3, battle.suits[0].doId])
|
||||
else:
|
||||
break
|
||||
|
||||
else:
|
||||
if base.localAvatar.inventory.inventory[ceoMaxer.restock.thirdTrack][ceoMaxer.restock.desiredLevel3]>0:
|
||||
battle.sendUpdate('requestAttack', [ceoMaxer.restock.thirdTrack, ceoMaxer.restock.desiredLevel3, battle.suits[0].doId])
|
||||
else:
|
||||
break
|
||||
except:
|
||||
pass
|
||||
|
||||
def sendUpdateHook(self, newself, fieldName, args=[], sendToId=None):
|
||||
if fieldName=="requestAttack":
|
||||
self.oldSendUpdate(newself,"requestAttack", args, sendToId)
|
||||
self.oldSendUpdate(newself,"movieDone",[])
|
||||
newself.d_rewardDone(base.localAvatar.doId)
|
||||
else:
|
||||
self.oldSendUpdate(newself,fieldName, args, sendToId)
|
||||
|
||||
def newDockEnterTeleportIn(self,newSelf,*args):
|
||||
self.oldDockEnterTeleportIn(newSelf,*args)
|
||||
if self.shouldContinue:
|
||||
ceoMaxer.countryClubAutoer.gainLaffSeq.finish()
|
||||
ceoMaxer.countryClubAutoer.attackSeq.finish()
|
||||
Sequence(Wait(2),Func(self.checkStocks)).start()
|
||||
|
||||
def newPostInvite(self,newSelf,leaderId,inviterId):
|
||||
if leaderId==base.localAvatar.doId:
|
||||
newSelf.sendUpdate('requestAcceptInvite',[inviterId,leaderId])
|
||||
else:
|
||||
self.oldPostInvite(newSelf,leaderId,inviterId)
|
||||
|
||||
def newEnterHealth(self,newSelf,hplevel):
|
||||
try:
|
||||
self.oldEnterHealth(newSelf,hplevel)
|
||||
newSelf.handleOk(base.localAvatar.getHp())
|
||||
newSelf.exit()
|
||||
if self.shouldContinue:
|
||||
Sequence(Wait(2),Func(self.checkStocks)).start()
|
||||
except:
|
||||
pass
|
||||
|
||||
def newCashEnterWalk(self,newSelf,*args):
|
||||
self.oldCashEnterWalk(newSelf,*args)
|
||||
if len(args)>0:
|
||||
if self.shouldContinue and args[0]:
|
||||
ceoMaxer.countryClubAutoer.attackSeq.loop()
|
||||
self.enterRandomBattle()
|
||||
|
||||
def newBossEnterWalk(self,newSelf,*args):
|
||||
self.oldBossEnterWalk(newSelf,*args)
|
||||
if len(args)>0:
|
||||
if self.shouldContinue and args[0]:
|
||||
self.checkStocks()
|
||||
|
||||
def newEnterReward(self,newSelf,*args):
|
||||
self.oldEnterReward(newSelf,*args)
|
||||
if self.shouldContinue and self.isHealing:
|
||||
if base.localAvatar.getHp()>20:
|
||||
self.isHealing=False
|
||||
ceoMaxer.countryClubAutoer.attackSeq.finish()
|
||||
Sequence(Wait(2),Func(self.teleBack)).start()
|
||||
else:
|
||||
self.enterRandomBattle()
|
||||
|
||||
def newDenyBattle(self,*args):
|
||||
self.oldDenyBattle(*args)
|
||||
if self.shouldContinue and self.isHealing and self.lastCogId==args[0].doId:
|
||||
self.enterRandomBattle()
|
||||
|
||||
def newSetAnimState(self,*args,**kwds):
|
||||
self.oldSetAnim(*args,**kwds)
|
||||
if self.canSetParentAgain:
|
||||
base.localAvatar.d_setParent(1)
|
||||
self.canSetParentAgain=False
|
||||
Sequence(Wait(1),Func(self.doUnsetCanSetParentAgain)).start()
|
||||
|
||||
def doUnsetCanSetParentAgain(self):
|
||||
self.canSetParentAgain=True
|
||||
|
||||
def checkStocks(self):
|
||||
if taskAutoer.isQuestComplete():
|
||||
self.stop()
|
||||
taskAutoer.checkWhatToDo()
|
||||
if self.onlyClub:
|
||||
base.localAvatar.cogMerits[0]=-4000
|
||||
if self.limit10 and self.bossCount>9:
|
||||
self.shouldContinue=False
|
||||
if self.shouldEnd:
|
||||
self.shouldContinue=False
|
||||
if self.shouldContinue:
|
||||
if self.getStocksLeft()==0 and not self.onlyClub:
|
||||
if base.cr.doFind('DistributedCogHQDoor') and base.localAvatar.getZoneId()>=10000 and base.localAvatar.getZoneId()<10100:
|
||||
ceoMaxer.ceoAutoer.start()
|
||||
else:
|
||||
ceoMaxer.restock.restock()
|
||||
ceoMaxer.restock.collectLaff()
|
||||
self.walk()
|
||||
self.teleBack()
|
||||
else:
|
||||
if base.cr.doFind('DistributedCogHQDoor') and base.localAvatar.getZoneId()>=10000 and base.localAvatar.getZoneId()<10100:
|
||||
if base.localAvatar.getHp()>20:
|
||||
ceoMaxer.countryClubAutoer.start()
|
||||
else:
|
||||
self.isHealing=True
|
||||
ceoMaxer.restock.restock()
|
||||
ceoMaxer.restock.collectLaff()
|
||||
self.walk()
|
||||
self.teleBack(12000)
|
||||
else:
|
||||
ceoMaxer.restock.restock()
|
||||
ceoMaxer.restock.collectLaff()
|
||||
self.walk()
|
||||
if base.localAvatar.getHp()>20:
|
||||
self.walk()
|
||||
self.teleBack()
|
||||
else:
|
||||
self.isHealing=True
|
||||
self.walk()
|
||||
self.teleBack(12000)
|
||||
else:
|
||||
ceoMaxer.restock.noToons.finish()
|
||||
try:
|
||||
base.cr.removeInterest(ceoMaxer.restock.interest1)
|
||||
base.cr.removeInterest(ceoMaxer.restock.interest2)
|
||||
ceoMaxer.restock.unloaded=True
|
||||
except:
|
||||
pass
|
||||
|
||||
def getStocksLeft(self):
|
||||
return CogDisguiseGlobals.getTotalMerits(base.localAvatar,0)-base.localAvatar.cogMerits[0]
|
||||
|
||||
def walk(self):
|
||||
try:
|
||||
base.cr.playGame.getPlace().fsm.forceTransition('walk')
|
||||
except:
|
||||
pass
|
||||
|
||||
def teleBack(self,zone=10000):
|
||||
try:
|
||||
self.walk()
|
||||
base.cr.playGame.getPlace().handleBookCloseTeleport(zone, zone)
|
||||
except:
|
||||
pass
|
||||
|
||||
def onlyDoClub(self):
|
||||
self.onlyClub=True
|
||||
base.localAvatar.setSystemMessage(0,'CEO maxer set to only do the Country Club')
|
||||
|
||||
def doBoth(self):
|
||||
self.onlyClub=False
|
||||
base.localAvatar.setSystemMessage(0,'CEO maxer set to do both the Country Club and the CEO')
|
||||
|
||||
def haveJb(self):
|
||||
if base.localAvatar.cogLevels[0]==49:
|
||||
return True
|
||||
elif base.localAvatar.getTotalMoney()<100:
|
||||
return False
|
||||
else:
|
||||
return True
|
||||
|
||||
def enterRandomBattle(self):
|
||||
battles = []
|
||||
cogList = base.cr.doFindAll("render")
|
||||
for x in cogList:
|
||||
if isinstance(x, DistributedSuit.DistributedSuit):
|
||||
if x.activeState == 6:
|
||||
battles.append(x)
|
||||
if battles != []:
|
||||
self.walk()
|
||||
battle = random.choice(battles)
|
||||
pos, hpr = battle.getPos(), battle.getHpr()
|
||||
base.localAvatar.setPosHpr(pos, hpr)
|
||||
battle.d_requestBattle(pos, hpr)
|
||||
self.lastCogId=battle.doId
|
||||
else:
|
||||
pass
|
||||
|
||||
def limiterOn(self):
|
||||
self.limit10=True
|
||||
base.localAvatar.setSystemMessage(0,'CEO maxer set to be limited to only 10 CEOs')
|
||||
|
||||
def limiterOff(self):
|
||||
self.limit10=False
|
||||
base.localAvatar.setSystemMessage(0,'CEO maxer set to unlimited number of CEOs')
|
||||
|
||||
def stop(self):
|
||||
base.localAvatar.died=lambda *args: None
|
||||
self.shouldContinue=True
|
||||
self.shouldEnd=True
|
||||
|
||||
def start(self):
|
||||
DistributedObject.DistributedObject.sendUpdate=lambda newself, fieldName, args=[], sendToId=None: self.sendUpdateHook(newself, fieldName, args, sendToId)
|
||||
base.localAvatar.died=lambda *args: ceoMaxer.countryClubAutoer.newSafeZone(*args)
|
||||
self.bossCount=0
|
||||
self.shouldContinue=True
|
||||
self.shouldEnd=False
|
||||
ceoMaxer.restock.noToons.loop()
|
||||
self.checkStocks()
|
||||
|
||||
|
||||
def revertFunctions(self):
|
||||
DDPlayground.DDPlayground.enterTeleportIn=self.oldDockEnterTeleportIn
|
||||
BossbotHQExterior.BossbotHQExterior.enterWalk=self.oldBossEnterWalk
|
||||
CashbotHQExterior.CashbotHQExterior.enterWalk=self.oldCashEnterWalk
|
||||
DistributedBattle.DistributedBattle.enterReward=self.oldEnterReward
|
||||
DistributedSuit.DistributedSuit.denyBattle=self.oldDenyBattle
|
||||
DistributedObject.DistributedObject.sendUpdate=self.oldSendUpdate
|
||||
HealthForceAcknowledge.HealthForceAcknowledge.enter=self.oldEnterHealth
|
||||
DistributedBoardingParty.DistributedBoardingParty.postInvite=self.oldPostInvite
|
||||
LocalToon.LocalToon.setAnimState=self.oldSetAnim
|
||||
DistributedNPCToonBase.DistributedNPCToonBase.freeAvatar=self.oldNpcFreeAvatar
|
||||
|
||||
class CeoAutoer:
|
||||
oldBossEnterElevator=DistributedBossbotBoss.DistributedBossbotBoss.enterElevator
|
||||
oldEnterBattleTwo=DistributedBossbotBoss.DistributedBossbotBoss.enterBattleTwo
|
||||
oldEnterBattleFour=DistributedBossbotBoss.DistributedBossbotBoss.enterBattleFour
|
||||
oldEnterPrepareBattleTwo=DistributedBossbotBoss.DistributedBossbotBoss.enterPrepareBattleTwo
|
||||
oldEnterPrepareBattleThree=DistributedBossbotBoss.DistributedBossbotBoss.enterPrepareBattleThree
|
||||
oldEnterPrepareBattleFour=DistributedBossbotBoss.DistributedBossbotBoss.enterPrepareBattleFour
|
||||
oldEnterEpilogue=DistributedBossbotBoss.DistributedBossbotBoss.enterEpilogue
|
||||
oldEnterWaitForInput=DistributedBattleFinal.DistributedBattleFinal.enterWaitForInput
|
||||
oldBossEnterIntro=DistributedBossbotBoss.DistributedBossbotBoss.enterIntroduction
|
||||
oldAvatarExit=DistributedCogHQDoor.DistributedCogHQDoor.avatarExit
|
||||
|
||||
def __init__(self):
|
||||
DistributedCogHQDoor.DistributedCogHQDoor.avatarExit=lambda newSelf,id: self.newAvatarExit(newSelf,id)
|
||||
DistributedBossbotBoss.DistributedBossbotBoss.enterElevator=lambda newSelf: self.newBossEnterElevator(newSelf)
|
||||
DistributedBossbotBoss.DistributedBossbotBoss.enterIntroduction=lambda newSelf,*args: self.newBossEnterIntro(newSelf,*args)
|
||||
DistributedBossbotBoss.DistributedBossbotBoss.enterBattleFour=lambda newSelf: self.newEnterBattleFour(newSelf)
|
||||
DistributedBossbotBoss.DistributedBossbotBoss.enterBattleTwo=lambda newSelf: self.newEnterBattleTwo(newSelf)
|
||||
DistributedBattleFinal.DistributedBattleFinal.enterWaitForInput=lambda *args: self.newEnterWaitForInput(*args)
|
||||
DistributedBossbotBoss.DistributedBossbotBoss.enterPrepareBattleThree=lambda newSelf: self.newEnterPrepareBattleThree(newSelf)
|
||||
DistributedBossbotBoss.DistributedBossbotBoss.enterPrepareBattleTwo=lambda newSelf: self.newEnterPrepareBattleTwo(newSelf)
|
||||
DistributedBossbotBoss.DistributedBossbotBoss.enterPrepareBattleFour=lambda newSelf: self.newEnterPrepareBattleFour(newSelf)
|
||||
DistributedBossbotBoss.DistributedBossbotBoss.enterEpilogue=lambda newSelf: self.newEnterEpilogue(newSelf)
|
||||
|
||||
def newAvatarExit(self,newSelf,id):
|
||||
self.oldAvatarExit(newSelf,id)
|
||||
if base.cr.doFind('Elevator') and id==base.localAvatar.doId and ceoMaxer.otherFunctions.shouldContinue:
|
||||
ceoMaxer.otherFunctions.walk()
|
||||
base.cr.doFind('Boarding').sendUpdate('requestInvite',[base.localAvatar.doId])
|
||||
base.cr.doFind('Boarding').sendUpdate('requestGoToSecondTime',[base.cr.doFind('Elevator').doId])
|
||||
|
||||
def newBossEnterIntro(self,newSelf,*args):
|
||||
self.oldBossEnterIntro(newSelf,*args)
|
||||
if ceoMaxer.otherFunctions.shouldContinue:
|
||||
newSelf.exitIntroduction()
|
||||
|
||||
def newEnterPrepareBattleTwo(self,newSelf):
|
||||
self.oldEnterPrepareBattleTwo(newSelf)
|
||||
if ceoMaxer.otherFunctions.shouldContinue:
|
||||
newSelf.exitPrepareBattleTwo()
|
||||
|
||||
def newEnterEpilogue(self,newSelf):
|
||||
self.oldEnterEpilogue(newSelf)
|
||||
if ceoMaxer.otherFunctions.shouldContinue:
|
||||
ceoMaxer.otherFunctions.bossCount+=1
|
||||
ceoMaxer.otherFunctions.teleBack()
|
||||
|
||||
def newEnterPrepareBattleThree(self,newSelf):
|
||||
self.oldEnterPrepareBattleThree(newSelf)
|
||||
newSelf.exitPrepareBattleThree()
|
||||
|
||||
def newEnterPrepareBattleFour(self,newSelf):
|
||||
self.oldEnterPrepareBattleFour(newSelf)
|
||||
newSelf.exitPrepareBattleFour()
|
||||
|
||||
def destroyBattle(self):
|
||||
base.cr.doFind('SafeZone').sendUpdate('enterSafeZone')
|
||||
|
||||
def exploit(self):
|
||||
Sequence(Func(self.destroyBattle), Wait(.5), Func(ceoMaxer.otherFunctions.walk)).start()
|
||||
|
||||
def newEnterWaitForInput(self,*args):
|
||||
self.oldEnterWaitForInput(*args)
|
||||
if ceoMaxer.otherFunctions.shouldContinue:
|
||||
self.exploit()
|
||||
|
||||
def newBossEnterElevator(self,newSelf):
|
||||
self.oldBossEnterElevator(newSelf)
|
||||
if ceoMaxer.otherFunctions.shouldContinue:
|
||||
newSelf._DistributedBossCog__doneElevator()
|
||||
|
||||
def newEnterBattleTwo(self,newSelf):
|
||||
self.oldEnterBattleTwo(newSelf)
|
||||
|
||||
def newEnterBattleFour(self,newSelf):
|
||||
self.oldEnterBattleFour(newSelf)
|
||||
self.endBattle(newSelf)
|
||||
|
||||
def start(self):
|
||||
base.cr.doFind('DistributedCogHQDoor').sendUpdate('requestEnter')
|
||||
|
||||
def endBattle(self,newSelf):
|
||||
newSelf.sendUpdate('hitBoss', [250])
|
||||
newSelf.exitBattleFour()
|
||||
|
||||
def revertFunctions(self):
|
||||
DistributedBossbotBoss.DistributedBossbotBoss.enterElevator=self.oldBossEnterElevator
|
||||
DistributedBossbotBoss.DistributedBossbotBoss.enterBattleTwo=self.oldEnterBattleTwo
|
||||
DistributedBossbotBoss.DistributedBossbotBoss.enterBattleFour=self.oldEnterBattleFour
|
||||
DistributedBossbotBoss.DistributedBossbotBoss.enterPrepareBattleTwo=self.oldEnterPrepareBattleTwo
|
||||
DistributedBossbotBoss.DistributedBossbotBoss.enterPrepareBattleThree=self.oldEnterPrepareBattleThree
|
||||
DistributedBossbotBoss.DistributedBossbotBoss.enterPrepareBattleFour=self.oldEnterPrepareBattleFour
|
||||
DistributedBossbotBoss.DistributedBossbotBoss.enterEpilogue=self.oldEnterEpilogue
|
||||
DistributedBattleFinal.DistributedBattleFinal.enterWaitForInput=self.oldEnterWaitForInput
|
||||
DistributedBossbotBoss.DistributedBossbotBoss.enterIntroduction=self.oldBossEnterIntro
|
||||
DistributedCogHQDoor.DistributedCogHQDoor.avatarExit=self.oldAvatarExit
|
||||
|
||||
class CountryClubAutoer:
|
||||
oldCountryClubInit=DistributedCountryClub.DistributedCountryClub.__init__
|
||||
oldEnterReward=DistributedCountryClubBattle.DistributedCountryClubBattle.enterReward
|
||||
oldGolfGameToonEnter=DistributedGolfGreenGame.DistributedGolfGreenGame._DistributedGolfGreenGame__handleToonEnter
|
||||
oldEnterCountryClubReward=DistributedCountryClubBattle.DistributedCountryClubBattle.enterCountryClubReward
|
||||
|
||||
def __init__(self,ceoMaxer):
|
||||
self.attackSeq=Sequence(Func(ceoMaxer.restock.restock),Wait(1.0),Func(ceoMaxer.otherFunctions.attack),Wait(1.0))
|
||||
self.gainLaffSeq=Sequence(Func(ceoMaxer.restock.gainLaff),Wait(3.0))
|
||||
self.battleNum=1
|
||||
DistributedCountryClub.DistributedCountryClub.__init__=lambda *args:self.newCountryClubInit(*args)
|
||||
DistributedCountryClubBattle.DistributedCountryClubBattle.enterReward=lambda *args:self.newEnterReward(*args)
|
||||
DistributedGolfGreenGame.DistributedGolfGreenGame._DistributedGolfGreenGame__handleToonEnter=lambda *args:self.newGolfGameToonEnter(*args)
|
||||
DistributedCountryClubBattle.DistributedCountryClubBattle.enterCountryClubReward=lambda *args:self.newEnterCountryClubReward(*args)
|
||||
|
||||
def setFrontThree(self):
|
||||
self.floorNumToKartRoomNum={0:17,1:17,2:18}
|
||||
self.battles=[1,3,5]
|
||||
self.greenRoom=9
|
||||
self.countryClubName='The Front Three'
|
||||
|
||||
def setMiddleSix(self):
|
||||
self.greenRoom=29
|
||||
self.battles=[1,3,5,7,9,11]
|
||||
self.floorNumToKartRoomNum={0:17,1:17,2:17,3:17,4:17,5:18}
|
||||
self.countryClubName='The Middle Six'
|
||||
|
||||
def setBackNine(self):
|
||||
self.greenRoom=39
|
||||
self.battles=[1,3,5,7,9,11,13,15,17]
|
||||
self.floorNumToKartRoomNum={0:17,1:17,2:17,3:17,4:17,5:17,6:17,7:17,8:18}
|
||||
self.countryClubName='The Back Nine'
|
||||
|
||||
def preTele(self):
|
||||
exec(hooks, __main__.__dict__)
|
||||
|
||||
def generateAgain(self):
|
||||
DistributedDoor.DistributedDoor.announceGenerate=_announceGenerate1
|
||||
DistributedPartyGate.DistributedPartyGate.announceGenerate=_announceGenerate2
|
||||
DistributedTrolley.DistributedTrolley.__init__=old__init__
|
||||
DistributedPartyGate.DistributedPartyGate.__init__=old__init__2
|
||||
DistributedDoor.DistributedDoor.__init__=old__init__3
|
||||
|
||||
def enterBattle(self):
|
||||
if base.localAvatar.getHp()>0:
|
||||
ceoMaxer.restock.wasInBattle=False
|
||||
battles = []
|
||||
cogList = base.cr.doFindAll("render")
|
||||
for x in cogList:
|
||||
if isinstance(x, DistributedMintSuit):
|
||||
if x.activeState == 6:
|
||||
if self.battleNum in self.battles:
|
||||
if x.doId not in base.cr.doFind('DistributedCountryClubRoom '+str(self.floorNumToKartRoomNum[base.cr.doFind('DistributedCountryClub.DistributedCountryClub').floorNum])).suitIds:
|
||||
battles.append(x)
|
||||
else:
|
||||
if x.doId in base.cr.doFind('DistributedCountryClubRoom '+str(self.floorNumToKartRoomNum[base.cr.doFind('DistributedCountryClub.DistributedCountryClub').floorNum])).suitIds:
|
||||
battles.append(x)
|
||||
|
||||
if battles != []:
|
||||
battle=battles[0]
|
||||
ceoMaxer.otherFunctions.walk()
|
||||
pos, hpr = battle.getPos(), battle.getHpr()
|
||||
base.localAvatar.collisionsOn()
|
||||
base.localAvatar.setPosHpr(pos, hpr)
|
||||
battle.d_requestBattle(pos, hpr)
|
||||
return True
|
||||
else:
|
||||
return False
|
||||
else:
|
||||
return True
|
||||
|
||||
def doMoles(self):
|
||||
moleSeq=Sequence()
|
||||
for moleField in base.cr.doFindAll('MoleField'):
|
||||
for i in range(moleField.numMoles):
|
||||
moleSeq.append(Func(moleField.sendUpdate,'whackedMole', [0, i]))
|
||||
moleSeq.append(Wait(0.05))
|
||||
moleSeq.append(Wait(0.5))
|
||||
moleSeq.append(Func(self.enterBattle))
|
||||
moleSeq.start()
|
||||
|
||||
def doGolf(self):
|
||||
gameSeq=Sequence()
|
||||
for greenGame in base.cr.doFindAll('GolfGreenGame'):
|
||||
for i in range(greenGame.boardsLeft):
|
||||
gameSeq.append(Func(greenGame.sendUpdate,'requestBoard', [1]))
|
||||
gameSeq.append(Wait(2))
|
||||
gameSeq.append(Func(self.endFloor))
|
||||
gameSeq.start()
|
||||
|
||||
def enterCountryClub(self):
|
||||
for kart in base.cr.doFindAll('DistributedCogKart'):
|
||||
if kart.getDestName()==self.countryClubName:
|
||||
base.cr.doFind('Boarding').sendUpdate('requestInvite',[base.localAvatar.doId])
|
||||
base.cr.doFind('Boarding').sendUpdate('requestGoToSecondTime',[kart.doId])
|
||||
break
|
||||
|
||||
def boardKart(self):
|
||||
ceoMaxer.otherFunctions.walk()
|
||||
self.attackSeq.finish()
|
||||
self.gainLaffSeq.finish()
|
||||
for kart in base.cr.doFindAll('DistributedClubElevator'):
|
||||
kart.handleEnterSphere(base.localAvatar.doId)
|
||||
return
|
||||
ceoMaxer.otherFunctions.walk()
|
||||
ceoMaxer.otherFunctions.teleBack()
|
||||
self.generateAgain()
|
||||
|
||||
def warpToRoom(self,room):
|
||||
if base.cr.doFind('DistributedCountryClub.DistributedCountryClub'):
|
||||
base.cr.doFind('DistributedCountryClub.DistributedCountryClub').warpToRoom(room)
|
||||
|
||||
def newCountryClubInit(self,*args):
|
||||
self.oldCountryClubInit(*args)
|
||||
self.attackSeq.loop()
|
||||
self.gainLaffSeq.loop()
|
||||
Sequence(Wait(3),Func(self.doMoles)).start()
|
||||
|
||||
def newGolfGameToonEnter(self,*args):
|
||||
self.oldGolfGameToonEnter(*args)
|
||||
if ceoMaxer.otherFunctions.shouldContinue:
|
||||
Sequence(Wait(3),Func(self.doGolf)).start()
|
||||
|
||||
def newEnterReward(self,*args):
|
||||
self.oldEnterReward(*args)
|
||||
if ceoMaxer.otherFunctions.shouldContinue:
|
||||
base.cr.doFind('battle').d_rewardDone(base.localAvatar.doId)
|
||||
self.battleNum+=1
|
||||
ceoMaxer.otherFunctions.walk()
|
||||
if not self.enterBattle():
|
||||
self.warpToRoom(self.greenRoom)
|
||||
ceoMaxer.otherFunctions.walk()
|
||||
|
||||
def newSafeZone(self,*args):
|
||||
Sequence(Wait(1),Func(ceoMaxer.otherFunctions.walk)).start()
|
||||
ceoMaxer.restock.wasInBattle=True
|
||||
|
||||
def newEnterCountryClubReward(self,*args):
|
||||
self.oldEnterCountryClubReward(*args)
|
||||
if ceoMaxer.otherFunctions.shouldContinue:
|
||||
Sequence(Wait(1.5),Func(self.boardKart)).start()
|
||||
|
||||
def endFloor(self):
|
||||
ceoMaxer.otherFunctions.walk()
|
||||
self.warpToRoom(self.floorNumToKartRoomNum[base.cr.doFind('DistributedCountryClub.DistributedCountryClub').floorNum])
|
||||
Sequence(Wait(1),Func(self.boardKart)).start()
|
||||
|
||||
def start(self):
|
||||
self.battleNum=1
|
||||
if ceoMaxer.otherFunctions.getStocksLeft()>953 and base.localAvatar.getCogParts()[0]!=0:
|
||||
self.setBackNine()
|
||||
elif ceoMaxer.otherFunctions.getStocksLeft()>386 and base.localAvatar.getCogParts()[0]!=0:
|
||||
self.setMiddleSix()
|
||||
else:
|
||||
self.setFrontThree()
|
||||
Sequence(Wait(1),Func(self.enterCountryClub)).start()
|
||||
|
||||
def revertFunctions(self):
|
||||
DistributedCountryClub.DistributedCountryClub.__init__=self.oldCountryClubInit
|
||||
DistributedCountryClubBattle.DistributedCountryClubBattle.enterReward=self.oldEnterReward
|
||||
DistributedGolfGreenGame.DistributedGolfGreenGame._DistributedGolfGreenGame__handleToonEnter=self.oldGolfGameToonEnter
|
||||
DistributedCountryClubBattle.DistributedCountryClubBattle.enterCountryClubReward=self.oldEnterCountryClubReward
|
||||
base.localAvatar.died=lambda *args: None
|
||||
self.generateAgain()
|
||||
|
||||
class CEOMaxer:
|
||||
|
||||
def __init__(self):
|
||||
self.restock=restock()
|
||||
self.otherFunctions=OtherFunctions()
|
||||
self.ceoAutoer=CeoAutoer()
|
||||
self.countryClubAutoer=CountryClubAutoer(self)
|
||||
|
||||
def revert(self):
|
||||
self.restock.revertFunctions()
|
||||
self.countryClubAutoer.revertFunctions()
|
||||
self.ceoAutoer.revertFunctions()
|
||||
self.otherFunctions.revertFunctions()
|
||||
self.autoerGui.destroy()
|
||||
DistributedNPCFisherman.DistributedNPCFisherman.handleCollisionSphereEnter=oldHandleEnterCollisionSphereFisherman
|
||||
DistributedNPCPartyPerson.DistributedNPCPartyPerson.handleCollisionSphereEnter=oldHandleEnterCollisionSphereParty
|
||||
DistributedNPCFisherman.DistributedNPCFisherman.announceGenerate=oldFisherAnnounceGenerate
|
||||
DistributedNPCPartyPerson.DistributedNPCPartyPerson.announceGenerate=oldPartyPlannerAnnounceGenerate
|
||||
|
|
@ -0,0 +1,768 @@
|
|||
import random
|
||||
from direct.interval.IntervalGlobal import *
|
||||
from direct.distributed import DistributedObject
|
||||
from toontown.distributed import ToontownClientRepository
|
||||
from toontown.battle import DistributedBattleFinal
|
||||
from toontown.toonbase import ToontownBattleGlobals
|
||||
from toontown.toon import *
|
||||
from toontown.battle import DistributedBattle
|
||||
from toontown.coghq import DistributedMintBattle
|
||||
from toontown.coghq import DistributedMint
|
||||
from toontown.coghq import DistributedCogHQDoor
|
||||
from toontown.coghq import CogDisguiseGlobals
|
||||
from toontown.coghq import MintInterior
|
||||
from toontown.suit.DistributedMintSuit import DistributedMintSuit
|
||||
from toontown.suit.DistributedSuit import DistributedSuit
|
||||
from toontown.suit import DistributedCashbotBoss
|
||||
from toontown.safezone import DLPlayground
|
||||
from toontown.safezone import DistributedPartyGate
|
||||
from toontown.safezone import DistributedTrolley
|
||||
from toontown.building import DistributedDoor
|
||||
from toontown.building import DistributedBoardingParty
|
||||
|
||||
ToontownBattleGlobals.SkipMovie=1
|
||||
ToontownClientRepository.ToontownClientRepository.dumpAllSubShardObjects=lambda self: None
|
||||
ToontownClientRepository.ToontownClientRepository.forbidCheesyEffects=lambda *x,**kwds: None
|
||||
|
||||
faceOffHook = lambda self, ts, name, callback:self.d_faceOffDone(self)
|
||||
DistributedMintBattle.DistributedMintBattle._DistributedLevelBattle__faceOff = faceOffHook
|
||||
DistributedBattle.DistributedBattle._DistributedBattle__faceOff = faceOffHook
|
||||
|
||||
oldTrolleyInit = DistributedTrolley.DistributedTrolley.__init__
|
||||
oldPartyInit = DistributedPartyGate.DistributedPartyGate.__init__
|
||||
oldDoorInit = DistributedDoor.DistributedDoor.__init__
|
||||
|
||||
oldHandleEnterCollisionSphereParty=DistributedNPCPartyPerson.DistributedNPCPartyPerson.handleCollisionSphereEnter
|
||||
DistributedNPCPartyPerson.DistributedNPCPartyPerson.handleCollisionSphereEnter=lambda *args: None
|
||||
oldHandleEnterCollisionSphereFisherman=DistributedNPCFisherman.DistributedNPCFisherman.handleCollisionSphereEnter
|
||||
DistributedNPCFisherman.DistributedNPCFisherman.handleEnterCollisionSphere=lambda *args: None
|
||||
|
||||
oldFisherAnnounceGenerate = DistributedNPCFisherman.DistributedNPCFisherman.announceGenerate
|
||||
def newFishermanAnnounceGenerate(self):
|
||||
try:
|
||||
oldFisherAnnounceGenerate(self)
|
||||
except:
|
||||
return None
|
||||
|
||||
oldPartyPlannerAnnounceGenerate = DistributedNPCPartyPerson.DistributedNPCPartyPerson.announceGenerate
|
||||
def newPartyPlannerAnnounceGenerate(self):
|
||||
try:
|
||||
oldPartyPlannerAnnounceGenerate(self)
|
||||
except:
|
||||
return None
|
||||
|
||||
def newInit(self, cr):
|
||||
for obj in dir(self):
|
||||
exec('self.%s = lambda *x:None' % obj, globals(), locals())
|
||||
return None
|
||||
|
||||
|
||||
class restock:
|
||||
|
||||
def __init__(self):
|
||||
self.firstTrack=2
|
||||
self.secondTrack=0
|
||||
self.thirdTrack=4
|
||||
self.fourthTrack=3
|
||||
self.desiredLevel1=5
|
||||
self.desiredLevel2=4
|
||||
self.desiredLevel3=5
|
||||
self.desiredLevel4=5
|
||||
self.desiredInv='\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
|
||||
self.maxCarryGags = base.localAvatar.getMaxCarry()
|
||||
self.gagshop_zoneId = 4503
|
||||
self.noToons=Sequence(Func(self.removeToons), Wait(1.5))
|
||||
self.noTrolley=False
|
||||
self.unloaded=True
|
||||
self.wasInBattle=False
|
||||
|
||||
DistributedNPCFisherman.DistributedNPCFisherman.announceGenerate = newFishermanAnnounceGenerate
|
||||
DistributedNPCPartyPerson.DistributedNPCPartyPerson.announceGenerate = newPartyPlannerAnnounceGenerate
|
||||
|
||||
self.lookAroundHookSeq = Sequence(Func(self.lookAroundHookFunc), Wait(2.5))
|
||||
self.lookAroundHookSeq.loop()
|
||||
ToonHead.ToonHead._ToonHead__lookAround = lambda *x:None
|
||||
|
||||
def lookAroundHookFunc(self):
|
||||
if hasattr(base, 'localAvatar'):
|
||||
base.localAvatar.findSomethingToLookAt = lambda *x:None
|
||||
self.oldFindSomethingToLookAt = base.localAvatar.findSomethingToLookAt
|
||||
self.lookAroundHookSeq.finish()
|
||||
self.oldLookAround = ToonHead.ToonHead._ToonHead__lookAround
|
||||
|
||||
def collectLaff(self):
|
||||
for treasure in base.cr.doFindAll('Treasure'):
|
||||
treasure.d_requestGrab()
|
||||
|
||||
def removeToons(self):
|
||||
for x in base.cr.doFindAll('Fisherman'):
|
||||
try:
|
||||
if x.zoneId != base.localAvatar.zoneId:
|
||||
x.removeNode()
|
||||
x.nametag.unmanage(base.marginManager)
|
||||
except:
|
||||
pass
|
||||
|
||||
for x in base.cr.doFindAll('Party Planner'):
|
||||
try:
|
||||
if x.zoneId != base.localAvatar.zoneId:
|
||||
x.removeNode()
|
||||
x.nametag.unmanage(base.marginManager)
|
||||
except:
|
||||
pass
|
||||
|
||||
for x in base.cr.doFindAll('render/donald'):
|
||||
try:
|
||||
if x.zoneId != base.localAvatar.zoneId:
|
||||
x.removeNode()
|
||||
x.nametag.unmanage(base.marginManager)
|
||||
except:
|
||||
pass
|
||||
|
||||
for x in base.cr.doFindAll('render/minnie'):
|
||||
try:
|
||||
if x.zoneId != base.localAvatar.zoneId:
|
||||
x.removeNode()
|
||||
x.nametag.unmanage(base.marginManager)
|
||||
except:
|
||||
pass
|
||||
|
||||
for x in base.cr.doFindAll('render/mickey'):
|
||||
try:
|
||||
if x.zoneId != base.localAvatar.zoneId:
|
||||
x.removeNode()
|
||||
x.nametag.unmanage(base.marginManager)
|
||||
except:
|
||||
pass
|
||||
|
||||
for x in base.cr.doFindAll('render/pluto'):
|
||||
try:
|
||||
if x.zoneId != base.localAvatar.zoneId:
|
||||
x.removeNode()
|
||||
x.nametag.unmanage(base.marginManager)
|
||||
except:
|
||||
pass
|
||||
|
||||
for x in base.cr.doFindAll('render/daisy'):
|
||||
try:
|
||||
if x.zoneId != base.localAvatar.zoneId:
|
||||
x.removeNode()
|
||||
x.nametag.unmanage(base.marginManager)
|
||||
except:
|
||||
pass
|
||||
|
||||
for x in base.localAvatar.getNearbyPlayers(100000000000000, False):
|
||||
try:
|
||||
y = base.cr.doId2do.get(x)
|
||||
if y.zoneId != base.localAvatar.zoneId:
|
||||
y.removeNode()
|
||||
y.nametag.unmanage(base.marginManager)
|
||||
except:
|
||||
pass
|
||||
|
||||
for x in base.cr.doFindAll('Butterfly'):
|
||||
x.butterflyNode.remove()
|
||||
|
||||
for x in base.cr.doFindAll('Flower'):
|
||||
x.bigFlower.removeNode()
|
||||
|
||||
for x in base.cr.doFindAll('Treasure'):
|
||||
x.setPosition(0, 0, 8**8)
|
||||
|
||||
for x in base.cr.doFindAll('render/DistributedFishingTarget'):
|
||||
x.bubbles.removeNode()
|
||||
x.removeNode()
|
||||
|
||||
def gainLaff(self):
|
||||
if base.localAvatar.getHp()!=base.localAvatar.getMaxHp():
|
||||
if self.unloaded:
|
||||
cfoMaxer.mintAutoer.preTele()
|
||||
self.interest1=base.cr.addInterest(base.localAvatar.defaultShard, 9000, 5, None)
|
||||
self.interest2=base.cr.addInterest(base.localAvatar.defaultShard, 3000, 5, None)
|
||||
self.unloaded=False
|
||||
self.collectLaff()
|
||||
if self.wasInBattle:
|
||||
cfoMaxer.mintAutoer.enterBattle()
|
||||
|
||||
def loadGagshop(self):
|
||||
if not base.cr.doFind('Clerk'):
|
||||
self.contextId = base.cr.addInterest(base.localAvatar.defaultShard, self.gagshop_zoneId, 4, event=None)
|
||||
try:
|
||||
if not int(render.find('**/*gagShop_interior_english*').getZ()) == 8**8:
|
||||
render.find('**/*gagShop_interior_english*').setZ(8**8)
|
||||
for k in base.cr.doFindAll('Clerk'):
|
||||
k.nametag.unmanage(base.marginManager)
|
||||
except:
|
||||
pass
|
||||
|
||||
def buyGags(self):
|
||||
desiredInv=self.desiredInv
|
||||
try:
|
||||
maxCarryGags = base.localAvatar.getMaxCarry()
|
||||
if base.cr.doFind('Clerk'):
|
||||
num_gags = 0
|
||||
for inventory_number in base.localAvatar.inventory.makeFromNetString(desiredInv):
|
||||
for k in inventory_number[:-1]:
|
||||
num_gags += k
|
||||
change = base.localAvatar.getMoney() - num_gags
|
||||
oldString = base.localAvatar.inventory.makeNetString()
|
||||
newString = desiredInv[:6] + oldString[6] + desiredInv[7:13] + oldString[13] + desiredInv[14:20] + oldString[20] + desiredInv[21:27] + oldString[27] + desiredInv[28:34] + oldString[34] + desiredInv[35:41] + oldString[41] + desiredInv[42:48] + oldString[48]
|
||||
for clerk in base.cr.doFindAll('Clerk'):
|
||||
clerk.setMovie=lambda *args,**kwds: None
|
||||
clerk.freeAvatar=lambda *args: None
|
||||
clerk.sendUpdate('avatarEnter')
|
||||
clerk.sendUpdate('setInventory', [newString, change, 1])
|
||||
|
||||
money = base.localAvatar.getMoney()
|
||||
maxMoney = base.localAvatar.getMaxMoney()
|
||||
base.cr.bankManager.d_transferMoney(money - maxMoney)
|
||||
except:
|
||||
pass
|
||||
|
||||
def unloadGagshop(self):
|
||||
if hasattr(self, 'contextId'):
|
||||
try:
|
||||
base.cr.removeInterest(self.contextId)
|
||||
except:
|
||||
pass
|
||||
|
||||
def restock(self):
|
||||
try:
|
||||
if base.localAvatar.inventory.inventory[self.firstTrack][self.desiredLevel1]<2 or base.localAvatar.inventory.inventory[self.secondTrack][self.desiredLevel2]<2 or base.localAvatar.inventory.inventory[self.thirdTrack][self.desiredLevel3]<2:
|
||||
Sequence(Func(self.loadGagshop),Wait(1),Func(self.buyGags),Wait(0.5),Func(self.unloadGagshop)).start()
|
||||
|
||||
except:
|
||||
pass
|
||||
|
||||
def revertFunctions(self):
|
||||
self.noToons.finish()
|
||||
try:
|
||||
base.cr.removeInterest(self.interest1)
|
||||
base.cr.removeInterest(self.interest2)
|
||||
self.unloaded=True
|
||||
except:
|
||||
pass
|
||||
|
||||
class OtherFunctions:
|
||||
oldDreamlandInit=DLPlayground.DLPlayground.__init__
|
||||
oldHqDoorInit=DistributedCogHQDoor.DistributedCogHQDoor.__init__
|
||||
oldEnterReward=DistributedBattle.DistributedBattle.enterReward
|
||||
oldDenyBattle=DistributedSuit.denyBattle
|
||||
oldSendUpdate=DistributedObject.DistributedObject.sendUpdate
|
||||
oldEnterHealth=HealthForceAcknowledge.HealthForceAcknowledge.enter
|
||||
oldSetAnim=LocalToon.LocalToon.setAnimState
|
||||
oldPostInvite=DistributedBoardingParty.DistributedBoardingParty.postInvite
|
||||
|
||||
def __init__(self):
|
||||
self.shouldContinue=False
|
||||
self.bossCount=0
|
||||
self.onlyMint=False
|
||||
self.isHealing=False
|
||||
self.attackCogId=0
|
||||
self.canSetParentAgain=True
|
||||
self.numberToSuit={0:'Short Change',1:'Penny Pusher',2:'Tightwad',3:'Bean Counter',
|
||||
4:'Number Cruncher',5:'Money Bags',6:'Loan Shark',7:'Robber Baron'}
|
||||
DLPlayground.DLPlayground.__init__=lambda *args:self.newDreamlandInit(*args)
|
||||
DistributedCogHQDoor.DistributedCogHQDoor.__init__=lambda *args: self.newHqDoorInit(*args)
|
||||
DistributedBattle.DistributedBattle.enterReward=lambda newSelf,*args: self.newEnterReward(newSelf,*args)
|
||||
DistributedSuit.denyBattle=lambda *args: self.newDenyBattle(*args)
|
||||
HealthForceAcknowledge.HealthForceAcknowledge.enter=lambda newSelf,hplevel: self.newEnterHealth(newSelf,hplevel)
|
||||
LocalToon.LocalToon.setAnimState=lambda *args,**kwds:self.newSetAnimState(*args,**kwds)
|
||||
DistributedBoardingParty.DistributedBoardingParty.postInvite=lambda newSelf,leaderId,inviterId: self.newPostInvite(newSelf,leaderId,inviterId)
|
||||
|
||||
def attack(self):
|
||||
try:
|
||||
for battle in base.cr.doFindAll('battle'):
|
||||
if cfoMaxer.mintAutoer.finalDone:
|
||||
if len(battle.suits)>1:
|
||||
for suit in battle.suits:
|
||||
if suit.getActualLevel()!=12:
|
||||
attackSuit=suit
|
||||
else:
|
||||
attackSuit=battle.suits[0]
|
||||
else:
|
||||
attackSuit=battle.suits[0]
|
||||
|
||||
if base.localAvatar.inventory.inventory[cfoMaxer.restock.firstTrack][cfoMaxer.restock.desiredLevel1]>0:
|
||||
battle.sendUpdate('requestAttack', [cfoMaxer.restock.firstTrack, cfoMaxer.restock.desiredLevel1, attackSuit.doId])
|
||||
else:
|
||||
break
|
||||
|
||||
if base.localAvatar.getHp()<(base.localAvatar.getMaxHp()*0.9) or self.isHealing:
|
||||
|
||||
if base.localAvatar.inventory.inventory[cfoMaxer.restock.secondTrack][cfoMaxer.restock.desiredLevel2]>0:
|
||||
battle.sendUpdate('requestAttack', [cfoMaxer.restock.secondTrack, cfoMaxer.restock.desiredLevel2, base.localAvatar.doId])
|
||||
else:
|
||||
break
|
||||
|
||||
if base.localAvatar.inventory.inventory[cfoMaxer.restock.thirdTrack][cfoMaxer.restock.desiredLevel3]>0:
|
||||
battle.sendUpdate('requestAttack', [cfoMaxer.restock.thirdTrack, cfoMaxer.restock.desiredLevel3, attackSuit.doId])
|
||||
else:
|
||||
break
|
||||
|
||||
else:
|
||||
if base.localAvatar.inventory.inventory[cfoMaxer.restock.thirdTrack][cfoMaxer.restock.desiredLevel3]>0:
|
||||
battle.sendUpdate('requestAttack', [cfoMaxer.restock.thirdTrack, cfoMaxer.restock.desiredLevel3, attackSuit.doId])
|
||||
else:
|
||||
break
|
||||
except:
|
||||
pass
|
||||
|
||||
def sendUpdateHook(self, newself, fieldName, args=[], sendToId=None):
|
||||
if fieldName=="requestAttack":
|
||||
self.oldSendUpdate(newself,"requestAttack", args, sendToId)
|
||||
self.oldSendUpdate(newself,"movieDone",[])
|
||||
newself.d_rewardDone(base.localAvatar.doId)
|
||||
else:
|
||||
self.oldSendUpdate(newself,fieldName, args, sendToId)
|
||||
|
||||
def newDreamlandInit(self,*args):
|
||||
self.oldDreamlandInit(*args)
|
||||
if self.shouldContinue:
|
||||
cfoMaxer.mintAutoer.gainLaffSeq.finish()
|
||||
cfoMaxer.mintAutoer.attackSeq.finish()
|
||||
cfoMaxer.restock.wasInBattle=False
|
||||
self.checkCogbucks()
|
||||
|
||||
def newSetAnimState(self,*args,**kwds):
|
||||
self.oldSetAnim(*args,**kwds)
|
||||
if self.canSetParentAgain and self.shouldContinue:
|
||||
base.localAvatar.d_setParent(1)
|
||||
self.canSetParentAgain=False
|
||||
Sequence(Wait(2),Func(self.doUnsetCanSetParentAgain)).start()
|
||||
|
||||
def newPostInvite(self,newSelf,leaderId,inviterId):
|
||||
if leaderId==base.localAvatar.doId:
|
||||
newSelf.sendUpdate('requestAcceptInvite',[inviterId,leaderId])
|
||||
else:
|
||||
self.oldPostInvite(newSelf,leaderId,inviterId)
|
||||
|
||||
def doUnsetCanSetParentAgain(self):
|
||||
self.canSetParentAgain=True
|
||||
|
||||
def newEnterHealth(self,newSelf,hplevel):
|
||||
try:
|
||||
self.oldEnterHealth(newSelf,hplevel)
|
||||
newSelf.handleOk(base.localAvatar.getHp())
|
||||
newSelf.exit()
|
||||
cfoMaxer.autoerGui.display.newLine('TPing failed, trying again')
|
||||
if self.shouldContinue:
|
||||
Sequence(Wait(3),Func(self.checkCogbucks)).start()
|
||||
except:
|
||||
pass
|
||||
|
||||
def newHqDoorInit(self,*args):
|
||||
self.oldHqDoorInit(*args)
|
||||
if self.shouldContinue and base.localAvatar.getZoneId()==12000:
|
||||
base.localAvatar.setWantBattles(False)
|
||||
Sequence(Wait(2),Func(self.checkCogbucks)).start()
|
||||
|
||||
def newEnterReward(self,newSelf,*args):
|
||||
self.oldEnterReward(newSelf,*args)
|
||||
if self.shouldContinue and self.isHealing:
|
||||
if base.localAvatar.getHp()>70:
|
||||
cfoMaxer.mintAutoer.attackSeq.finish()
|
||||
self.isHealing=False
|
||||
self.checkCogbucks()
|
||||
else:
|
||||
Sequence(Wait(1),Func(self.enterRandomBattle)).start()
|
||||
|
||||
def newDenyBattle(self,*args):
|
||||
self.oldDenyBattle(*args)
|
||||
if self.shouldContinue and self.isHealing and args[0].doId==self.attackCogId:
|
||||
self.enterRandomBattle()
|
||||
|
||||
def checkCogbucks(self):
|
||||
if self.onlyMint:
|
||||
base.localAvatar.cogMerits[2]=-4000
|
||||
if self.shouldEnd:
|
||||
self.shouldContinue=False
|
||||
base.localAvatar.setWantBattles(True)
|
||||
if self.haveJb():
|
||||
if self.shouldContinue:
|
||||
if self.getCogbucksLeft()==0 and not self.onlyMint:
|
||||
if base.cr.doFind('DistributedCogHQDoor') and base.localAvatar.getZoneId()>=12000 and base.localAvatar.getZoneId()<12100:
|
||||
cfoMaxer.cfoAutoer.start()
|
||||
else:
|
||||
cfoMaxer.restock.restock()
|
||||
cfoMaxer.restock.collectLaff()
|
||||
self.walk()
|
||||
cfoMaxer.autoerGui.display.newLine('Teleporting to cashbot hq')
|
||||
Sequence(Wait(2),Func(self.teleBack)).start()
|
||||
else:
|
||||
if base.cr.doFind('DistributedCogHQDoor') and base.localAvatar.getZoneId()>=12000 and base.localAvatar.getZoneId()<12100:
|
||||
cfoMaxer.mintAutoer.start()
|
||||
else:
|
||||
cfoMaxer.restock.restock()
|
||||
cfoMaxer.restock.collectLaff()
|
||||
self.walk()
|
||||
cfoMaxer.autoerGui.display.newLine('Teleporting to cashbot hq')
|
||||
Sequence(Wait(2),Func(self.teleBack)).start()
|
||||
else:
|
||||
cfoMaxer.restock.noToons.finish()
|
||||
try:
|
||||
base.cr.removeInterest(cfoMaxer.restock.interest1)
|
||||
base.cr.removeInterest(cfoMaxer.restock.interest2)
|
||||
cfoMaxer.restock.unloaded=True
|
||||
except:
|
||||
pass
|
||||
base.localAvatar.setSystemMessage(0,"Thanks for using freshollie's cfo maxer")
|
||||
cfoMaxer.autoerGui.display.newLine('Stopped')
|
||||
else:
|
||||
cfoMaxer.autoerGui.display.newLine('Out of jellybeans')
|
||||
base.localAvatar.setSystemMessage(0,'You have run out of jelly beans, please use the fishing code to gain some')
|
||||
|
||||
def getCogbucksLeft(self):
|
||||
return CogDisguiseGlobals.getTotalMerits(base.localAvatar,2)-base.localAvatar.cogMerits[2]
|
||||
|
||||
def walk(self):
|
||||
try:
|
||||
base.cr.playGame.getPlace().fsm.forceTransition('walk')
|
||||
except:
|
||||
pass
|
||||
|
||||
def teleBack(self,zone=12000):
|
||||
try:
|
||||
self.walk()
|
||||
base.cr.playGame.getPlace().handleBookCloseTeleport(zone, zone)
|
||||
except:
|
||||
pass
|
||||
|
||||
def onlyDoMint(self):
|
||||
self.onlyMint=True
|
||||
base.localAvatar.setSystemMessage(0,'CFO maxer set to only do the Mint')
|
||||
|
||||
def doBoth(self):
|
||||
self.onlyMint=False
|
||||
base.localAvatar.setSystemMessage(0,'CFO maxer set to do both the Mint and the CFO')
|
||||
|
||||
def haveJb(self):
|
||||
if base.localAvatar.cogLevels[0]==49:
|
||||
return True
|
||||
elif base.localAvatar.getTotalMoney()<100:
|
||||
return False
|
||||
else:
|
||||
return True
|
||||
|
||||
def enterRandomBattle(self):
|
||||
battles = []
|
||||
cogList = base.cr.doFindAll("render")
|
||||
for x in cogList:
|
||||
if isinstance(x, DistributedSuit):
|
||||
if x.activeState == 6:
|
||||
battles.append(x)
|
||||
if battles != []:
|
||||
self.walk()
|
||||
battle = random.choice(battles)
|
||||
pos, hpr = battle.getPos(), battle.getHpr()
|
||||
base.localAvatar.collisionsOn()
|
||||
base.localAvatar.setPosHpr(pos, hpr)
|
||||
battle.d_requestBattle(pos, hpr)
|
||||
self.attackCogId=battle.doId
|
||||
else:
|
||||
pass
|
||||
|
||||
def setStop(self):
|
||||
self.shouldEnd=True
|
||||
base.localAvatar.setSystemMessage(1,"The Autoer will stop at the end of this run")
|
||||
cfoMaxer.autoerGui.stopTimer()
|
||||
|
||||
def start(self):
|
||||
DistributedObject.DistributedObject.sendUpdate=lambda newself, fieldName, args=[], sendToId=None: self.sendUpdateHook(newself, fieldName, args, sendToId)
|
||||
self.bossCount=0
|
||||
self.shouldContinue=True
|
||||
self.shouldEnd=False
|
||||
cfoMaxer.autoerGui.startTimer()
|
||||
emptyShardList=[]
|
||||
for shard in base.cr.activeDistrictMap:
|
||||
if base.cr.activeDistrictMap[shard].avatarCount<30:
|
||||
emptyShardList.append(shard)
|
||||
if emptyShardList==[]:
|
||||
emptyShardList=[650000000, 754000000, 608000000, 756000000, 658000000, 712000000, 360000000, 410000000, 620000000, 454000000, 726000000, 362000000, 688000000, 316000000]
|
||||
if base.localAvatar.defaultShard not in emptyShardList:
|
||||
cfoMaxer.autoerGui.display.newLine('TPing to an empty district')
|
||||
base.cr.playGame.getPlace().requestTeleport(12000,12000,random.choice(emptyShardList),None)
|
||||
else:
|
||||
self.checkCogbucks()
|
||||
cfoMaxer.restock.noToons.loop()
|
||||
|
||||
def revertFunctions(self):
|
||||
LocalToon.LocalToon.setAnimState=self.oldSetAnim
|
||||
DLPlayground.DLPlayground.__init__=self.oldDreamlandInit
|
||||
DistributedCogHQDoor.DistributedCogHQDoor.__init__=self.oldHqDoorInit
|
||||
DistributedBattle.DistributedBattle.enterReward=self.oldEnterReward
|
||||
DistributedSuit.denyBattle=self.oldDenyBattle
|
||||
DistributedObject.DistributedObject.sendUpdate=self.oldSendUpdate
|
||||
HealthForceAcknowledge.HealthForceAcknowledge.enter=self.oldEnterHealth
|
||||
DistributedBoardingParty.DistributedBoardingParty.postInvite=self.oldPostInvite
|
||||
|
||||
class CfoAutoer:
|
||||
oldBossEnterElevator=DistributedCashbotBoss.DistributedCashbotBoss.enterElevator
|
||||
oldEnterBattleThree=DistributedCashbotBoss.DistributedCashbotBoss.enterBattleThree
|
||||
oldEnterPrepareBattleThree=DistributedCashbotBoss.DistributedCashbotBoss.enterPrepareBattleThree
|
||||
oldEnterEpilogue=DistributedCashbotBoss.DistributedCashbotBoss.enterEpilogue
|
||||
oldEnterWaitForInput=DistributedBattleFinal.DistributedBattleFinal.enterWaitForInput
|
||||
oldBossEnterIntro=DistributedCashbotBoss.DistributedCashbotBoss.enterIntroduction
|
||||
oldAvatarExit=DistributedCogHQDoor.DistributedCogHQDoor.avatarExit
|
||||
|
||||
def __init__(self):
|
||||
DistributedCogHQDoor.DistributedCogHQDoor.avatarExit=lambda newSelf,id: self.newAvatarExit(newSelf,id)
|
||||
DistributedCashbotBoss.DistributedCashbotBoss.enterElevator=lambda newSelf: self.newBossEnterElevator(newSelf)
|
||||
DistributedCashbotBoss.DistributedCashbotBoss.enterIntroduction=lambda newSelf,*args: self.newBossEnterIntro(newSelf,*args)
|
||||
DistributedCashbotBoss.DistributedCashbotBoss.enterBattleThree=lambda newSelf: self.newEnterBattleThree(newSelf)
|
||||
DistributedBattleFinal.DistributedBattleFinal.enterWaitForInput=lambda *args: self.newEnterWaitForInput(*args)
|
||||
DistributedCashbotBoss.DistributedCashbotBoss.enterPrepareBattleThree=lambda newSelf: self.newEnterPrepareBattleThree(newSelf)
|
||||
DistributedCashbotBoss.DistributedCashbotBoss.enterEpilogue=lambda newSelf: self.newEnterEpilogue(newSelf)
|
||||
DistributedCashbotBoss.DistributedCashbotBoss.newState=DistributedCashbotBoss.DistributedCashbotBoss.setState
|
||||
|
||||
def newAvatarExit(self,newSelf,id):
|
||||
self.oldAvatarExit(newSelf,id)
|
||||
if base.cr.doFind('Elevator') and id==base.localAvatar.doId and cfoMaxer.otherFunctions.shouldContinue:
|
||||
cfoMaxer.otherFunctions.walk()
|
||||
cfoMaxer.autoerGui.display.newLine('Heading to the CFO')
|
||||
base.cr.doFind('Boarding').sendUpdate('requestLeave',[base.localAvatar.doId])
|
||||
base.cr.doFind('Boarding').sendUpdate('requestInvite',[base.localAvatar.doId])
|
||||
base.cr.doFind('Boarding').sendUpdate('requestGoToSecondTime',[base.cr.doFind('Elevator').doId])
|
||||
|
||||
def newBossEnterIntro(self,newSelf,*args):
|
||||
self.oldBossEnterIntro(newSelf,*args)
|
||||
if cfoMaxer.otherFunctions.shouldContinue:
|
||||
newSelf.exitIntroduction()
|
||||
cfoMaxer.autoerGui.display.newLine('Skipping CFO introduction')
|
||||
|
||||
def newEnterEpilogue(self,newSelf):
|
||||
self.oldEnterEpilogue(newSelf)
|
||||
if cfoMaxer.otherFunctions.shouldContinue:
|
||||
for i in range(5):
|
||||
newSelf._DistributedCashbotBoss__epilogueChatNext(i,1)
|
||||
cfoMaxer.otherFunctions.teleBack()
|
||||
cfoMaxer.otherFunctions.bossCount+=1
|
||||
cfoMaxer.autoerGui.display.newLine('Finished CFO')
|
||||
|
||||
def newEnterPrepareBattleThree(self,newSelf):
|
||||
self.oldEnterPrepareBattleThree(newSelf)
|
||||
newSelf.exitPrepareBattleThree()
|
||||
cfoMaxer.autoerGui.display.newLine('Skipping cutscene')
|
||||
|
||||
def destroyBattle(self):
|
||||
base.cr.doFind('SafeZone').sendUpdate('enterSafeZone')
|
||||
|
||||
def exploit(self):
|
||||
Sequence(Func(self.destroyBattle), Wait(.5), Func(cfoMaxer.otherFunctions.walk)).start()
|
||||
|
||||
def newEnterWaitForInput(self,*args):
|
||||
self.oldEnterWaitForInput(*args)
|
||||
if cfoMaxer.otherFunctions.shouldContinue:
|
||||
self.exploit()
|
||||
cfoMaxer.autoerGui.display.newLine('Skipping Battle')
|
||||
|
||||
def newBossEnterElevator(self,newSelf):
|
||||
self.oldBossEnterElevator(newSelf)
|
||||
if cfoMaxer.otherFunctions.shouldContinue:
|
||||
cfoMaxer.autoerGui.display.newLine('Skipping Elevator')
|
||||
newSelf._DistributedBossCog__doneElevator()
|
||||
|
||||
def newEnterBattleThree(self,newSelf):
|
||||
self.oldEnterBattleThree(newSelf)
|
||||
self.endBattle(newSelf)
|
||||
|
||||
def start(self):
|
||||
base.localAvatar.collisionsOff()
|
||||
base.cr.doFind('DistributedCogHQDoor').sendUpdate('requestEnter')
|
||||
base.localAvatar.setWantBattles(True)
|
||||
cfoMaxer.autoerGui.display.newLine('Starting the CFO')
|
||||
cfoMaxer.autoerGui.display.newLine('Entering Lobby')
|
||||
|
||||
def endBattle(self,newSelf):
|
||||
newSelf.cranes[0].sendUpdate('requestControl', [])
|
||||
for goon in base.cr.doFindAll('goon'):
|
||||
goon.sendUpdate('requestGrab', [])
|
||||
goon.sendUpdate('clearSmoothing', [0])
|
||||
goon.sendUpdate('hitBoss', [20.0])
|
||||
Sequence(Wait(1),Func(newSelf.exitBattleFour)).start()
|
||||
|
||||
def revertFunctions(self):
|
||||
DistributedCashbotBoss.DistributedCashbotBoss.enterElevator=self.oldBossEnterElevator
|
||||
DistributedCashbotBoss.DistributedCashbotBoss.enterBattleThree=self.oldEnterBattleThree
|
||||
DistributedCashbotBoss.DistributedCashbotBoss.enterPrepareBattleThree=self.oldEnterPrepareBattleThree
|
||||
DistributedCashbotBoss.DistributedCashbotBoss.enterEpilogue=self.oldEnterEpilogue
|
||||
DistributedBattleFinal.DistributedBattleFinal.enterWaitForInput=self.oldEnterWaitForInput
|
||||
DistributedCashbotBoss.DistributedCashbotBoss.enterIntroduction=self.oldBossEnterIntro
|
||||
DistributedCogHQDoor.DistributedCogHQDoor.avatarExit=self.oldAvatarExit
|
||||
|
||||
class MintAutoer:
|
||||
oldMintEnterWalk=MintInterior.MintInterior.enterWalk
|
||||
oldEnterReward=DistributedMintBattle.DistributedMintBattle.enterReward
|
||||
oldEnterMintReward=DistributedMintBattle.DistributedMintBattle.enterMintReward
|
||||
|
||||
def __init__(self,cfoMaxer):
|
||||
self.floorNumToLastRoomNum=[17,23,21,19,17,23,21,19,17,23,21,19,17,24,21,19,17,24,21,19]
|
||||
self.attackSeq=Sequence(Func(cfoMaxer.restock.restock),Wait(1.0),Func(cfoMaxer.otherFunctions.attack),Wait(1.0))
|
||||
self.gainLaffSeq=Sequence(Func(cfoMaxer.restock.gainLaff),Wait(3.0))
|
||||
MintInterior.MintInterior.enterWalk=lambda newSelf,*args:self.newMintEnterWalk(newSelf,*args)
|
||||
DistributedMintBattle.DistributedMintBattle.enterReward=lambda *args:self.newEnterReward(*args)
|
||||
base.localAvatar.died=lambda *args: self.newSafeZone(*args)
|
||||
DistributedMintBattle.DistributedMintBattle.enterMintReward=lambda *args:self.newEnterMintReward(*args)
|
||||
|
||||
def preTele(self):
|
||||
DistributedTrolley.DistributedTrolley.__init__ = newInit
|
||||
DistributedPartyGate.DistributedPartyGate.__init__ = newInit
|
||||
DistributedDoor.DistributedDoor.__init__ = newInit
|
||||
base.localAvatar.stopLookAroundNow()
|
||||
|
||||
def generateAgain(self):
|
||||
DistributedTrolley.DistributedTrolley.__init__ = oldTrolleyInit
|
||||
DistributedPartyGate.DistributedPartyGate.__init__ = oldPartyInit
|
||||
DistributedDoor.DistributedDoor.__init__ = oldDoorInit
|
||||
base.localAvatar.findSomethingToLookAt = cfoMaxer.restock.oldFindSomethingToLookAt
|
||||
ToonHead.ToonHead._ToonHead__lookAround = cfoMaxer.restock.oldLookAround
|
||||
|
||||
def enterBattle(self):
|
||||
if base.localAvatar.getHp()>0:
|
||||
battles = []
|
||||
cogList = base.cr.doFindAll("render")
|
||||
for x in cogList:
|
||||
if isinstance(x, DistributedMintSuit):
|
||||
if x.activeState == 6:
|
||||
if x.doId not in base.cr.doFind('DistributedMintRoom '+str(self.floorNumToLastRoomNum[base.cr.doFind('DistributedMint.DistributedMint').floorNum])).suitIds and not self.finalDone:
|
||||
battles.append(x)
|
||||
elif self.finalDone and x.doId in base.cr.doFind('DistributedMintRoom '+str(self.floorNumToLastRoomNum[base.cr.doFind('DistributedMint.DistributedMint').floorNum])).suitIds:
|
||||
battles.append(x)
|
||||
|
||||
if battles != []:
|
||||
battle=battles[0]
|
||||
pos, hpr = battle.getPos(), battle.getHpr()
|
||||
base.localAvatar.collisionsOn()
|
||||
base.localAvatar.setPosHpr(pos, hpr)
|
||||
battle.d_requestBattle(pos, hpr)
|
||||
cfoMaxer.restock.wasInBattle=False
|
||||
cfoMaxer.autoerGui.display.newLine('Entering Battle '+str(self.battleNum))
|
||||
return True
|
||||
else:
|
||||
return False
|
||||
else:
|
||||
return True
|
||||
|
||||
def boardElevator(self):
|
||||
if base.localAvatar.getHp()>70:
|
||||
for elevator in base.cr.doFindAll("Elevator"):
|
||||
if "Bullion" in elevator.getDestName():
|
||||
cfoMaxer.autoerGui.display.newLine('Entering the Bullion Mint')
|
||||
base.cr.doFind('Boarding').sendUpdate('requestLeave',[base.localAvatar.doId])
|
||||
base.cr.doFind('Boarding').sendUpdate('requestInvite',[base.localAvatar.doId])
|
||||
base.cr.doFind('Boarding').sendUpdate('requestGoToSecondTime',[elevator.doId])
|
||||
break
|
||||
else:
|
||||
self.attackSeq.loop()
|
||||
cfoMaxer.otherFunctions.isHealing=True
|
||||
cfoMaxer.autoerGui.display.newLine('Healing')
|
||||
cfoMaxer.otherFunctions.enterRandomBattle()
|
||||
|
||||
def warpToRoom(self,room):
|
||||
if base.cr.doFind('DistributedMint.DistributedMint'):
|
||||
base.cr.doFind('DistributedMint.DistributedMint').warpToRoom(room)
|
||||
|
||||
def newMintEnterWalk(self,newSelf,*args):
|
||||
self.oldMintEnterWalk(newSelf,*args)
|
||||
if cfoMaxer.otherFunctions.shouldContinue and len(args)>0:
|
||||
if args[0]:
|
||||
self.attackSeq.loop()
|
||||
self.gainLaffSeq.loop()
|
||||
self.workOutRoomsNeeded()
|
||||
self.enterBattle()
|
||||
|
||||
def workOutRoomsNeeded(self):
|
||||
battles = []
|
||||
cogList = base.cr.doFindAll("render")
|
||||
for x in cogList:
|
||||
if isinstance(x, DistributedMintSuit):
|
||||
if x.activeState == 6:
|
||||
battles.append(x)
|
||||
self.battlesNeeded=0
|
||||
numBattles=(len(battles)/4)-1
|
||||
cogbucksNeeded=cfoMaxer.otherFunctions.getCogbucksLeft()
|
||||
cogbucksNeeded-=68
|
||||
for i in range(numBattles):
|
||||
if cogbucksNeeded>0:
|
||||
self.battlesNeeded+=1
|
||||
cogbucksNeeded-=68
|
||||
else:
|
||||
break
|
||||
|
||||
def newEnterReward(self,*args):
|
||||
self.oldEnterReward(*args)
|
||||
if cfoMaxer.otherFunctions.shouldContinue:
|
||||
cfoMaxer.autoerGui.display.newLine('Finished Battle '+str(self.battleNum))
|
||||
base.cr.doFind('battle').d_rewardDone(base.localAvatar.doId)
|
||||
self.battleNum+=1
|
||||
cfoMaxer.otherFunctions.walk()
|
||||
if self.battleNum>self.battlesNeeded and not self.finalDone:
|
||||
cfoMaxer.autoerGui.display.newLine('Warping to final room')
|
||||
self.warpToRoom(self.floorNumToLastRoomNum[base.cr.doFind('DistributedMint.DistributedMint').floorNum])
|
||||
self.finalDone=True
|
||||
Sequence(Wait(0.5),Func(self.enterBattle)).start()
|
||||
elif self.enterBattle():
|
||||
pass
|
||||
else:
|
||||
cfoMaxer.otherFunctions.walk()
|
||||
cfoMaxer.autoerGui.display.newLine('Error no cogbucks recieved')
|
||||
self.generateAgain()
|
||||
self.attackSeq.finish()
|
||||
self.gainLaffSeq.finish()
|
||||
Sequence(Wait(1),Func(cfoMaxer.otherFunctions.teleBack)).start()
|
||||
|
||||
def newSafeZone(self,*args):
|
||||
Sequence(Wait(1),Func(cfoMaxer.otherFunctions.walk),Func(base.localAvatar.collisionsOff)).start()
|
||||
cfoMaxer.restock.wasInBattle=True
|
||||
cfoMaxer.autoerGui.display.newLine('Died, recovering')
|
||||
|
||||
def newEnterMintReward(self,*args):
|
||||
self.oldEnterMintReward(*args)
|
||||
if cfoMaxer.otherFunctions.shouldContinue:
|
||||
cfoMaxer.otherFunctions.walk()
|
||||
cfoMaxer.autoerGui.display.newLine('Finished Final Battle')
|
||||
self.generateAgain()
|
||||
self.attackSeq.finish()
|
||||
self.gainLaffSeq.finish()
|
||||
Sequence(Wait(1),Func(cfoMaxer.otherFunctions.teleBack)).start()
|
||||
|
||||
def start(self):
|
||||
self.battleNum=1
|
||||
self.finalDone=False
|
||||
base.localAvatar.setWantBattles(True)
|
||||
Sequence(Wait(1),Func(self.boardElevator)).start()
|
||||
|
||||
def revertFunctions(self):
|
||||
MintInterior.MintInterior.enterWalk=self.oldMintEnterWalk
|
||||
DistributedMintBattle.DistributedMintBattle.enterReward=self.oldEnterReward
|
||||
DistributedMintBattle.DistributedMintBattle.enterCountryClubReward=self.oldEnterMintReward
|
||||
base.localAvatar.died=lambda *args: None
|
||||
self.attackSeq.finish()
|
||||
self.gainLaffSeq.finish()
|
||||
self.generateAgain()
|
||||
|
||||
class CFOmaxer:
|
||||
|
||||
def __init__(self):
|
||||
self.restock=restock()
|
||||
self.otherFunctions=OtherFunctions()
|
||||
self.cfoAutoer=CfoAutoer()
|
||||
self.mintAutoer=MintAutoer(self)
|
||||
self.autoerGui=AutoerGui('CFO Maxer',['Run Time',"Number of cfo's","Cfo's/Hour",'Suit','Cogbucks needed'],\
|
||||
['self.hours+":"+self.minutes+":"+self.seconds','str(cfoMaxer.otherFunctions.bossCount)','str(self.workOutNumberAnHour(cfoMaxer.otherFunctions.bossCount))'\
|
||||
,'str(cfoMaxer.otherFunctions.numberToSuit[base.localAvatar.cogTypes[2]])+" Lvl "+str(base.localAvatar.cogLevels[2]+1)','str(cfoMaxer.otherFunctions.getCogbucksLeft())'],\
|
||||
'CFO MXR','cash')
|
||||
|
||||
def revert(self):
|
||||
self.restock.revertFunctions()
|
||||
self.mintAutoer.revertFunctions()
|
||||
self.cfoAutoer.revertFunctions()
|
||||
self.otherFunctions.revertFunctions()
|
||||
self.autoerGui.destroy()
|
||||
DistributedNPCFisherman.DistributedNPCFisherman.handleCollisionSphereEnter=oldHandleEnterCollisionSphereFisherman
|
||||
DistributedNPCPartyPerson.DistributedNPCPartyPerson.handleCollisionSphereEnter=oldHandleEnterCollisionSphereParty
|
||||
DistributedNPCFisherman.DistributedNPCFisherman.announceGenerate=oldFisherAnnounceGenerate
|
||||
DistributedNPCPartyPerson.DistributedNPCPartyPerson.announceGenerate=oldPartyPlannerAnnounceGenerate
|
||||
|
||||
global cfoMaxer
|
||||
cfoMaxer=CFOmaxer()
|
||||
|
|
@ -0,0 +1,748 @@
|
|||
import __main__
|
||||
import random
|
||||
from direct.interval.IntervalGlobal import *
|
||||
from direct.distributed import DistributedObject
|
||||
from toontown.distributed import ToontownClientRepository
|
||||
from toontown.battle import DistributedBattleFinal
|
||||
from toontown.toonbase import ToontownBattleGlobals
|
||||
from toontown.toon import *
|
||||
from toontown.battle import DistributedBattle
|
||||
from toontown.coghq import DistributedMintBattle
|
||||
from toontown.coghq import DistributedMint
|
||||
from toontown.coghq import DistributedCogHQDoor
|
||||
from toontown.coghq import CogDisguiseGlobals
|
||||
from toontown.coghq import MintInterior
|
||||
from toontown.suit.DistributedMintSuit import DistributedMintSuit
|
||||
from toontown.suit import DistributedSuit
|
||||
from toontown.suit import DistributedCashbotBoss
|
||||
from toontown.safezone import DLPlayground
|
||||
from toontown.safezone import DistributedPartyGate
|
||||
from toontown.safezone import DistributedTrolley
|
||||
from toontown.building import DistributedDoor
|
||||
from toontown.building import DistributedBoardingParty
|
||||
|
||||
ToontownBattleGlobals.SkipMovie=1
|
||||
ToontownClientRepository.ToontownClientRepository.forbidCheesyEffects=lambda *x,**kwds: None
|
||||
|
||||
faceOffHook = lambda self, ts, name, callback:self.d_faceOffDone(self)
|
||||
DistributedMintBattle.DistributedMintBattle._DistributedLevelBattle__faceOff = faceOffHook
|
||||
DistributedBattle.DistributedBattle._DistributedBattle__faceOff = faceOffHook
|
||||
|
||||
oldFisherAnnounceGenerate = DistributedNPCFisherman.DistributedNPCFisherman.announceGenerate
|
||||
def newFishermanAnnounceGenerate(self):
|
||||
try:
|
||||
oldFisherAnnounceGenerate(self)
|
||||
except:
|
||||
return None
|
||||
|
||||
oldPartyPlannerAnnounceGenerate = DistributedNPCPartyPerson.DistributedNPCPartyPerson.announceGenerate
|
||||
def newPartyPlannerAnnounceGenerate(self):
|
||||
try:
|
||||
oldPartyPlannerAnnounceGenerate(self)
|
||||
except:
|
||||
return None
|
||||
|
||||
oldFishermanInitToonState = DistributedNPCFisherman.DistributedNPCFisherman.initToonState
|
||||
def newFishermanInitToonState(self):
|
||||
try:
|
||||
oldFishermanInitToonState(self)
|
||||
except:
|
||||
return None
|
||||
|
||||
oldHandleEnterCollisionSphereParty=DistributedNPCPartyPerson.DistributedNPCPartyPerson.handleCollisionSphereEnter
|
||||
DistributedNPCPartyPerson.DistributedNPCPartyPerson.handleCollisionSphereEnter=lambda *args: None
|
||||
oldHandleEnterCollisionSphereFisherman=DistributedNPCFisherman.DistributedNPCFisherman.handleCollisionSphereEnter
|
||||
DistributedNPCFisherman.DistributedNPCFisherman.handleEnterCollisionSphere=lambda *args: None
|
||||
|
||||
class restock:
|
||||
|
||||
def __init__(self):
|
||||
self.firstTrack=2
|
||||
self.secondTrack=0
|
||||
self.thirdTrack=4
|
||||
self.fourthTrack=3
|
||||
self.desiredLevel1=5
|
||||
self.desiredLevel2=4
|
||||
self.desiredLevel3=5
|
||||
self.desiredLevel4=5
|
||||
self.desiredInv='\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
|
||||
self.maxCarryGags = base.localAvatar.getMaxCarry()
|
||||
self.gagshop_zoneId = 4503
|
||||
self.noToons=Sequence(Func(self.removeToons), Wait(1.5))
|
||||
self.noTrolley=False
|
||||
self.unloaded=True
|
||||
self.wasInBattle=False
|
||||
|
||||
DistributedNPCFisherman.DistributedNPCFisherman.announceGenerate = newFishermanAnnounceGenerate
|
||||
DistributedNPCPartyPerson.DistributedNPCPartyPerson.announceGenerate = newPartyPlannerAnnounceGenerate
|
||||
DistributedNPCFisherman.DistributedNPCFisherman.initToonState = newFishermanInitToonState
|
||||
|
||||
self.lookAroundHookSeq = Sequence(Func(self.lookAroundHookFunc), Wait(2.5))
|
||||
self.lookAroundHookSeq.loop()
|
||||
ToonHead.ToonHead._ToonHead__lookAround = lambda *x:None
|
||||
|
||||
def lookAroundHookFunc(self):
|
||||
if hasattr(base, 'localAvatar'):
|
||||
base.localAvatar.findSomethingToLookAt = lambda *x:None
|
||||
self.oldFindSomethingToLookAt = base.localAvatar.findSomethingToLookAt
|
||||
self.lookAroundHookSeq.finish()
|
||||
self.oldLookAround = ToonHead.ToonHead._ToonHead__lookAround
|
||||
|
||||
def collectLaff(self):
|
||||
for treasure in base.cr.doFindAll('Treasure'):
|
||||
treasure.d_requestGrab()
|
||||
|
||||
def removeToons(self):
|
||||
for x in base.cr.doFindAll('Fisherman'):
|
||||
try:
|
||||
if x.zoneId != base.localAvatar.zoneId:
|
||||
x.removeNode()
|
||||
x.nametag.unmanage(base.marginManager)
|
||||
except:
|
||||
pass
|
||||
|
||||
for x in base.cr.doFindAll('Party Planner'):
|
||||
try:
|
||||
if x.zoneId != base.localAvatar.zoneId:
|
||||
x.removeNode()
|
||||
x.nametag.unmanage(base.marginManager)
|
||||
except:
|
||||
pass
|
||||
|
||||
for x in base.cr.doFindAll('render/donald'):
|
||||
try:
|
||||
if x.zoneId != base.localAvatar.zoneId:
|
||||
x.removeNode()
|
||||
x.nametag.unmanage(base.marginManager)
|
||||
except:
|
||||
pass
|
||||
|
||||
for x in base.cr.doFindAll('render/minnie'):
|
||||
try:
|
||||
if x.zoneId != base.localAvatar.zoneId:
|
||||
x.removeNode()
|
||||
x.nametag.unmanage(base.marginManager)
|
||||
except:
|
||||
pass
|
||||
|
||||
for x in base.cr.doFindAll('render/mickey'):
|
||||
try:
|
||||
if x.zoneId != base.localAvatar.zoneId:
|
||||
x.removeNode()
|
||||
x.nametag.unmanage(base.marginManager)
|
||||
except:
|
||||
pass
|
||||
|
||||
for x in base.cr.doFindAll('render/pluto'):
|
||||
try:
|
||||
if x.zoneId != base.localAvatar.zoneId:
|
||||
x.removeNode()
|
||||
x.nametag.unmanage(base.marginManager)
|
||||
except:
|
||||
pass
|
||||
|
||||
for x in base.cr.doFindAll('render/daisy'):
|
||||
try:
|
||||
if x.zoneId != base.localAvatar.zoneId:
|
||||
x.removeNode()
|
||||
x.nametag.unmanage(base.marginManager)
|
||||
except:
|
||||
pass
|
||||
|
||||
for x in base.localAvatar.getNearbyPlayers(100000000000000, False):
|
||||
try:
|
||||
y = base.cr.doId2do.get(x)
|
||||
if y.zoneId != base.localAvatar.zoneId:
|
||||
y.removeNode()
|
||||
y.nametag.unmanage(base.marginManager)
|
||||
except:
|
||||
pass
|
||||
|
||||
for x in base.cr.doFindAll('Butterfly'):
|
||||
x.butterflyNode.remove()
|
||||
|
||||
for x in base.cr.doFindAll('Flower'):
|
||||
x.bigFlower.removeNode()
|
||||
|
||||
for x in base.cr.doFindAll('Treasure'):
|
||||
x.setPosition(0, 0, 8**8)
|
||||
|
||||
for x in base.cr.doFindAll('render/DistributedFishingTarget'):
|
||||
x.bubbles.removeNode()
|
||||
x.removeNode()
|
||||
|
||||
def gainLaff(self):
|
||||
if base.localAvatar.getHp()!=base.localAvatar.getMaxHp():
|
||||
if self.unloaded:
|
||||
cfoMaxer.mintAutoer.preTele()
|
||||
self.interest1=base.cr.addInterest(base.localAvatar.defaultShard, 9000, description='5', event=None)
|
||||
self.interest2=base.cr.addInterest(base.localAvatar.defaultShard, 3000, description='5', event=None)
|
||||
self.unloaded=False
|
||||
self.collectLaff()
|
||||
if self.wasInBattle:
|
||||
cfoMaxer.mintAutoer.enterBattle()
|
||||
|
||||
def loadGagshop(self):
|
||||
if not base.cr.doFind('Clerk'):
|
||||
self.contextId = base.cr.addInterest(base.localAvatar.defaultShard, self.gagshop_zoneId, description='4', event=None)
|
||||
try:
|
||||
if not int(render.find('**/*gagShop_interior_english*').getZ()) == 8**8:
|
||||
render.find('**/*gagShop_interior_english*').setZ(8**8)
|
||||
for k in base.cr.doFindAll('Clerk'):
|
||||
k.nametag.unmanage(base.marginManager)
|
||||
except:
|
||||
pass
|
||||
|
||||
def buyGags(self):
|
||||
desiredInv=self.desiredInv
|
||||
try:
|
||||
maxCarryGags = base.localAvatar.getMaxCarry()
|
||||
if base.cr.doFind('Clerk'):
|
||||
num_gags = 0
|
||||
for inventory_number in base.localAvatar.inventory.makeFromNetString(desiredInv):
|
||||
for k in inventory_number[:-1]:
|
||||
num_gags += k
|
||||
change = base.localAvatar.getMoney() - num_gags
|
||||
oldString = base.localAvatar.inventory.makeNetString()
|
||||
newString = desiredInv[:6] + oldString[6] + desiredInv[7:13] + oldString[13] + desiredInv[14:20] + oldString[20] + desiredInv[21:27] + oldString[27] + desiredInv[28:34] + oldString[34] + desiredInv[35:41] + oldString[41] + desiredInv[42:48] + oldString[48]
|
||||
for clerk in base.cr.doFindAll('Clerk'):
|
||||
clerk.setMovie=lambda *args,**kwds: None
|
||||
clerk.freeAvatar=lambda *args: None
|
||||
clerk.sendUpdate('avatarEnter')
|
||||
clerk.sendUpdate('setInventory', [newString, change, 1])
|
||||
|
||||
money = base.localAvatar.getMoney()
|
||||
maxMoney = base.localAvatar.getMaxMoney()
|
||||
base.cr.bankManager.d_transferMoney(money - maxMoney)
|
||||
except:
|
||||
pass
|
||||
|
||||
def unloadGagshop(self):
|
||||
if hasattr(self, 'contextId'):
|
||||
try:
|
||||
base.cr.removeInterest(self.contextId)
|
||||
except:
|
||||
pass
|
||||
|
||||
def restock(self):
|
||||
try:
|
||||
if base.localAvatar.inventory.inventory[self.firstTrack][self.desiredLevel1]<2 or base.localAvatar.inventory.inventory[self.secondTrack][self.desiredLevel2]<2 or base.localAvatar.inventory.inventory[self.thirdTrack][self.desiredLevel3]<2:
|
||||
Sequence(Func(self.loadGagshop),Wait(1),Func(self.buyGags),Wait(0.5),Func(self.unloadGagshop)).start()
|
||||
|
||||
except:
|
||||
pass
|
||||
|
||||
def revertFunctions(self):
|
||||
self.noToons.finish()
|
||||
try:
|
||||
base.cr.removeInterest(self.interest1)
|
||||
base.cr.removeInterest(self.interest2)
|
||||
self.unloaded=True
|
||||
except:
|
||||
pass
|
||||
|
||||
class OtherFunctions:
|
||||
oldDreamlandInit=DLPlayground.DLPlayground.__init__
|
||||
oldHqDoorInit=DistributedCogHQDoor.DistributedCogHQDoor.__init__
|
||||
oldEnterReward=DistributedBattle.DistributedBattle.enterReward
|
||||
oldDenyBattle=DistributedSuit.DistributedSuit.denyBattle
|
||||
oldSendUpdate=DistributedObject.DistributedObject.sendUpdate
|
||||
oldEnterHealth=HealthForceAcknowledge.HealthForceAcknowledge.enter
|
||||
oldSetAnim=LocalToon.LocalToon.setAnimState
|
||||
oldPostInvite=DistributedBoardingParty.DistributedBoardingParty.postInvite
|
||||
|
||||
def __init__(self):
|
||||
self.shouldContinue=False
|
||||
self.bossCount=0
|
||||
self.onlyMint=False
|
||||
self.onlyLast=False
|
||||
self.isHealing=False
|
||||
self.attackCogId=0
|
||||
self.canSetParentAgain=True
|
||||
self.numberToSuit={0:'Short Change',1:'Penny Pusher',2:'Tightwad',3:'Bean Counter',
|
||||
4:'Number Cruncher',5:'Money Bags',6:'Loan Shark',7:'Robber Baron'}
|
||||
DLPlayground.DLPlayground.__init__=lambda *args:self.newDreamlandInit(*args)
|
||||
DistributedCogHQDoor.DistributedCogHQDoor.__init__=lambda *args: self.newHqDoorInit(*args)
|
||||
DistributedBattle.DistributedBattle.enterReward=lambda newSelf,*args: self.newEnterReward(newSelf,*args)
|
||||
DistributedSuit.DistributedSuit.denyBattle=lambda *args: self.newDenyBattle(*args)
|
||||
HealthForceAcknowledge.HealthForceAcknowledge.enter=lambda newSelf,hplevel: self.newEnterHealth(newSelf,hplevel)
|
||||
LocalToon.LocalToon.setAnimState=lambda *args,**kwds:self.newSetAnimState(*args,**kwds)
|
||||
DistributedBoardingParty.DistributedBoardingParty.postInvite=lambda newSelf,leaderId,inviterId: self.newPostInvite(newSelf,leaderId,inviterId)
|
||||
|
||||
def attack(self):
|
||||
try:
|
||||
for battle in base.cr.doFindAll('battle'):
|
||||
if cfoMaxer.mintAutoer.finalDone:
|
||||
if len(battle.suits)>1:
|
||||
for suit in battle.suits:
|
||||
if suit.getActualLevel()!=12:
|
||||
attackSuit=suit
|
||||
else:
|
||||
attackSuit=battle.suits[0]
|
||||
else:
|
||||
attackSuit=battle.suits[0]
|
||||
|
||||
if base.localAvatar.inventory.inventory[cfoMaxer.restock.firstTrack][cfoMaxer.restock.desiredLevel1]>0:
|
||||
battle.sendUpdate('requestAttack', [cfoMaxer.restock.firstTrack, cfoMaxer.restock.desiredLevel1, attackSuit.doId])
|
||||
else:
|
||||
break
|
||||
|
||||
if base.localAvatar.getHp()<(base.localAvatar.getMaxHp()*0.9) or self.isHealing:
|
||||
|
||||
if base.localAvatar.inventory.inventory[cfoMaxer.restock.secondTrack][cfoMaxer.restock.desiredLevel2]>0:
|
||||
battle.sendUpdate('requestAttack', [cfoMaxer.restock.secondTrack, cfoMaxer.restock.desiredLevel2, base.localAvatar.doId])
|
||||
else:
|
||||
break
|
||||
|
||||
if base.localAvatar.inventory.inventory[cfoMaxer.restock.thirdTrack][cfoMaxer.restock.desiredLevel3]>0:
|
||||
battle.sendUpdate('requestAttack', [cfoMaxer.restock.thirdTrack, cfoMaxer.restock.desiredLevel3, attackSuit.doId])
|
||||
else:
|
||||
break
|
||||
|
||||
else:
|
||||
if base.localAvatar.inventory.inventory[cfoMaxer.restock.thirdTrack][cfoMaxer.restock.desiredLevel3]>0:
|
||||
battle.sendUpdate('requestAttack', [cfoMaxer.restock.thirdTrack, cfoMaxer.restock.desiredLevel3, attackSuit.doId])
|
||||
else:
|
||||
break
|
||||
except:
|
||||
pass
|
||||
|
||||
def sendUpdateHook(self, newself, fieldName, args=[], sendToId=None):
|
||||
if fieldName=="requestAttack":
|
||||
self.oldSendUpdate(newself,"requestAttack", args, sendToId)
|
||||
self.oldSendUpdate(newself,"movieDone",[])
|
||||
newself.d_rewardDone(base.localAvatar.doId)
|
||||
else:
|
||||
self.oldSendUpdate(newself,fieldName, args, sendToId)
|
||||
|
||||
def newDreamlandInit(self,*args):
|
||||
self.oldDreamlandInit(*args)
|
||||
if self.shouldContinue:
|
||||
cfoMaxer.mintAutoer.gainLaffSeq.finish()
|
||||
cfoMaxer.mintAutoer.attackSeq.finish()
|
||||
cfoMaxer.restock.wasInBattle=False
|
||||
self.checkCogbucks()
|
||||
|
||||
def newSetAnimState(self,*args,**kwds):
|
||||
self.oldSetAnim(*args,**kwds)
|
||||
if self.canSetParentAgain and self.shouldContinue:
|
||||
base.localAvatar.d_setParent(1)
|
||||
self.canSetParentAgain=False
|
||||
Sequence(Wait(2),Func(self.doUnsetCanSetParentAgain)).start()
|
||||
|
||||
def newPostInvite(self,newSelf,leaderId,inviterId):
|
||||
if leaderId==base.localAvatar.doId:
|
||||
newSelf.sendUpdate('requestAcceptInvite',[inviterId,leaderId])
|
||||
else:
|
||||
self.oldPostInvite(newSelf,leaderId,inviterId)
|
||||
|
||||
def doUnsetCanSetParentAgain(self):
|
||||
self.canSetParentAgain=True
|
||||
|
||||
def newEnterHealth(self,newSelf,hplevel):
|
||||
try:
|
||||
self.oldEnterHealth(newSelf,hplevel)
|
||||
newSelf.handleOk(base.localAvatar.getHp())
|
||||
newSelf.exit()
|
||||
if self.shouldContinue:
|
||||
Sequence(Wait(3),Func(self.checkCogbucks)).start()
|
||||
except:
|
||||
pass
|
||||
|
||||
def newHqDoorInit(self,*args):
|
||||
self.oldHqDoorInit(*args)
|
||||
if self.shouldContinue and base.localAvatar.getZoneId()==12000:
|
||||
base.localAvatar.setWantBattles(False)
|
||||
Sequence(Wait(2),Func(self.checkCogbucks)).start()
|
||||
|
||||
def newEnterReward(self,newSelf,*args):
|
||||
self.oldEnterReward(newSelf,*args)
|
||||
if self.shouldContinue and self.isHealing:
|
||||
if base.localAvatar.getHp()>70:
|
||||
cfoMaxer.mintAutoer.attackSeq.finish()
|
||||
self.isHealing=False
|
||||
self.checkCogbucks()
|
||||
else:
|
||||
Sequence(Wait(1),Func(self.enterRandomBattle)).start()
|
||||
|
||||
def newDenyBattle(self,*args):
|
||||
self.oldDenyBattle(*args)
|
||||
if self.shouldContinue and self.isHealing and args[0].doId==self.attackCogId:
|
||||
self.enterRandomBattle()
|
||||
|
||||
def checkCogbucks(self):
|
||||
if taskAutoer.isQuestComplete():
|
||||
self.stop()
|
||||
taskAutoer.checkWhatToDo()
|
||||
if self.onlyMint:
|
||||
if self.onlyLast:
|
||||
base.localAvatar.cogMerits[2]+=self.getCogbucksLeft()-1
|
||||
else:
|
||||
base.localAvatar.cogMerits[2]=-4000
|
||||
if self.shouldEnd:
|
||||
self.shouldContinue=False
|
||||
if self.haveJb():
|
||||
if self.shouldContinue:
|
||||
if self.getCogbucksLeft()==0 and not self.onlyMint:
|
||||
if base.cr.doFind('DistributedCogHQDoor') and base.localAvatar.getZoneId()>=12000 and base.localAvatar.getZoneId()<12100:
|
||||
cfoMaxer.cfoAutoer.start()
|
||||
else:
|
||||
cfoMaxer.restock.restock()
|
||||
cfoMaxer.restock.collectLaff()
|
||||
self.walk()
|
||||
Sequence(Wait(2),Func(self.teleBack)).start()
|
||||
else:
|
||||
if base.cr.doFind('DistributedCogHQDoor') and base.localAvatar.getZoneId()>=12000 and base.localAvatar.getZoneId()<12100:
|
||||
cfoMaxer.mintAutoer.start()
|
||||
else:
|
||||
cfoMaxer.restock.restock()
|
||||
cfoMaxer.restock.collectLaff()
|
||||
self.walk()
|
||||
Sequence(Wait(2),Func(self.teleBack)).start()
|
||||
else:
|
||||
cfoMaxer.restock.noToons.finish()
|
||||
try:
|
||||
base.cr.removeInterest(cfoMaxer.restock.interest1)
|
||||
base.cr.removeInterest(cfoMaxer.restock.interest2)
|
||||
cfoMaxer.restock.unloaded=True
|
||||
except:
|
||||
pass
|
||||
base.localAvatar.setSystemMessage(0,"Thanks for using freshollie's cfo maxer")
|
||||
else:
|
||||
base.localAvatar.setSystemMessage(0,'You have run out of jelly beans, please use the fishing code to gain some')
|
||||
|
||||
def getCogbucksLeft(self):
|
||||
return CogDisguiseGlobals.getTotalMerits(base.localAvatar,2)-base.localAvatar.cogMerits[2]
|
||||
|
||||
def walk(self):
|
||||
try:
|
||||
base.cr.playGame.getPlace().fsm.forceTransition('walk')
|
||||
except:
|
||||
pass
|
||||
|
||||
def teleBack(self,zone=12000):
|
||||
try:
|
||||
self.walk()
|
||||
base.cr.playGame.getPlace().handleBookCloseTeleport(zone, zone)
|
||||
except:
|
||||
pass
|
||||
|
||||
def onlyDoMint(self):
|
||||
self.onlyMint=True
|
||||
base.localAvatar.setSystemMessage(0,'CFO maxer set to only do the Mint')
|
||||
|
||||
def doBoth(self):
|
||||
self.onlyMint=False
|
||||
base.localAvatar.setSystemMessage(0,'CFO maxer set to do both the Mint and the CFO')
|
||||
|
||||
def haveJb(self):
|
||||
if base.localAvatar.cogLevels[0]==49:
|
||||
return True
|
||||
elif base.localAvatar.getTotalMoney()<100:
|
||||
return False
|
||||
else:
|
||||
return True
|
||||
|
||||
def enterRandomBattle(self):
|
||||
battles = []
|
||||
cogList = base.cr.doFindAll("render")
|
||||
for x in cogList:
|
||||
if isinstance(x, DistributedSuit.DistributedSuit):
|
||||
if x.activeState == 6:
|
||||
battles.append(x)
|
||||
if battles != []:
|
||||
self.walk()
|
||||
battle = random.choice(battles)
|
||||
pos, hpr = battle.getPos(), battle.getHpr()
|
||||
base.localAvatar.collisionsOn()
|
||||
base.localAvatar.setPosHpr(pos, hpr)
|
||||
battle.d_requestBattle(pos, hpr)
|
||||
self.attackCogId=battle.doId
|
||||
else:
|
||||
pass
|
||||
|
||||
def stop(self):
|
||||
self.shouldEnd=True
|
||||
base.localAvatar.died=lambda *args: None
|
||||
|
||||
def start(self):
|
||||
DistributedObject.DistributedObject.sendUpdate=lambda newself, fieldName, args=[], sendToId=None: self.sendUpdateHook(newself, fieldName, args, sendToId)
|
||||
base.localAvatar.died=lambda *args: cfoMaxer.mintAutoer.newSafeZone(*args)
|
||||
self.bossCount=0
|
||||
self.shouldContinue=True
|
||||
self.shouldEnd=False
|
||||
self.checkCogbucks()
|
||||
cfoMaxer.restock.noToons.loop()
|
||||
|
||||
def revertFunctions(self):
|
||||
LocalToon.LocalToon.setAnimState=self.oldSetAnim
|
||||
DLPlayground.DLPlayground.__init__=self.oldDreamlandInit
|
||||
DistributedCogHQDoor.DistributedCogHQDoor.__init__=self.oldHqDoorInit
|
||||
DistributedBattle.DistributedBattle.enterReward=self.oldEnterReward
|
||||
DistributedSuit.denyBattle=self.oldDenyBattle
|
||||
DistributedObject.DistributedObject.sendUpdate=self.oldSendUpdate
|
||||
HealthForceAcknowledge.HealthForceAcknowledge.enter=self.oldEnterHealth
|
||||
DistributedBoardingParty.DistributedBoardingParty.postInvite=self.oldPostInvite
|
||||
|
||||
class CfoAutoer:
|
||||
oldBossEnterElevator=DistributedCashbotBoss.DistributedCashbotBoss.enterElevator
|
||||
oldEnterBattleThree=DistributedCashbotBoss.DistributedCashbotBoss.enterBattleThree
|
||||
oldEnterPrepareBattleThree=DistributedCashbotBoss.DistributedCashbotBoss.enterPrepareBattleThree
|
||||
oldEnterEpilogue=DistributedCashbotBoss.DistributedCashbotBoss.enterEpilogue
|
||||
oldEnterWaitForInput=DistributedBattleFinal.DistributedBattleFinal.enterWaitForInput
|
||||
oldBossEnterIntro=DistributedCashbotBoss.DistributedCashbotBoss.enterIntroduction
|
||||
oldAvatarExit=DistributedCogHQDoor.DistributedCogHQDoor.avatarExit
|
||||
|
||||
def __init__(self):
|
||||
DistributedCogHQDoor.DistributedCogHQDoor.avatarExit=lambda newSelf,id: self.newAvatarExit(newSelf,id)
|
||||
DistributedCashbotBoss.DistributedCashbotBoss.enterElevator=lambda newSelf: self.newBossEnterElevator(newSelf)
|
||||
DistributedCashbotBoss.DistributedCashbotBoss.enterIntroduction=lambda newSelf,*args: self.newBossEnterIntro(newSelf,*args)
|
||||
DistributedCashbotBoss.DistributedCashbotBoss.enterBattleThree=lambda newSelf: self.newEnterBattleThree(newSelf)
|
||||
DistributedBattleFinal.DistributedBattleFinal.enterWaitForInput=lambda *args: self.newEnterWaitForInput(*args)
|
||||
DistributedCashbotBoss.DistributedCashbotBoss.enterPrepareBattleThree=lambda newSelf: self.newEnterPrepareBattleThree(newSelf)
|
||||
DistributedCashbotBoss.DistributedCashbotBoss.enterEpilogue=lambda newSelf: self.newEnterEpilogue(newSelf)
|
||||
DistributedCashbotBoss.DistributedCashbotBoss.newState=DistributedCashbotBoss.DistributedCashbotBoss.setState
|
||||
|
||||
def newAvatarExit(self,newSelf,id):
|
||||
self.oldAvatarExit(newSelf,id)
|
||||
if base.cr.doFind('Elevator') and id==base.localAvatar.doId and cfoMaxer.otherFunctions.shouldContinue:
|
||||
cfoMaxer.otherFunctions.walk()
|
||||
base.cr.doFind('Boarding').sendUpdate('requestLeave',[base.localAvatar.doId])
|
||||
base.cr.doFind('Boarding').sendUpdate('requestInvite',[base.localAvatar.doId])
|
||||
base.cr.doFind('Boarding').sendUpdate('requestGoToSecondTime',[base.cr.doFind('Elevator').doId])
|
||||
|
||||
def newBossEnterIntro(self,newSelf,*args):
|
||||
self.oldBossEnterIntro(newSelf,*args)
|
||||
if cfoMaxer.otherFunctions.shouldContinue:
|
||||
newSelf.exitIntroduction()
|
||||
|
||||
def newEnterEpilogue(self,newSelf):
|
||||
self.oldEnterEpilogue(newSelf)
|
||||
if cfoMaxer.otherFunctions.shouldContinue:
|
||||
for i in range(5):
|
||||
newSelf._DistributedCashbotBoss__epilogueChatNext(i,1)
|
||||
cfoMaxer.otherFunctions.teleBack()
|
||||
cfoMaxer.otherFunctions.bossCount+=1
|
||||
|
||||
def newEnterPrepareBattleThree(self,newSelf):
|
||||
self.oldEnterPrepareBattleThree(newSelf)
|
||||
newSelf.exitPrepareBattleThree()
|
||||
|
||||
def destroyBattle(self):
|
||||
base.cr.doFind('SafeZone').sendUpdate('enterSafeZone')
|
||||
|
||||
def exploit(self):
|
||||
Sequence(Func(self.destroyBattle), Wait(.5), Func(cfoMaxer.otherFunctions.walk)).start()
|
||||
|
||||
def newEnterWaitForInput(self,*args):
|
||||
self.oldEnterWaitForInput(*args)
|
||||
if cfoMaxer.otherFunctions.shouldContinue:
|
||||
self.exploit()
|
||||
cfoMaxer.autoerGui.display.newLine('Skipping Battle')
|
||||
|
||||
def newBossEnterElevator(self,newSelf):
|
||||
self.oldBossEnterElevator(newSelf)
|
||||
if cfoMaxer.otherFunctions.shouldContinue:
|
||||
cfoMaxer.autoerGui.display.newLine('Skipping Elevator')
|
||||
newSelf._DistributedBossCog__doneElevator()
|
||||
|
||||
def newEnterBattleThree(self,newSelf):
|
||||
self.oldEnterBattleThree(newSelf)
|
||||
self.endBattle(newSelf)
|
||||
|
||||
def start(self):
|
||||
base.localAvatar.collisionsOff()
|
||||
base.cr.doFind('DistributedCogHQDoor').sendUpdate('requestEnter')
|
||||
base.localAvatar.setWantBattles(True)
|
||||
cfoMaxer.autoerGui.display.newLine('Starting the CFO')
|
||||
cfoMaxer.autoerGui.display.newLine('Entering Lobby')
|
||||
|
||||
def endBattle(self,newSelf):
|
||||
newSelf.cranes[0].sendUpdate('requestControl', [])
|
||||
for goon in base.cr.doFindAll('goon'):
|
||||
goon.sendUpdate('requestGrab', [])
|
||||
goon.sendUpdate('clearSmoothing', [0])
|
||||
goon.sendUpdate('hitBoss', [20.0])
|
||||
Sequence(Wait(1),Func(newSelf.exitBattleFour)).start()
|
||||
|
||||
def revertFunctions(self):
|
||||
DistributedCashbotBoss.DistributedCashbotBoss.enterElevator=self.oldBossEnterElevator
|
||||
DistributedCashbotBoss.DistributedCashbotBoss.enterBattleThree=self.oldEnterBattleThree
|
||||
DistributedCashbotBoss.DistributedCashbotBoss.enterPrepareBattleThree=self.oldEnterPrepareBattleThree
|
||||
DistributedCashbotBoss.DistributedCashbotBoss.enterEpilogue=self.oldEnterEpilogue
|
||||
DistributedBattleFinal.DistributedBattleFinal.enterWaitForInput=self.oldEnterWaitForInput
|
||||
DistributedCashbotBoss.DistributedCashbotBoss.enterIntroduction=self.oldBossEnterIntro
|
||||
DistributedCogHQDoor.DistributedCogHQDoor.avatarExit=self.oldAvatarExit
|
||||
|
||||
class MintAutoer:
|
||||
oldMintEnterWalk=MintInterior.MintInterior.enterWalk
|
||||
oldEnterReward=DistributedMintBattle.DistributedMintBattle.enterReward
|
||||
oldEnterMintReward=DistributedMintBattle.DistributedMintBattle.enterMintReward
|
||||
|
||||
def __init__(self,cfoMaxer):
|
||||
self.attackSeq=Sequence(Func(cfoMaxer.restock.restock),Wait(1.0),Func(cfoMaxer.otherFunctions.attack),Wait(1.0))
|
||||
self.gainLaffSeq=Sequence(Func(cfoMaxer.restock.gainLaff),Wait(3.0))
|
||||
MintInterior.MintInterior.enterWalk=lambda newSelf,*args:self.newMintEnterWalk(newSelf,*args)
|
||||
DistributedMintBattle.DistributedMintBattle.enterReward=lambda *args:self.newEnterReward(*args)
|
||||
DistributedMintBattle.DistributedMintBattle.enterMintReward=lambda *args:self.newEnterMintReward(*args)
|
||||
|
||||
def setType(self,zoneId):
|
||||
if zoneId==12500:
|
||||
self.floorNumToLastRoomNum=[17,22,19,24,21,18,23,20,25,22,19,24,21,17,23,20,25,22,18,24]
|
||||
self.elevatorName='Coin'
|
||||
self.laffNeeded=0
|
||||
elif zoneId==12600:
|
||||
self.floorNumToLastRoomNum=[17,18,20,22,23,25,18,19,21,23,24,17,19,20,22,24,25,18,20,21]
|
||||
self.elevatorName='Dollar'
|
||||
self.laffNeeded=66
|
||||
else:
|
||||
self.floorNumToLastRoomNum=[17,23,21,19,17,23,21,19,17,23,21,19,17,24,21,19,17,24,21,19]
|
||||
self.elevatorName='Bullion'
|
||||
self.laffNeeded=71
|
||||
|
||||
def preTele(self):
|
||||
exec(hooks, __main__.__dict__)
|
||||
|
||||
def generateAgain(self):
|
||||
DistributedDoor.DistributedDoor.announceGenerate=_announceGenerate1
|
||||
DistributedPartyGate.DistributedPartyGate.announceGenerate=_announceGenerate2
|
||||
DistributedTrolley.DistributedTrolley.__init__=old__init__
|
||||
DistributedPartyGate.DistributedPartyGate.__init__=old__init__2
|
||||
DistributedDoor.DistributedDoor.__init__=old__init__3
|
||||
|
||||
def enterBattle(self):
|
||||
if base.localAvatar.getHp()>0:
|
||||
battles = []
|
||||
cogList = base.cr.doFindAll("render")
|
||||
for x in cogList:
|
||||
if isinstance(x, DistributedMintSuit):
|
||||
if x.activeState == 6:
|
||||
if x.doId not in base.cr.doFind('DistributedMintRoom '+str(self.floorNumToLastRoomNum[base.cr.doFind('DistributedMint.DistributedMint').floorNum])).suitIds and not self.finalDone:
|
||||
battles.append(x)
|
||||
elif self.finalDone and x.doId in base.cr.doFind('DistributedMintRoom '+str(self.floorNumToLastRoomNum[base.cr.doFind('DistributedMint.DistributedMint').floorNum])).suitIds:
|
||||
battles.append(x)
|
||||
|
||||
if battles != []:
|
||||
battle=battles[0]
|
||||
pos, hpr = battle.getPos(), battle.getHpr()
|
||||
base.localAvatar.collisionsOn()
|
||||
base.localAvatar.setPosHpr(pos, hpr)
|
||||
battle.d_requestBattle(pos, hpr)
|
||||
cfoMaxer.restock.wasInBattle=False
|
||||
return True
|
||||
else:
|
||||
return False
|
||||
else:
|
||||
return True
|
||||
|
||||
def boardElevator(self):
|
||||
if base.localAvatar.getHp()>self.laffNeeded:
|
||||
for elevator in base.cr.doFindAll("Elevator"):
|
||||
if self.elevatorName in elevator.getDestName():
|
||||
base.cr.doFind('Boarding').sendUpdate('requestLeave',[base.localAvatar.doId])
|
||||
base.cr.doFind('Boarding').sendUpdate('requestInvite',[base.localAvatar.doId])
|
||||
base.cr.doFind('Boarding').sendUpdate('requestGoToSecondTime',[elevator.doId])
|
||||
break
|
||||
else:
|
||||
self.attackSeq.loop()
|
||||
cfoMaxer.otherFunctions.isHealing=True
|
||||
cfoMaxer.otherFunctions.enterRandomBattle()
|
||||
|
||||
def warpToRoom(self,room):
|
||||
if base.cr.doFind('DistributedMint.DistributedMint'):
|
||||
base.cr.doFind('DistributedMint.DistributedMint').warpToRoom(room)
|
||||
|
||||
def newMintEnterWalk(self,newSelf,*args):
|
||||
self.oldMintEnterWalk(newSelf,*args)
|
||||
if cfoMaxer.otherFunctions.shouldContinue and len(args)>0:
|
||||
if args[0]:
|
||||
self.attackSeq.loop()
|
||||
self.gainLaffSeq.loop()
|
||||
self.workOutRoomsNeeded()
|
||||
self.enterBattle()
|
||||
|
||||
def workOutRoomsNeeded(self):
|
||||
battles = []
|
||||
cogList = base.cr.doFindAll("render")
|
||||
for x in cogList:
|
||||
if isinstance(x, DistributedMintSuit):
|
||||
if x.activeState == 6:
|
||||
battles.append(x)
|
||||
self.battlesNeeded=0
|
||||
numBattles=(len(battles)/4)-1
|
||||
cogbucksNeeded=cfoMaxer.otherFunctions.getCogbucksLeft()
|
||||
cogbucksNeeded-=68
|
||||
for i in range(numBattles):
|
||||
if cogbucksNeeded>0:
|
||||
self.battlesNeeded+=1
|
||||
cogbucksNeeded-=68
|
||||
else:
|
||||
break
|
||||
if not self.battlesNeeded:
|
||||
self.finalDone=True
|
||||
self.warpToRoom(self.floorNumToLastRoomNum[base.cr.doFind('DistributedMint.DistributedMint').floorNum])
|
||||
|
||||
def newEnterReward(self,*args):
|
||||
self.oldEnterReward(*args)
|
||||
if cfoMaxer.otherFunctions.shouldContinue:
|
||||
base.cr.doFind('battle').d_rewardDone(base.localAvatar.doId)
|
||||
self.battleNum+=1
|
||||
cfoMaxer.otherFunctions.walk()
|
||||
if self.battleNum>self.battlesNeeded and not self.finalDone:
|
||||
self.warpToRoom(self.floorNumToLastRoomNum[base.cr.doFind('DistributedMint.DistributedMint').floorNum])
|
||||
self.finalDone=True
|
||||
Sequence(Wait(0.5),Func(self.enterBattle)).start()
|
||||
elif self.enterBattle():
|
||||
pass
|
||||
else:
|
||||
cfoMaxer.otherFunctions.walk()
|
||||
self.generateAgain()
|
||||
self.attackSeq.finish()
|
||||
self.gainLaffSeq.finish()
|
||||
Sequence(Wait(1),Func(cfoMaxer.otherFunctions.teleBack)).start()
|
||||
|
||||
def newSafeZone(self,*args):
|
||||
Sequence(Wait(1),Func(cfoMaxer.otherFunctions.walk),Func(base.localAvatar.collisionsOff)).start()
|
||||
cfoMaxer.restock.wasInBattle=True
|
||||
|
||||
def newEnterMintReward(self,*args):
|
||||
self.oldEnterMintReward(*args)
|
||||
if cfoMaxer.otherFunctions.shouldContinue:
|
||||
cfoMaxer.otherFunctions.walk()
|
||||
self.generateAgain()
|
||||
self.attackSeq.finish()
|
||||
self.gainLaffSeq.finish()
|
||||
Sequence(Wait(1),Func(cfoMaxer.otherFunctions.teleBack)).start()
|
||||
|
||||
def start(self):
|
||||
self.battleNum=1
|
||||
self.finalDone=False
|
||||
Sequence(Wait(1),Func(self.boardElevator)).start()
|
||||
|
||||
def revertFunctions(self):
|
||||
MintInterior.MintInterior.enterWalk=self.oldMintEnterWalk
|
||||
DistributedMintBattle.DistributedMintBattle.enterReward=self.oldEnterReward
|
||||
DistributedMintBattle.DistributedMintBattle.enterCountryClubReward=self.oldEnterMintReward
|
||||
base.localAvatar.died=lambda *args: None
|
||||
self.attackSeq.finish()
|
||||
self.gainLaffSeq.finish()
|
||||
self.generateAgain()
|
||||
|
||||
class CFOmaxer:
|
||||
|
||||
def __init__(self):
|
||||
self.restock=restock()
|
||||
self.otherFunctions=OtherFunctions()
|
||||
self.cfoAutoer=CfoAutoer()
|
||||
self.mintAutoer=MintAutoer(self)
|
||||
|
||||
def revert(self):
|
||||
self.restock.revertFunctions()
|
||||
self.mintAutoer.revertFunctions()
|
||||
self.cfoAutoer.revertFunctions()
|
||||
self.otherFunctions.revertFunctions()
|
||||
self.autoerGui.destroy()
|
||||
DistributedNPCFisherman.DistributedNPCFisherman.handleCollisionSphereEnter=oldHandleEnterCollisionSphereFisherman
|
||||
DistributedNPCPartyPerson.DistributedNPCPartyPerson.handleCollisionSphereEnter=oldHandleEnterCollisionSphereParty
|
||||
DistributedNPCFisherman.DistributedNPCFisherman.announceGenerate=oldFisherAnnounceGenerate
|
||||
DistributedNPCPartyPerson.DistributedNPCPartyPerson.announceGenerate=oldPartyPlannerAnnounceGenerate
|
||||
|
|
@ -0,0 +1,786 @@
|
|||
import random
|
||||
from direct.interval.IntervalGlobal import *
|
||||
from direct.distributed import DistributedObject
|
||||
from toontown.distributed import ToontownClientRepository
|
||||
from toontown.battle import DistributedBattleFinal
|
||||
from toontown.toonbase import ToontownBattleGlobals
|
||||
from toontown.toon import *
|
||||
from toontown.battle import DistributedBattle
|
||||
from toontown.coghq import DistributedCogHQDoor
|
||||
from toontown.coghq import CogDisguiseGlobals
|
||||
from toontown.coghq import DistributedStage
|
||||
from toontown.coghq import DistributedStageBattle
|
||||
from toontown.coghq import DistributedLawOfficeElevatorExt
|
||||
from toontown.coghq import LawbotHQExterior
|
||||
from toontown.suit.DistributedMintSuit import DistributedMintSuit
|
||||
from toontown.suit.DistributedSuit import DistributedSuit
|
||||
from toontown.suit import DistributedLawbotBoss
|
||||
from toontown.safezone import BRPlayground
|
||||
from toontown.safezone import DistributedPartyGate
|
||||
from toontown.safezone import DistributedTrolley
|
||||
from toontown.building import DistributedDoor
|
||||
from toontown.building import DistributedBoardingParty
|
||||
|
||||
ToontownBattleGlobals.SkipMovie=1
|
||||
ToontownClientRepository.ToontownClientRepository.dumpAllSubShardObjects=lambda self: None
|
||||
ToontownClientRepository.ToontownClientRepository.forbidCheesyEffects=lambda *x,**kwds: None
|
||||
|
||||
faceOffHook = lambda self, ts, name, callback:self.d_faceOffDone(self)
|
||||
DistributedStageBattle.DistributedStageBattle._DistributedLevelBattle__faceOff = faceOffHook
|
||||
DistributedBattle.DistributedBattle._DistributedBattle__faceOff = faceOffHook
|
||||
|
||||
oldTrolleyInit = DistributedTrolley.DistributedTrolley.__init__
|
||||
oldPartyInit = DistributedPartyGate.DistributedPartyGate.__init__
|
||||
oldDoorInit = DistributedDoor.DistributedDoor.__init__
|
||||
|
||||
oldHandleEnterCollisionSphereParty=DistributedNPCPartyPerson.DistributedNPCPartyPerson.handleCollisionSphereEnter
|
||||
DistributedNPCPartyPerson.DistributedNPCPartyPerson.handleCollisionSphereEnter=lambda *args: None
|
||||
oldHandleEnterCollisionSphereFisherman=DistributedNPCFisherman.DistributedNPCFisherman.handleCollisionSphereEnter
|
||||
DistributedNPCFisherman.DistributedNPCFisherman.handleEnterCollisionSphere=lambda *args: None
|
||||
|
||||
oldFisherAnnounceGenerate = DistributedNPCFisherman.DistributedNPCFisherman.announceGenerate
|
||||
def newFishermanAnnounceGenerate(self):
|
||||
try:
|
||||
oldFisherAnnounceGenerate(self)
|
||||
except:
|
||||
return None
|
||||
|
||||
oldPartyPlannerAnnounceGenerate = DistributedNPCPartyPerson.DistributedNPCPartyPerson.announceGenerate
|
||||
def newPartyPlannerAnnounceGenerate(self):
|
||||
try:
|
||||
oldPartyPlannerAnnounceGenerate(self)
|
||||
except:
|
||||
return None
|
||||
|
||||
def newInit(self, cr):
|
||||
for obj in dir(self):
|
||||
exec('self.%s = lambda *x:None' % obj, globals(), locals())
|
||||
return None
|
||||
|
||||
|
||||
class restock:
|
||||
|
||||
def __init__(self):
|
||||
self.firstTrack=2
|
||||
self.secondTrack=0
|
||||
self.thirdTrack=4
|
||||
self.fourthTrack=3
|
||||
self.desiredLevel1=5
|
||||
self.desiredLevel2=4
|
||||
self.desiredLevel3=5
|
||||
self.desiredLevel4=5
|
||||
self.desiredInv='\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
|
||||
self.maxCarryGags = base.localAvatar.getMaxCarry()
|
||||
self.gagshop_zoneId = 4503
|
||||
self.noToons=Sequence(Func(self.removeToons), Wait(1.5))
|
||||
self.noTrolley=False
|
||||
self.unloaded=True
|
||||
self.wasInBattle=False
|
||||
|
||||
DistributedNPCFisherman.DistributedNPCFisherman.announceGenerate = newFishermanAnnounceGenerate
|
||||
DistributedNPCPartyPerson.DistributedNPCPartyPerson.announceGenerate = newPartyPlannerAnnounceGenerate
|
||||
|
||||
self.lookAroundHookSeq = Sequence(Func(self.lookAroundHookFunc), Wait(2.5))
|
||||
self.lookAroundHookSeq.loop()
|
||||
ToonHead.ToonHead._ToonHead__lookAround = lambda *x:None
|
||||
|
||||
def lookAroundHookFunc(self):
|
||||
if hasattr(base, 'localAvatar'):
|
||||
base.localAvatar.findSomethingToLookAt = lambda *x:None
|
||||
self.oldFindSomethingToLookAt = base.localAvatar.findSomethingToLookAt
|
||||
self.lookAroundHookSeq.finish()
|
||||
self.oldLookAround = ToonHead.ToonHead._ToonHead__lookAround
|
||||
|
||||
def collectLaff(self):
|
||||
for treasure in base.cr.doFindAll('Treasure'):
|
||||
treasure.d_requestGrab()
|
||||
|
||||
def removeToons(self):
|
||||
for x in base.cr.doFindAll('Fisherman'):
|
||||
try:
|
||||
if x.zoneId != base.localAvatar.zoneId:
|
||||
x.removeNode()
|
||||
x.nametag.unmanage(base.marginManager)
|
||||
except:
|
||||
pass
|
||||
|
||||
for x in base.cr.doFindAll('Party Planner'):
|
||||
try:
|
||||
if x.zoneId != base.localAvatar.zoneId:
|
||||
x.removeNode()
|
||||
x.nametag.unmanage(base.marginManager)
|
||||
except:
|
||||
pass
|
||||
|
||||
for x in base.cr.doFindAll('render/donald'):
|
||||
try:
|
||||
if x.zoneId != base.localAvatar.zoneId:
|
||||
x.removeNode()
|
||||
x.nametag.unmanage(base.marginManager)
|
||||
except:
|
||||
pass
|
||||
|
||||
for x in base.cr.doFindAll('render/minnie'):
|
||||
try:
|
||||
if x.zoneId != base.localAvatar.zoneId:
|
||||
x.removeNode()
|
||||
x.nametag.unmanage(base.marginManager)
|
||||
except:
|
||||
pass
|
||||
|
||||
for x in base.cr.doFindAll('render/mickey'):
|
||||
try:
|
||||
if x.zoneId != base.localAvatar.zoneId:
|
||||
x.removeNode()
|
||||
x.nametag.unmanage(base.marginManager)
|
||||
except:
|
||||
pass
|
||||
|
||||
for x in base.cr.doFindAll('render/pluto'):
|
||||
try:
|
||||
if x.zoneId != base.localAvatar.zoneId:
|
||||
x.removeNode()
|
||||
x.nametag.unmanage(base.marginManager)
|
||||
except:
|
||||
pass
|
||||
|
||||
for x in base.cr.doFindAll('render/daisy'):
|
||||
try:
|
||||
if x.zoneId != base.localAvatar.zoneId:
|
||||
x.removeNode()
|
||||
x.nametag.unmanage(base.marginManager)
|
||||
except:
|
||||
pass
|
||||
|
||||
for x in base.localAvatar.getNearbyPlayers(100000000000000, False):
|
||||
try:
|
||||
y = base.cr.doId2do.get(x)
|
||||
if y.zoneId != base.localAvatar.zoneId:
|
||||
y.removeNode()
|
||||
y.nametag.unmanage(base.marginManager)
|
||||
except:
|
||||
pass
|
||||
|
||||
for x in base.cr.doFindAll('Butterfly'):
|
||||
x.butterflyNode.remove()
|
||||
|
||||
for x in base.cr.doFindAll('Flower'):
|
||||
x.bigFlower.removeNode()
|
||||
|
||||
for x in base.cr.doFindAll('Treasure'):
|
||||
x.setPosition(0, 0, 8**8)
|
||||
|
||||
for x in base.cr.doFindAll('render/DistributedFishingTarget'):
|
||||
x.bubbles.removeNode()
|
||||
x.removeNode()
|
||||
|
||||
def gainLaff(self):
|
||||
if base.localAvatar.getHp()!=base.localAvatar.getMaxHp():
|
||||
if self.unloaded:
|
||||
cjMaxer.daAutoer.preTele()
|
||||
self.interest1=base.cr.addInterest(base.localAvatar.defaultShard, 9000, 5, None)
|
||||
self.interest2=base.cr.addInterest(base.localAvatar.defaultShard, 3000, 5, None)
|
||||
self.unloaded=False
|
||||
Sequence(Wait(3),Func(cjMaxer.daAutoer.generateAgain)).start()
|
||||
self.collectLaff()
|
||||
if self.wasInBattle:
|
||||
cjMaxer.daAutoer.enterBattle()
|
||||
|
||||
def loadGagshop(self):
|
||||
if not base.cr.doFind('Clerk'):
|
||||
self.contextId = base.cr.addInterest(base.localAvatar.defaultShard, self.gagshop_zoneId, 4, event=None)
|
||||
try:
|
||||
if not int(render.find('**/*gagShop_interior_english*').getZ()) == 8**8:
|
||||
render.find('**/*gagShop_interior_english*').setZ(8**8)
|
||||
for k in base.cr.doFindAll('Clerk'):
|
||||
k.nametag.unmanage(base.marginManager)
|
||||
except:
|
||||
pass
|
||||
|
||||
def buyGags(self):
|
||||
desiredInv=self.desiredInv
|
||||
try:
|
||||
maxCarryGags = base.localAvatar.getMaxCarry()
|
||||
if base.cr.doFind('Clerk'):
|
||||
num_gags = 0
|
||||
for inventory_number in base.localAvatar.inventory.makeFromNetString(desiredInv):
|
||||
for k in inventory_number[:-1]:
|
||||
num_gags += k
|
||||
change = base.localAvatar.getMoney() - num_gags
|
||||
oldString = base.localAvatar.inventory.makeNetString()
|
||||
newString = desiredInv[:6] + oldString[6] + desiredInv[7:13] + oldString[13] + desiredInv[14:20] + oldString[20] + desiredInv[21:27] + oldString[27] + desiredInv[28:34] + oldString[34] + desiredInv[35:41] + oldString[41] + desiredInv[42:48] + oldString[48]
|
||||
for clerk in base.cr.doFindAll('Clerk'):
|
||||
clerk.setMovie=lambda *args,**kwds: None
|
||||
clerk.freeAvatar=lambda *args: None
|
||||
clerk.sendUpdate('avatarEnter')
|
||||
clerk.sendUpdate('setInventory', [newString, change, 1])
|
||||
|
||||
money = base.localAvatar.getMoney()
|
||||
maxMoney = base.localAvatar.getMaxMoney()
|
||||
base.cr.bankManager.d_transferMoney(money - maxMoney)
|
||||
except:
|
||||
pass
|
||||
|
||||
def unloadGagshop(self):
|
||||
if hasattr(self, 'contextId'):
|
||||
try:
|
||||
base.cr.removeInterest(self.contextId)
|
||||
except:
|
||||
pass
|
||||
|
||||
def restock(self):
|
||||
try:
|
||||
if base.localAvatar.inventory.inventory[self.firstTrack][self.desiredLevel1]<2 or base.localAvatar.inventory.inventory[self.secondTrack][self.desiredLevel2]<2 or base.localAvatar.inventory.inventory[self.thirdTrack][self.desiredLevel3]<2:
|
||||
Sequence(Func(self.loadGagshop),Wait(1),Func(self.buyGags),Wait(0.5),Func(self.unloadGagshop)).start()
|
||||
|
||||
except:
|
||||
pass
|
||||
|
||||
def revertFunctions(self):
|
||||
self.noToons.finish()
|
||||
try:
|
||||
base.cr.removeInterest(self.interest1)
|
||||
base.cr.removeInterest(self.interest2)
|
||||
self.unloaded=True
|
||||
except:
|
||||
pass
|
||||
|
||||
class OtherFunctions:
|
||||
oldBrrInit=BRPlayground.BRPlayground.__init__
|
||||
oldEnterWalk=LawbotHQExterior.LawbotHQExterior.enterWalk
|
||||
oldEnterReward=DistributedBattle.DistributedBattle.enterReward
|
||||
oldDenyBattle=DistributedSuit.denyBattle
|
||||
oldSendUpdate=DistributedObject.DistributedObject.sendUpdate
|
||||
oldEnterHealth=HealthForceAcknowledge.HealthForceAcknowledge.enter
|
||||
oldPostInvite=DistributedBoardingParty.DistributedBoardingParty.postInvite
|
||||
|
||||
|
||||
def __init__(self):
|
||||
self.shouldContinue=False
|
||||
self.lastCogId=0
|
||||
self.bossCount=0
|
||||
self.onlyDA=False
|
||||
self.canSetParentAgain=True
|
||||
self.isHealing=False
|
||||
self.isGlitched=False
|
||||
self.numberToSuit={0:'Bottom Feeder',1:'Bloodsucker',2:'Double Talker',3:'Ambulance Chaser',
|
||||
4:'Back Stabber',5:'Spin Doctor',6:'Legal Eagle',7:'Big Wig'}
|
||||
self.oldSetAnim = LocalToon.LocalToon.setAnimState
|
||||
BRPlayground.BRPlayground.__init__=lambda *args:self.newBrrInit(*args)
|
||||
LawbotHQExterior.LawbotHQExterior.enterWalk=lambda newSelf,*args: self.newEnterWalk(newSelf,*args)
|
||||
DistributedBattle.DistributedBattle.enterReward=lambda newSelf,*args: self.newEnterReward(newSelf,*args)
|
||||
DistributedSuit.denyBattle=lambda *args: self.newDenyBattle(*args)
|
||||
LocalToon.LocalToon.setAnimState=lambda *args,**kwds:self.newSetAnimState(*args,**kwds)
|
||||
HealthForceAcknowledge.HealthForceAcknowledge.enter=lambda newSelf,hplevel: self.newEnterHealth(newSelf,hplevel)
|
||||
DistributedBoardingParty.DistributedBoardingParty.postInvite=lambda newSelf,leaderId,inviterId: self.newPostInvite(newSelf,leaderId,inviterId)
|
||||
|
||||
def attack(self):
|
||||
try:
|
||||
for battle in base.cr.doFindAll('battle'):
|
||||
if len(battle.suits)>1:
|
||||
for suit in battle.suits:
|
||||
if suit.getName()!='Skelecog':
|
||||
attackSuit=suit
|
||||
else:
|
||||
attackSuit=battle.suits[0]
|
||||
|
||||
if base.localAvatar.inventory.inventory[cjMaxer.restock.firstTrack][cjMaxer.restock.desiredLevel1]>0:
|
||||
battle.sendUpdate('requestAttack', [cjMaxer.restock.firstTrack, cjMaxer.restock.desiredLevel1, attackSuit.doId])
|
||||
else:
|
||||
break
|
||||
|
||||
if base.localAvatar.getHp()<(base.localAvatar.getMaxHp()*0.9) or self.isHealing:
|
||||
|
||||
if base.localAvatar.inventory.inventory[cjMaxer.restock.secondTrack][cjMaxer.restock.desiredLevel2]>0:
|
||||
battle.sendUpdate('requestAttack', [cjMaxer.restock.secondTrack, cjMaxer.restock.desiredLevel2, base.localAvatar.doId])
|
||||
else:
|
||||
break
|
||||
|
||||
if base.localAvatar.inventory.inventory[cjMaxer.restock.thirdTrack][cjMaxer.restock.desiredLevel3]>0:
|
||||
battle.sendUpdate('requestAttack', [cjMaxer.restock.thirdTrack, cjMaxer.restock.desiredLevel3, attackSuit.doId])
|
||||
else:
|
||||
break
|
||||
|
||||
else:
|
||||
if base.localAvatar.inventory.inventory[cjMaxer.restock.thirdTrack][cjMaxer.restock.desiredLevel3]>0:
|
||||
battle.sendUpdate('requestAttack', [cjMaxer.restock.thirdTrack, cjMaxer.restock.desiredLevel3, attackSuit.doId])
|
||||
else:
|
||||
break
|
||||
except:
|
||||
pass
|
||||
|
||||
def sendUpdateHook(self, newself, fieldName, args=[], sendToId=None):
|
||||
if fieldName=="requestAttack":
|
||||
self.oldSendUpdate(newself,"requestAttack", args, sendToId)
|
||||
self.oldSendUpdate(newself,"movieDone",[])
|
||||
newself.d_rewardDone(base.localAvatar.doId)
|
||||
else:
|
||||
self.oldSendUpdate(newself,fieldName, args, sendToId)
|
||||
|
||||
def newBrrInit(self,*args):
|
||||
self.oldBrrInit(*args)
|
||||
if self.shouldContinue:
|
||||
cjMaxer.daAutoer.gainLaffSeq.finish()
|
||||
cjMaxer.daAutoer.generateAgain()
|
||||
cjMaxer.daAutoer.attackSeq.finish()
|
||||
cjMaxer.restock.wasInBattle=False
|
||||
self.checkNotices()
|
||||
|
||||
def newEnterHealth(self,newSelf,hplevel):
|
||||
try:
|
||||
self.oldEnterHealth(newSelf,hplevel)
|
||||
newSelf.handleOk(base.localAvatar.getHp())
|
||||
newSelf.exit()
|
||||
if self.shouldContinue:
|
||||
Sequence(Wait(2),Func(self.checkNotices)).start()
|
||||
except:
|
||||
pass
|
||||
|
||||
def newPostInvite(self,newSelf,leaderId,inviterId):
|
||||
if leaderId==base.localAvatar.doId:
|
||||
newSelf.sendUpdate('requestAcceptInvite',[inviterId,leaderId])
|
||||
else:
|
||||
self.oldPostInvite(newSelf,leaderId,inviterId)
|
||||
|
||||
def newEnterWalk(self,newSelf,*args):
|
||||
self.oldEnterWalk(newSelf,args)
|
||||
if self.shouldContinue and len(args)>0:
|
||||
base.localAvatar.setWantBattles(False)
|
||||
self.checkNotices()
|
||||
|
||||
def newEnterReward(self,newSelf,*args):
|
||||
self.oldEnterReward(newSelf,*args)
|
||||
if self.shouldContinue and self.isHealing:
|
||||
if base.localAvatar.getHp()>96:
|
||||
cjMaxer.daAutoer.attackSeq.finish()
|
||||
self.isHealing=False
|
||||
Sequence(Wait(1),Func(self.checkNotices)).start()
|
||||
else:
|
||||
Sequence(Wait(1),Func(self.enterRandomBattle)).start()
|
||||
|
||||
def newDenyBattle(self,*args):
|
||||
self.oldDenyBattle(*args)
|
||||
if self.shouldContinue and self.isHealing and self.lastCogId==args[0].doId:
|
||||
self.enterRandomBattle()
|
||||
|
||||
def newSetAnimState(self,*args,**kwds):
|
||||
a = args if len(args) <= 7 else args[:7]
|
||||
self.oldSetAnim(*a, **kwds)
|
||||
if self.canSetParentAgain:
|
||||
base.localAvatar.d_setParent(1)
|
||||
self.canSetParentAgain=False
|
||||
Sequence(Wait(2),Func(self.doUnsetCanSetParentAgain)).start()
|
||||
|
||||
def doUnsetCanSetParentAgain(self):
|
||||
self.canSetParentAgain=True
|
||||
|
||||
def checkNotices(self):
|
||||
if self.shouldEnd:
|
||||
self.shouldContinue=False
|
||||
base.localAvatar.setWantBattles(True)
|
||||
if self.haveJb():
|
||||
if self.shouldContinue:
|
||||
if self.getNoticesLeft()==0 and not self.onlyDA:
|
||||
if base.cr.doFind('DistributedCogHQDoor') and base.localAvatar.getZoneId()>=13000 and base.localAvatar.getZoneId()<13100:
|
||||
cjMaxer.cjAutoer.start()
|
||||
else:
|
||||
cjMaxer.restock.restock()
|
||||
cjMaxer.restock.collectLaff()
|
||||
self.walk()
|
||||
cjMaxer.autoerGui.display.newLine('Teleporting to lawbot hq')
|
||||
Sequence(Wait(2),Func(self.teleBack)).start()
|
||||
else:
|
||||
if base.cr.doFind('DistributedCogHQDoor') and base.localAvatar.getZoneId()>=13000 and base.localAvatar.getZoneId()<13100:
|
||||
if (base.localAvatar.getHp()>96 and self.getNoticesLeft()>10) or self.isGlitched:
|
||||
cjMaxer.daAutoer.start()
|
||||
else:
|
||||
cjMaxer.daAutoer.attackSeq.loop()
|
||||
self.isHealing=True
|
||||
self.enterRandomBattle()
|
||||
else:
|
||||
cjMaxer.restock.restock()
|
||||
cjMaxer.restock.collectLaff()
|
||||
self.walk()
|
||||
cjMaxer.autoerGui.display.newLine('Teleporting to lawbot hq')
|
||||
Sequence(Wait(2),Func(self.teleBack)).start()
|
||||
else:
|
||||
cjMaxer.restock.noToons.finish()
|
||||
try:
|
||||
base.cr.removeInterest(cjMaxer.restock.interest1)
|
||||
base.cr.removeInterest(cjMaxer.restock.interest2)
|
||||
cjMaxer.restock.unloaded=True
|
||||
except:
|
||||
pass
|
||||
base.localAvatar.setSystemMessage(0,"Thanks for using freshollie's cj maxer")
|
||||
cjMaxer.autoerGui.display.newLine('Stopped')
|
||||
else:
|
||||
cjMaxer.autoerGui.display.newLine('Out of jellybeans')
|
||||
base.localAvatar.setSystemMessage(0,'You have run out of jelly beans, please use the fishing code to gain some')
|
||||
|
||||
def getNoticesLeft(self):
|
||||
return CogDisguiseGlobals.getTotalMerits(base.localAvatar,1)-base.localAvatar.cogMerits[1]
|
||||
|
||||
def walk(self):
|
||||
try:
|
||||
base.cr.playGame.getPlace().fsm.forceTransition('walk')
|
||||
except:
|
||||
pass
|
||||
|
||||
def teleBack(self,zone=13000):
|
||||
try:
|
||||
self.walk()
|
||||
base.cr.playGame.getPlace().handleBookCloseTeleport(zone, zone)
|
||||
except:
|
||||
pass
|
||||
|
||||
def onlyDoDA(self):
|
||||
self.onlyDA=True
|
||||
base.localAvatar.setSystemMessage(0,'CJ maxer set to only do the DA Office')
|
||||
|
||||
def doBoth(self):
|
||||
self.onlyDA=False
|
||||
base.localAvatar.setSystemMessage(0,'CJ maxer set to do both the DA Office and the CJ')
|
||||
|
||||
def haveJb(self):
|
||||
if base.localAvatar.cogLevels[0]==49:
|
||||
return True
|
||||
elif base.localAvatar.getTotalMoney()<100:
|
||||
return False
|
||||
else:
|
||||
return True
|
||||
|
||||
def enterRandomBattle(self):
|
||||
battles = []
|
||||
cogList = base.cr.doFindAll("render")
|
||||
for x in cogList:
|
||||
if isinstance(x, DistributedSuit):
|
||||
if x.activeState == 6:
|
||||
battles.append(x)
|
||||
if battles != []:
|
||||
self.walk()
|
||||
battle = random.choice(battles)
|
||||
pos, hpr = battle.getPos(), battle.getHpr()
|
||||
base.localAvatar.setPosHpr(pos, hpr)
|
||||
battle.d_requestBattle(pos, hpr)
|
||||
self.lastCogId=battle.doId
|
||||
else:
|
||||
pass
|
||||
|
||||
def setStop(self):
|
||||
self.shouldEnd=True
|
||||
base.localAvatar.setSystemMessage(1,"The Autoer will stop at the end of this run")
|
||||
cjMaxer.autoerGui.stopTimer()
|
||||
|
||||
def start(self):
|
||||
DistributedObject.DistributedObject.sendUpdate=lambda newself, fieldName, args=[], sendToId=None: self.sendUpdateHook(newself, fieldName, args, sendToId)
|
||||
self.bossCount=0
|
||||
self.shouldContinue=True
|
||||
self.shouldEnd=False
|
||||
cjMaxer.autoerGui.startTimer()
|
||||
emptyShardList=[]
|
||||
for shard in base.cr.activeDistrictMap:
|
||||
if base.cr.activeDistrictMap[shard].avatarCount<30:
|
||||
emptyShardList.append(shard)
|
||||
if emptyShardList==[]:
|
||||
emptyShardList=[650000000, 754000000, 608000000, 756000000, 658000000, 712000000, 360000000, 410000000, 620000000, 454000000, 726000000, 362000000, 688000000, 316000000]
|
||||
if base.localAvatar.defaultShard not in emptyShardList:
|
||||
cjMaxer.autoerGui.display.newLine('TPing to an empty district')
|
||||
base.cr.playGame.getPlace().requestTeleport(13000,13000,random.choice(emptyShardList),None)
|
||||
else:
|
||||
self.checkNotices()
|
||||
cjMaxer.restock.noToons.loop()
|
||||
|
||||
def revertFunctions(self):
|
||||
LocalToon.LocalToon.setAnimState=self.oldSetAnim
|
||||
BRPlayground.BRPlayground.__init__=self.oldBrrInit
|
||||
LawbotHQExterior.LawbotHQExterior.enterWalk=self.oldEnterWalk
|
||||
DistributedBattle.DistributedBattle.enterReward=self.oldEnterReward
|
||||
DistributedSuit.denyBattle=self.oldDenyBattle
|
||||
DistributedObject.DistributedObject.sendUpdate=self.oldSendUpdate
|
||||
HealthForceAcknowledge.HealthForceAcknowledge.enter=self.oldEnterHealth
|
||||
DistributedBoardingParty.DistributedBoardingParty.postInvite=self.oldPostInvite
|
||||
|
||||
class CjAutoer:
|
||||
oldBossEnterElevator=DistributedLawbotBoss.DistributedLawbotBoss.enterElevator
|
||||
oldEnterBattleThree=DistributedLawbotBoss.DistributedLawbotBoss.enterBattleThree
|
||||
oldEnterPrepareBattleTwo=DistributedLawbotBoss.DistributedLawbotBoss.enterPrepareBattleTwo
|
||||
oldEnterPrepareBattleThree=DistributedLawbotBoss.DistributedLawbotBoss.enterPrepareBattleThree
|
||||
oldEnterEpilogue=DistributedLawbotBoss.DistributedLawbotBoss.enterEpilogue
|
||||
oldEnterRollToBattleTwo=DistributedLawbotBoss.DistributedLawbotBoss.enterRollToBattleTwo
|
||||
oldEnterWaitForInput=DistributedBattleFinal.DistributedBattleFinal.enterWaitForInput
|
||||
oldBossEnterIntro=DistributedLawbotBoss.DistributedLawbotBoss.enterIntroduction
|
||||
oldAvatarExit=DistributedCogHQDoor.DistributedCogHQDoor.avatarExit
|
||||
|
||||
def __init__(self):
|
||||
DistributedLawbotBoss.DistributedLawbotBoss.enterElevator=lambda newSelf: self.newBossEnterElevator(newSelf)
|
||||
DistributedLawbotBoss.DistributedLawbotBoss.enterIntroduction=lambda newSelf,*args: self.newBossEnterIntro(newSelf,*args)
|
||||
DistributedLawbotBoss.DistributedLawbotBoss.enterRollToBattleTwo=lambda newSelf: self.newEnterRollToBattleTwo(newSelf)
|
||||
DistributedLawbotBoss.DistributedLawbotBoss.enterBattleThree=lambda newSelf: self.newEnterBattleThree(newSelf)
|
||||
DistributedBattleFinal.DistributedBattleFinal.enterWaitForInput=lambda *args: self.newEnterWaitForInput(*args)
|
||||
DistributedCogHQDoor.DistributedCogHQDoor.avatarExit=lambda newSelf,id: self.newAvatarExit(newSelf,id)
|
||||
DistributedLawbotBoss.DistributedLawbotBoss.enterPrepareBattleThree=lambda newSelf: self.newEnterPrepareBattleThree(newSelf)
|
||||
DistributedLawbotBoss.DistributedLawbotBoss.enterPrepareBattleTwo=lambda newSelf: self.newEnterPrepareBattleTwo(newSelf)
|
||||
DistributedLawbotBoss.DistributedLawbotBoss.enterEpilogue=lambda newSelf: self.newEnterEpilogue(newSelf)
|
||||
|
||||
def newBossEnterElevator(self,newSelf):
|
||||
self.oldBossEnterElevator(newSelf)
|
||||
if cjMaxer.otherFunctions.shouldContinue:
|
||||
cjMaxer.autoerGui.display.newLine('Skipping Elevator')
|
||||
newSelf._DistributedBossCog__doneElevator()
|
||||
|
||||
def newBossEnterIntro(self,newSelf,*args):
|
||||
self.oldBossEnterIntro(newSelf,*args)
|
||||
if cjMaxer.otherFunctions.shouldContinue:
|
||||
newSelf.exitIntroduction()
|
||||
cjMaxer.autoerGui.display.newLine('Skipping CJ introduction')
|
||||
|
||||
def newEnterEpilogue(self,newSelf):
|
||||
self.oldEnterEpilogue(newSelf)
|
||||
if cjMaxer.otherFunctions.shouldContinue:
|
||||
cjMaxer.otherFunctions.bossCount+=1
|
||||
newSelf._DistributedLawbotBoss__doneEpilogue()
|
||||
cjMaxer.otherFunctions.walk()
|
||||
cjMaxer.otherFunctions.teleBack()
|
||||
cjMaxer.autoerGui.display.newLine('Finished CJ')
|
||||
|
||||
def newEnterRollToBattleTwo(self,newSelf):
|
||||
self.oldEnterRollToBattleTwo(newSelf)
|
||||
if cjMaxer.otherFunctions.shouldContinue:
|
||||
newSelf.exitRollToBattleTwo()
|
||||
cjMaxer.autoerGui.display.newLine('Skipping cutscene')
|
||||
|
||||
def newEnterPrepareBattleTwo(self,newSelf):
|
||||
self.oldEnterPrepareBattleTwo(newSelf)
|
||||
if cjMaxer.otherFunctions.shouldContinue:
|
||||
newSelf._DistributedLawbotBoss__onToBattleTwo(33)
|
||||
cjMaxer.autoerGui.display.newLine('Skipping dialogue 1')
|
||||
cjMaxer.autoerGui.display.newLine('Waiting for cannon round...')
|
||||
|
||||
def newEnterPrepareBattleThree(self,newSelf):
|
||||
self.oldEnterPrepareBattleThree(newSelf)
|
||||
if cjMaxer.otherFunctions.shouldContinue:
|
||||
newSelf._DistributedLawbotBoss__onToBattleThree(33)
|
||||
cjMaxer.autoerGui.display.newLine('Skipping dialogue 2')
|
||||
|
||||
def newEnterBattleThree(self,newSelf):
|
||||
self.oldEnterBattleThree(newSelf)
|
||||
if cjMaxer.otherFunctions.shouldContinue:
|
||||
self.endBattle()
|
||||
cjMaxer.autoerGui.display.newLine('Completing evidence round')
|
||||
|
||||
def newEnterWaitForInput(self,*args):
|
||||
self.oldEnterWaitForInput(*args)
|
||||
if cjMaxer.otherFunctions.shouldContinue:
|
||||
self.exploit()
|
||||
cjMaxer.autoerGui.display.newLine('Skipping Battle')
|
||||
|
||||
def newAvatarExit(self,newSelf,id):
|
||||
self.oldAvatarExit(newSelf,id)
|
||||
if base.cr.doFind('Elevator') and id==base.localAvatar.doId and cjMaxer.otherFunctions.shouldContinue and base.localAvatar.getZoneId()==13100:
|
||||
cjMaxer.otherFunctions.walk()
|
||||
cjMaxer.autoerGui.display.newLine('Heading to CJ')
|
||||
base.cr.doFind('Boarding').sendUpdate('requestInvite',[base.localAvatar.doId])
|
||||
base.cr.doFind('Boarding').sendUpdate('requestGoToSecondTime',[base.cr.doFind('Elevator').doId])
|
||||
|
||||
def destroyBattle(self):
|
||||
base.cr.doFind('SafeZone').sendUpdate('enterSafeZone')
|
||||
|
||||
def exploit(self):
|
||||
Sequence(Func(self.destroyBattle), Wait(.5), Func(cjMaxer.otherFunctions.walk)).start()
|
||||
|
||||
def endBattle(self):
|
||||
CJ = base.cr.doFind('Chief Justice')
|
||||
killSeq=Sequence()
|
||||
for i in range(20):
|
||||
killSeq.append(Func(CJ.sendUpdate,'hitBoss', [100]))
|
||||
killSeq.append(Wait(0.05))
|
||||
killSeq.start()
|
||||
|
||||
def start(self):
|
||||
cjMaxer.autoerGui.display.newLine('Starting Chief Justice')
|
||||
cjMaxer.autoerGui.display.newLine('Entering Lobby')
|
||||
base.localAvatar.setWantBattles(True)
|
||||
firstId=base.cr.doFindAll('CogHQDoor')[0].doId
|
||||
if isinstance(base.cr.doId2do.get(firstId-2),DistributedCogHQDoor.DistributedCogHQDoor):
|
||||
base.cr.doId2do.get(firstId-2).sendUpdate('requestEnter')
|
||||
else:
|
||||
base.cr.doId2do.get(firstId).sendUpdate('requestEnter')
|
||||
|
||||
|
||||
def revertFunctions(self):
|
||||
DistributedLawbotBoss.DistributedLawbotBoss.enterElevator=self.oldBossEnterElevator
|
||||
DistributedLawbotBoss.DistributedLawbotBoss.enterBattleThree=self.oldEnterBattleThree
|
||||
DistributedLawbotBoss.DistributedLawbotBoss.enterPrepareBattleTwo=self.oldEnterPrepareBattleTwo
|
||||
DistributedLawbotBoss.DistributedLawbotBoss.enterPrepareBattleThree=self.oldEnterPrepareBattleThree
|
||||
DistributedLawbotBoss.DistributedLawbotBoss.enterEpilogue=self.oldEnterEpilogue
|
||||
DistributedLawbotBoss.DistributedLawbotBoss.enterRollToBattleTwo=self.oldEnterRollToBattleTwo
|
||||
DistributedBattleFinal.DistributedBattleFinal.enterWaitForInput=self.oldEnterWaitForInput
|
||||
DistributedLawbotBoss.DistributedLawbotBoss.enterIntroduction=self.oldBossEnterIntro
|
||||
DistributedCogHQDoor.DistributedCogHQDoor.avatarExit=self.oldAvatarExit
|
||||
|
||||
class DAautoer:
|
||||
oldElevatorAnnounceGenerate=DistributedLawOfficeElevatorExt.DistributedLawOfficeElevatorExt.announceGenerate
|
||||
oldEnterStageReward=DistributedStageBattle.DistributedStageBattle.enterStageReward
|
||||
oldEnterReward=DistributedStageBattle.DistributedStageBattle.enterReward
|
||||
oldStageGenerate=DistributedStage.DistributedStage.announceGenerate
|
||||
|
||||
def __init__(self,cjMaxer):
|
||||
self.gainLaffSeq=Sequence(Func(cjMaxer.restock.gainLaff),Wait(3.0))
|
||||
self.attackSeq=Sequence(Func(cjMaxer.restock.restock),Wait(1.0),Func(cjMaxer.otherFunctions.attack),Wait(1.0))
|
||||
DistributedLawOfficeElevatorExt.DistributedLawOfficeElevatorExt.announceGenerate=lambda *args:self.newElevatorAnnounceGenerate(*args)
|
||||
DistributedStageBattle.DistributedStageBattle.enterStageReward=lambda *args:self.newEnterStageReward(*args)
|
||||
DistributedStageBattle.DistributedStageBattle.enterReward=lambda *args:self.newEnterReward(*args)
|
||||
DistributedStage.DistributedStage.announceGenerate=lambda newSelf,*args:self.newStageGenerate(newSelf,*args)
|
||||
base.cr.doFind('SafeZone').d_enterSafeZone=lambda *args: self.newSafeZone(*args)
|
||||
base.localAvatar.died=lambda *args: self.newSafeZone(*args)
|
||||
DistributedStageBattle.DistributedStageBattle.d_toonDied=lambda *args: self.newSafeZone(*args)
|
||||
|
||||
def newStageAnnounceGenerate(self,newSelf,*args):
|
||||
self.oldStageAnnounceGenerate(newSelf,*args)
|
||||
if cjMaxer.otherFunctions.shouldContinue:
|
||||
self.floorNum+=1
|
||||
cjMaxer.autoerGui.display.newLine('Entering Floor '+str(self.floorNum))
|
||||
Sequence(Wait(3),Func(self.doFloor,newSelf)).start()
|
||||
|
||||
def newElevatorAnnounceGenerate(self,*args):
|
||||
self.oldElevatorAnnounceGenerate(*args)
|
||||
if cjMaxer.otherFunctions.shouldContinue and 'Office A' in args[0].getDestName():
|
||||
self.workOutOfficeNeeded()
|
||||
Sequence(Wait(2),Func(self.boardElevator)).start()
|
||||
|
||||
def newEnterStageReward(self,*args):
|
||||
self.oldEnterStageReward(*args)
|
||||
if cjMaxer.otherFunctions.shouldContinue:
|
||||
cjMaxer.autoerGui.display.newLine('Completed Final Battle')
|
||||
self.gainLaffSeq.finish()
|
||||
self.attackSeq.finish()
|
||||
self.generateAgain()
|
||||
cjMaxer.otherFunctions.isGlitched=False
|
||||
Sequence(Wait(2),Func(cjMaxer.otherFunctions.teleBack)).start()
|
||||
|
||||
def newEnterReward(self,*args):
|
||||
self.oldEnterReward(*args)
|
||||
if cjMaxer.otherFunctions.shouldContinue:
|
||||
cjMaxer.autoerGui.display.newLine('Error no notices received')
|
||||
self.gainLaffSeq.finish()
|
||||
self.attackSeq.finish()
|
||||
self.generateAgain()
|
||||
cjMaxer.otherFunctions.teleBack()
|
||||
cjMaxer.otherFunctions.isGlitched=True
|
||||
|
||||
def newStageGenerate(self,newSelf,*args):
|
||||
self.oldStageGenerate(newSelf,*args)
|
||||
if cjMaxer.otherFunctions.shouldContinue:
|
||||
self.floorNum+=1
|
||||
cjMaxer.autoerGui.display.newLine('Entering Floor '+str(self.floorNum))
|
||||
Sequence(Wait(3),Func(self.doFloor,newSelf)).start()
|
||||
|
||||
def newSafeZone(self,*args):
|
||||
Sequence(Wait(1),Func(cjMaxer.otherFunctions.walk),Func(base.localAvatar.collisionsOff)).start()
|
||||
cjMaxer.restock.wasInBattle=True
|
||||
cjMaxer.autoerGui.display.newLine('Died, recovering')
|
||||
|
||||
def enterBattle(self):
|
||||
if base.localAvatar.getHp()>0:
|
||||
try:
|
||||
base.cr.doFind('DistributedStage.DistributedStage').warpToRoom(2)
|
||||
except:
|
||||
pass
|
||||
base.localAvatar.collisionsOn()
|
||||
cjMaxer.restock.wasInBattle=False
|
||||
|
||||
def workOutOfficeNeeded(self):
|
||||
noticesNeeded=cjMaxer.otherFunctions.getNoticesLeft()
|
||||
if noticesNeeded<98 or base.localAvatar.getHp()<81:
|
||||
self.office='Office A'
|
||||
elif noticesNeeded<190 or base.localAvatar.getHp()<86:
|
||||
self.office='Office B'
|
||||
elif noticesNeeded<324 or base.localAvatar.getHp()<96:
|
||||
self.office='Office C'
|
||||
else:
|
||||
self.office='Office D'
|
||||
|
||||
def doFloor(self,floor):
|
||||
if base.cr.doFind('DistributedElevatorFloor'):
|
||||
base.cr.doFind('DistributedElevatorFloor').handleEnterSphere(base.localAvatar.doId)
|
||||
cjMaxer.autoerGui.display.newLine('Boarding Floor '+str(self.floorNum)+' elevator')
|
||||
else:
|
||||
floor.warpToRoom(2)
|
||||
cjMaxer.autoerGui.display.newLine('Entering Final Battle')
|
||||
|
||||
def boardElevator(self):
|
||||
for elevator in base.cr.doFindAll('Elevator'):
|
||||
if self.office in elevator.getDestName():
|
||||
if cjMaxer.otherFunctions.isGlitched:
|
||||
cjMaxer.autoerGui.display.newLine('Fixing a glitch')
|
||||
elevator.sendUpdate('requestBoard')
|
||||
else:
|
||||
base.cr.doFind('Boarding').sendUpdate('requestInvite',[base.localAvatar.doId])
|
||||
base.cr.doFind('Boarding').sendUpdate('requestGoToSecondTime',[elevator.doId])
|
||||
cjMaxer.autoerGui.display.newLine('Heading to Office: '+self.office.split()[-1])
|
||||
self.gainLaffSeq.loop()
|
||||
self.attackSeq.loop()
|
||||
self.floorNum=0
|
||||
return
|
||||
|
||||
def goToElevators(self):
|
||||
firstId=base.cr.doFindAll('CogHQDoor')[0].doId
|
||||
if isinstance(base.cr.doId2do.get(firstId+2),DistributedCogHQDoor.DistributedCogHQDoor):
|
||||
base.cr.doId2do.get(firstId+2).sendUpdate('requestEnter')
|
||||
else:
|
||||
base.cr.doId2do.get(firstId).sendUpdate('requestEnter')
|
||||
|
||||
def start(self):
|
||||
base.localAvatar.setWantBattles(True)
|
||||
self.goToElevators()
|
||||
|
||||
def preTele(self):
|
||||
DistributedTrolley.DistributedTrolley.__init__ = newInit
|
||||
DistributedPartyGate.DistributedPartyGate.__init__ = newInit
|
||||
DistributedDoor.DistributedDoor.__init__ = newInit
|
||||
base.localAvatar.stopLookAroundNow()
|
||||
|
||||
def generateAgain(self):
|
||||
DistributedTrolley.DistributedTrolley.__init__ = oldTrolleyInit
|
||||
DistributedPartyGate.DistributedPartyGate.__init__ = oldPartyInit
|
||||
DistributedDoor.DistributedDoor.__init__ = oldDoorInit
|
||||
base.localAvatar.findSomethingToLookAt = cjMaxer.restock.oldFindSomethingToLookAt
|
||||
ToonHead.ToonHead._ToonHead__lookAround = cjMaxer.restock.oldLookAround
|
||||
|
||||
def revertFunctions(self):
|
||||
DistributedLawOfficeElevatorExt.DistributedLawOfficeElevatorExt.announceGenerate=self.oldElevatorAnnounceGenerate
|
||||
DistributedStageBattle.DistributedStageBattle.enterStageReward=self.oldEnterStageReward
|
||||
DistributedStageBattle.DistributedStageBattle.enterReward=self.oldEnterReward
|
||||
DistributedStage.DistributedStage.announceGenerate=self.oldStageGenerate
|
||||
base.cr.doFind('SafeZone').d_enterSafeZone=lambda *args: None
|
||||
base.localAvatar.died=lambda *args: None
|
||||
DistributedStageBattle.DistributedStageBattle.d_toonDied=lambda *args: None
|
||||
self.attackSeq.finish()
|
||||
self.gainLaffSeq.finish()
|
||||
self.generateAgain()
|
||||
|
||||
class CJMaxer:
|
||||
def __init__(self):
|
||||
self.restock=restock()
|
||||
self.otherFunctions=OtherFunctions()
|
||||
self.cjAutoer=CjAutoer()
|
||||
self.daAutoer=DAautoer(self)
|
||||
self.autoerGui=AutoerGui('CJ Maxer',['Run Time',"Number of CJ's","CJ's/Hour",'Suit','Notices needed'],\
|
||||
['self.hours+":"+self.minutes+":"+self.seconds','str(cjMaxer.otherFunctions.bossCount)',\
|
||||
'str(self.workOutNumberAnHour(cjMaxer.otherFunctions.bossCount))',\
|
||||
'str(cjMaxer.otherFunctions.numberToSuit[base.localAvatar.cogTypes[1]])+" lvl "+str(base.localAvatar.cogLevels[1]+1)','str(cjMaxer.otherFunctions.getNoticesLeft())'],\
|
||||
'CJ MXR','law')
|
||||
|
||||
def revert(self):
|
||||
self.restock.revertFunctions()
|
||||
self.daAutoer.revertFunctions()
|
||||
self.cjAutoer.revertFunctions()
|
||||
self.otherFunctions.revertFunctions()
|
||||
self.autoerGui.destroy()
|
||||
DistributedNPCFisherman.DistributedNPCFisherman.handleCollisionSphereEnter=oldHandleEnterCollisionSphereFisherman
|
||||
DistributedNPCPartyPerson.DistributedNPCPartyPerson.handleCollisionSphereEnter=oldHandleEnterCollisionSphereParty
|
||||
DistributedNPCFisherman.DistributedNPCFisherman.announceGenerate=oldFisherAnnounceGenerate
|
||||
DistributedNPCPartyPerson.DistributedNPCPartyPerson.announceGenerate=oldPartyPlannerAnnounceGenerate
|
||||
|
||||
global cjMaxer
|
||||
cjMaxer=CJMaxer()
|
||||
|
|
@ -0,0 +1,785 @@
|
|||
import random
|
||||
from direct.interval.IntervalGlobal import *
|
||||
from direct.distributed import DistributedObject
|
||||
from toontown.distributed import ToontownClientRepository
|
||||
from toontown.battle import DistributedBattleFinal
|
||||
from toontown.toonbase import ToontownBattleGlobals
|
||||
from toontown.toon import *
|
||||
from toontown.battle import DistributedBattle
|
||||
from toontown.coghq import DistributedCogHQDoor
|
||||
from toontown.coghq import CogDisguiseGlobals
|
||||
from toontown.coghq import DistributedStage
|
||||
from toontown.coghq import DistributedStageBattle
|
||||
from toontown.coghq import DistributedLawOfficeElevatorExt
|
||||
from toontown.coghq import LawbotHQExterior
|
||||
from toontown.suit.DistributedMintSuit import DistributedMintSuit
|
||||
from toontown.suit.DistributedSuit import DistributedSuit
|
||||
from toontown.suit import DistributedLawbotBoss
|
||||
from toontown.safezone import BRPlayground
|
||||
from toontown.safezone import DistributedPartyGate
|
||||
from toontown.safezone import DistributedTrolley
|
||||
from toontown.building import DistributedDoor
|
||||
from toontown.building import DistributedBoardingParty
|
||||
|
||||
ToontownBattleGlobals.SkipMovie=1
|
||||
ToontownClientRepository.ToontownClientRepository.dumpAllSubShardObjects=lambda self: None
|
||||
ToontownClientRepository.ToontownClientRepository.forbidCheesyEffects=lambda *x,**kwds: None
|
||||
|
||||
faceOffHook = lambda self, ts, name, callback:self.d_faceOffDone(self)
|
||||
DistributedStageBattle.DistributedStageBattle._DistributedLevelBattle__faceOff = faceOffHook
|
||||
DistributedBattle.DistributedBattle._DistributedBattle__faceOff = faceOffHook
|
||||
|
||||
oldTrolleyInit = DistributedTrolley.DistributedTrolley.__init__
|
||||
oldPartyInit = DistributedPartyGate.DistributedPartyGate.__init__
|
||||
oldDoorInit = DistributedDoor.DistributedDoor.__init__
|
||||
|
||||
oldHandleEnterCollisionSphereParty=DistributedNPCPartyPerson.DistributedNPCPartyPerson.handleCollisionSphereEnter
|
||||
DistributedNPCPartyPerson.DistributedNPCPartyPerson.handleCollisionSphereEnter=lambda *args: None
|
||||
oldHandleEnterCollisionSphereFisherman=DistributedNPCFisherman.DistributedNPCFisherman.handleCollisionSphereEnter
|
||||
DistributedNPCFisherman.DistributedNPCFisherman.handleEnterCollisionSphere=lambda *args: None
|
||||
|
||||
oldFisherAnnounceGenerate = DistributedNPCFisherman.DistributedNPCFisherman.announceGenerate
|
||||
def newFishermanAnnounceGenerate(self):
|
||||
try:
|
||||
oldFisherAnnounceGenerate(self)
|
||||
except:
|
||||
return None
|
||||
|
||||
oldPartyPlannerAnnounceGenerate = DistributedNPCPartyPerson.DistributedNPCPartyPerson.announceGenerate
|
||||
def newPartyPlannerAnnounceGenerate(self):
|
||||
try:
|
||||
oldPartyPlannerAnnounceGenerate(self)
|
||||
except:
|
||||
return None
|
||||
|
||||
def newInit(self, cr):
|
||||
for obj in dir(self):
|
||||
exec('self.%s = lambda *x:None' % obj, globals(), locals())
|
||||
return None
|
||||
|
||||
|
||||
class restock:
|
||||
|
||||
def __init__(self):
|
||||
self.firstTrack=2
|
||||
self.secondTrack=0
|
||||
self.thirdTrack=4
|
||||
self.fourthTrack=3
|
||||
self.desiredLevel1=5
|
||||
self.desiredLevel2=4
|
||||
self.desiredLevel3=5
|
||||
self.desiredLevel4=5
|
||||
self.desiredInv='\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
|
||||
self.maxCarryGags = base.localAvatar.getMaxCarry()
|
||||
self.gagshop_zoneId = 4503
|
||||
self.noToons=Sequence(Func(self.removeToons), Wait(1.5))
|
||||
self.noTrolley=False
|
||||
self.unloaded=True
|
||||
self.wasInBattle=False
|
||||
|
||||
DistributedNPCFisherman.DistributedNPCFisherman.announceGenerate = newFishermanAnnounceGenerate
|
||||
DistributedNPCPartyPerson.DistributedNPCPartyPerson.announceGenerate = newPartyPlannerAnnounceGenerate
|
||||
|
||||
self.lookAroundHookSeq = Sequence(Func(self.lookAroundHookFunc), Wait(2.5))
|
||||
self.lookAroundHookSeq.loop()
|
||||
ToonHead.ToonHead._ToonHead__lookAround = lambda *x:None
|
||||
|
||||
def lookAroundHookFunc(self):
|
||||
if hasattr(base, 'localAvatar'):
|
||||
base.localAvatar.findSomethingToLookAt = lambda *x:None
|
||||
self.oldFindSomethingToLookAt = base.localAvatar.findSomethingToLookAt
|
||||
self.lookAroundHookSeq.finish()
|
||||
self.oldLookAround = ToonHead.ToonHead._ToonHead__lookAround
|
||||
|
||||
def collectLaff(self):
|
||||
for treasure in base.cr.doFindAll('Treasure'):
|
||||
treasure.d_requestGrab()
|
||||
|
||||
def removeToons(self):
|
||||
for x in base.cr.doFindAll('Fisherman'):
|
||||
try:
|
||||
if x.zoneId != base.localAvatar.zoneId:
|
||||
x.removeNode()
|
||||
x.nametag.unmanage(base.marginManager)
|
||||
except:
|
||||
pass
|
||||
|
||||
for x in base.cr.doFindAll('Party Planner'):
|
||||
try:
|
||||
if x.zoneId != base.localAvatar.zoneId:
|
||||
x.removeNode()
|
||||
x.nametag.unmanage(base.marginManager)
|
||||
except:
|
||||
pass
|
||||
|
||||
for x in base.cr.doFindAll('render/donald'):
|
||||
try:
|
||||
if x.zoneId != base.localAvatar.zoneId:
|
||||
x.removeNode()
|
||||
x.nametag.unmanage(base.marginManager)
|
||||
except:
|
||||
pass
|
||||
|
||||
for x in base.cr.doFindAll('render/minnie'):
|
||||
try:
|
||||
if x.zoneId != base.localAvatar.zoneId:
|
||||
x.removeNode()
|
||||
x.nametag.unmanage(base.marginManager)
|
||||
except:
|
||||
pass
|
||||
|
||||
for x in base.cr.doFindAll('render/mickey'):
|
||||
try:
|
||||
if x.zoneId != base.localAvatar.zoneId:
|
||||
x.removeNode()
|
||||
x.nametag.unmanage(base.marginManager)
|
||||
except:
|
||||
pass
|
||||
|
||||
for x in base.cr.doFindAll('render/pluto'):
|
||||
try:
|
||||
if x.zoneId != base.localAvatar.zoneId:
|
||||
x.removeNode()
|
||||
x.nametag.unmanage(base.marginManager)
|
||||
except:
|
||||
pass
|
||||
|
||||
for x in base.cr.doFindAll('render/daisy'):
|
||||
try:
|
||||
if x.zoneId != base.localAvatar.zoneId:
|
||||
x.removeNode()
|
||||
x.nametag.unmanage(base.marginManager)
|
||||
except:
|
||||
pass
|
||||
|
||||
for x in base.localAvatar.getNearbyPlayers(100000000000000, False):
|
||||
try:
|
||||
y = base.cr.doId2do.get(x)
|
||||
if y.zoneId != base.localAvatar.zoneId:
|
||||
y.removeNode()
|
||||
y.nametag.unmanage(base.marginManager)
|
||||
except:
|
||||
pass
|
||||
|
||||
for x in base.cr.doFindAll('Butterfly'):
|
||||
x.butterflyNode.remove()
|
||||
|
||||
for x in base.cr.doFindAll('Flower'):
|
||||
x.bigFlower.removeNode()
|
||||
|
||||
for x in base.cr.doFindAll('Treasure'):
|
||||
x.setPosition(0, 0, 8**8)
|
||||
|
||||
for x in base.cr.doFindAll('render/DistributedFishingTarget'):
|
||||
x.bubbles.removeNode()
|
||||
x.removeNode()
|
||||
|
||||
def gainLaff(self):
|
||||
if base.localAvatar.getHp()!=base.localAvatar.getMaxHp():
|
||||
if self.unloaded:
|
||||
cjMaxer.daAutoer.preTele()
|
||||
self.interest1=base.cr.addInterest(base.localAvatar.defaultShard, 9000, description='5', event=None)
|
||||
self.interest2=base.cr.addInterest(base.localAvatar.defaultShard, 3000, description='5', event=None)
|
||||
self.unloaded=False
|
||||
Sequence(Wait(3),Func(cjMaxer.daAutoer.generateAgain)).start()
|
||||
self.collectLaff()
|
||||
if self.wasInBattle:
|
||||
cjMaxer.daAutoer.enterBattle()
|
||||
|
||||
def loadGagshop(self):
|
||||
if not base.cr.doFind('Clerk'):
|
||||
self.contextId = base.cr.addInterest(base.localAvatar.defaultShard, self.gagshop_zoneId, description='4', event=None)
|
||||
try:
|
||||
if not int(render.find('**/*gagShop_interior_english*').getZ()) == 8**8:
|
||||
render.find('**/*gagShop_interior_english*').setZ(8**8)
|
||||
for k in base.cr.doFindAll('Clerk'):
|
||||
k.nametag.unmanage(base.marginManager)
|
||||
except:
|
||||
pass
|
||||
|
||||
def buyGags(self):
|
||||
desiredInv=self.desiredInv
|
||||
try:
|
||||
maxCarryGags = base.localAvatar.getMaxCarry()
|
||||
if base.cr.doFind('Clerk'):
|
||||
num_gags = 0
|
||||
for inventory_number in base.localAvatar.inventory.makeFromNetString(desiredInv):
|
||||
for k in inventory_number[:-1]:
|
||||
num_gags += k
|
||||
change = base.localAvatar.getMoney() - num_gags
|
||||
oldString = base.localAvatar.inventory.makeNetString()
|
||||
newString = desiredInv[:6] + oldString[6] + desiredInv[7:13] + oldString[13] + desiredInv[14:20] + oldString[20] + desiredInv[21:27] + oldString[27] + desiredInv[28:34] + oldString[34] + desiredInv[35:41] + oldString[41] + desiredInv[42:48] + oldString[48]
|
||||
for clerk in base.cr.doFindAll('Clerk'):
|
||||
clerk.setMovie=lambda *args,**kwds: None
|
||||
clerk.freeAvatar=lambda *args: None
|
||||
clerk.sendUpdate('avatarEnter')
|
||||
clerk.sendUpdate('setInventory', [newString, change, 1])
|
||||
|
||||
money = base.localAvatar.getMoney()
|
||||
maxMoney = base.localAvatar.getMaxMoney()
|
||||
base.cr.bankManager.d_transferMoney(money - maxMoney)
|
||||
except:
|
||||
pass
|
||||
|
||||
def unloadGagshop(self):
|
||||
if hasattr(self, 'contextId'):
|
||||
try:
|
||||
base.cr.removeInterest(self.contextId)
|
||||
except:
|
||||
pass
|
||||
|
||||
def restock(self):
|
||||
try:
|
||||
if base.localAvatar.inventory.inventory[self.firstTrack][self.desiredLevel1]<2 or base.localAvatar.inventory.inventory[self.secondTrack][self.desiredLevel2]<2 or base.localAvatar.inventory.inventory[self.thirdTrack][self.desiredLevel3]<2:
|
||||
Sequence(Func(self.loadGagshop),Wait(1),Func(self.buyGags),Wait(0.5),Func(self.unloadGagshop)).start()
|
||||
|
||||
except:
|
||||
pass
|
||||
|
||||
def revertFunctions(self):
|
||||
self.noToons.finish()
|
||||
try:
|
||||
base.cr.removeInterest(self.interest1)
|
||||
base.cr.removeInterest(self.interest2)
|
||||
self.unloaded=True
|
||||
except:
|
||||
pass
|
||||
|
||||
class OtherFunctions:
|
||||
oldBrrInit=BRPlayground.BRPlayground.__init__
|
||||
oldEnterWalk=LawbotHQExterior.LawbotHQExterior.enterWalk
|
||||
oldEnterReward=DistributedBattle.DistributedBattle.enterReward
|
||||
oldDenyBattle=DistributedSuit.denyBattle
|
||||
oldSendUpdate=DistributedObject.DistributedObject.sendUpdate
|
||||
oldEnterHealth=HealthForceAcknowledge.HealthForceAcknowledge.enter
|
||||
oldSetAnim=LocalToon.LocalToon.setAnimState
|
||||
oldPostInvite=DistributedBoardingParty.DistributedBoardingParty.postInvite
|
||||
|
||||
|
||||
def __init__(self):
|
||||
self.shouldContinue=False
|
||||
self.lastCogId=0
|
||||
self.bossCount=0
|
||||
self.onlyDA=False
|
||||
self.canSetParentAgain=True
|
||||
self.isHealing=False
|
||||
self.isGlitched=False
|
||||
self.numberToSuit={0:'Bottom Feeder',1:'Bloodsucker',2:'Double Talker',3:'Ambulance Chaser',
|
||||
4:'Back Stabber',5:'Spin Doctor',6:'Legal Eagle',7:'Big Wig'}
|
||||
BRPlayground.BRPlayground.__init__=lambda *args:self.newBrrInit(*args)
|
||||
LawbotHQExterior.LawbotHQExterior.enterWalk=lambda newSelf,*args: self.newEnterWalk(newSelf,*args)
|
||||
DistributedBattle.DistributedBattle.enterReward=lambda newSelf,*args: self.newEnterReward(newSelf,*args)
|
||||
DistributedSuit.denyBattle=lambda *args: self.newDenyBattle(*args)
|
||||
LocalToon.LocalToon.setAnimState=lambda *args,**kwds:self.newSetAnimState(*args,**kwds)
|
||||
HealthForceAcknowledge.HealthForceAcknowledge.enter=lambda newSelf,hplevel: self.newEnterHealth(newSelf,hplevel)
|
||||
DistributedBoardingParty.DistributedBoardingParty.postInvite=lambda newSelf,leaderId,inviterId: self.newPostInvite(newSelf,leaderId,inviterId)
|
||||
|
||||
def attack(self):
|
||||
try:
|
||||
for battle in base.cr.doFindAll('battle'):
|
||||
if len(battle.suits)>1:
|
||||
for suit in battle.suits:
|
||||
if suit.getName()!='Skelecog':
|
||||
attackSuit=suit
|
||||
else:
|
||||
attackSuit=battle.suits[0]
|
||||
|
||||
if base.localAvatar.inventory.inventory[cjMaxer.restock.firstTrack][cjMaxer.restock.desiredLevel1]>0:
|
||||
battle.sendUpdate('requestAttack', [cjMaxer.restock.firstTrack, cjMaxer.restock.desiredLevel1, attackSuit.doId])
|
||||
else:
|
||||
break
|
||||
|
||||
if base.localAvatar.getHp()<(base.localAvatar.getMaxHp()*0.9) or self.isHealing:
|
||||
|
||||
if base.localAvatar.inventory.inventory[cjMaxer.restock.secondTrack][cjMaxer.restock.desiredLevel2]>0:
|
||||
battle.sendUpdate('requestAttack', [cjMaxer.restock.secondTrack, cjMaxer.restock.desiredLevel2, base.localAvatar.doId])
|
||||
else:
|
||||
break
|
||||
|
||||
if base.localAvatar.inventory.inventory[cjMaxer.restock.thirdTrack][cjMaxer.restock.desiredLevel3]>0:
|
||||
battle.sendUpdate('requestAttack', [cjMaxer.restock.thirdTrack, cjMaxer.restock.desiredLevel3, attackSuit.doId])
|
||||
else:
|
||||
break
|
||||
|
||||
else:
|
||||
if base.localAvatar.inventory.inventory[cjMaxer.restock.thirdTrack][cjMaxer.restock.desiredLevel3]>0:
|
||||
battle.sendUpdate('requestAttack', [cjMaxer.restock.thirdTrack, cjMaxer.restock.desiredLevel3, attackSuit.doId])
|
||||
else:
|
||||
break
|
||||
except:
|
||||
pass
|
||||
|
||||
def sendUpdateHook(self, newself, fieldName, args=[], sendToId=None):
|
||||
if fieldName=="requestAttack":
|
||||
self.oldSendUpdate(newself,"requestAttack", args, sendToId)
|
||||
self.oldSendUpdate(newself,"movieDone",[])
|
||||
newself.d_rewardDone(base.localAvatar.doId)
|
||||
else:
|
||||
self.oldSendUpdate(newself,fieldName, args, sendToId)
|
||||
|
||||
def newBrrInit(self,*args):
|
||||
self.oldBrrInit(*args)
|
||||
if self.shouldContinue:
|
||||
cjMaxer.daAutoer.gainLaffSeq.finish()
|
||||
cjMaxer.daAutoer.generateAgain()
|
||||
cjMaxer.daAutoer.attackSeq.finish()
|
||||
cjMaxer.restock.wasInBattle=False
|
||||
self.checkNotices()
|
||||
|
||||
def newEnterHealth(self,newSelf,hplevel):
|
||||
try:
|
||||
self.oldEnterHealth(newSelf,hplevel)
|
||||
newSelf.handleOk(base.localAvatar.getHp())
|
||||
newSelf.exit()
|
||||
if self.shouldContinue:
|
||||
Sequence(Wait(2),Func(self.checkNotices)).start()
|
||||
except:
|
||||
pass
|
||||
|
||||
def newPostInvite(self,newSelf,leaderId,inviterId):
|
||||
if leaderId==base.localAvatar.doId:
|
||||
newSelf.sendUpdate('requestAcceptInvite',[inviterId,leaderId])
|
||||
else:
|
||||
self.oldPostInvite(newSelf,leaderId,inviterId)
|
||||
|
||||
def newEnterWalk(self,newSelf,*args):
|
||||
self.oldEnterWalk(newSelf,args)
|
||||
if self.shouldContinue and len(args)>0:
|
||||
base.localAvatar.setWantBattles(False)
|
||||
self.checkNotices()
|
||||
|
||||
def newEnterReward(self,newSelf,*args):
|
||||
self.oldEnterReward(newSelf,*args)
|
||||
if self.shouldContinue and self.isHealing:
|
||||
if base.localAvatar.getHp()>96:
|
||||
cjMaxer.daAutoer.attackSeq.finish()
|
||||
self.isHealing=False
|
||||
Sequence(Wait(1),Func(self.checkNotices)).start()
|
||||
else:
|
||||
Sequence(Wait(1),Func(self.enterRandomBattle)).start()
|
||||
|
||||
def newDenyBattle(self,*args):
|
||||
self.oldDenyBattle(*args)
|
||||
if self.shouldContinue and self.isHealing and self.lastCogId==args[0].doId:
|
||||
self.enterRandomBattle()
|
||||
|
||||
def newSetAnimState(self,*args,**kwds):
|
||||
self.oldSetAnim(*args,**kwds)
|
||||
if self.canSetParentAgain:
|
||||
base.localAvatar.d_setParent(1)
|
||||
self.canSetParentAgain=False
|
||||
Sequence(Wait(2),Func(self.doUnsetCanSetParentAgain)).start()
|
||||
|
||||
def doUnsetCanSetParentAgain(self):
|
||||
self.canSetParentAgain=True
|
||||
|
||||
def checkNotices(self):
|
||||
if self.shouldEnd:
|
||||
self.shouldContinue=False
|
||||
base.localAvatar.setWantBattles(True)
|
||||
if self.haveJb():
|
||||
if self.shouldContinue:
|
||||
if self.getNoticesLeft()==0 and not self.onlyDA:
|
||||
if base.cr.doFind('DistributedCogHQDoor') and base.localAvatar.getZoneId()>=13000 and base.localAvatar.getZoneId()<13100:
|
||||
cjMaxer.cjAutoer.start()
|
||||
else:
|
||||
cjMaxer.restock.restock()
|
||||
cjMaxer.restock.collectLaff()
|
||||
self.walk()
|
||||
cjMaxer.autoerGui.display.newLine('Teleporting to lawbot hq')
|
||||
Sequence(Wait(2),Func(self.teleBack)).start()
|
||||
else:
|
||||
if base.cr.doFind('DistributedCogHQDoor') and base.localAvatar.getZoneId()>=13000 and base.localAvatar.getZoneId()<13100:
|
||||
if (base.localAvatar.getHp()>96 and self.getNoticesLeft()>10) or self.isGlitched:
|
||||
cjMaxer.daAutoer.start()
|
||||
else:
|
||||
cjMaxer.daAutoer.attackSeq.loop()
|
||||
self.isHealing=True
|
||||
self.enterRandomBattle()
|
||||
else:
|
||||
cjMaxer.restock.restock()
|
||||
cjMaxer.restock.collectLaff()
|
||||
self.walk()
|
||||
cjMaxer.autoerGui.display.newLine('Teleporting to lawbot hq')
|
||||
Sequence(Wait(2),Func(self.teleBack)).start()
|
||||
else:
|
||||
cjMaxer.restock.noToons.finish()
|
||||
try:
|
||||
base.cr.removeInterest(cjMaxer.restock.interest1)
|
||||
base.cr.removeInterest(cjMaxer.restock.interest2)
|
||||
cjMaxer.restock.unloaded=True
|
||||
except:
|
||||
pass
|
||||
base.localAvatar.setSystemMessage(0,"Thanks for using freshollie's cj maxer")
|
||||
cjMaxer.autoerGui.display.newLine('Stopped')
|
||||
else:
|
||||
cjMaxer.autoerGui.display.newLine('Out of jellybeans')
|
||||
base.localAvatar.setSystemMessage(0,'You have run out of jelly beans, please use the fishing code to gain some')
|
||||
|
||||
def getNoticesLeft(self):
|
||||
return CogDisguiseGlobals.getTotalMerits(base.localAvatar,1)-base.localAvatar.cogMerits[1]
|
||||
|
||||
def walk(self):
|
||||
try:
|
||||
base.cr.playGame.getPlace().fsm.forceTransition('walk')
|
||||
except:
|
||||
pass
|
||||
|
||||
def teleBack(self,zone=13000):
|
||||
try:
|
||||
self.walk()
|
||||
base.cr.playGame.getPlace().handleBookCloseTeleport(zone, zone)
|
||||
except:
|
||||
pass
|
||||
|
||||
def onlyDoDA(self):
|
||||
self.onlyDA=True
|
||||
base.localAvatar.setSystemMessage(0,'CJ maxer set to only do the DA Office')
|
||||
|
||||
def doBoth(self):
|
||||
self.onlyDA=False
|
||||
base.localAvatar.setSystemMessage(0,'CJ maxer set to do both the DA Office and the CJ')
|
||||
|
||||
def haveJb(self):
|
||||
if base.localAvatar.cogLevels[0]==49:
|
||||
return True
|
||||
elif base.localAvatar.getTotalMoney()<100:
|
||||
return False
|
||||
else:
|
||||
return True
|
||||
|
||||
def enterRandomBattle(self):
|
||||
battles = []
|
||||
cogList = base.cr.doFindAll("render")
|
||||
for x in cogList:
|
||||
if isinstance(x, DistributedSuit):
|
||||
if x.activeState == 6:
|
||||
battles.append(x)
|
||||
if battles != []:
|
||||
self.walk()
|
||||
battle = random.choice(battles)
|
||||
pos, hpr = battle.getPos(), battle.getHpr()
|
||||
base.localAvatar.setPosHpr(pos, hpr)
|
||||
battle.d_requestBattle(pos, hpr)
|
||||
self.lastCogId=battle.doId
|
||||
else:
|
||||
pass
|
||||
|
||||
def setStop(self):
|
||||
self.shouldEnd=True
|
||||
base.localAvatar.setSystemMessage(1,"The Autoer will stop at the end of this run")
|
||||
cjMaxer.autoerGui.stopTimer()
|
||||
|
||||
def start(self):
|
||||
DistributedObject.DistributedObject.sendUpdate=lambda newself, fieldName, args=[], sendToId=None: self.sendUpdateHook(newself, fieldName, args, sendToId)
|
||||
self.bossCount=0
|
||||
self.shouldContinue=True
|
||||
self.shouldEnd=False
|
||||
cjMaxer.autoerGui.startTimer()
|
||||
emptyShardList=[]
|
||||
for shard in base.cr.activeDistrictMap:
|
||||
if base.cr.activeDistrictMap[shard].avatarCount<30:
|
||||
emptyShardList.append(shard)
|
||||
if emptyShardList==[]:
|
||||
emptyShardList=[650000000, 754000000, 608000000, 756000000, 658000000, 712000000, 360000000, 410000000, 620000000, 454000000, 726000000, 362000000, 688000000, 316000000]
|
||||
if base.localAvatar.defaultShard not in emptyShardList:
|
||||
cjMaxer.autoerGui.display.newLine('TPing to an empty district')
|
||||
base.cr.playGame.getPlace().requestTeleport(13000,13000,random.choice(emptyShardList),None)
|
||||
else:
|
||||
self.checkNotices()
|
||||
cjMaxer.restock.noToons.loop()
|
||||
|
||||
def revertFunctions(self):
|
||||
LocalToon.LocalToon.setAnimState=self.oldSetAnim
|
||||
BRPlayground.BRPlayground.__init__=self.oldBrrInit
|
||||
LawbotHQExterior.LawbotHQExterior.enterWalk=self.oldEnterWalk
|
||||
DistributedBattle.DistributedBattle.enterReward=self.oldEnterReward
|
||||
DistributedSuit.denyBattle=self.oldDenyBattle
|
||||
DistributedObject.DistributedObject.sendUpdate=self.oldSendUpdate
|
||||
HealthForceAcknowledge.HealthForceAcknowledge.enter=self.oldEnterHealth
|
||||
DistributedBoardingParty.DistributedBoardingParty.postInvite=self.oldPostInvite
|
||||
|
||||
class CjAutoer:
|
||||
oldBossEnterElevator=DistributedLawbotBoss.DistributedLawbotBoss.enterElevator
|
||||
oldEnterBattleThree=DistributedLawbotBoss.DistributedLawbotBoss.enterBattleThree
|
||||
oldEnterPrepareBattleTwo=DistributedLawbotBoss.DistributedLawbotBoss.enterPrepareBattleTwo
|
||||
oldEnterPrepareBattleThree=DistributedLawbotBoss.DistributedLawbotBoss.enterPrepareBattleThree
|
||||
oldEnterEpilogue=DistributedLawbotBoss.DistributedLawbotBoss.enterEpilogue
|
||||
oldEnterRollToBattleTwo=DistributedLawbotBoss.DistributedLawbotBoss.enterRollToBattleTwo
|
||||
oldEnterWaitForInput=DistributedBattleFinal.DistributedBattleFinal.enterWaitForInput
|
||||
oldBossEnterIntro=DistributedLawbotBoss.DistributedLawbotBoss.enterIntroduction
|
||||
oldAvatarExit=DistributedCogHQDoor.DistributedCogHQDoor.avatarExit
|
||||
|
||||
def __init__(self):
|
||||
DistributedLawbotBoss.DistributedLawbotBoss.enterElevator=lambda newSelf: self.newBossEnterElevator(newSelf)
|
||||
DistributedLawbotBoss.DistributedLawbotBoss.enterIntroduction=lambda newSelf,*args: self.newBossEnterIntro(newSelf,*args)
|
||||
DistributedLawbotBoss.DistributedLawbotBoss.enterRollToBattleTwo=lambda newSelf: self.newEnterRollToBattleTwo(newSelf)
|
||||
DistributedLawbotBoss.DistributedLawbotBoss.enterBattleThree=lambda newSelf: self.newEnterBattleThree(newSelf)
|
||||
DistributedBattleFinal.DistributedBattleFinal.enterWaitForInput=lambda *args: self.newEnterWaitForInput(*args)
|
||||
DistributedCogHQDoor.DistributedCogHQDoor.avatarExit=lambda newSelf,id: self.newAvatarExit(newSelf,id)
|
||||
DistributedLawbotBoss.DistributedLawbotBoss.enterPrepareBattleThree=lambda newSelf: self.newEnterPrepareBattleThree(newSelf)
|
||||
DistributedLawbotBoss.DistributedLawbotBoss.enterPrepareBattleTwo=lambda newSelf: self.newEnterPrepareBattleTwo(newSelf)
|
||||
DistributedLawbotBoss.DistributedLawbotBoss.enterEpilogue=lambda newSelf: self.newEnterEpilogue(newSelf)
|
||||
|
||||
def newBossEnterElevator(self,newSelf):
|
||||
self.oldBossEnterElevator(newSelf)
|
||||
if cjMaxer.otherFunctions.shouldContinue:
|
||||
cjMaxer.autoerGui.display.newLine('Skipping Elevator')
|
||||
newSelf._DistributedBossCog__doneElevator()
|
||||
|
||||
def newBossEnterIntro(self,newSelf,*args):
|
||||
self.oldBossEnterIntro(newSelf,*args)
|
||||
if cjMaxer.otherFunctions.shouldContinue:
|
||||
newSelf.exitIntroduction()
|
||||
cjMaxer.autoerGui.display.newLine('Skipping CJ introduction')
|
||||
|
||||
def newEnterEpilogue(self,newSelf):
|
||||
self.oldEnterEpilogue(newSelf)
|
||||
if cjMaxer.otherFunctions.shouldContinue:
|
||||
cjMaxer.otherFunctions.bossCount+=1
|
||||
newSelf._DistributedLawbotBoss__doneEpilogue()
|
||||
cjMaxer.otherFunctions.walk()
|
||||
cjMaxer.otherFunctions.teleBack()
|
||||
cjMaxer.autoerGui.display.newLine('Finished CJ')
|
||||
|
||||
def newEnterRollToBattleTwo(self,newSelf):
|
||||
self.oldEnterRollToBattleTwo(newSelf)
|
||||
if cjMaxer.otherFunctions.shouldContinue:
|
||||
newSelf.exitRollToBattleTwo()
|
||||
cjMaxer.autoerGui.display.newLine('Skipping cutscene')
|
||||
|
||||
def newEnterPrepareBattleTwo(self,newSelf):
|
||||
self.oldEnterPrepareBattleTwo(newSelf)
|
||||
if cjMaxer.otherFunctions.shouldContinue:
|
||||
newSelf._DistributedLawbotBoss__onToBattleTwo(33)
|
||||
cjMaxer.autoerGui.display.newLine('Skipping dialogue 1')
|
||||
cjMaxer.autoerGui.display.newLine('Waiting for cannon round...')
|
||||
|
||||
def newEnterPrepareBattleThree(self,newSelf):
|
||||
self.oldEnterPrepareBattleThree(newSelf)
|
||||
if cjMaxer.otherFunctions.shouldContinue:
|
||||
newSelf._DistributedLawbotBoss__onToBattleThree(33)
|
||||
cjMaxer.autoerGui.display.newLine('Skipping dialogue 2')
|
||||
|
||||
def newEnterBattleThree(self,newSelf):
|
||||
self.oldEnterBattleThree(newSelf)
|
||||
if cjMaxer.otherFunctions.shouldContinue:
|
||||
self.endBattle()
|
||||
cjMaxer.autoerGui.display.newLine('Completing evidence round')
|
||||
|
||||
def newEnterWaitForInput(self,*args):
|
||||
self.oldEnterWaitForInput(*args)
|
||||
if cjMaxer.otherFunctions.shouldContinue:
|
||||
self.exploit()
|
||||
cjMaxer.autoerGui.display.newLine('Skipping Battle')
|
||||
|
||||
def newAvatarExit(self,newSelf,id):
|
||||
self.oldAvatarExit(newSelf,id)
|
||||
if base.cr.doFind('Elevator') and id==base.localAvatar.doId and cjMaxer.otherFunctions.shouldContinue and base.localAvatar.getZoneId()==13100:
|
||||
cjMaxer.otherFunctions.walk()
|
||||
cjMaxer.autoerGui.display.newLine('Heading to CJ')
|
||||
base.cr.doFind('Boarding').sendUpdate('requestInvite',[base.localAvatar.doId])
|
||||
base.cr.doFind('Boarding').sendUpdate('requestGoToSecondTime',[base.cr.doFind('Elevator').doId])
|
||||
|
||||
def destroyBattle(self):
|
||||
base.cr.doFind('SafeZone').sendUpdate('enterSafeZone')
|
||||
|
||||
def exploit(self):
|
||||
Sequence(Func(self.destroyBattle), Wait(.5), Func(cjMaxer.otherFunctions.walk)).start()
|
||||
|
||||
def endBattle(self):
|
||||
CJ = base.cr.doFind('Chief Justice')
|
||||
killSeq=Sequence()
|
||||
for i in range(20):
|
||||
killSeq.append(Func(CJ.sendUpdate,'hitBoss', [100]))
|
||||
killSeq.append(Wait(0.05))
|
||||
killSeq.start()
|
||||
|
||||
def start(self):
|
||||
cjMaxer.autoerGui.display.newLine('Starting Chief Justice')
|
||||
cjMaxer.autoerGui.display.newLine('Entering Lobby')
|
||||
base.localAvatar.setWantBattles(True)
|
||||
firstId=base.cr.doFindAll('CogHQDoor')[0].doId
|
||||
if isinstance(base.cr.doId2do.get(firstId-2),DistributedCogHQDoor.DistributedCogHQDoor):
|
||||
base.cr.doId2do.get(firstId-2).sendUpdate('requestEnter')
|
||||
else:
|
||||
base.cr.doId2do.get(firstId).sendUpdate('requestEnter')
|
||||
|
||||
|
||||
def revertFunctions(self):
|
||||
DistributedLawbotBoss.DistributedLawbotBoss.enterElevator=self.oldBossEnterElevator
|
||||
DistributedLawbotBoss.DistributedLawbotBoss.enterBattleThree=self.oldEnterBattleThree
|
||||
DistributedLawbotBoss.DistributedLawbotBoss.enterPrepareBattleTwo=self.oldEnterPrepareBattleTwo
|
||||
DistributedLawbotBoss.DistributedLawbotBoss.enterPrepareBattleThree=self.oldEnterPrepareBattleThree
|
||||
DistributedLawbotBoss.DistributedLawbotBoss.enterEpilogue=self.oldEnterEpilogue
|
||||
DistributedLawbotBoss.DistributedLawbotBoss.enterRollToBattleTwo=self.oldEnterRollToBattleTwo
|
||||
DistributedBattleFinal.DistributedBattleFinal.enterWaitForInput=self.oldEnterWaitForInput
|
||||
DistributedLawbotBoss.DistributedLawbotBoss.enterIntroduction=self.oldBossEnterIntro
|
||||
DistributedCogHQDoor.DistributedCogHQDoor.avatarExit=self.oldAvatarExit
|
||||
|
||||
class DAautoer:
|
||||
oldElevatorAnnounceGenerate=DistributedLawOfficeElevatorExt.DistributedLawOfficeElevatorExt.announceGenerate
|
||||
oldEnterStageReward=DistributedStageBattle.DistributedStageBattle.enterStageReward
|
||||
oldEnterReward=DistributedStageBattle.DistributedStageBattle.enterReward
|
||||
oldStageGenerate=DistributedStage.DistributedStage.announceGenerate
|
||||
|
||||
def __init__(self,cjMaxer):
|
||||
self.gainLaffSeq=Sequence(Func(cjMaxer.restock.gainLaff),Wait(3.0))
|
||||
self.attackSeq=Sequence(Func(cjMaxer.restock.restock),Wait(1.0),Func(cjMaxer.otherFunctions.attack),Wait(1.0))
|
||||
DistributedLawOfficeElevatorExt.DistributedLawOfficeElevatorExt.announceGenerate=lambda *args:self.newElevatorAnnounceGenerate(*args)
|
||||
DistributedStageBattle.DistributedStageBattle.enterStageReward=lambda *args:self.newEnterStageReward(*args)
|
||||
DistributedStageBattle.DistributedStageBattle.enterReward=lambda *args:self.newEnterReward(*args)
|
||||
DistributedStage.DistributedStage.announceGenerate=lambda newSelf,*args:self.newStageGenerate(newSelf,*args)
|
||||
base.cr.doFind('SafeZone').d_enterSafeZone=lambda *args: self.newSafeZone(*args)
|
||||
base.localAvatar.died=lambda *args: self.newSafeZone(*args)
|
||||
DistributedStageBattle.DistributedStageBattle.d_toonDied=lambda *args: self.newSafeZone(*args)
|
||||
|
||||
def newStageAnnounceGenerate(self,newSelf,*args):
|
||||
self.oldStageAnnounceGenerate(newSelf,*args)
|
||||
if cjMaxer.otherFunctions.shouldContinue:
|
||||
self.floorNum+=1
|
||||
cjMaxer.autoerGui.display.newLine('Entering Floor '+str(self.floorNum))
|
||||
Sequence(Wait(3),Func(self.doFloor,newSelf)).start()
|
||||
|
||||
def newElevatorAnnounceGenerate(self,*args):
|
||||
self.oldElevatorAnnounceGenerate(*args)
|
||||
if cjMaxer.otherFunctions.shouldContinue and 'Office A' in args[0].getDestName():
|
||||
self.workOutOfficeNeeded()
|
||||
Sequence(Wait(2),Func(self.boardElevator)).start()
|
||||
|
||||
def newEnterStageReward(self,*args):
|
||||
self.oldEnterStageReward(*args)
|
||||
if cjMaxer.otherFunctions.shouldContinue:
|
||||
cjMaxer.autoerGui.display.newLine('Completed Final Battle')
|
||||
self.gainLaffSeq.finish()
|
||||
self.attackSeq.finish()
|
||||
self.generateAgain()
|
||||
cjMaxer.otherFunctions.isGlitched=False
|
||||
Sequence(Wait(2),Func(cjMaxer.otherFunctions.teleBack)).start()
|
||||
|
||||
def newEnterReward(self,*args):
|
||||
self.oldEnterReward(*args)
|
||||
if cjMaxer.otherFunctions.shouldContinue:
|
||||
cjMaxer.autoerGui.display.newLine('Error no notices received')
|
||||
self.gainLaffSeq.finish()
|
||||
self.attackSeq.finish()
|
||||
self.generateAgain()
|
||||
cjMaxer.otherFunctions.teleBack()
|
||||
cjMaxer.otherFunctions.isGlitched=True
|
||||
|
||||
def newStageGenerate(self,newSelf,*args):
|
||||
self.oldStageGenerate(newSelf,*args)
|
||||
if cjMaxer.otherFunctions.shouldContinue:
|
||||
self.floorNum+=1
|
||||
cjMaxer.autoerGui.display.newLine('Entering Floor '+str(self.floorNum))
|
||||
Sequence(Wait(3),Func(self.doFloor,newSelf)).start()
|
||||
|
||||
def newSafeZone(self,*args):
|
||||
Sequence(Wait(1),Func(cjMaxer.otherFunctions.walk),Func(base.localAvatar.collisionsOff)).start()
|
||||
cjMaxer.restock.wasInBattle=True
|
||||
cjMaxer.autoerGui.display.newLine('Died, recovering')
|
||||
|
||||
def enterBattle(self):
|
||||
if base.localAvatar.getHp()>0:
|
||||
try:
|
||||
base.cr.doFind('DistributedStage.DistributedStage').warpToRoom(2)
|
||||
except:
|
||||
pass
|
||||
base.localAvatar.collisionsOn()
|
||||
cjMaxer.restock.wasInBattle=False
|
||||
|
||||
def workOutOfficeNeeded(self):
|
||||
noticesNeeded=cjMaxer.otherFunctions.getNoticesLeft()
|
||||
if noticesNeeded<98 or base.localAvatar.getHp()<81:
|
||||
self.office='Office A'
|
||||
elif noticesNeeded<190 or base.localAvatar.getHp()<86:
|
||||
self.office='Office B'
|
||||
elif noticesNeeded<324 or base.localAvatar.getHp()<96:
|
||||
self.office='Office C'
|
||||
else:
|
||||
self.office='Office D'
|
||||
|
||||
def doFloor(self,floor):
|
||||
if base.cr.doFind('DistributedElevatorFloor'):
|
||||
base.cr.doFind('DistributedElevatorFloor').handleEnterSphere(base.localAvatar.doId)
|
||||
cjMaxer.autoerGui.display.newLine('Boarding Floor '+str(self.floorNum)+' elevator')
|
||||
else:
|
||||
floor.warpToRoom(2)
|
||||
cjMaxer.autoerGui.display.newLine('Entering Final Battle')
|
||||
|
||||
def boardElevator(self):
|
||||
for elevator in base.cr.doFindAll('Elevator'):
|
||||
if self.office in elevator.getDestName():
|
||||
if cjMaxer.otherFunctions.isGlitched:
|
||||
cjMaxer.autoerGui.display.newLine('Fixing a glitch')
|
||||
elevator.sendUpdate('requestBoard')
|
||||
else:
|
||||
base.cr.doFind('Boarding').sendUpdate('requestInvite',[base.localAvatar.doId])
|
||||
base.cr.doFind('Boarding').sendUpdate('requestGoToSecondTime',[elevator.doId])
|
||||
cjMaxer.autoerGui.display.newLine('Heading to Office: '+self.office.split()[-1])
|
||||
self.gainLaffSeq.loop()
|
||||
self.attackSeq.loop()
|
||||
self.floorNum=0
|
||||
return
|
||||
|
||||
def goToElevators(self):
|
||||
firstId=base.cr.doFindAll('CogHQDoor')[0].doId
|
||||
if isinstance(base.cr.doId2do.get(firstId+2),DistributedCogHQDoor.DistributedCogHQDoor):
|
||||
base.cr.doId2do.get(firstId+2).sendUpdate('requestEnter')
|
||||
else:
|
||||
base.cr.doId2do.get(firstId).sendUpdate('requestEnter')
|
||||
|
||||
def start(self):
|
||||
base.localAvatar.setWantBattles(True)
|
||||
self.goToElevators()
|
||||
|
||||
def preTele(self):
|
||||
DistributedTrolley.DistributedTrolley.__init__ = newInit
|
||||
DistributedPartyGate.DistributedPartyGate.__init__ = newInit
|
||||
DistributedDoor.DistributedDoor.__init__ = newInit
|
||||
base.localAvatar.stopLookAroundNow()
|
||||
|
||||
def generateAgain(self):
|
||||
DistributedTrolley.DistributedTrolley.__init__ = oldTrolleyInit
|
||||
DistributedPartyGate.DistributedPartyGate.__init__ = oldPartyInit
|
||||
DistributedDoor.DistributedDoor.__init__ = oldDoorInit
|
||||
base.localAvatar.findSomethingToLookAt = cjMaxer.restock.oldFindSomethingToLookAt
|
||||
ToonHead.ToonHead._ToonHead__lookAround = cjMaxer.restock.oldLookAround
|
||||
|
||||
def revertFunctions(self):
|
||||
DistributedLawOfficeElevatorExt.DistributedLawOfficeElevatorExt.announceGenerate=self.oldElevatorAnnounceGenerate
|
||||
DistributedStageBattle.DistributedStageBattle.enterStageReward=self.oldEnterStageReward
|
||||
DistributedStageBattle.DistributedStageBattle.enterReward=self.oldEnterReward
|
||||
DistributedStage.DistributedStage.announceGenerate=self.oldStageGenerate
|
||||
base.cr.doFind('SafeZone').d_enterSafeZone=lambda *args: None
|
||||
base.localAvatar.died=lambda *args: None
|
||||
DistributedStageBattle.DistributedStageBattle.d_toonDied=lambda *args: None
|
||||
self.attackSeq.finish()
|
||||
self.gainLaffSeq.finish()
|
||||
self.generateAgain()
|
||||
|
||||
class CJMaxer:
|
||||
def __init__(self):
|
||||
self.restock=restock()
|
||||
self.otherFunctions=OtherFunctions()
|
||||
self.cjAutoer=CjAutoer()
|
||||
self.daAutoer=DAautoer(self)
|
||||
self.autoerGui=AutoerGui('CJ Maxer',['Run Time',"Number of CJ's","CJ's/Hour",'Suit','Notices needed'],\
|
||||
['self.hours+":"+self.minutes+":"+self.seconds','str(cjMaxer.otherFunctions.bossCount)',\
|
||||
'str(self.workOutNumberAnHour(cjMaxer.otherFunctions.bossCount))',\
|
||||
'str(cjMaxer.otherFunctions.numberToSuit[base.localAvatar.cogTypes[1]])+" lvl "+str(base.localAvatar.cogLevels[1]+1)','str(cjMaxer.otherFunctions.getNoticesLeft())'],\
|
||||
'CJ MXR','law')
|
||||
|
||||
def revert(self):
|
||||
self.restock.revertFunctions()
|
||||
self.daAutoer.revertFunctions()
|
||||
self.cjAutoer.revertFunctions()
|
||||
self.otherFunctions.revertFunctions()
|
||||
self.autoerGui.destroy()
|
||||
DistributedNPCFisherman.DistributedNPCFisherman.handleCollisionSphereEnter=oldHandleEnterCollisionSphereFisherman
|
||||
DistributedNPCPartyPerson.DistributedNPCPartyPerson.handleCollisionSphereEnter=oldHandleEnterCollisionSphereParty
|
||||
DistributedNPCFisherman.DistributedNPCFisherman.announceGenerate=oldFisherAnnounceGenerate
|
||||
DistributedNPCPartyPerson.DistributedNPCPartyPerson.announceGenerate=oldPartyPlannerAnnounceGenerate
|
||||
|
||||
global cjMaxer
|
||||
cjMaxer=CJMaxer()
|
||||
|
|
@ -0,0 +1,838 @@
|
|||
import random
|
||||
import __main__
|
||||
import time
|
||||
from toontown.battle import BattlePlace
|
||||
from direct.interval.IntervalGlobal import *
|
||||
from toontown.safezone import *
|
||||
from toontown.toon import *
|
||||
from toontown.toonbase import ToontownBattleGlobals
|
||||
from toontown.suit import DistributedSuit
|
||||
from toontown.suit import SuitDNA
|
||||
from toontown.battle import DistributedBattle
|
||||
from toontown.building import DistributedDoor
|
||||
from toontown.distributed import ToontownClientRepository
|
||||
from toontown.effects import DistributedFireworkShow
|
||||
for attribute in dir(DistributedFireworkShow.DistributedFireworkShow):
|
||||
exec('DistributedFireworkShow.DistributedFireworkShow.'+attribute+'=lambda *args,**kwds: None')
|
||||
|
||||
HOODZONES=range(1000,9001,1000)
|
||||
HQZONES=[10000,11000,12000,13000]
|
||||
base.localAvatar.setTeleportAccess([1000, 2000, 3000, 4000, 5000, 6000, 7000, 8000, 9000, 10000, 11000, 12000, 13000])
|
||||
base.localAvatar.setHoodsVisited([1000, 2000, 3000, 4000, 5000, 6000, 7000, 8000, 9000, 10000, 11000, 12000, 13000])
|
||||
|
||||
ToontownBattleGlobals.SkipMovie=1
|
||||
oldDumpShards=ToontownClientRepository.ToontownClientRepository.dumpAllSubShardObjects
|
||||
def newDumpShards(self):
|
||||
try:
|
||||
oldDumpShards(self)
|
||||
except:
|
||||
pass
|
||||
ToontownClientRepository.ToontownClientRepository.dumpAllSubShardObjects=newDumpShards
|
||||
|
||||
suitToDamage={1:4,2:6,3:9,4:13,5:15,6:19,7:22,8:25,9:27,10:29,11:30,12:40}
|
||||
|
||||
faceOffHook = lambda self, ts, name, callback:self.d_faceOffDone(self)
|
||||
DistributedBattle.DistributedBattle._DistributedBattle__faceOff = faceOffHook
|
||||
|
||||
oldHandleEnterCollisionSphereParty=DistributedNPCPartyPerson.DistributedNPCPartyPerson.handleCollisionSphereEnter
|
||||
DistributedNPCPartyPerson.DistributedNPCPartyPerson.handleCollisionSphereEnter=lambda *args: None
|
||||
oldHandleEnterCollisionSphereFisherman=DistributedNPCFisherman.DistributedNPCFisherman.handleCollisionSphereEnter
|
||||
DistributedNPCFisherman.DistributedNPCFisherman.handleEnterCollisionSphere=lambda *args: None
|
||||
|
||||
hooks='''
|
||||
try:
|
||||
_announceGenerate1
|
||||
except:
|
||||
_announceGenerate1 = DistributedDoor.DistributedDoor.announceGenerate
|
||||
def announceGenerate(self):
|
||||
try:
|
||||
_announceGenerate1(self)
|
||||
except:
|
||||
return None
|
||||
DistributedDoor.DistributedDoor.announceGenerate = announceGenerate
|
||||
try:
|
||||
_announceGenerate2
|
||||
except:
|
||||
_announceGenerate2 = DistributedPartyGate.DistributedPartyGate.announceGenerate
|
||||
def announceGenerate(self):
|
||||
try:
|
||||
_announceGenerate2(self)
|
||||
except:
|
||||
return None
|
||||
DistributedPartyGate.DistributedPartyGate.announceGenerate = announceGenerate
|
||||
try:
|
||||
old__init__
|
||||
except:
|
||||
old__init__ = DistributedTrolley.DistributedTrolley.__init__
|
||||
def new__init__(self, cr):
|
||||
for obj in dir(self):
|
||||
exec('self.%s = lambda *x:None' % obj, globals(), locals())
|
||||
return None
|
||||
DistributedTrolley.DistributedTrolley.__init__ = new__init__
|
||||
try:
|
||||
old__init__2
|
||||
except:
|
||||
old__init__2 = DistributedPartyGate.DistributedPartyGate.__init__
|
||||
def new__init__2(self, cr):
|
||||
for obj in dir(self):
|
||||
exec('self.%s = lambda *x:None' % obj, globals(), locals())
|
||||
return None
|
||||
DistributedPartyGate.DistributedPartyGate.__init__ = new__init__2
|
||||
try:
|
||||
old__init__3
|
||||
except:
|
||||
old__init__3 = DistributedDoor.DistributedDoor.__init__
|
||||
def new__init__3(self, cr):
|
||||
for obj in dir(self):
|
||||
exec('self.%s = lambda *x:None' % obj, globals(), locals())
|
||||
return None
|
||||
DistributedDoor.DistributedDoor.__init__ = new__init__3
|
||||
try:
|
||||
old__init__4
|
||||
except:
|
||||
old__init__4 = DistributedPicnicBasket.DistributedPicnicBasket.__init__
|
||||
def new__init__4(self, cr):
|
||||
for obj in dir(self):
|
||||
exec('self.%s = lambda *x:None' % obj, globals(), locals())
|
||||
return None
|
||||
DistributedPicnicBasket.DistributedPicnicBasket.__init__ = new__init__4
|
||||
base.localAvatar.stopLookAroundNow()
|
||||
base.localAvatar.findSomethingToLookAt = lambda *x:None
|
||||
ToonHead.ToonHead._ToonHead__lookAround = lambda *x:None
|
||||
'''
|
||||
|
||||
|
||||
class Inventory:
|
||||
|
||||
def __init__(self):
|
||||
self.firstTrack=4
|
||||
self.secondTrack=5
|
||||
self.track1StartXp=0
|
||||
self.track2StartXp=0
|
||||
self.useOwnLevels=False
|
||||
self.firstTrackLevel=0
|
||||
self.secondTrackLevel=0
|
||||
self.noTrolley=False
|
||||
self.inBattle=False
|
||||
self.shouldResetClock=False
|
||||
self.numberToName=['ToonUp','Trap','Lure','Sound','Throw','Squirt','Drop']
|
||||
|
||||
def getInv(self,command):
|
||||
if command=="get1":
|
||||
try:
|
||||
return self.firstTrack
|
||||
except:
|
||||
return 4
|
||||
elif command=="get2":
|
||||
try:
|
||||
return self.secondTrack
|
||||
except:
|
||||
return 5
|
||||
elif command=="getLevel1":
|
||||
try:
|
||||
return self.firstTrackLevel
|
||||
except:
|
||||
return 0
|
||||
elif command=="getLevel2":
|
||||
try:
|
||||
return self.secondTrackLevel
|
||||
except:
|
||||
return 0
|
||||
elif command=="useOwnLevels":
|
||||
try:
|
||||
return self.useOwnLevels
|
||||
except:
|
||||
return False
|
||||
|
||||
def setThrow1(self):
|
||||
self.firstTrack=4
|
||||
base.localAvatar.setSystemMessage(0,'Gag trainer set to use throw as first gag',5)
|
||||
self.resetTrack1XpGained()
|
||||
self.resetTrack2XpGained()
|
||||
|
||||
def setThrow2(self):
|
||||
self.secondTrack=4
|
||||
base.localAvatar.setSystemMessage(0,'Gag trainer set to use throw as second gag',5)
|
||||
self.resetTrack1XpGained()
|
||||
self.resetTrack2XpGained()
|
||||
|
||||
def setSquirt1(self):
|
||||
self.firstTrack=5
|
||||
base.localAvatar.setSystemMessage(0,'Gag trainer set to use squirt as first gag',5)
|
||||
self.resetTrack1XpGained()
|
||||
self.resetTrack2XpGained()
|
||||
|
||||
def setSquirt2(self):
|
||||
self.secondTrack=5
|
||||
base.localAvatar.setSystemMessage(0,'Gag trainer set to use squirt as second gag',5)
|
||||
self.resetTrack1XpGained()
|
||||
self.resetTrack2XpGained()
|
||||
|
||||
def setLure1(self):
|
||||
self.firstTrack=2
|
||||
base.localAvatar.setSystemMessage(0,'Gag trainer set to use lure as first gag',5)
|
||||
self.resetTrack1XpGained()
|
||||
self.resetTrack2XpGained()
|
||||
|
||||
def setLure2(self):
|
||||
self.secondTrack=2
|
||||
base.localAvatar.setSystemMessage(0,'Gag trainer set to use lure as second gag',5)
|
||||
self.resetTrack1XpGained()
|
||||
self.resetTrack2XpGained()
|
||||
|
||||
def setTrap1(self):
|
||||
self.firstTrack=1
|
||||
base.localAvatar.setSystemMessage(0,'Gag trainer set to use trap as first gag',5)
|
||||
self.resetTrack1XpGained()
|
||||
self.resetTrack2XpGained()
|
||||
|
||||
def setTrap2(self):
|
||||
self.secondTrack=1
|
||||
base.localAvatar.setSystemMessage(0,'Gag trainer set to use trap as second gag',5)
|
||||
self.resetTrack1XpGained()
|
||||
self.resetTrack2XpGained()
|
||||
|
||||
def setSound1(self):
|
||||
self.firstTrack=3
|
||||
base.localAvatar.setSystemMessage(0,'Gag trainer set to use sound as first gag',5)
|
||||
self.resetTrack1XpGained()
|
||||
self.resetTrack2XpGained()
|
||||
|
||||
def setSound2(self):
|
||||
self.secondTrack=3
|
||||
base.localAvatar.setSystemMessage(0,'Gag trainer set to use sound as second gag',5)
|
||||
self.resetTrack1XpGained()
|
||||
self.resetTrack2XpGained()
|
||||
|
||||
def setDrop1(self):
|
||||
self.firstTrack=6
|
||||
base.localAvatar.setSystemMessage(0,'Gag trainer set to use drop as first gag',5)
|
||||
self.resetTrack1XpGained()
|
||||
self.resetTrack2XpGained()
|
||||
|
||||
def setDrop2(self):
|
||||
self.secondTrack=6
|
||||
base.localAvatar.setSystemMessage(0,'Gag trainer set to use drop as second gag',5)
|
||||
self.resetTrack1XpGained()
|
||||
self.resetTrack2XpGained()
|
||||
|
||||
def setToonUp1(self):
|
||||
self.secondTrack=0
|
||||
base.localAvatar.setSystemMessage(0,'Gag trainer set to use toonup as first gag',5)
|
||||
self.resetTrack1XpGained()
|
||||
self.resetTrack2XpGained()
|
||||
|
||||
def setToonUp2(self):
|
||||
self.secondTrack=0
|
||||
base.localAvatar.setSystemMessage(0,'Gag trainer set to use toonup as second gag',5)
|
||||
|
||||
def track1Set1(self):
|
||||
self.firstTrackLevel=0
|
||||
base.localAvatar.setSystemMessage(0,'Gag trainer set to use level 1 on first track',4)
|
||||
|
||||
def track2Set1(self):
|
||||
self.secondTrackLevel=0
|
||||
base.localAvatar.setSystemMessage(0,'Gag trainer set to use level 1 on second track',4)
|
||||
|
||||
def track1Set2(self):
|
||||
self.firstTrackLevel=1
|
||||
base.localAvatar.setSystemMessage(0,'Gag trainer set to use level 2 on first track',4)
|
||||
|
||||
def track2Set2(self):
|
||||
self.secondTrackLevel=1
|
||||
base.localAvatar.setSystemMessage(0,'Gag trainer set to use level 2 on second track',4)
|
||||
|
||||
def track1Set3(self):
|
||||
self.firstTrackLevel=2
|
||||
base.localAvatar.setSystemMessage(0,'Gag trainer set to use level 3 on first track',4)
|
||||
|
||||
def track2Set3(self):
|
||||
self.secondTrackLevel=2
|
||||
base.localAvatar.setSystemMessage(0,'Gag trainer set to use level 3 on second track',4)
|
||||
|
||||
def track1Set4(self):
|
||||
self.firstTrackLevel=3
|
||||
base.localAvatar.setSystemMessage(0,'Gag trainer set to use level 4 on first track',4)
|
||||
|
||||
def track2Set4(self):
|
||||
self.secondTrackLevel=3
|
||||
base.localAvatar.setSystemMessage(0,'Gag trainer set to use level 4 on second track',4)
|
||||
|
||||
def track1Set5(self):
|
||||
self.firstTrackLevel=4
|
||||
base.localAvatar.setSystemMessage(0,'Gag trainer set to use level 5 on first track',4)
|
||||
|
||||
def track2Set5(self):
|
||||
self.secondTrackLevel=4
|
||||
base.localAvatar.setSystemMessage(0,'Gag trainer set to use level 5 on second track',4)
|
||||
|
||||
def track1Set6(self):
|
||||
self.firstTrackLevel=5
|
||||
base.localAvatar.setSystemMessage(0,'Gag trainer set to use level 6 on first track',4)
|
||||
|
||||
def track2Set6(self):
|
||||
self.secondTrackLevel=5
|
||||
base.localAvatar.setSystemMessage(0,'Gag trainer set to use level 6 on second track',4)
|
||||
|
||||
def useLevelsTrue(self):
|
||||
self.useOwnLevels=True
|
||||
base.localAvatar.setSystemMessage(0,'Gag trainer set to use levels')
|
||||
|
||||
def useLevelsFalse(self):
|
||||
self.useOwnLevels=False
|
||||
base.localAvatar.setSystemMessage(0,'Gag trainer set to not use levels')
|
||||
|
||||
def resetTrack1XpGained(self):
|
||||
self.shouldResetClock=True
|
||||
self.track1StartXp=base.localAvatar.experience.getExp(self.firstTrack)
|
||||
|
||||
def resetTrack2XpGained(self):
|
||||
self.shouldResetClock=True
|
||||
self.track2StartXp=base.localAvatar.experience.getExp(self.secondTrack)
|
||||
|
||||
def getTrack1XpGained(self):
|
||||
return base.localAvatar.experience.getExp(self.firstTrack)-self.track1StartXp
|
||||
|
||||
def getTrack2XpGained(self):
|
||||
return base.localAvatar.experience.getExp(self.secondTrack)-self.track2StartXp
|
||||
|
||||
class Restock:
|
||||
|
||||
def __init__(self):
|
||||
self.inventory=Inventory()
|
||||
self.tryNum=1
|
||||
self.maxCarryGags = base.localAvatar.getMaxCarry()
|
||||
self.numToZone={1:2000,2:3000,3:9000,4:4000,5:6000,6:5000}
|
||||
self.gagshop_zoneId = 4503
|
||||
self.noToons=Sequence(Func(self.removeToons), Wait(3))
|
||||
base.localAvatar.stopLookAroundNow()
|
||||
|
||||
self.lookAroundHookSeq = Sequence(Func(self.lookAroundHookFunc), Wait(2.5))
|
||||
self.lookAroundHookSeq.loop()
|
||||
ToonHead.ToonHead._ToonHead__lookAround = lambda *x:None
|
||||
|
||||
def lookAroundHookFunc(self):
|
||||
if hasattr(base, 'localAvatar'):
|
||||
base.localAvatar.findSomethingToLookAt = lambda *x:None
|
||||
self.oldFindSomethingToLookAt = base.localAvatar.findSomethingToLookAt
|
||||
self.lookAroundHookSeq.finish()
|
||||
self.oldLookAround = ToonHead.ToonHead._ToonHead__lookAround
|
||||
|
||||
def collectLaff(self):
|
||||
for treasure in base.cr.doFindAll('Treasure'):
|
||||
treasure.d_requestGrab()
|
||||
|
||||
def removeToons(self):
|
||||
|
||||
for x in base.cr.doFindAll('Fisherman'):
|
||||
try:
|
||||
if x.zoneId != base.localAvatar.zoneId:
|
||||
x.removeNode()
|
||||
x.nametag.unmanage(base.marginManager)
|
||||
except:
|
||||
pass
|
||||
|
||||
for x in base.cr.doFindAll('Party Planner'):
|
||||
try:
|
||||
if x.zoneId != base.localAvatar.zoneId:
|
||||
x.removeNode()
|
||||
x.nametag.unmanage(base.marginManager)
|
||||
except:
|
||||
pass
|
||||
|
||||
for x in base.cr.doFindAll('render/donald'):
|
||||
try:
|
||||
if x.zoneId != base.localAvatar.zoneId:
|
||||
x.removeNode()
|
||||
x.nametag.unmanage(base.marginManager)
|
||||
except:
|
||||
pass
|
||||
|
||||
for x in base.cr.doFindAll('render/minnie'):
|
||||
try:
|
||||
if x.zoneId != base.localAvatar.zoneId:
|
||||
x.removeNode()
|
||||
x.nametag.unmanage(base.marginManager)
|
||||
except:
|
||||
pass
|
||||
|
||||
for x in base.cr.doFindAll('render/mickey'):
|
||||
try:
|
||||
if x.zoneId != base.localAvatar.zoneId:
|
||||
x.removeNode()
|
||||
x.nametag.unmanage(base.marginManager)
|
||||
except:
|
||||
pass
|
||||
|
||||
for x in base.cr.doFindAll('render/pluto'):
|
||||
try:
|
||||
if x.zoneId != base.localAvatar.zoneId:
|
||||
x.removeNode()
|
||||
x.nametag.unmanage(base.marginManager)
|
||||
except:
|
||||
pass
|
||||
|
||||
for x in base.cr.doFindAll('render/daisy'):
|
||||
try:
|
||||
if x.zoneId != base.localAvatar.zoneId:
|
||||
x.removeNode()
|
||||
x.nametag.unmanage(base.marginManager)
|
||||
except:
|
||||
pass
|
||||
|
||||
for x in base.localAvatar.getNearbyPlayers(100000000000000, False):
|
||||
try:
|
||||
y = base.cr.doId2do.get(x)
|
||||
if y.zoneId != base.localAvatar.zoneId:
|
||||
y.removeNode()
|
||||
y.nametag.unmanage(base.marginManager)
|
||||
except:
|
||||
pass
|
||||
|
||||
for x in base.cr.doFindAll('Butterfly'):
|
||||
x.butterflyNode.remove()
|
||||
|
||||
for x in base.cr.doFindAll('Flower'):
|
||||
x.bigFlower.removeNode()
|
||||
|
||||
for x in base.cr.doFindAll('Treasure'):
|
||||
x.setPosition(0, 0, 8**8)
|
||||
|
||||
for x in base.cr.doFindAll('render/DistributedFishingTarget'):
|
||||
x.bubbles.removeNode()
|
||||
x.removeNode()
|
||||
|
||||
def loadGagshop(self):
|
||||
if not base.cr.doFind('Clerk'):
|
||||
self.contextId = base.cr.addInterest(base.localAvatar.defaultShard, self.gagshop_zoneId, description='4', event=None)
|
||||
try:
|
||||
if not int(render.find('**/*gagShop_interior_english*').getZ()) == 8**8:
|
||||
render.find('**/*gagShop_interior_english*').setZ(8**8)
|
||||
for k in base.cr.doFindAll('Clerk'):
|
||||
k.nametag.unmanage(base.marginManager)
|
||||
except:
|
||||
pass
|
||||
|
||||
def buyGags(self):
|
||||
desiredInv=self.desiredInv
|
||||
try:
|
||||
maxCarryGags = base.localAvatar.getMaxCarry()
|
||||
if base.cr.doFind('Clerk'):
|
||||
num_gags = 0
|
||||
for inventory_number in base.localAvatar.inventory.makeFromNetString(desiredInv):
|
||||
for k in inventory_number[:-1]:
|
||||
num_gags += k
|
||||
change = base.localAvatar.getMoney() - num_gags
|
||||
oldString = base.localAvatar.inventory.makeNetString()
|
||||
newString = desiredInv[:6] + oldString[6] + desiredInv[7:13] + oldString[13] + desiredInv[14:20] + oldString[20] + desiredInv[21:27] + oldString[27] + desiredInv[28:34] + oldString[34] + desiredInv[35:41] + oldString[41] + desiredInv[42:48] + oldString[48]
|
||||
for clerk in base.cr.doFindAll('Clerk'):
|
||||
clerk.setMovie=lambda *args: None
|
||||
clerk.freeAvatar=lambda *args: None
|
||||
clerk.sendUpdate('avatarEnter')
|
||||
clerk.sendUpdate('setInventory', [newString, change, 1])
|
||||
|
||||
money = base.localAvatar.getMoney()
|
||||
maxMoney = base.localAvatar.getMaxMoney()
|
||||
try:
|
||||
base.cr.bankManager.d_transferMoney(money - maxMoney)
|
||||
except AttributeError:
|
||||
pass
|
||||
except:
|
||||
pass
|
||||
|
||||
def unloadGagshop(self):
|
||||
base.cr.removeInterest(self.contextId)
|
||||
|
||||
def restockGags(self):
|
||||
self.gagShopRetZone = 4503
|
||||
self.firstTrack=self.inventory.getInv("get1")
|
||||
self.secondTrack=self.inventory.getInv("get2")
|
||||
|
||||
firstTrackLevel=self.inventory.getInv("getLevel1")
|
||||
secondTrackLevel=self.inventory.getInv("getLevel2")
|
||||
useOwnLevel=self.inventory.getInv("useOwnLevels")
|
||||
|
||||
desiredLevel1=self.executeGags("return1")
|
||||
desiredLevel2=self.executeGags("return2")
|
||||
|
||||
if desiredLevel1==6:
|
||||
desiredLevel1=5
|
||||
|
||||
if desiredLevel2==6:
|
||||
desiredLevel2=5
|
||||
|
||||
self.desiredInv=""
|
||||
|
||||
for i in range(7*7):
|
||||
if i==((self.firstTrack*7)+desiredLevel1):
|
||||
if desiredLevel1>3:
|
||||
if self.firstTrack==1:
|
||||
self.desiredInv+="\x02"
|
||||
else:
|
||||
self.desiredInv+="\x03"
|
||||
|
||||
elif self.firstTrack==1:
|
||||
self.desiredInv+="\x03"
|
||||
|
||||
else:
|
||||
self.desiredInv+="\x04"
|
||||
|
||||
elif i==((self.secondTrack*7)+desiredLevel2):
|
||||
if desiredLevel2>3:
|
||||
if self.secondTrack==1:
|
||||
self.desiredInv+="\x02"
|
||||
else:
|
||||
self.desiredInv+="\x03"
|
||||
|
||||
elif self.secondTrack==1:
|
||||
self.desiredInv+="\x03"
|
||||
|
||||
else:
|
||||
self.desiredInv+="\x04"
|
||||
|
||||
else:
|
||||
self.desiredInv+="\x00"
|
||||
|
||||
if base.localAvatar.inventory.inventory[self.firstTrack][self.executeGags("return1")]<2 or base.localAvatar.inventory.inventory[self.secondTrack][self.executeGags("return2")]<2:
|
||||
Sequence(Func(self.loadGagshop),Wait(1),Func(self.buyGags),Wait(0.5),Func(self.unloadGagshop)).start()
|
||||
|
||||
def gainLaff(self):
|
||||
if self.tryNum>5:
|
||||
self.tryNum=0
|
||||
self.tryNum+=1
|
||||
|
||||
zone=self.numToZone[self.tryNum]
|
||||
if base.localAvatar.getHp()!=base.localAvatar.getMaxHp():
|
||||
self.toonUp=base.cr.addInterest(base.localAvatar.defaultShard, zone, description='5', event=None)
|
||||
Sequence(Wait(1.0),Func(self.collectLaff),Func(base.cr.removeInterest, self.toonUp)).start()
|
||||
|
||||
def gag(self,battle,track,level,toAttack):
|
||||
battle.sendUpdate('requestAttack', [track, level, toAttack])
|
||||
battle.sendUpdate('movieDone')
|
||||
|
||||
def executeGags(self,command):
|
||||
badGags=[1,3,5]
|
||||
firstTrackLevel=self.inventory.getInv("getLevel1")
|
||||
secondTrackLevel=self.inventory.getInv("getLevel2")
|
||||
useOwnLevel=self.inventory.getInv("useOwnLevels")
|
||||
firstTrack=self.inventory.getInv("get1")
|
||||
secondTrack=self.inventory.getInv("get2")
|
||||
|
||||
if useOwnLevel:
|
||||
desiredLevel1=firstTrackLevel
|
||||
desiredLevel2=secondTrackLevel
|
||||
else:
|
||||
desiredLevel1=base.localAvatar.experience.getExpLevel(firstTrack)
|
||||
desiredLevel2=base.localAvatar.experience.getExpLevel(secondTrack)
|
||||
|
||||
if desiredLevel1==6:
|
||||
desiredLevel1=5
|
||||
|
||||
if desiredLevel2==6:
|
||||
desiredLevel2=5
|
||||
|
||||
if firstTrack==0 and desiredLevel1 in badGags:
|
||||
desiredLevel1-=1
|
||||
|
||||
if secondTrack==0 and desiredLevel2 in badGags:
|
||||
desiredLevel2-=1
|
||||
|
||||
if command=="return1":
|
||||
return desiredLevel1
|
||||
elif command=="return2":
|
||||
return desiredLevel2
|
||||
|
||||
for battle in base.cr.doFindAll('battle'):
|
||||
if base.localAvatar in battle.toons:
|
||||
try:
|
||||
if firstTrack==0:
|
||||
toAttack1=base.localAvatar.doId
|
||||
else:
|
||||
toAttack1=battle.suits[0].doId
|
||||
|
||||
if secondTrack==0:
|
||||
toAttack2=base.localAvatar.doId
|
||||
else:
|
||||
toAttack2=battle.suits[0].doId
|
||||
|
||||
if base.localAvatar.inventory.inventory[firstTrack][desiredLevel1]>0:
|
||||
self.gag(battle,firstTrack,desiredLevel1,toAttack1)
|
||||
|
||||
if base.localAvatar.inventory.inventory[secondTrack][desiredLevel2]>0:
|
||||
self.gag(battle,secondTrack,desiredLevel2,toAttack2)
|
||||
|
||||
except:
|
||||
pass
|
||||
|
||||
|
||||
class GagTrainer:
|
||||
oldBattlePlaceTeleportIn=BattlePlace.BattlePlace.exitTeleportIn
|
||||
oldTeleportInPlayground=Playground.Playground.exitTeleportIn
|
||||
oldEnterReward=DistributedBattle.DistributedBattle.enterReward
|
||||
oldEnterFaceOff=DistributedBattle.DistributedBattle.enterFaceOff
|
||||
oldDenyBattle=DistributedSuit.DistributedSuit.denyBattle
|
||||
oldEnterHealth=HealthForceAcknowledge.HealthForceAcknowledge.enter
|
||||
|
||||
def __init__(self):
|
||||
self.restock=Restock()
|
||||
self.clearSettings()
|
||||
self.shouldContinue=False
|
||||
self.shouldChangeHood=False
|
||||
self.shouldChangeDistrict=False
|
||||
self.shouldChangeStreet=False
|
||||
self.checkCogWalked=None
|
||||
self.streetId=None
|
||||
self.numBattles=0
|
||||
self.shardIds=[]
|
||||
base.localAvatar.setWantBattles(False)
|
||||
for shard in base.cr.activeDistrictMap:
|
||||
if base.cr.activeDistrictMap[shard].avatarCount<100:
|
||||
self.shardIds.append(shard)
|
||||
self.hoods=['1','3','4','5','9']
|
||||
self.lastCogId=0
|
||||
self.buyGags=Sequence(Func(self.restock.restockGags),Wait(3.0))
|
||||
self.gainLaff=Sequence(Func(self.restock.gainLaff),Wait(3.0))
|
||||
self.battleLoop=Sequence(Wait(1.5),Func(self.restock.executeGags,None))
|
||||
self.invisibleSeq=Sequence(Func(base.localAvatar.d_setParent,1),Wait(1))
|
||||
DistributedBattle.DistributedBattle.enterReward=lambda newSelf,*args: self.newEnterReward(newSelf,*args)
|
||||
DistributedSuit.DistributedSuit.denyBattle=lambda newSelf,*args: self.newDenyBattle(newSelf,*args)
|
||||
DistributedBattle.DistributedBattle.enterFaceOff=lambda newSelf,*args: self.newEnterFaceOff(newSelf,*args)
|
||||
HealthForceAcknowledge.HealthForceAcknowledge.enter=lambda newSelf,hplevel: self.newEnterHealth(newSelf,hplevel)
|
||||
BattlePlace.BattlePlace.exitTeleportIn=lambda newSelf,*args: self.newBattlePlaceTeleportIn(newSelf,*args)
|
||||
Playground.Playground.exitTeleportIn=lambda newSelf,*args,**kwds: self.newTeleportInPlayground(newSelf,*args,**kwds)
|
||||
self.autoerGui=AutoerGui('Gag Trainer',['Run Time',"Xp/Hour","Xp/Hour",'Cogs Killed','Cogs/Hour'],\
|
||||
['self.formattedTime',\
|
||||
"('%s %s' %(gagTrainer.getTrack1Name(),self.workOutNumberAnHour(gagTrainer.getTrack1XpGained())))",\
|
||||
"('%s %s' %(gagTrainer.getTrack2Name(),self.workOutNumberAnHour(gagTrainer.getTrack2XpGained())))"\
|
||||
,'str(gagTrainer.getNumBattles())'\
|
||||
,'str(self.workOutNumberAnHour(gagTrainer.getNumBattles()))'],\
|
||||
'GAG TRAINER',None)
|
||||
|
||||
def newEnterHealth(self,newSelf,hplevel):
|
||||
try:
|
||||
self.oldEnterHealth(newSelf,hplevel)
|
||||
newSelf.handleOk(base.localAvatar.getHp())
|
||||
newSelf.exit()
|
||||
if self.shouldContinue:
|
||||
self.autoerGui.display.newLine('TP failed re-trying')
|
||||
Sequence(Wait(3),Func(self.teleportBackToStreet)).start()
|
||||
except:
|
||||
pass
|
||||
|
||||
def newEnterFaceOff(self,newSelf,*args):
|
||||
self.oldEnterFaceOff(newSelf,*args)
|
||||
if self.checkCogWalked:
|
||||
self.checkCogWalked.pause()
|
||||
|
||||
def newDenyBattle(self,newSelf,*args):
|
||||
self.oldDenyBattle(newSelf,*args)
|
||||
if self.lastCogId==newSelf.doId and self.shouldContinue:
|
||||
if self.checkCogWalked:
|
||||
self.checkCogWalked.pause()
|
||||
Sequence(Wait(1),Func(self.enterRandomBattle)).start()
|
||||
|
||||
def newEnterReward(self,newSelf,*args):
|
||||
self.oldEnterReward(newSelf,*args)
|
||||
if base.localAvatar in newSelf.toons and self.shouldContinue:
|
||||
newSelf.d_rewardDone(base.localAvatar.doId)
|
||||
self.numBattles+=1
|
||||
Sequence(Wait(3),Func(self.enterRandomBattle)).start()
|
||||
|
||||
def newBattlePlaceTeleportIn(self,newSelf,*args):
|
||||
self.oldBattlePlaceTeleportIn(newSelf,*args)
|
||||
if self.shouldContinue:
|
||||
self.startLoops()
|
||||
Sequence(Wait(1),Func(self.enterRandomBattle)).start()
|
||||
|
||||
def newTeleportInPlayground(self,newSelf,*args,**kwds):
|
||||
self.oldTeleportInPlayground(newSelf,*args,**kwds)
|
||||
if self.shouldContinue:
|
||||
self.autoerGui.display.newLine('Died, teleporting back')
|
||||
Sequence(Wait(1),Func(self.checkWhatToDo)).start()
|
||||
|
||||
def clearSettings(self):
|
||||
self.hasSettings=False
|
||||
self.cogName=None
|
||||
self.cogType=None
|
||||
self.cogLevel=None
|
||||
|
||||
def getNumBattles(self):
|
||||
return self.numBattles
|
||||
|
||||
def getTrack1XpGained(self):
|
||||
return self.restock.inventory.getTrack1XpGained()
|
||||
|
||||
def getTrack2XpGained(self):
|
||||
return self.restock.inventory.getTrack2XpGained()
|
||||
|
||||
def getTrack1Name(self):
|
||||
if self.restock.inventory.shouldResetClock:
|
||||
self.autoerGui.startTime=time.time()
|
||||
self.numBattles=0
|
||||
self.restock.inventory.shouldResetClock=False
|
||||
return self.restock.inventory.numberToName[self.restock.inventory.firstTrack]
|
||||
|
||||
def getTrack2Name(self):
|
||||
return self.restock.inventory.numberToName[self.restock.inventory.secondTrack]
|
||||
|
||||
def setCogName(self,name):
|
||||
self.hasSettings=True
|
||||
self.cogName=name
|
||||
|
||||
def setCogType(self,type):
|
||||
self.hasSettings=True
|
||||
if type=='l':
|
||||
type='Lawbot'
|
||||
elif type=='s':
|
||||
type='Sellbot'
|
||||
elif type=='m':
|
||||
type='Cashbot'
|
||||
elif type=='c':
|
||||
type='Bossbot'
|
||||
self.cogType=type
|
||||
|
||||
def setCogLevel(self,level):
|
||||
self.hasSettings=True
|
||||
self.cogLevel=level
|
||||
|
||||
def newDistrict(self):
|
||||
self.autoerGui.display.newLine('TPing to a new district')
|
||||
base.cr.playGame.getPlace().requestTeleport(round(base.localAvatar.getZoneId(),-3),self.streetId,self.shardIds[0],None)
|
||||
self.shardIds.append(self.shardIds[0])
|
||||
del self.shardIds[0]
|
||||
|
||||
def nextZone(self):
|
||||
try:
|
||||
base.cr.playGame.getPlace().enterZone(base.localAvatar.getZoneId()+1)
|
||||
Sequence(Wait(0.5),Func(self.enterRandomBattle)).start()
|
||||
except KeyError:
|
||||
base.cr.playGame.getPlace().enterZone(self.streetId)
|
||||
Sequence(Wait(0.5),Func(self.enterRandomBattle)).start()
|
||||
|
||||
def enterRandomBattle(self):
|
||||
if self.checkCogWalked:
|
||||
self.checkCogWalked.pause()
|
||||
firstTrack=self.restock.inventory.getInv("get1")
|
||||
secondTrack=self.restock.inventory.getInv("get2")
|
||||
battles = []
|
||||
battles2 = []
|
||||
for x in base.cr.doFindAllInstances(DistributedSuit.DistributedSuit):
|
||||
if x.activeState == 6:
|
||||
if x.getCurrentAnim() in ['walk','landing']:
|
||||
if self.hasSettings and x.getActualLevel()>=self.cogLevel and (x.getName()==self.cogName or x.getStyleDept()==self.cogType or (not self.cogType and not self.cogName)):
|
||||
battles.append(x)
|
||||
battles2.append(True)
|
||||
elif not self.hasSettings and x.getActualLevel()>self.restock.executeGags("return2") and x.getActualLevel()>self.restock.executeGags("return2"):
|
||||
if base.localAvatar.getMaxHp()>suitToDamage[x.getActualLevel()] or self.restock.executeGags("return1")>3 or self.restock.executeGags("return2")>3:
|
||||
battles.append(x)
|
||||
battles2.append(True)
|
||||
elif self.streetId>=11200 and self.streetId<=11300 and self.restock.executeGags("return1")>2 and self.restock.executeGags("return2")>2:
|
||||
battles.append(x)
|
||||
battles2.append(True)
|
||||
else:
|
||||
battles2.append(False)
|
||||
else:
|
||||
battles2.append(False)
|
||||
if self.shouldContinue:
|
||||
try:
|
||||
if battles and base.localAvatar.getHp()>0:
|
||||
battle = random.choice(battles)
|
||||
pos, hpr = battle.getPos(), battle.getHpr()
|
||||
base.localAvatar.collisionsOn()
|
||||
base.localAvatar.setPosHpr(pos, hpr)
|
||||
battle.d_requestBattle(pos,hpr)
|
||||
self.checkCogWalked=Sequence(Wait(20),Func(self.enterRandomBattle))
|
||||
self.checkCogWalked.start()
|
||||
self.lastCogId=battle.doId
|
||||
else:
|
||||
if hasattr(base.cr.playGame.getPlace(),'enterZone') and base.localAvatar.getZoneId() not in range(HQZONES[0],HQZONES[-1]+1000):
|
||||
self.nextZone()
|
||||
elif self.shouldChangeDistrict:
|
||||
self.newDistrict()
|
||||
else:
|
||||
self.autoerGui.display.newLine('No cogs found')
|
||||
Sequence(Wait(5),Func(self.enterRandomBattle)).start()
|
||||
except:
|
||||
pass
|
||||
|
||||
def setLocation(self,zoneId):
|
||||
if zoneId in range(10000,13999):
|
||||
self.streetId=int(round(zoneId,-3))
|
||||
elif round(zoneId,-3)!=zoneId:
|
||||
self.streetId=zoneId+2
|
||||
else:
|
||||
self.streetId=zoneId+102
|
||||
self.autoerGui.display.newLine('Training zone: %s' %self.streetId)
|
||||
|
||||
def teleportBackToStreet(self):
|
||||
self.autoerGui.display.newLine('Tping back to training area')
|
||||
self.walk()
|
||||
self.restock.collectLaff()
|
||||
base.cr.playGame.getPlace().requestTeleport(round(self.streetId,-3),self.streetId,None,None)
|
||||
|
||||
def checkWhatToDo(self):
|
||||
if not self.shouldContinue:
|
||||
pass
|
||||
elif not self.streetId:
|
||||
base.localAvatar.setSystemMessage(0,'The gag trainer need to be started on a street')
|
||||
self.stop()
|
||||
elif base.localAvatar.defaultShard not in self.shardIds:
|
||||
self.newDistrict()
|
||||
elif base.localAvatar.getZoneId() not in range(self.streetId,self.streetId+90):
|
||||
self.teleportBackToStreet()
|
||||
else:
|
||||
self.startLoops()
|
||||
self.enterRandomBattle()
|
||||
|
||||
def startLoops(self):
|
||||
self.buyGags.loop()
|
||||
self.gainLaff.loop()
|
||||
self.battleLoop.loop()
|
||||
self.invisibleSeq.loop()
|
||||
|
||||
def stopLoops(self):
|
||||
self.buyGags.pause()
|
||||
self.gainLaff.pause()
|
||||
self.battleLoop.pause()
|
||||
self.invisibleSeq.pause()
|
||||
|
||||
def start(self):
|
||||
self.autoerGui.startTimer()
|
||||
self.restock.inventory.resetTrack1XpGained()
|
||||
self.restock.inventory.resetTrack2XpGained()
|
||||
self.numBattles=0
|
||||
self.shouldContinue=True
|
||||
exec(hooks, __main__.__dict__)
|
||||
zone=int(round(base.localAvatar.getZoneId(),-2))
|
||||
if zone==11200:
|
||||
zone=11000
|
||||
if zone!=base.localAvatar.getZoneId() or base.localAvatar.getZoneId() not in HOODZONES:
|
||||
self.setLocation(zone)
|
||||
self.checkWhatToDo()
|
||||
|
||||
def stop(self):
|
||||
self.stopLoops()
|
||||
self.autoerGui.stopTimer()
|
||||
DistributedDoor.DistributedDoor.announceGenerate=_announceGenerate1
|
||||
DistributedPartyGate.DistributedPartyGate.announceGenerate=_announceGenerate2
|
||||
DistributedTrolley.DistributedTrolley.__init__=old__init__
|
||||
DistributedPartyGate.DistributedPartyGate.__init__=old__init__2
|
||||
DistributedDoor.DistributedDoor.__init__=old__init__3
|
||||
DistributedPicnicBasket.DistributedPicnicBasket.__init__=old__init__4
|
||||
self.shouldContinue=False
|
||||
self.autoerGui.display.newLine('Stopped')
|
||||
|
||||
def walk(self):
|
||||
base.cr.playGame.getPlace().fsm.forceTransition('walk')
|
||||
|
||||
def revert(self):
|
||||
BattlePlace.BattlePlace.exitTeleportIn=self.oldBattlePlaceTeleportIn
|
||||
Playground.Playground.exitTeleportIn=self.oldTeleportInPlayground
|
||||
DistributedBattle.DistributedBattle.enterReward=self.oldEnterReward
|
||||
DistributedBattle.DistributedBattle.enterFaceOff=self.oldEnterFaceOff
|
||||
DistributedSuit.DistributedSuit.denyBattle=self.oldDenyBattle
|
||||
HealthForceAcknowledge.HealthForceAcknowledge.enter=self.oldEnterHealth
|
||||
base.localAvatar.setWantBattles(True)
|
||||
self.autoerGui.destroy()
|
||||
|
||||
gagTrainer=GagTrainer()
|
||||
|
|
@ -0,0 +1,776 @@
|
|||
import random
|
||||
import __main__
|
||||
from toontown.battle import BattlePlace
|
||||
from toontown.safezone import *
|
||||
from toontown.toonbase import ToontownBattleGlobals
|
||||
from toontown.safezone import Playground
|
||||
from toontown.suit import DistributedSuit
|
||||
from toontown.suit import SuitDNA
|
||||
from toontown.toon import HealthForceAcknowledge
|
||||
from toontown.battle import DistributedBattle
|
||||
from toontown.distributed import ToontownClientRepository
|
||||
from toontown.effects import DistributedFireworkShow
|
||||
for attribute in dir(DistributedFireworkShow.DistributedFireworkShow):
|
||||
exec('DistributedFireworkShow.DistributedFireworkShow.'+attribute+'=lambda *args,**kwds: None')
|
||||
|
||||
ToontownBattleGlobals.SkipMovie=1
|
||||
oldDumpShards=ToontownClientRepository.ToontownClientRepository.dumpAllSubShardObjects
|
||||
def newDumpShards(self):
|
||||
try:
|
||||
oldDumpShards(self)
|
||||
except:
|
||||
pass
|
||||
ToontownClientRepository.ToontownClientRepository.dumpAllSubShardObjects=newDumpShards
|
||||
|
||||
suitToDamage={1:4,2:6,3:9,4:13,5:15,6:19,7:22,8:25,9:27,10:29,11:30,12:40}
|
||||
|
||||
faceOffHook = lambda self, ts, name, callback:self.d_faceOffDone(self)
|
||||
DistributedBattle.DistributedBattle._DistributedBattle__faceOff = faceOffHook
|
||||
|
||||
oldHandleEnterCollisionSphereParty=DistributedNPCPartyPerson.DistributedNPCPartyPerson.handleCollisionSphereEnter
|
||||
DistributedNPCPartyPerson.DistributedNPCPartyPerson.handleCollisionSphereEnter=lambda *args: None
|
||||
oldHandleEnterCollisionSphereFisherman=DistributedNPCFisherman.DistributedNPCFisherman.handleCollisionSphereEnter
|
||||
DistributedNPCFisherman.DistributedNPCFisherman.handleEnterCollisionSphere=lambda *args: None
|
||||
|
||||
hooks='''
|
||||
try:
|
||||
_announceGenerate1
|
||||
except:
|
||||
_announceGenerate1 = DistributedDoor.DistributedDoor.announceGenerate
|
||||
def announceGenerate(self):
|
||||
try:
|
||||
_announceGenerate1(self)
|
||||
except:
|
||||
return None
|
||||
DistributedDoor.DistributedDoor.announceGenerate = announceGenerate
|
||||
try:
|
||||
_announceGenerate2
|
||||
except:
|
||||
_announceGenerate2 = DistributedPartyGate.DistributedPartyGate.announceGenerate
|
||||
def announceGenerate(self):
|
||||
try:
|
||||
_announceGenerate2(self)
|
||||
except:
|
||||
return None
|
||||
DistributedPartyGate.DistributedPartyGate.announceGenerate = announceGenerate
|
||||
try:
|
||||
old__init__
|
||||
except:
|
||||
old__init__ = DistributedTrolley.DistributedTrolley.__init__
|
||||
def new__init__(self, cr):
|
||||
for obj in dir(self):
|
||||
exec('self.%s = lambda *x:None' % obj, globals(), locals())
|
||||
return None
|
||||
DistributedTrolley.DistributedTrolley.__init__ = new__init__
|
||||
try:
|
||||
old__init__2
|
||||
except:
|
||||
old__init__2 = DistributedPartyGate.DistributedPartyGate.__init__
|
||||
def new__init__2(self, cr):
|
||||
for obj in dir(self):
|
||||
exec('self.%s = lambda *x:None' % obj, globals(), locals())
|
||||
return None
|
||||
DistributedPartyGate.DistributedPartyGate.__init__ = new__init__2
|
||||
try:
|
||||
old__init__3
|
||||
except:
|
||||
old__init__3 = DistributedDoor.DistributedDoor.__init__
|
||||
def new__init__3(self, cr):
|
||||
for obj in dir(self):
|
||||
exec('self.%s = lambda *x:None' % obj, globals(), locals())
|
||||
return None
|
||||
DistributedDoor.DistributedDoor.__init__ = new__init__3
|
||||
try:
|
||||
old__init__4
|
||||
except:
|
||||
old__init__4 = DistributedPicnicBasket.DistributedPicnicBasket.__init__
|
||||
def new__init__4(self, cr):
|
||||
for obj in dir(self):
|
||||
exec('self.%s = lambda *x:None' % obj, globals(), locals())
|
||||
return None
|
||||
DistributedPicnicBasket.DistributedPicnicBasket.__init__ = new__init__4
|
||||
base.localAvatar.stopLookAroundNow()
|
||||
base.localAvatar.findSomethingToLookAt = lambda *x:None
|
||||
ToonHead.ToonHead._ToonHead__lookAround = lambda *x:None
|
||||
'''
|
||||
|
||||
|
||||
class Inventory:
|
||||
|
||||
def __init__(self):
|
||||
self.firstTrack=4
|
||||
self.secondTrack=5
|
||||
self.useOwnLevels=False
|
||||
self.firstTrackLevel=0
|
||||
self.secondTrackLevel=0
|
||||
self.noTrolley=False
|
||||
self.inBattle=False
|
||||
|
||||
def getInv(self,command):
|
||||
if command=="get1":
|
||||
try:
|
||||
return self.firstTrack
|
||||
except:
|
||||
return 4
|
||||
elif command=="get2":
|
||||
try:
|
||||
return self.secondTrack
|
||||
except:
|
||||
return 5
|
||||
elif command=="getLevel1":
|
||||
try:
|
||||
return self.firstTrackLevel
|
||||
except:
|
||||
return 0
|
||||
elif command=="getLevel2":
|
||||
try:
|
||||
return self.secondTrackLevel
|
||||
except:
|
||||
return 0
|
||||
elif command=="useOwnLevels":
|
||||
try:
|
||||
return self.useOwnLevels
|
||||
except:
|
||||
return False
|
||||
|
||||
def setThrow1(self):
|
||||
self.firstTrack=4
|
||||
base.localAvatar.setSystemMessage(0,'Gag trainer set to use throw as first gag',5)
|
||||
def setThrow2(self):
|
||||
self.secondTrack=4
|
||||
base.localAvatar.setSystemMessage(0,'Gag trainer set to use throw as second gag',5)
|
||||
|
||||
def setSquirt1(self):
|
||||
self.firstTrack=5
|
||||
base.localAvatar.setSystemMessage(0,'Gag trainer set to use squirt as first gag',5)
|
||||
|
||||
def setSquirt2(self):
|
||||
self.secondTrack=5
|
||||
base.localAvatar.setSystemMessage(0,'Gag trainer set to use squirt as second gag',5)
|
||||
|
||||
def setLure1(self):
|
||||
self.firstTrack=2
|
||||
base.localAvatar.setSystemMessage(0,'Gag trainer set to use lure as first gag',5)
|
||||
|
||||
def setLure2(self):
|
||||
self.secondTrack=2
|
||||
base.localAvatar.setSystemMessage(0,'Gag trainer set to use lure as second gag',5)
|
||||
|
||||
def setTrap1(self):
|
||||
self.firstTrack=1
|
||||
base.localAvatar.setSystemMessage(0,'Gag trainer set to use trap as first gag',5)
|
||||
|
||||
def setTrap2(self):
|
||||
self.secondTrack=1
|
||||
base.localAvatar.setSystemMessage(0,'Gag trainer set to use trap as second gag',5)
|
||||
|
||||
def setSound1(self):
|
||||
self.firstTrack=3
|
||||
base.localAvatar.setSystemMessage(0,'Gag trainer set to use sound as first gag',5)
|
||||
|
||||
def setSound2(self):
|
||||
self.secondTrack=3
|
||||
base.localAvatar.setSystemMessage(0,'Gag trainer set to use sound as second gag',5)
|
||||
|
||||
def setDrop1(self):
|
||||
self.firstTrack=6
|
||||
base.localAvatar.setSystemMessage(0,'Gag trainer set to use drop as first gag',5)
|
||||
|
||||
def setDrop2(self):
|
||||
self.secondTrack=6
|
||||
base.localAvatar.setSystemMessage(0,'Gag trainer set to use drop as second gag',5)
|
||||
|
||||
def setToonUp1(self):
|
||||
self.secondTrack=0
|
||||
|
||||
def setToonUp2(self):
|
||||
self.secondTrack=0
|
||||
|
||||
def track1Set1(self):
|
||||
self.firstTrackLevel=0
|
||||
base.localAvatar.setSystemMessage(0,'Gag trainer set to use level 1 on first track',4)
|
||||
|
||||
def track2Set1(self):
|
||||
self.secondTrackLevel=0
|
||||
base.localAvatar.setSystemMessage(0,'Gag trainer set to use level 1 on second track',4)
|
||||
|
||||
def track1Set2(self):
|
||||
self.firstTrackLevel=1
|
||||
base.localAvatar.setSystemMessage(0,'Gag trainer set to use level 2 on first track',4)
|
||||
|
||||
def track2Set2(self):
|
||||
self.secondTrackLevel=1
|
||||
base.localAvatar.setSystemMessage(0,'Gag trainer set to use level 2 on second track',4)
|
||||
|
||||
def track1Set3(self):
|
||||
self.firstTrackLevel=2
|
||||
base.localAvatar.setSystemMessage(0,'Gag trainer set to use level 3 on first track',4)
|
||||
|
||||
def track2Set3(self):
|
||||
self.secondTrackLevel=2
|
||||
base.localAvatar.setSystemMessage(0,'Gag trainer set to use level 3 on second track',4)
|
||||
|
||||
def track1Set4(self):
|
||||
self.firstTrackLevel=3
|
||||
base.localAvatar.setSystemMessage(0,'Gag trainer set to use level 4 on first track',4)
|
||||
|
||||
def track2Set4(self):
|
||||
self.secondTrackLevel=3
|
||||
base.localAvatar.setSystemMessage(0,'Gag trainer set to use level 4 on second track',4)
|
||||
|
||||
def track1Set5(self):
|
||||
self.firstTrackLevel=4
|
||||
base.localAvatar.setSystemMessage(0,'Gag trainer set to use level 5 on first track',4)
|
||||
|
||||
def track2Set5(self):
|
||||
self.secondTrackLevel=4
|
||||
base.localAvatar.setSystemMessage(0,'Gag trainer set to use level 5 on second track',4)
|
||||
|
||||
def track1Set6(self):
|
||||
self.firstTrackLevel=5
|
||||
base.localAvatar.setSystemMessage(0,'Gag trainer set to use level 6 on first track',4)
|
||||
|
||||
def track2Set6(self):
|
||||
self.secondTrackLevel=5
|
||||
base.localAvatar.setSystemMessage(0,'Gag trainer set to use level 6 on second track',4)
|
||||
|
||||
def useLevelsTrue(self):
|
||||
self.useOwnLevels=True
|
||||
levelsTrueFalse.setText("Using custom levels")
|
||||
base.localAvatar.setSystemMessage(0,'Gag trainer set to use levels')
|
||||
|
||||
def useLevelsFalse(self):
|
||||
self.useOwnLevels=False
|
||||
levelsTrueFalse.setText("Not Using custom levels")
|
||||
base.localAvatar.setSystemMessage(0,'Gag trainer set to not use levels')
|
||||
|
||||
def setNoTrolley(self,value):
|
||||
self.noTrolley=value
|
||||
|
||||
def getNoTrolley(self):
|
||||
return self.noTrolley
|
||||
|
||||
class Restock:
|
||||
|
||||
def __init__(self):
|
||||
self.inventory=Inventory()
|
||||
self.tryNum=1
|
||||
self.maxCarryGags = base.localAvatar.getMaxCarry()
|
||||
self.numToZone={1:2000,2:3000,3:9000,4:4000,5:6000,6:5000}
|
||||
self.gagshop_zoneId = 4503
|
||||
self.noToons=Sequence(Func(self.removeToons), Wait(3)) # Something is broken with this in new toontown
|
||||
base.localAvatar.stopLookAroundNow()
|
||||
|
||||
self.lookAroundHookSeq = Sequence(Func(self.lookAroundHookFunc), Wait(2.5))
|
||||
self.lookAroundHookSeq.loop()
|
||||
ToonHead.ToonHead._ToonHead__lookAround = lambda *x:None
|
||||
|
||||
def lookAroundHookFunc(self):
|
||||
if hasattr(base, 'localAvatar'):
|
||||
base.localAvatar.findSomethingToLookAt = lambda *x:None
|
||||
self.oldFindSomethingToLookAt = base.localAvatar.findSomethingToLookAt
|
||||
self.lookAroundHookSeq.finish()
|
||||
self.oldLookAround = ToonHead.ToonHead._ToonHead__lookAround
|
||||
|
||||
def collectLaff(self):
|
||||
for treasure in base.cr.doFindAll('Treasure'):
|
||||
treasure.d_requestGrab()
|
||||
|
||||
def removeToons(self):
|
||||
|
||||
for x in base.cr.doFindAll('Fisherman'):
|
||||
try:
|
||||
if x.zoneId != base.localAvatar.zoneId:
|
||||
x.removeNode()
|
||||
x.nametag.unmanage(base.marginManager)
|
||||
except:
|
||||
pass
|
||||
|
||||
for x in base.cr.doFindAll('Party Planner'):
|
||||
try:
|
||||
if x.zoneId != base.localAvatar.zoneId:
|
||||
x.removeNode()
|
||||
x.nametag.unmanage(base.marginManager)
|
||||
except:
|
||||
pass
|
||||
|
||||
for x in base.cr.doFindAll('render/donald'):
|
||||
try:
|
||||
if x.zoneId != base.localAvatar.zoneId:
|
||||
x.removeNode()
|
||||
x.nametag.unmanage(base.marginManager)
|
||||
except:
|
||||
pass
|
||||
|
||||
for x in base.cr.doFindAll('render/minnie'):
|
||||
try:
|
||||
if x.zoneId != base.localAvatar.zoneId:
|
||||
x.removeNode()
|
||||
x.nametag.unmanage(base.marginManager)
|
||||
except:
|
||||
pass
|
||||
|
||||
for x in base.cr.doFindAll('render/mickey'):
|
||||
try:
|
||||
if x.zoneId != base.localAvatar.zoneId:
|
||||
x.removeNode()
|
||||
x.nametag.unmanage(base.marginManager)
|
||||
except:
|
||||
pass
|
||||
|
||||
for x in base.cr.doFindAll('render/pluto'):
|
||||
try:
|
||||
if x.zoneId != base.localAvatar.zoneId:
|
||||
x.removeNode()
|
||||
x.nametag.unmanage(base.marginManager)
|
||||
except:
|
||||
pass
|
||||
|
||||
for x in base.cr.doFindAll('render/daisy'):
|
||||
try:
|
||||
if x.zoneId != base.localAvatar.zoneId:
|
||||
x.removeNode()
|
||||
x.nametag.unmanage(base.marginManager)
|
||||
except:
|
||||
pass
|
||||
|
||||
for x in base.localAvatar.getNearbyPlayers(100000000000000, False):
|
||||
try:
|
||||
y = base.cr.doId2do.get(x)
|
||||
if y.zoneId != base.localAvatar.zoneId:
|
||||
y.removeNode()
|
||||
y.nametag.unmanage(base.marginManager)
|
||||
except:
|
||||
pass
|
||||
|
||||
for x in base.cr.doFindAll('Butterfly'):
|
||||
x.butterflyNode.remove()
|
||||
|
||||
for x in base.cr.doFindAll('Flower'):
|
||||
x.bigFlower.removeNode()
|
||||
|
||||
for x in base.cr.doFindAll('Treasure'):
|
||||
x.setPosition(0, 0, 8**8)
|
||||
|
||||
for x in base.cr.doFindAll('render/DistributedFishingTarget'):
|
||||
x.bubbles.removeNode()
|
||||
x.removeNode()
|
||||
|
||||
def loadGagshop(self):
|
||||
if not base.cr.doFind('Clerk'):
|
||||
self.contextId = base.cr.addInterest(base.localAvatar.defaultShard, self.gagshop_zoneId, description='4', event=None)
|
||||
try:
|
||||
if not int(render.find('**/*gagShop_interior_english*').getZ()) == 8**8:
|
||||
render.find('**/*gagShop_interior_english*').setZ(8**8)
|
||||
for k in base.cr.doFindAll('Clerk'):
|
||||
k.nametag.unmanage(base.marginManager)
|
||||
except:
|
||||
pass
|
||||
|
||||
def buyGags(self):
|
||||
desiredInv=self.desiredInv
|
||||
try:
|
||||
maxCarryGags = base.localAvatar.getMaxCarry()
|
||||
if base.cr.doFind('Clerk'):
|
||||
num_gags = 0
|
||||
for inventory_number in base.localAvatar.inventory.makeFromNetString(desiredInv):
|
||||
for k in inventory_number[:-1]:
|
||||
num_gags += k
|
||||
change = base.localAvatar.getMoney() - num_gags
|
||||
oldString = base.localAvatar.inventory.makeNetString()
|
||||
newString = desiredInv[:6] + oldString[6] + desiredInv[7:13] + oldString[13] + desiredInv[14:20] + oldString[20] + desiredInv[21:27] + oldString[27] + desiredInv[28:34] + oldString[34] + desiredInv[35:41] + oldString[41] + desiredInv[42:48] + oldString[48]
|
||||
for clerk in base.cr.doFindAll('Clerk'):
|
||||
clerk.setMovie=lambda *args: None
|
||||
clerk.freeAvatar=lambda *args: None
|
||||
clerk.sendUpdate('avatarEnter')
|
||||
clerk.sendUpdate('setInventory', [newString, change, 1])
|
||||
|
||||
money = base.localAvatar.getMoney()
|
||||
maxMoney = base.localAvatar.getMaxMoney()
|
||||
try:
|
||||
base.cr.bankManager.d_transferMoney(money - maxMoney)
|
||||
except AttributeError:
|
||||
pass
|
||||
except:
|
||||
pass
|
||||
|
||||
def unloadGagshop(self):
|
||||
base.cr.removeInterest(self.contextId)
|
||||
|
||||
def restockGags(self,specificGag=[]):
|
||||
if not specificGag:
|
||||
self.gagShopRetZone = 4503
|
||||
self.firstTrack=self.inventory.getInv("get1")
|
||||
self.secondTrack=self.inventory.getInv("get2")
|
||||
|
||||
firstTrackLevel=self.inventory.getInv("getLevel1")
|
||||
secondTrackLevel=self.inventory.getInv("getLevel2")
|
||||
useOwnLevel=self.inventory.getInv("useOwnLevels")
|
||||
|
||||
desiredLevel1=self.executeGags("return1")
|
||||
desiredLevel2=self.executeGags("return2")
|
||||
|
||||
if desiredLevel1==6:
|
||||
desiredLevel1=5
|
||||
|
||||
if desiredLevel2==6:
|
||||
desiredLevel2=5
|
||||
else:
|
||||
self.firstTrack=specificGag[0]
|
||||
desiredLevel1=specificGag[1]
|
||||
self.secondTrack=5
|
||||
desiredLevel2=0
|
||||
|
||||
self.desiredInv=""
|
||||
|
||||
for i in range(7*7):
|
||||
if i==((self.firstTrack*7)+desiredLevel1):
|
||||
if desiredLevel1>3:
|
||||
if self.firstTrack==1:
|
||||
self.desiredInv+="\x02"
|
||||
else:
|
||||
self.desiredInv+="\x03"
|
||||
|
||||
elif self.firstTrack==1:
|
||||
self.desiredInv+="\x03"
|
||||
|
||||
else:
|
||||
self.desiredInv+="\x04"
|
||||
|
||||
elif i==((self.secondTrack*7)+desiredLevel2):
|
||||
if desiredLevel2>3:
|
||||
if self.secondTrack==1:
|
||||
self.desiredInv+="\x02"
|
||||
else:
|
||||
self.desiredInv+="\x03"
|
||||
|
||||
elif self.secondTrack==1:
|
||||
self.desiredInv+="\x03"
|
||||
|
||||
else:
|
||||
self.desiredInv+="\x04"
|
||||
|
||||
else:
|
||||
self.desiredInv+="\x00"
|
||||
|
||||
if base.localAvatar.inventory.inventory[self.firstTrack][self.executeGags("return1")]<2 or base.localAvatar.inventory.inventory[self.secondTrack][self.executeGags("return2")]<2 or specificGag:
|
||||
Sequence(Func(self.loadGagshop),Wait(1),Func(self.buyGags),Wait(0.5),Func(self.unloadGagshop)).start()
|
||||
|
||||
def gainLaff(self):
|
||||
if self.tryNum>5:
|
||||
self.tryNum=0
|
||||
self.tryNum+=1
|
||||
|
||||
zone=self.numToZone[self.tryNum]
|
||||
if base.localAvatar.getHp()!=base.localAvatar.getMaxHp():
|
||||
self.toonUp=base.cr.addInterest(base.localAvatar.defaultShard, zone, description='5', event=None)
|
||||
Sequence(Wait(1.0),Func(self.collectLaff),Func(base.cr.removeInterest, self.toonUp)).start()
|
||||
|
||||
def gag(self,battle,track,level,toAttack):
|
||||
battle.sendUpdate('requestAttack', [track, level, toAttack])
|
||||
battle.sendUpdate('movieDone')
|
||||
|
||||
def executeGags(self,command):
|
||||
badGags=[1,3,5]
|
||||
firstTrackLevel=self.inventory.getInv("getLevel1")
|
||||
secondTrackLevel=self.inventory.getInv("getLevel2")
|
||||
useOwnLevel=self.inventory.getInv("useOwnLevels")
|
||||
firstTrack=self.inventory.getInv("get1")
|
||||
secondTrack=self.inventory.getInv("get2")
|
||||
|
||||
if useOwnLevel:
|
||||
desiredLevel1=firstTrackLevel
|
||||
desiredLevel2=secondTrackLevel
|
||||
else:
|
||||
desiredLevel1=base.localAvatar.experience.getExpLevel(firstTrack)
|
||||
desiredLevel2=base.localAvatar.experience.getExpLevel(secondTrack)
|
||||
|
||||
if desiredLevel1==6:
|
||||
desiredLevel1=5
|
||||
|
||||
if desiredLevel2==6:
|
||||
desiredLevel2=5
|
||||
|
||||
if firstTrack==0 and desiredLevel1 in badGags:
|
||||
desiredLevel1-=1
|
||||
|
||||
if secondTrack==0 and desiredLevel2 in badGags:
|
||||
desiredLevel2-=1
|
||||
|
||||
if command=="return1":
|
||||
return desiredLevel1
|
||||
elif command=="return2":
|
||||
return desiredLevel2
|
||||
|
||||
for battle in base.cr.doFindAll('battle'):
|
||||
if base.localAvatar in battle.toons:
|
||||
try:
|
||||
if firstTrack==0:
|
||||
toAttack1=base.localAvatar.doId
|
||||
else:
|
||||
toAttack1=battle.suits[0].doId
|
||||
|
||||
if secondTrack==0:
|
||||
toAttack2=base.localAvatar.doId
|
||||
else:
|
||||
toAttack2=battle.suits[0].doId
|
||||
|
||||
if base.localAvatar.inventory.inventory[firstTrack][desiredLevel1]>0:
|
||||
self.gag(battle,firstTrack,desiredLevel1,toAttack1)
|
||||
|
||||
if base.localAvatar.inventory.inventory[secondTrack][desiredLevel2]>0:
|
||||
self.gag(battle,secondTrack,desiredLevel2,toAttack2)
|
||||
|
||||
except:
|
||||
pass
|
||||
|
||||
|
||||
class GagTrainer:
|
||||
oldBattlePlaceTeleportIn=BattlePlace.BattlePlace.exitTeleportIn
|
||||
oldEnterReward=DistributedBattle.DistributedBattle.enterReward
|
||||
oldEnterFaceOff=DistributedBattle.DistributedBattle.enterFaceOff
|
||||
oldDenyBattle=DistributedSuit.DistributedSuit.denyBattle
|
||||
oldEnterHealth=HealthForceAcknowledge.HealthForceAcknowledge.enter
|
||||
|
||||
def __init__(self):
|
||||
self.restock=Restock()
|
||||
self.clearSettings()
|
||||
self.shouldContinue=False
|
||||
self.shouldChangeHood=False
|
||||
self.shouldChangeDistrict=True
|
||||
self.shouldChangeStreet=True
|
||||
self.checkCogWalked=None
|
||||
self.shardIds=[]
|
||||
for shard in base.cr.activeDistrictMap:
|
||||
if base.cr.activeDistrictMap[shard].avatarCount<50:
|
||||
self.shardIds.append(shard)
|
||||
self.lastCogId=0
|
||||
self.buyGags=Sequence(Func(self.restock.restockGags),Wait(3.0))
|
||||
self.gainLaff=Sequence(Func(self.restock.gainLaff),Wait(3.0))
|
||||
self.battleLoop=Sequence(Wait(1.5),Func(self.restock.executeGags,None))
|
||||
self.invisibleSeq=Sequence(Func(base.localAvatar.d_setParent,1),Wait(1))
|
||||
DistributedBattle.DistributedBattle.enterReward=lambda newSelf,*args: self.newEnterReward(newSelf,*args)
|
||||
DistributedSuit.DistributedSuit.denyBattle=lambda newSelf,*args: self.newDenyBattle(newSelf,*args)
|
||||
DistributedBattle.DistributedBattle.enterFaceOff=lambda newSelf,*args: self.newEnterFaceOff(newSelf,*args)
|
||||
HealthForceAcknowledge.HealthForceAcknowledge.enter=lambda newSelf,hplevel: self.newEnterHealth(newSelf,hplevel)
|
||||
BattlePlace.BattlePlace.exitTeleportIn=lambda newSelf,*args: self.newBattlePlaceTeleportIn(newSelf,*args)
|
||||
|
||||
def newEnterHealth(self,newSelf,hplevel):
|
||||
try:
|
||||
self.oldEnterHealth(newSelf,hplevel)
|
||||
newSelf.handleOk(base.localAvatar.getHp())
|
||||
newSelf.exit()
|
||||
if self.shouldContinue:
|
||||
Sequence(Wait(3),Func(self.teleportBackToStreet)).start()
|
||||
except:
|
||||
pass
|
||||
|
||||
def newEnterFaceOff(self,newSelf,*args):
|
||||
self.oldEnterFaceOff(newSelf,*args)
|
||||
if self.checkCogWalked:
|
||||
self.checkCogWalked.pause()
|
||||
|
||||
def newDenyBattle(self,newSelf,*args):
|
||||
self.oldDenyBattle(newSelf,*args)
|
||||
if self.lastCogId==newSelf.doId and self.shouldContinue:
|
||||
if self.checkCogWalked:
|
||||
self.checkCogWalked.pause()
|
||||
Sequence(Wait(1),Func(self.enterRandomBattle)).start()
|
||||
|
||||
def newEnterReward(self,newSelf,*args):
|
||||
self.oldEnterReward(newSelf,*args)
|
||||
if base.localAvatar in newSelf.toons and self.shouldContinue:
|
||||
newSelf.d_rewardDone(base.localAvatar.doId)
|
||||
|
||||
if not taskAutoer.isQuestComplete():
|
||||
Sequence(Wait(3),Func(self.enterRandomBattle)).start()
|
||||
else:
|
||||
self.stop()
|
||||
base.localAvatar.collisionsOff()
|
||||
Sequence(Wait(3),Func(taskAutoer.checkWhatToDo)).start()
|
||||
|
||||
def newBattlePlaceTeleportIn(self,newSelf,*args):
|
||||
self.oldBattlePlaceTeleportIn(newSelf,*args)
|
||||
if self.shouldContinue:
|
||||
self.startLoops()
|
||||
Sequence(Wait(2),Func(self.enterRandomBattle)).start()
|
||||
|
||||
def clearSettings(self):
|
||||
self.hasSettings=False
|
||||
self.shouldChangeHood = False
|
||||
self.cogName=None
|
||||
self.cogType=None
|
||||
self.cogLevel=None
|
||||
|
||||
def setCogName(self,name):
|
||||
self.hasSettings=True
|
||||
self.cogName=name
|
||||
|
||||
def setCogType(self,type):
|
||||
self.hasSettings=True
|
||||
if type=='l':
|
||||
type='Lawbot'
|
||||
elif type=='s':
|
||||
type='Sellbot'
|
||||
elif type=='m':
|
||||
type='Cashbot'
|
||||
elif type=='c':
|
||||
type='Bossbot'
|
||||
self.cogType=type
|
||||
|
||||
def setCogLevel(self,level):
|
||||
self.hasSettings=True
|
||||
self.cogLevel=level
|
||||
|
||||
def newDistrict(self):
|
||||
if self.shardIds[0] == base.localAvatar.defaultShard:
|
||||
self.shardIds.append(self.shardIds[0])
|
||||
del self.shardIds[0]
|
||||
|
||||
base.cr.playGame.getPlace().requestTeleport(round(base.localAvatar.getZoneId(),-3),self.streetId,self.shardIds[0],None)
|
||||
self.shardIds.append(self.shardIds[0])
|
||||
del self.shardIds[0]
|
||||
|
||||
def newStreet(self):
|
||||
todo='street'
|
||||
if self.streetId<9000:
|
||||
if int(str(self.streetId)[1:])>300:
|
||||
if self.shouldChangeDistrict:
|
||||
self.streetId-=200
|
||||
todo='district'
|
||||
elif self.shouldChangeHood:
|
||||
todo='hood'
|
||||
else:
|
||||
self.streetId-=200
|
||||
else:
|
||||
self.streetId+=100
|
||||
elif int(str(self.streetId)[1:])>200:
|
||||
if self.shouldChangeDistrict:
|
||||
self.streetId-=100
|
||||
todo='district'
|
||||
|
||||
elif self.shouldChangeHood:
|
||||
todo='hood'
|
||||
else:
|
||||
self.streetId-=100
|
||||
else:
|
||||
self.streetId+=100
|
||||
|
||||
if todo=='district':
|
||||
Sequence(Wait(2),Func(self.newDistrict)).start()
|
||||
elif todo=='hood':
|
||||
self.newHood()
|
||||
else:
|
||||
self.teleportBackToStreet()
|
||||
|
||||
def nextZone(self):
|
||||
try:
|
||||
base.cr.playGame.getPlace().enterZone(base.localAvatar.getZoneId()+1)
|
||||
Sequence(Wait(0.5),Func(self.enterRandomBattle)).start()
|
||||
except KeyError:
|
||||
if self.shouldChangeStreet:
|
||||
self.newStreet()
|
||||
elif self.shouldChangeDistrict:
|
||||
self.newDistrict()
|
||||
else:
|
||||
base.cr.playGame.getPlace().enterZone(self.streetId)
|
||||
Sequence(Wait(0.5),Func(self.enterRandomBattle)).start()
|
||||
|
||||
def enterRandomBattle(self):
|
||||
if self.checkCogWalked:
|
||||
self.checkCogWalked.pause()
|
||||
firstTrack=self.restock.inventory.getInv("get1")
|
||||
secondTrack=self.restock.inventory.getInv("get2")
|
||||
battles = []
|
||||
battles2 = []
|
||||
for x in base.cr.doFindAllInstances(DistributedSuit.DistributedSuit):
|
||||
if x.activeState == 6:
|
||||
if x.getCurrentAnim() in ['walk','landing']:
|
||||
if self.hasSettings and x.getActualLevel()>=self.cogLevel and (x.getName()==self.cogName or x.getStyleDept()==self.cogType or (not self.cogType and not self.cogName)):
|
||||
battles.append(x)
|
||||
battles2.append(True)
|
||||
elif not self.hasSettings and x.getActualLevel()>self.restock.executeGags("return2") and x.getActualLevel()>self.restock.executeGags("return2"):
|
||||
if base.localAvatar.getMaxHp()>suitToDamage[x.getActualLevel()] or self.restock.executeGags("return1")>3 or self.restock.executeGags("return2")>3:
|
||||
battles.append(x)
|
||||
battles2.append(True)
|
||||
elif self.getPlace()>=11200 and self.getPlace()<=11300 and self.restock.executeGags("return1")>2 and self.restock.executeGags("return2")>2:
|
||||
battles.append(x)
|
||||
battles2.append(True)
|
||||
else:
|
||||
battles2.append(False)
|
||||
else:
|
||||
battles2.append(False)
|
||||
if not taskAutoer.isQuestComplete():
|
||||
try:
|
||||
if battles and base.localAvatar.getHp()>0:
|
||||
battle = random.choice(battles)
|
||||
pos, hpr = battle.getPos(), battle.getHpr()
|
||||
base.localAvatar.collisionsOn()
|
||||
base.localAvatar.setPosHpr(pos, hpr)
|
||||
battle.d_requestBattle(pos,hpr)
|
||||
self.checkCogWalked=Sequence(Wait(20),Func(self.enterRandomBattle))
|
||||
self.checkCogWalked.start()
|
||||
self.lastCogId=battle.doId
|
||||
else:
|
||||
if hasattr(base.cr.playGame.getPlace(),'enterZone') and base.localAvatar.getZoneId() not in range(HQZONES[0],HQZONES[-1]+1000):
|
||||
self.nextZone()
|
||||
else:
|
||||
self.newDistrict()
|
||||
except:
|
||||
pass
|
||||
else:
|
||||
self.stop()
|
||||
base.localAvatar.collisionsOff()
|
||||
Sequence(Wait(2),Func(taskAutoer.checkWhatToDo)).start()
|
||||
|
||||
def setLocation(self,zoneId):
|
||||
if zoneId in range(10000,13999):
|
||||
self.streetId=zoneId
|
||||
self.shouldChangeStreet=True
|
||||
elif round(zoneId,-3)!=zoneId:
|
||||
self.streetId=zoneId+2
|
||||
self.shouldChangeStreet=False
|
||||
else:
|
||||
self.shouldChangeStreet=True
|
||||
self.streetId=zoneId+102
|
||||
|
||||
def teleportBackToStreet(self):
|
||||
self.walk()
|
||||
self.restock.collectLaff()
|
||||
base.cr.playGame.getPlace().requestTeleport(round(self.streetId,-3),self.streetId,None,None)
|
||||
|
||||
def startLoops(self):
|
||||
self.buyGags.loop()
|
||||
self.gainLaff.loop()
|
||||
self.battleLoop.loop()
|
||||
self.invisibleSeq.loop()
|
||||
|
||||
def stopLoops(self):
|
||||
self.buyGags.finish()
|
||||
self.gainLaff.finish()
|
||||
self.battleLoop.finish()
|
||||
self.invisibleSeq.finish()
|
||||
|
||||
def start(self):
|
||||
if base.localAvatar.getTrackAccess()[0]:
|
||||
self.restock.inventory.setToonUp2()
|
||||
self.shouldContinue=True
|
||||
exec(hooks, __main__.__dict__)
|
||||
if base.localAvatar.getZoneId() not in range(self.streetId,self.streetId+90):
|
||||
self.teleportBackToStreet()
|
||||
else:
|
||||
self.startLoops()
|
||||
self.enterRandomBattle()
|
||||
|
||||
def stop(self):
|
||||
DistributedDoor.DistributedDoor.announceGenerate=_announceGenerate1
|
||||
DistributedPartyGate.DistributedPartyGate.announceGenerate=_announceGenerate2
|
||||
DistributedTrolley.DistributedTrolley.__init__=old__init__
|
||||
DistributedPartyGate.DistributedPartyGate.__init__=old__init__2
|
||||
DistributedDoor.DistributedDoor.__init__=old__init__3
|
||||
DistributedPicnicBasket.DistributedPicnicBasket.__init__=old__init__4
|
||||
self.shouldContinue=False
|
||||
self.stopLoops()
|
||||
|
||||
def walk(self):
|
||||
base.cr.playGame.getPlace().fsm.forceTransition('walk')
|
||||
|
|
@ -0,0 +1,232 @@
|
|||
from toontown.golf import DistributedGolfHole
|
||||
from toontown.safezone import GZPlayground
|
||||
from toontown.toon import LocalToon
|
||||
from otp.otpbase import OTPGlobals
|
||||
from direct.interval.IntervalGlobal import *
|
||||
|
||||
class GolfAutoer:
|
||||
|
||||
oldEnterChooseTee = DistributedGolfHole.DistributedGolfHole.enterChooseTee
|
||||
oldGolferChooseTee = DistributedGolfHole.DistributedGolfHole.golferChooseTee
|
||||
oldBallMovie2Client = DistributedGolfHole.DistributedGolfHole.ballMovie2Client
|
||||
oldSetCourseBest = LocalToon.LocalToon.setGolfCourseBest
|
||||
oldGotGolfCourse = DistributedGolfHole.DistributedGolfHole._DistributedGolfHole__gotGolfCourse
|
||||
oldEnterWalk = GZPlayground.GZPlayground.enterWalk
|
||||
oldSetAnim=LocalToon.LocalToon.setAnimState
|
||||
|
||||
def __init__(self):
|
||||
self.shouldContinue=False
|
||||
self.shouldStop=False
|
||||
self.shouldMember=False
|
||||
self.automatic=True
|
||||
self.course=2
|
||||
self.courseNum=0
|
||||
self.accountNum=0
|
||||
self.trophieStartNum=0
|
||||
self.canSetParentAgain=True
|
||||
|
||||
DistributedGolfHole.DistributedGolfHole.enterChooseTee = lambda newSelf: self.newEnterChooseTee(newSelf)
|
||||
DistributedGolfHole.DistributedGolfHole.golferChooseTee = lambda newSelf, avId: self.newGolferChooseTee(newSelf,avId)
|
||||
DistributedGolfHole.DistributedGolfHole.ballMovie2Client = lambda newSelf, *args: self.newBallMovie2Client(newSelf,*args)
|
||||
DistributedGolfHole.DistributedGolfHole._DistributedGolfHole__gotGolfCourse = lambda newSelf, golfCourse: self.new_DistributedGolfHole__gotGolfCourse(newSelf,golfCourse)
|
||||
LocalToon.LocalToon.setGolfCourseBest = lambda newSelf, courseBest: self.setGolfCourseBest(newSelf,courseBest)
|
||||
GZPlayground.GZPlayground.enterWalk = lambda newSelf,*args,**kwds: self.newEnterWalk(newSelf,*args,**kwds)
|
||||
LocalToon.LocalToon.setAnimState=lambda *args,**kwds:self.newSetAnimState(*args,**kwds)
|
||||
|
||||
self.autoerGui=AutoerGui('Golf Autoer',
|
||||
|
||||
['Run Time','NO. Courses',\
|
||||
'Courses/Hour','Number of Trophies','Trophies Gained'],\
|
||||
|
||||
['self.hours+":"+self.minutes+":"+self.seconds','str(golfAutoer.courseNum)',\
|
||||
'str(self.workOutNumberAnHour(golfAutoer.courseNum))',\
|
||||
'str(golfAutoer.getNumTrophies())','str(golfAutoer.getNumTrophies()-golfAutoer.trophieStartNum)'],\
|
||||
|
||||
'AUTO GOLF'
|
||||
|
||||
,None)
|
||||
|
||||
def newBallMovie2Client(self, newSelf, *args):
|
||||
self.oldBallMovie2Client(newSelf,*args)
|
||||
if self.shouldContinue:
|
||||
newSelf.sendUpdate('ballInHole')
|
||||
self.autoerGui.display.newLine('Completing Hole %s'%(self.holeNum))
|
||||
self.holeNum+=1
|
||||
|
||||
def newSetAnimState(self,*args,**kwds):
|
||||
self.oldSetAnim(*args,**kwds)
|
||||
if self.canSetParentAgain and self.shouldContinue:
|
||||
base.localAvatar.d_setParent(1)
|
||||
self.canSetParentAgain=False
|
||||
Sequence(Wait(2),Func(self.doUnsetCanSetParentAgain)).start()
|
||||
|
||||
def doUnsetCanSetParentAgain(self):
|
||||
self.canSetParentAgain=True
|
||||
|
||||
def newEnterChooseTee(self,newSelf):
|
||||
self.oldEnterChooseTee(newSelf)
|
||||
if self.shouldContinue:
|
||||
newSelf.sendUpdate('setAvatarTee', [0])
|
||||
|
||||
def newGolferChooseTee(self, newSelf, avId):
|
||||
self.oldGolferChooseTee(newSelf,avId)
|
||||
if self.shouldContinue:
|
||||
if avId != base.localAvatar.doId:
|
||||
return None
|
||||
newSelf.sendUpdate('postSwingState', [
|
||||
0.0, 0, 1.0, -2.5, 0.7, 1.0, 1.8, 0.6,
|
||||
[
|
||||
(
|
||||
0, 0, 4.3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
|
||||
),
|
||||
(
|
||||
0, 99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
|
||||
)
|
||||
]
|
||||
]
|
||||
)
|
||||
|
||||
def new_DistributedGolfHole__gotGolfCourse(self,newSelf,golfCourse):
|
||||
self.oldGotGolfCourse(newSelf,golfCourse)
|
||||
if self.shouldContinue:
|
||||
newSelf.sendUpdate('setAvatarTee', [0])
|
||||
|
||||
def setGolfCourseBest(self, newSelf, courseBest):
|
||||
self.oldSetCourseBest(newSelf,courseBest)
|
||||
if self.shouldContinue:
|
||||
newSelf.courseBest = courseBest
|
||||
self.courseNum+=1
|
||||
self.autoerGui.display.newLine('Finished Course')
|
||||
base.cr.doFind('DistributedGolfCourse').sendUpdate('setDoneReward', [])
|
||||
|
||||
def newEnterWalk(self,newSelf,*args,**kwds):
|
||||
self.oldEnterWalk(newSelf,**kwds)
|
||||
if self.shouldStop:
|
||||
self.shouldContinue=False
|
||||
try:
|
||||
self.autoerGui.display.newLine('Stopped')
|
||||
except:
|
||||
pass
|
||||
base.localAvatar.setSystemMessage(0,"Thanks for using freshollie's golf autoer!")
|
||||
if self.shouldContinue and len(args)>0:
|
||||
self.goKart()
|
||||
|
||||
def goKart(self):
|
||||
if self.shouldStop:
|
||||
self.shouldContinue=False
|
||||
try:
|
||||
self.autoerGui.display.newLine('Stopped')
|
||||
except:
|
||||
pass
|
||||
base.localAvatar.setSystemMessage(0,"Thanks for using freshollie's golf autoer!")
|
||||
if self.shouldContinue:
|
||||
self.autoerGui.display.newLine('Attempting to board kart')
|
||||
self.workOutCourse()
|
||||
self.walk()
|
||||
for golfKart in base.cr.doFindAll('DistributedGolfKart'):
|
||||
if golfKart.golfCourse==self.course:
|
||||
self.holeNum=1
|
||||
Sequence(Wait(self.accountNum),Func(golfKart.handleEnterGolfKartSphere,0),Wait(4),Func(self.checkInKart)).start()
|
||||
return
|
||||
|
||||
def checkInKart(self):
|
||||
if base.localAvatar.getCurrentAnim()!='sit':
|
||||
Sequence(Func(self.goKart)).start()
|
||||
else:
|
||||
pass
|
||||
|
||||
def walk(self):
|
||||
try:
|
||||
base.cr.playGame.getPlace().fsm.forceTransition('walk')
|
||||
except:
|
||||
pass
|
||||
|
||||
def getNumTrophies(self):
|
||||
numTrophies=0
|
||||
for trophie in base.localAvatar.getGolfTrophies():
|
||||
if trophie:
|
||||
numTrophies+=1
|
||||
return numTrophies
|
||||
|
||||
def makeMember(self):
|
||||
base.cr._OTPClientRepository__isPaid = True
|
||||
OTPGlobals.AccessVelvetRope = 2
|
||||
OTPGlobals.AccessFull = 2
|
||||
LocalToon.LocalToon.gameAccess = 2
|
||||
base.launcher.setValue(base.launcher.PaidUserLoggedInKey, '1')
|
||||
LocalToon.LocalToon.getGameAccess = lambda *args: 2
|
||||
base.cr.allowSecretChat = lambda *args,**kwds: True
|
||||
base.cr.isParentPasswordSet = lambda *args,**kwds: True
|
||||
|
||||
def setMember(self):
|
||||
self.shouldMember=True
|
||||
base.localAvatar.setSystemMessage(0,"Golf Autoer: Toon will become a pretend member.")
|
||||
|
||||
def unsetMember(self):
|
||||
self.shouldMember=False
|
||||
base.localAvatar.setSystemMessage(0,"Golf Autoer: Toon set not to be a member.")
|
||||
|
||||
def setAutomatic(self):
|
||||
self.automatic=True
|
||||
base.localAvatar.setSystemMessage(0,"Golf Autoer: Set to be automatic (Works out what courses you need).")
|
||||
|
||||
def setPar(self):
|
||||
self.automatic=False
|
||||
self.course=0
|
||||
base.localAvatar.setSystemMessage(0,"Golf Autoer: Set to do the course 'Walk in the par'")
|
||||
|
||||
def setFun(self):
|
||||
self.automatic=False
|
||||
self.course=1
|
||||
base.localAvatar.setSystemMessage(0,"Golf Autoer: Set to do the course 'Holesome fun'")
|
||||
|
||||
def setHoleKit(self):
|
||||
self.automatic=False
|
||||
self.course=2
|
||||
base.localAvatar.setSystemMessage(0,"Golf Autoer: Set to do the course 'The hole kit and caboodle'")
|
||||
|
||||
def setFirst(self):
|
||||
self.accountNum=0
|
||||
|
||||
def setSecond(self):
|
||||
self.accountNum=5
|
||||
|
||||
def workOutCourse(self):
|
||||
if self.automatic:
|
||||
if self.getNumTrophies()>=22 and not base.localAvatar.getGolfTrophies()[23]:
|
||||
self.course=0
|
||||
elif self.getNumTrophies()>=25 and not base.localAvatar.getGolfTrophies()[26]:
|
||||
self.course=1
|
||||
else:
|
||||
self.course=2
|
||||
|
||||
def start(self):
|
||||
self.trophieStartNum=self.getNumTrophies()
|
||||
self.courseNum=0
|
||||
self.shouldContinue=True
|
||||
self.shouldStop=False
|
||||
self.autoerGui.startTimer()
|
||||
self.workOutCourse()
|
||||
if self.shouldMember:
|
||||
self.makeMember()
|
||||
if base.localAvatar.getZoneId()==17000:
|
||||
self.goKart()
|
||||
else:
|
||||
base.cr.playGame.getPlace().handleBookCloseTeleport(17000, 17000)
|
||||
|
||||
def setStop(self):
|
||||
self.shouldStop=True
|
||||
base.localAvatar.setSystemMessage(0,"The Autoer will stop at the end of this run")
|
||||
self.autoerGui.stopTimer()
|
||||
|
||||
def revertFunctions(self):
|
||||
DistributedGolfHole.DistributedGolfHole.enterChooseTee = self.oldEnterChooseTee
|
||||
DistributedGolfHole.DistributedGolfHole.golferChooseTee = self.oldGolferChooseTee
|
||||
DistributedGolfHole.DistributedGolfHole.ballMovie2Client = self.oldBallMovie2Client
|
||||
LocalToon.LocalToon.setGolfCourseBest = self.oldSetCourseBest
|
||||
DistributedGolfHole.DistributedGolfHole._DistributedGolfHole__gotGolfCourse = self.oldGotGolfCourse
|
||||
GZPlayground.GZPlayground.enterWalk = self.oldEnterWalk
|
||||
self.autoerGui.destroy()
|
||||
|
||||
global golfAutoer
|
||||
golfAutoer=GolfAutoer()
|
||||
|
|
@ -0,0 +1,253 @@
|
|||
from direct.interval.IntervalGlobal import *
|
||||
from toontown.safezone import GSPlayground
|
||||
from toontown.racing import DistributedRace
|
||||
from toontown.racing import DistributedStartingBlock
|
||||
from toontown.toon import LocalToon
|
||||
from otp.otpbase import OTPGlobals
|
||||
|
||||
class RaceAutoer:
|
||||
|
||||
oldTeleportIn=GSPlayground.GSPlayground.exitTeleportIn
|
||||
oldRaceAnnounceGenerate=DistributedRace.DistributedRace.announceGenerate
|
||||
oldStartCountdownClock=DistributedRace.DistributedRace.startCountdownClock
|
||||
oldRejectEnter=DistributedStartingBlock.DistributedStartingBlock.rejectEnter
|
||||
oldSetAnim=LocalToon.LocalToon.setAnimState
|
||||
|
||||
def __init__(self):
|
||||
self.accountNum=0
|
||||
self.setSpeedway()
|
||||
self.trackType=0
|
||||
self.raceNum=0
|
||||
self.shouldStop=False
|
||||
self.shouldContinue=False
|
||||
self.shouldMember=False
|
||||
self.canSetParentAgain=True
|
||||
self.autoerGui=AutoerGui('Race Autoer',
|
||||
|
||||
['Run Time','NO. Races Completed',\
|
||||
'Races/hour','Number of tickets','NO. Trophies'],\
|
||||
|
||||
['self.hours+":"+self.minutes+":"+self.seconds','str(raceAutoer.raceNum)',\
|
||||
'str(self.workOutNumberAnHour(raceAutoer.raceNum))',\
|
||||
'str(base.localAvatar.getTickets())','str(raceAutoer.getNumTrophies())'],\
|
||||
|
||||
'AUTO RACE'
|
||||
|
||||
,None)
|
||||
|
||||
GSPlayground.GSPlayground.exitTeleportIn=lambda *args: self.newTeleportIn(*args)
|
||||
DistributedRace.DistributedRace.announceGenerate=lambda newSelf,*args: self.newRaceAnnounceGenerate(newSelf,*args)
|
||||
DistributedRace.DistributedRace.startCountdownClock=lambda newSelf,*args: self.newStartCountdownClock(newSelf,*args)
|
||||
LocalToon.LocalToon.setAnimState=lambda *args,**kwds:self.newSetAnimState(*args,**kwds)
|
||||
DistributedStartingBlock.DistributedStartingBlock.rejectEnter=lambda newSelf,errCode: self.newRejectEnter(newSelf,errCode)
|
||||
|
||||
def newRaceAnnounceGenerate(self,newSelf,*args):
|
||||
self.oldRaceAnnounceGenerate(newSelf,*args)
|
||||
Sequence(Wait(3),Func(self.doRules,newSelf)).start()
|
||||
|
||||
def doRules(self,newSelf):
|
||||
if self.shouldContinue:
|
||||
self.autoerGui.display.newLine('Accepting rules')
|
||||
newSelf.handleRulesDone()
|
||||
|
||||
def newStartCountdownClock(self,newSelf,*args):
|
||||
if self.shouldContinue:
|
||||
self.raceNum+=1
|
||||
self.autoerGui.display.newLine('Completing race place '+str(self.accountNum+1))
|
||||
Sequence(Wait(self.accountNum),Func(newSelf.enterRacing),Wait(0.5),Func(newSelf.sendUpdate,'heresMyT',[base.localAvatar.doId, 3, 1.0, 1]),Wait(0.5),Func(newSelf.leaveRace)).start()
|
||||
|
||||
def newTeleportIn(self,*args):
|
||||
self.oldTeleportIn(*args)
|
||||
if self.shouldContinue:
|
||||
Sequence(Wait(1),Func(self.goToBlock)).start()
|
||||
|
||||
def newRejectEnter(self,newSelf,errCode):
|
||||
if self.shouldContinue:
|
||||
Sequence(Wait(2),Func(self.goToBlock)).start()
|
||||
else:
|
||||
self.oldRejectEnter(newSelf,errCode)
|
||||
|
||||
def newSetAnimState(self,*args,**kwds):
|
||||
self.oldSetAnim(*args,**kwds)
|
||||
if self.canSetParentAgain and self.shouldContinue:
|
||||
base.localAvatar.d_setParent(1)
|
||||
self.canSetParentAgain=False
|
||||
Sequence(Wait(2),Func(self.doUnsetCanSetParentAgain)).start()
|
||||
|
||||
def doUnsetCanSetParentAgain(self):
|
||||
self.canSetParentAgain=True
|
||||
|
||||
def walk(self):
|
||||
try:
|
||||
base.cr.playGame.getPlace().fsm.forceTransition('walk')
|
||||
except:
|
||||
pass
|
||||
|
||||
def goToBlock(self):
|
||||
if self.shouldStop:
|
||||
self.shouldContinue=False
|
||||
|
||||
if self.shouldContinue:
|
||||
self.walk()
|
||||
self.workOutTrack()
|
||||
base.localAvatar.collisionsOff()
|
||||
padList,trackIds=[],[]
|
||||
|
||||
for x in base.cr.doFindAll("RacePad"):
|
||||
if x.trackType==self.trackType and x.trackNameNode.getText() in self.tracks:
|
||||
if self.tracks[0] not in trackIds or self.tracks[1] not in trackIds:
|
||||
trackIds.append(x.trackNameNode.getText())
|
||||
padList.append(x)
|
||||
else:
|
||||
for y in range(len(padList)):
|
||||
if padList[y].trackNameNode.getText==x.trackNameNode.getText() and padList[y].doId>x.doId:
|
||||
del padList[y]
|
||||
del trackIds[y]
|
||||
|
||||
padList.sort()
|
||||
if len(padList)>0:
|
||||
for race in padList:
|
||||
numBlocksEmpty=0
|
||||
for block in race.startingBlocks:
|
||||
if block.state=='Off':
|
||||
numBlocksEmpty+=1
|
||||
startingBlock=block
|
||||
|
||||
if numBlocksEmpty>1:
|
||||
self.autoerGui.display.newLine('Going to block '+str(self.accountNum+1))
|
||||
startingBlock.sendUpdate("requestEnter",[True])
|
||||
break
|
||||
else:
|
||||
base.localAvatar.setSystemMessage(0,'Race Autoer: The track type was not found, or there were no free spots, trying again')
|
||||
Sequence(Wait(2),Func(self.goToBlock)).start()
|
||||
|
||||
|
||||
def setAccountNum1(self):
|
||||
self.accountNum=0
|
||||
base.localAvatar.setSystemMessage(0,'Race Autoer: Toon number set to 1')
|
||||
|
||||
def setAccountNum2(self):
|
||||
self.accountNum=1
|
||||
base.localAvatar.setSystemMessage(0,'Race Autoer: Toon number set to 2')
|
||||
|
||||
def setAccountNum3(self):
|
||||
self.accountNum=2
|
||||
base.localAvatar.setSystemMessage(0,'Race Autoer: Toon number set to 3')
|
||||
|
||||
def setAccountNum4(self):
|
||||
self.accountNum=3
|
||||
base.localAvatar.setSystemMessage(0,'Race Autoer: Toon number set to 4')
|
||||
|
||||
def setSpeedway(self):
|
||||
self.tracks=('Screwball Stadium', 'Corkscrew Coliseum')
|
||||
self.automatic=False
|
||||
base.localAvatar.setSystemMessage(0,'Race Autoer: Set to do stadium tracks')
|
||||
|
||||
def setUrban(self):
|
||||
self.tracks=('Airborne Acres', 'Rustic Raceway')
|
||||
self.automatic=False
|
||||
base.localAvatar.setSystemMessage(0,'Race Autoer: Set to do urban tracks')
|
||||
|
||||
def setRural(self):
|
||||
self.tracks=('City Circuit', 'Blizzard Boulevard')
|
||||
self.automatic=False
|
||||
base.localAvatar.setSystemMessage(0,'Race Autoer: Set to do rural tracks')
|
||||
|
||||
def setTournament(self):
|
||||
self.trackType=2
|
||||
self.automatic=False
|
||||
base.localAvatar.setSystemMessage(0,'Race Autoer: This may not work properly unless all account have more than 1000 tickets')
|
||||
|
||||
def setToonbattle(self):
|
||||
self.trackType=1
|
||||
self.automatic=False
|
||||
base.localAvatar.setSystemMessage(0,'Race Autoer: This may not work properly unless all account have more than 500 tickets')
|
||||
|
||||
def setPractice(self):
|
||||
self.trackType=0
|
||||
self.automatic=False
|
||||
base.localAvatar.setSystemMessage(0,"Race Auoter: To Gain any trohpies more than 1 account needs to be used")
|
||||
|
||||
def setMember(self):
|
||||
self.shouldMember=True
|
||||
base.localAvatar.setSystemMessage(0,"Race Auoter: Toon will become a pretend member (so it can do toonbattle and Grand Prix) when started")
|
||||
|
||||
def setAutomatic(self):
|
||||
self.automatic=True
|
||||
base.localAvatar.setSystemMessage(0,"Race Auoter: The autoer will work out what track and track type to do based on your trophies needed")
|
||||
|
||||
def unsetMember(self):
|
||||
self.shouldMember=False
|
||||
base.localAvatar.setSystemMessage(0,"Race Auoter: Toon set not to be a member")
|
||||
|
||||
def getNumTrophies(self):
|
||||
numTrophies=0
|
||||
for trophie in base.localAvatar.getKartingTrophies():
|
||||
if trophie:
|
||||
numTrophies+=1
|
||||
return numTrophies
|
||||
|
||||
def workOutTrack(self):
|
||||
if self.automatic:
|
||||
override=False
|
||||
tracks=[]
|
||||
for x in base.cr.doFindAll("RacePad"):
|
||||
tracks.append(x.trackType)
|
||||
|
||||
if not base.localAvatar.getKartingTrophies()[2]:
|
||||
self.tracks=('Screwball Stadium', 'Corkscrew Coliseum')
|
||||
|
||||
elif not base.localAvatar.getKartingTrophies()[5]:
|
||||
self.tracks=('Airborne Acres', 'Rustic Raceway')
|
||||
|
||||
elif not base.localAvatar.getKartingTrophies()[8]:
|
||||
self.tracks=('City Circuit', 'Blizzard Boulevard')
|
||||
|
||||
else:
|
||||
override=True
|
||||
self.trackType=2
|
||||
|
||||
if not override:
|
||||
if base.localAvatar.getTickets()>400 and 1 in tracks:
|
||||
self.trackType=1
|
||||
elif base.localAvatar.getTickets()>1000 and 2 in tracks:
|
||||
self.trackType=2
|
||||
else:
|
||||
self.trackType=0
|
||||
|
||||
def makeMember(self):
|
||||
base.cr._OTPClientRepository__isPaid = True
|
||||
OTPGlobals.AccessVelvetRope = 2
|
||||
OTPGlobals.AccessFull = 2
|
||||
LocalToon.LocalToon.gameAccess = 2
|
||||
base.launcher.setValue(base.launcher.PaidUserLoggedInKey, '1')
|
||||
LocalToon.LocalToon.getGameAccess = lambda *args: 2
|
||||
base.cr.allowSecretChat = lambda *args,**kwds: True
|
||||
base.cr.isParentPasswordSet = lambda *args,**kwds: True
|
||||
|
||||
def revertFunctions(self):
|
||||
GSPlayground.GSPlayground.exitTeleportIn=self.oldTeleportIn
|
||||
DistributedRace.DistributedRace.announceGenerate=self.oldRaceAnnounceGenerate
|
||||
DistributedRace.DistributedRace.startCountdownClock=self.oldStartCountdownClock
|
||||
DistributedStartingBlock.DistributedStartingBlock.rejectEnter=self.oldRejectEnter
|
||||
LocalToon.LocalToon.setAnimState=self.oldSetAnim
|
||||
self.autoerGui.destroy()
|
||||
|
||||
def start(self):
|
||||
self.raceNum=0
|
||||
self.startingTickets=base.localAvatar.getTickets()
|
||||
self.shouldContinue=True
|
||||
self.shouldStop=False
|
||||
self.autoerGui.startTimer()
|
||||
if self.shouldMember:
|
||||
self.makeMember()
|
||||
if base.localAvatar.getZoneId()==8000:
|
||||
self.goToBlock()
|
||||
else:
|
||||
base.cr.playGame.getPlace().handleBookCloseTeleport(8000, 8000)
|
||||
|
||||
def setStop(self):
|
||||
self.shouldStop=True
|
||||
self.autoerGui.stopTimer()
|
||||
|
||||
raceAutoer=RaceAutoer()
|
||||
|
|
@ -0,0 +1,109 @@
|
|||
#This will not work unless you have Toon Bot running on your toontown
|
||||
#If you do not have Toon Bot you can download it at youtube.com/toontowninjecting
|
||||
|
||||
script={
|
||||
|
||||
'name':'BLDG Autoer',\
|
||||
|
||||
'description':"Building Autoer designed to do building tasks quickly or get as many\
|
||||
floors as possible in 1 day. The autoer will not change district if no buildings are found\
|
||||
on that street, but can be set to in the settings.",\
|
||||
|
||||
'author': 'Freshollie',\
|
||||
|
||||
'version': '1',\
|
||||
|
||||
'unload':'buildingAutoer.revert()',\
|
||||
|
||||
'start':'buildingAutoer.start()',\
|
||||
|
||||
'stop':'buildingAutoer.stop()',\
|
||||
|
||||
'close':'buildingAutoer.autoerGui.hideAll()',\
|
||||
|
||||
'open':'buildingAutoer.autoerGui.showAll()',\
|
||||
|
||||
'options':{
|
||||
'Only Sellbot':{
|
||||
'command':'buildingAutoer.setSellbot',\
|
||||
'pos':(0,0)\
|
||||
},
|
||||
|
||||
'Only Cashbot':{
|
||||
'command':'buildingAutoer.setCashbot',\
|
||||
'pos':(1,0)
|
||||
},
|
||||
|
||||
'Only Lawbot':{
|
||||
'command':'buildingAutoer.setLawbot',\
|
||||
'pos':(2,0)\
|
||||
},
|
||||
|
||||
'Only Bossbot':{
|
||||
'command':'buildingAutoer.setBossbot',\
|
||||
'pos':(3,0)
|
||||
},
|
||||
|
||||
'Any Type':{
|
||||
'command':'buildingAutoer.setAll',\
|
||||
'pos':(4,0)
|
||||
},
|
||||
|
||||
'1+ Story':{
|
||||
'command':'buildingAutoer.setLevel1',\
|
||||
'pos':(0,1)
|
||||
},
|
||||
|
||||
'2+ Story':{
|
||||
'command':'buildingAutoer.setLevel2',\
|
||||
'pos':(1,1)
|
||||
},
|
||||
|
||||
'3+ Story':{
|
||||
'command':'buildingAutoer.setLevel3',\
|
||||
'pos':(2,1)
|
||||
},
|
||||
|
||||
'4+ Story':{
|
||||
'command':'buildingAutoer.setLevel4',\
|
||||
'pos':(3,1)
|
||||
},
|
||||
|
||||
'5+ Story':{
|
||||
'command':'buildingAutoer.setLevel5',\
|
||||
'pos':(4,1)
|
||||
},
|
||||
|
||||
'Allow Change Dis':{
|
||||
'command':'buildingAutoer.changeDistrict',\
|
||||
'pos':(5,1)
|
||||
},
|
||||
|
||||
'No Change Dis':{
|
||||
'command':'buildingAutoer.noChangeDistrict',\
|
||||
'pos':(5,0)
|
||||
},
|
||||
|
||||
'Allow Change Str':{
|
||||
'command':'buildingAutoer.changeStreet',\
|
||||
'pos':(6,1)
|
||||
},
|
||||
|
||||
'No Change Str':{
|
||||
'command':'buildingAutoer.noChangeStreet',\
|
||||
'pos':(6,0)
|
||||
},
|
||||
|
||||
'Allow Change Hood':{
|
||||
'command':'buildingAutoer.changeHood',\
|
||||
'pos':(7,1)
|
||||
},
|
||||
|
||||
'No Change Hood':{
|
||||
'command':'buildingAutoer.noChangeHood',\
|
||||
'pos':(7,0)
|
||||
}
|
||||
},\
|
||||
'location':'http://raw.githubusercontent.com/freshollie/ToontownAutoers/master/BuildingAutoer.py'}
|
||||
|
||||
toonBot.addScript(script)
|
||||
|
|
@ -0,0 +1,51 @@
|
|||
#This will not work unless you have Toon Bot running on your toontown
|
||||
#If you do not have Toon Bot you can download it at youtube.com/toontowninjecting
|
||||
|
||||
script={
|
||||
|
||||
'name':'CEO Maxer',\
|
||||
|
||||
'description':"WARNING: This script has been considered highly banable \
|
||||
which is why there is a limiter in the options. \
|
||||
The CEO maxer is a script designed to max your Bossbot suit. It does a Country Club \
|
||||
(Back Nine, Middle Six, Front Three) depending on how many stocks you need \
|
||||
and it does the CEO when it is ready.",\
|
||||
|
||||
'author': 'Freshollie',\
|
||||
|
||||
'version': '1',\
|
||||
|
||||
'unload':'ceoMaxer.revert()',\
|
||||
|
||||
'start':'ceoMaxer.otherFunctions.start()',\
|
||||
|
||||
'stop':'ceoMaxer.otherFunctions.setStop()',\
|
||||
|
||||
'close':'ceoMaxer.autoerGui.hideAll()',\
|
||||
|
||||
'open':'ceoMaxer.autoerGui.showAll()',\
|
||||
|
||||
'options':{
|
||||
'Run Limiter On':{
|
||||
'command':'ceoMaxer.otherFunctions.limiterOn',\
|
||||
'pos':(0,0)\
|
||||
},
|
||||
|
||||
'Run Limiter Off':{
|
||||
'command':'ceoMaxer.otherFunctions.limiterOff',\
|
||||
'pos':(0,1)
|
||||
},
|
||||
|
||||
'Only Do Club':{
|
||||
'command':'ceoMaxer.otherFunctions.onlyDoClub',\
|
||||
'pos':(1,0)\
|
||||
},
|
||||
|
||||
'Do Both':{
|
||||
'command':'ceoMaxer.otherFunctions.doBoth',\
|
||||
'pos':(1,1)
|
||||
}
|
||||
},\
|
||||
'location':'http://raw.githubusercontent.com/freshollie/ToontownAutoers/master/CEOMaxer.py'}
|
||||
|
||||
toonBot.addScript(script)
|
||||
|
|
@ -0,0 +1,43 @@
|
|||
#This will not work unless you have Toon Bot running on your toontown
|
||||
#If you do not have Toon Bot you can download it at youtube.com/toontowninjecting
|
||||
|
||||
script={
|
||||
|
||||
'name':'CFO Maxer',\
|
||||
|
||||
'description':"The CFO maxer is a script designed to max your Cashbot suit. It does the Mint \
|
||||
when you need merits and does a CFO when you have the cogbucks you need. When you are maxed \
|
||||
it will continue to do the cfo gaining you Unites. A full credit to the functions used \
|
||||
can be found of my channel (ToontownInjecting).",
|
||||
|
||||
'author': 'Freshollie',\
|
||||
|
||||
'version': '1',\
|
||||
|
||||
'unload':'cfoMaxer.revert()',\
|
||||
|
||||
'start':'cfoMaxer.otherFunctions.start()',\
|
||||
|
||||
'stop':'cfoMaxer.otherFunctions.setStop()',\
|
||||
|
||||
'close':'cfoMaxer.autoerGui.hideAll()',\
|
||||
|
||||
'open':'cfoMaxer.autoerGui.showAll()',\
|
||||
|
||||
'options':{
|
||||
'Only Do Mint':{
|
||||
'command':'cfoMaxer.otherFunctions.onlyDoMint',\
|
||||
'pos':(0,0)\
|
||||
},
|
||||
|
||||
'Do Both':{
|
||||
'command':'cfoMaxer.otherFunctions.doBoth',\
|
||||
'pos':(0,1)
|
||||
}
|
||||
},\
|
||||
'location':'http://raw.githubusercontent.com/freshollie/ToontownAutoers/master/CFOMaxer.py'}
|
||||
|
||||
try:
|
||||
toonBot.addScript(script)
|
||||
except:
|
||||
base.localAvatar.setSystemMessage(0,'You did not follow instructions, this script needs to be added to Toon-Bot which can be found on my channel (youtube.com/toontowninjecting)')
|
||||
|
|
@ -0,0 +1,40 @@
|
|||
#This will not work unless you have Toon Bot running on your toontown
|
||||
#If you do not have Toon Bot you can download it at youtube.com/toontowninjecting
|
||||
|
||||
script={
|
||||
|
||||
'name':'CJ Maxer',\
|
||||
|
||||
'description':"The CJ maxer is a script used to max your Lawbot suit. It does a DA office \
|
||||
(A different one depending on notices needed) when it needs notices and does a CJ when it has all \
|
||||
the notices it needs. Full credit to all the functions used in the script can be found on my \
|
||||
channel (ToontownInjecting).",
|
||||
|
||||
'author': 'Freshollie',\
|
||||
|
||||
'version': '1',\
|
||||
|
||||
'unload':'cjMaxer.revert()',\
|
||||
|
||||
'start':'cjMaxer.otherFunctions.start()',\
|
||||
|
||||
'stop':'cjMaxer.otherFunctions.setStop()',\
|
||||
|
||||
'close':'cjMaxer.autoerGui.hideAll()',\
|
||||
|
||||
'open':'cjMaxer.autoerGui.showAll()',\
|
||||
|
||||
'options':{
|
||||
'Only Do DA':{
|
||||
'command':'cjMaxer.otherFunctions.onlyDoDA',\
|
||||
'pos':(0,0)\
|
||||
},
|
||||
|
||||
'Do Both':{
|
||||
'command':'cjMaxer.otherFunctions.doBoth',\
|
||||
'pos':(0,1)
|
||||
}
|
||||
},\
|
||||
'location':'http://raw.githubusercontent.com/freshollie/ToontownAutoers/master/CJMaxer.py'}
|
||||
|
||||
toonBot.addScript(script)
|
||||
|
|
@ -0,0 +1,39 @@
|
|||
#This will not work unless you have Toon Bot running on your toontown
|
||||
#If you do not have Toon Bot you can download it at youtube.com/toontowninjecting
|
||||
|
||||
script={
|
||||
|
||||
'name':'Fish Autoer',\
|
||||
|
||||
'description':"The Fishing autoer is a script designed to either get you max jelly beans \
|
||||
or max your fishing trophies (Depending on what is set up in the options). Fill credit to the \
|
||||
functions used can be found on my channel (ToontownInjecting).",
|
||||
|
||||
'author': 'Freshollie',\
|
||||
|
||||
'version': '1',\
|
||||
|
||||
'unload':'fishingAutoer.revertFunctions()',\
|
||||
|
||||
'start':'fishingAutoer.start()',\
|
||||
|
||||
'stop':'fishingAutoer.setStop()',\
|
||||
|
||||
'close':'fishingAutoer.autoerGui.hideAll()',\
|
||||
|
||||
'open':'fishingAutoer.autoerGui.showAll()',\
|
||||
|
||||
'options':{
|
||||
'Stop At Max Jbs':{
|
||||
'command':'fishingAutoer.stopOnMax',\
|
||||
'pos':(0,0)\
|
||||
},
|
||||
|
||||
'Continue To Fish':{
|
||||
'command':'fishingAutoer.continueFishing',\
|
||||
'pos':(0,1)
|
||||
}
|
||||
},\
|
||||
'location':'http://raw.githubusercontent.com/freshollie/ToontownAutoers/master/FishAutoer.py'}
|
||||
|
||||
toonBot.addScript(script)
|
||||
|
|
@ -0,0 +1,179 @@
|
|||
#This will not work unless you have Toon Bot running on your toontown
|
||||
#If you do not have Toon Bot you can download it at youtube.com/toontowninjecting
|
||||
|
||||
script={
|
||||
|
||||
'name':'Gag Trainer',\
|
||||
|
||||
'description':"Gag trainer has been a script that has been a\
|
||||
progressively improved script I have been working on for 7 months\
|
||||
on and off now. This is the final version I will be producing of the\
|
||||
script to make it tidier and integrate it with toonbot.",\
|
||||
|
||||
'author': 'Freshollie',\
|
||||
|
||||
'version': '1.5',\
|
||||
|
||||
'unload':'gagTrainer.revert()',\
|
||||
|
||||
'start':'gagTrainer.start()',\
|
||||
|
||||
'stop':'gagTrainer.stop()',\
|
||||
|
||||
'close':'gagTrainer.autoerGui.hideAll()',\
|
||||
|
||||
'open':'gagTrainer.autoerGui.showAll()',\
|
||||
|
||||
'text':{
|
||||
'First Gag':(0,0),
|
||||
'Second Gag':(0,1)
|
||||
},
|
||||
|
||||
'options':{
|
||||
'Toonup ':{
|
||||
'command':'gagTrainer.restock.inventory.setToonUp1',\
|
||||
'pos':(1,0)\
|
||||
},
|
||||
|
||||
'Toonup':{
|
||||
'command':'gagTrainer.restock.inventory.setToonUp2',\
|
||||
'pos':(1,1)\
|
||||
},
|
||||
|
||||
'Trap ':{
|
||||
'command':'gagTrainer.restock.inventory.setTrap1',\
|
||||
'pos':(2,0)\
|
||||
},
|
||||
|
||||
'Trap':{
|
||||
'command':'gagTrainer.restock.inventory.setTrap2',\
|
||||
'pos':(2,1)\
|
||||
},
|
||||
|
||||
'Lure ':{
|
||||
'command':'gagTrainer.restock.inventory.setLure1',\
|
||||
'pos':(3,0)\
|
||||
},
|
||||
|
||||
'Lure':{
|
||||
'command':'gagTrainer.restock.inventory.setLure2',\
|
||||
'pos':(3,1)\
|
||||
},
|
||||
|
||||
'Sound ':{
|
||||
'command':'gagTrainer.restock.inventory.setSound1',\
|
||||
'pos':(4,0)\
|
||||
},
|
||||
|
||||
'Sound':{
|
||||
'command':'gagTrainer.restock.inventory.setSound2',\
|
||||
'pos':(4,1)\
|
||||
},
|
||||
|
||||
'Throw ':{
|
||||
'command':'gagTrainer.restock.inventory.setThrow1',\
|
||||
'pos':(5,0)\
|
||||
},
|
||||
|
||||
'Throw':{
|
||||
'command':'gagTrainer.restock.inventory.setThrow2',\
|
||||
'pos':(5,1)\
|
||||
},
|
||||
|
||||
'Squirt ':{
|
||||
'command':'gagTrainer.restock.inventory.setSquirt1',\
|
||||
'pos':(6,0)\
|
||||
},
|
||||
|
||||
'Squirt':{
|
||||
'command':'gagTrainer.restock.inventory.setSquirt2',\
|
||||
'pos':(6,1)\
|
||||
},
|
||||
|
||||
'Drop ':{
|
||||
'command':'gagTrainer.restock.inventory.setDrop1',\
|
||||
'pos':(7,0)\
|
||||
},
|
||||
|
||||
'Drop':{
|
||||
'command':'gagTrainer.restock.inventory.setDrop2',\
|
||||
'pos':(7,1)\
|
||||
},
|
||||
|
||||
'Custom Levels':{
|
||||
'command':'gagTrainer.restock.inventory.useLevelsTrue',\
|
||||
'pos':(8,0)\
|
||||
},
|
||||
|
||||
'No Custom':{
|
||||
'command':'gagTrainer.restock.inventory.useLevelsFalse',\
|
||||
'pos':(8,1)\
|
||||
},
|
||||
|
||||
'Level 1 ':{
|
||||
'command':'gagTrainer.restock.inventory.track1Set1',\
|
||||
'pos':(9,0)\
|
||||
},
|
||||
|
||||
'Level 1':{
|
||||
'command':'gagTrainer.restock.inventory.track2Set1',\
|
||||
'pos':(9,1)\
|
||||
},
|
||||
|
||||
'Level 2 ':{
|
||||
'command':'gagTrainer.restock.inventory.track1Set2',\
|
||||
'pos':(10,0)\
|
||||
},
|
||||
|
||||
'Level 2':{
|
||||
'command':'gagTrainer.restock.inventory.track2Set2',\
|
||||
'pos':(10,1)\
|
||||
},
|
||||
|
||||
'Level 3 ':{
|
||||
'command':'gagTrainer.restock.inventory.track1Set3',\
|
||||
'pos':(11,0)\
|
||||
},
|
||||
|
||||
'Level 3':{
|
||||
'command':'gagTrainer.restock.inventory.track2Set3',\
|
||||
'pos':(11,1)\
|
||||
},
|
||||
|
||||
'Level 4 ':{
|
||||
'command':'gagTrainer.restock.inventory.track1Set4',\
|
||||
'pos':(12,0)\
|
||||
},
|
||||
|
||||
'Level 4':{
|
||||
'command':'gagTrainer.restock.inventory.track2Set4',\
|
||||
'pos':(12,1)\
|
||||
},
|
||||
|
||||
'Level 5 ':{
|
||||
'command':'gagTrainer.restock.inventory.track1Set5',\
|
||||
'pos':(13,0)\
|
||||
},
|
||||
|
||||
'Level 5':{
|
||||
'command':'gagTrainer.restock.inventory.track2Set5',\
|
||||
'pos':(13,1)\
|
||||
},
|
||||
|
||||
'Level 6 ':{
|
||||
'command':'gagTrainer.restock.inventory.track1Set6',\
|
||||
'pos':(14,0)\
|
||||
},
|
||||
|
||||
'Level 6':{
|
||||
'command':'gagTrainer.restock.inventory.track2Set6',\
|
||||
'pos':(14,1)\
|
||||
}
|
||||
|
||||
},\
|
||||
'location':'http://raw.githubusercontent.com/freshollie/ToontownAutoers/master/GagTrainer15.py'}
|
||||
|
||||
try:
|
||||
toonBot.addScript(script)
|
||||
except:
|
||||
base.localAvatar.setSystemMessage(0,'You did not follow instructions, you need to inject toonbot before injecting this script')
|
||||
|
|
@ -0,0 +1,60 @@
|
|||
script={
|
||||
|
||||
'name':'Golf Autoer',\
|
||||
|
||||
'description':"This is a golf autoer designed to get your golfing trophies maxed.\
|
||||
It is based off the golf skipper found in multihack so most of the functions I take\
|
||||
no credit for. A list of the functions I do take credit for can be found on my channel\
|
||||
youtube.com/toontowninjecting.",
|
||||
|
||||
'author': 'Freshollie',\
|
||||
|
||||
'version': '1',\
|
||||
|
||||
'unload':'golfAutoer.revertFunctions()',\
|
||||
|
||||
'start':'golfAutoer.start()',\
|
||||
|
||||
'stop':'golfAutoer.setStop()',\
|
||||
|
||||
'close':'golfAutoer.autoerGui.hideAll()',\
|
||||
|
||||
'open':'golfAutoer.autoerGui.showAll()',\
|
||||
|
||||
'options':{
|
||||
'Make Member':{
|
||||
'command':'golfAutoer.setMember',\
|
||||
'pos':(0,0)
|
||||
},
|
||||
"No Member":{
|
||||
'command':'golfAutoer.unsetMember',\
|
||||
'pos':(0,1)
|
||||
},
|
||||
'Automatic':{
|
||||
'command':'golfAutoer.setAutomatic',\
|
||||
'pos':(1,1)
|
||||
},
|
||||
'Do Easy':{
|
||||
'command':'golfAutoer.setPar',\
|
||||
'pos':(1,0)
|
||||
},
|
||||
'Do Medium':{
|
||||
'command':'golfAutoer.setFun',\
|
||||
'pos':(2,0)
|
||||
},
|
||||
'Do Hard':{
|
||||
'command':'golfAutoer.setHoleKit',\
|
||||
'pos':(3,0)
|
||||
},
|
||||
'Lose Account':{
|
||||
'command':'golfAutoer.setSecond',\
|
||||
'pos':(2,1)
|
||||
},
|
||||
'Win Account':{
|
||||
'command':'golfAutoer.setFirst',\
|
||||
'pos':(3,1)
|
||||
},
|
||||
},\
|
||||
'location':'http://raw.githubusercontent.com/freshollie/ToontownAutoers/master/GolfAutoer.py'}
|
||||
|
||||
toonBot.addScript(script)
|
||||
|
|
@ -0,0 +1,31 @@
|
|||
#This will not work unless you have Toon Bot running on your toontown
|
||||
#If you do not have Toon Bot you can download it at youtube.com/toontowninjecting
|
||||
|
||||
script={
|
||||
|
||||
'name':'Mini Spam',\
|
||||
|
||||
'description':"Spams minigames to get on top toons.",\
|
||||
|
||||
'author': 'Freshollie',\
|
||||
|
||||
'version': '1',\
|
||||
|
||||
'unload':'minigameSpammer.revert()',\
|
||||
|
||||
'start':'minigameSpammer.start()',\
|
||||
|
||||
'stop':'minigameSpammer.stop()',\
|
||||
|
||||
'close':'minigameSpammer.autoerGui.hideAll()',\
|
||||
|
||||
'open':'minigameSpammer.autoerGui.showAll()',\
|
||||
|
||||
'options':{
|
||||
},\
|
||||
'location':'http://goo.gl/dlExaZ'}
|
||||
|
||||
try:
|
||||
toonBot.addScript(script)
|
||||
except:
|
||||
base.localAvatar.setSystemMessage(0,'You did not follow instructions, this script needs to be added to Toon-Bot which can be found on my channel (youtube.com/toontowninjecting)')
|
||||
|
|
@ -0,0 +1,79 @@
|
|||
script={
|
||||
|
||||
'name':'Race Autoer',\
|
||||
|
||||
'description':"The Race autoer is designed for you to gain tickets and trophies from toontown racing. \
|
||||
All races have to be run with another player running the same script but with their toon number set as a different \
|
||||
value to the other toon(s). If you do not do this no trophies will be gained.",
|
||||
|
||||
'author': 'Freshollie',\
|
||||
|
||||
'version': '1',\
|
||||
|
||||
'unload':'raceAutoer.revertFunctions()',\
|
||||
|
||||
'start':'raceAutoer.start()',\
|
||||
|
||||
'stop':'raceAutoer.setStop()',\
|
||||
|
||||
'close':'raceAutoer.autoerGui.hideAll()',\
|
||||
|
||||
'open':'raceAutoer.autoerGui.showAll()',\
|
||||
|
||||
'options':{
|
||||
'Toon Number 1':{
|
||||
'command':'raceAutoer.setAccountNum1',\
|
||||
'pos':(0,0)\
|
||||
},
|
||||
'Toon Number 2':{
|
||||
'command':'raceAutoer.setAccountNum2',\
|
||||
'pos':(0,1)
|
||||
},
|
||||
'Toon Number 3':{
|
||||
'command':'raceAutoer.setAccountNum3',\
|
||||
'pos':(1,0)\
|
||||
},
|
||||
'Toon Number 4':{
|
||||
'command':'raceAutoer.setAccountNum4',\
|
||||
'pos':(1,1)
|
||||
} ,
|
||||
'Do speedway':{
|
||||
'command':'raceAutoer.setSpeedway',\
|
||||
'pos':(2,0)\
|
||||
},
|
||||
'Do urban':{
|
||||
'command':'raceAutoer.setUrban',\
|
||||
'pos':(3,0)
|
||||
},
|
||||
'Do rural':{
|
||||
'command':'raceAutoer.setRural',\
|
||||
'pos':(4,0)
|
||||
},
|
||||
'Set Practice':{
|
||||
'command':'raceAutoer.setPractice',\
|
||||
'pos':(2,1)\
|
||||
},
|
||||
'Set ToonBattle':{
|
||||
'command':'raceAutoer.setToonbattle',\
|
||||
'pos':(3,1)
|
||||
},
|
||||
'Set Tournament':{
|
||||
'command':'raceAutoer.setTournament',\
|
||||
'pos':(4,1)
|
||||
},
|
||||
'Make Member':{
|
||||
'command':'raceAutoer.setMember',\
|
||||
'pos':(6,0)
|
||||
},
|
||||
"No Member":{
|
||||
'command':'raceAutoer.unsetMember',\
|
||||
'pos':(6,1)
|
||||
},
|
||||
"Automatic":{
|
||||
'command':'raceAutoer.setAutomatic',\
|
||||
'pos':(5,1)
|
||||
}
|
||||
},\
|
||||
'location':'http://raw.githubusercontent.com/freshollie/ToontownAutoers/master/RaceAutoer.py'}
|
||||
|
||||
toonBot.addScript(script)
|
||||
|
|
@ -0,0 +1,60 @@
|
|||
#This will not work unless you have Toon Bot running on your toontown
|
||||
#If you do not have Toon Bot you can download it at youtube.com/toontowninjecting
|
||||
|
||||
script={
|
||||
|
||||
'name':'VP Maxer',\
|
||||
|
||||
'description':"The VP maxer is a script used to max the VP. \
|
||||
It does the factory when you need merits and does the \
|
||||
vp when you are ready to do the vp. The card filter can be \
|
||||
turned on and off in the options. Full credit to the functions \
|
||||
that were not created by me can be found on my channel: \
|
||||
toontowninjecting.",\
|
||||
|
||||
'author': 'Freshollie',\
|
||||
|
||||
'version': '1',\
|
||||
|
||||
'unload':'vpMaxer.revert()',\
|
||||
|
||||
'start':'vpMaxer.otherFunctions.start()',\
|
||||
|
||||
'stop':'vpMaxer.otherFunctions.setStop()',\
|
||||
|
||||
'close':'vpMaxer.autoerGui.hideAll()',\
|
||||
|
||||
'open':'vpMaxer.autoerGui.showAll()',\
|
||||
|
||||
'options':{
|
||||
'Card Filter 8':{
|
||||
'command':'vpMaxer.vpAutoer.filterOn',\
|
||||
'pos':(0,0)\
|
||||
},
|
||||
|
||||
'Card Filter 16':{
|
||||
'command':'vpMaxer.vpAutoer.filterOn16',\
|
||||
'pos':(0,1)
|
||||
},
|
||||
|
||||
'Card Filter Off':{
|
||||
'command':'vpMaxer.vpAutoer.filterOff',\
|
||||
'pos':(1,0)
|
||||
},
|
||||
|
||||
'Only Do Factory':{
|
||||
'command':'vpMaxer.otherFunctions.onlyDoFactory',\
|
||||
'pos':(2,0)\
|
||||
},
|
||||
|
||||
'Do Both':{
|
||||
'command':'vpMaxer.otherFunctions.doBoth',\
|
||||
'pos':(2,1)
|
||||
}
|
||||
},\
|
||||
'location':'http://goo.gl/fNjs7x'}
|
||||
|
||||
try:
|
||||
toonBot.addScript(script)
|
||||
except:
|
||||
base.localAvatar.setSystemMessage(0,'You did not follow instructions, this script needs to be added to Toon-Bot which can be found on my channel (youtube.com/toontowninjecting)')
|
||||
|
|
@ -0,0 +1,803 @@
|
|||
import urllib
|
||||
import random
|
||||
from direct.interval.IntervalGlobal import *
|
||||
from direct.gui.DirectLabel import DirectLabel
|
||||
from toontown.toon import DistributedNPCToon
|
||||
from toontown.safezone import Playground
|
||||
from toontown.battle import SuitBattleGlobals
|
||||
from toontown.building import DistributedBuilding
|
||||
from toontown.battle import DistributedBattleBldg
|
||||
from toontown.suit import SuitDNA
|
||||
from toontown.quest import Quests
|
||||
from toontown.quest import QuestBookPoster
|
||||
from toontown.toon import ToonHead
|
||||
from toontown.building import DistributedDoor
|
||||
from toontown.safezone import DistributedPartyGate
|
||||
from toontown.safezone import DistributedTrolley
|
||||
from toontown.toon import DistributedNPCFisherman
|
||||
from toontown.toon import DistributedNPCPartyPerson
|
||||
from toontown.shtiker import PurchaseManager
|
||||
from toontown.minigame import DistributedMinigame
|
||||
from toontown.estate import Estate
|
||||
from toontown.estate import House
|
||||
|
||||
HQZONES=[10000, 11000, 12000, 13000]
|
||||
|
||||
class TaskAutoer:
|
||||
oldTeleportInPlayground=Playground.Playground.exitTeleportIn
|
||||
#oldBattleBldg=DistributedBattleBldg.DistributedBattleBldg.__init__
|
||||
#oldBuildingGenerate=DistributedBuilding.DistributedBuilding.generate
|
||||
#oldEnterToon=DistributedBuilding.DistributedBuilding.enterToon
|
||||
oldMiniGameAnnounceGenerate=DistributedMinigame.DistributedMinigame.announceGenerate
|
||||
oldPurchangeManagerAnnouncGenerate=PurchaseManager.PurchaseManager.announceGenerate
|
||||
oldEstateTeleportIn=Estate.Estate.exitTeleportIn
|
||||
oldHouseDoorIn=House.House.exitDoorIn
|
||||
|
||||
def __init__(self):
|
||||
DistributedMinigame.DistributedMinigame.announceGenerate=lambda newSelf: self.newMiniGameAnnounceGenerate(newSelf)
|
||||
PurchaseManager.PurchaseManager.announceGenerate=lambda newSelf: self.newPurchangeManagerAnnouncGenerate(newSelf)
|
||||
Playground.Playground.exitTeleportIn=lambda newSelf,*args,**kwds: self.newTeleportInPlayground(newSelf,*args,**kwds)
|
||||
Estate.Estate.exitTeleportIn=lambda newSelf,*args,**kwds: self.newEstateTeleportIn(newSelf,*args,**kwds)
|
||||
House.House.exitDoorIn=lambda newSelf,*args,**kwds: self.newHouseDoorIn(newSelf,*args,**kwds)
|
||||
#DistributedBuilding.DistributedBuilding.generate=lambda newSelf,*args: self.newBuildingGenerate(newSelf,*args)
|
||||
#DistributedBuilding.DistributedBuilding.enterToon=lambda newSelf,*args: self.newEnterToon(newSelf,*args)
|
||||
base.localAvatar.setWantBattles(False)
|
||||
self.shardIds=[]
|
||||
self.isMember=True
|
||||
self.jellybeansNeeded=500
|
||||
|
||||
posterNumToPos = [(-0.6, 1, 0.5),
|
||||
(-0.6, 1, 0.2),
|
||||
(-0.2, 1, 0.5),
|
||||
(-0.2, 1, 0.2)
|
||||
]
|
||||
|
||||
self.questsGui = []
|
||||
for i in range(4):
|
||||
self.questsGui.append(QuestBookPoster.QuestBookPoster(pos = posterNumToPos[i], scale = 0.5))
|
||||
self.questsGui[-1].reparentTo(base.a2dRightCenter)
|
||||
self.questsGui[-1].mouseEnterPoster(0)
|
||||
self.questsGui[-1].mouseExitPoster=self.questsGui[-1].mouseEnterPoster
|
||||
|
||||
self.oldNPCmovie=None
|
||||
|
||||
self.updateQuestGuiLoop=Sequence()
|
||||
for i in range(4):
|
||||
self.updateQuestGuiLoop.append(Func(self.updateQuestGui, i))
|
||||
self.updateQuestGuiLoop.append(Wait(0.125))
|
||||
self.updateQuestGuiLoop.loop()
|
||||
|
||||
Sequence(Func(self.collisionsOff),Wait(0.5)).loop()
|
||||
|
||||
for shard in base.cr.activeDistrictMap:
|
||||
if base.cr.activeDistrictMap[shard].avatarCount<50:
|
||||
self.shardIds.append(shard)
|
||||
self.wantedTracks=[3,6] #Anyone looking into choosing your tracks this is all you need to change lol
|
||||
self.status=None
|
||||
self.buildingLevelToZoneDict={1:1000,2:5000,3:4000,4:3000,5:9000}
|
||||
DirectLabel(parent=aspect2d,relief=None,text='\x01shadow\x01Freshollies Toontask Autoer\x02',text_scale=0.17, pos=(0, 0, 0.87), text_fg=(1, 1, 1, 1))
|
||||
DirectLabel(parent=aspect2d,relief=None,text='\x01shadow\x01Freshollies Toontask Autoer\x02',text_scale=0.17, pos=(0, 0, 0.87), text_fg=(0, 0, 0, 0))
|
||||
self.questsAtNoneLeft = 5
|
||||
|
||||
def collisionsOff(self):
|
||||
try:
|
||||
base.localAvatar.collisionsOff()
|
||||
except:
|
||||
pass
|
||||
|
||||
def newMiniGameAnnounceGenerate(self, newSelf):
|
||||
self.oldMiniGameAnnounceGenerate(newSelf)
|
||||
messenger.send('minigameAbort')
|
||||
|
||||
def newPurchangeManagerAnnouncGenerate(self, newSelf):
|
||||
self.oldPurchangeManagerAnnouncGenerate(newSelf)
|
||||
Sequence(Wait(10),Func(self.skipTrolley)).start()
|
||||
|
||||
def skipTrolley(self):
|
||||
for i in range(5):
|
||||
messenger.send('doneChatPage')
|
||||
Sequence(Wait(4),Func(messenger.send,'purchaseBackToToontown')).start()
|
||||
|
||||
def newNPCmovie(self, mode, npcId, avId, quests, timestamp):
|
||||
self.oldNPCmovie(mode, npcId, avId, quests, timestamp)
|
||||
print("Npc movie started")
|
||||
realMovie = False
|
||||
if avId == base.localAvatar.doId:
|
||||
if not quests:
|
||||
self.questsAtNoneLeft = len(base.localAvatar.quests)
|
||||
self.officer.setMovie = self.oldNPCmovie
|
||||
return
|
||||
realMovie = True
|
||||
for i in range(3):
|
||||
questId = quests[i]
|
||||
print('iterating quest')
|
||||
try:
|
||||
if not Quests.isQuestJustForFun(questId, Quests.findFinalRewardId(questId)[0]):
|
||||
print('attemping to pick quest')
|
||||
print(Quests.findFinalRewardId(questId)[0])
|
||||
print(questId)
|
||||
self.officer.sendChooseQuest(questId)
|
||||
self.officer.sendUpdate('setMovieDone')
|
||||
self.officer.setMovie=self.oldNPCmovie
|
||||
base.cr.playGame.getPlace().fsm.forceTransition('walk')
|
||||
return
|
||||
except Exception as e:
|
||||
e.printStackTrace()
|
||||
if realMovie:
|
||||
self.questsAtNoneLeft = len(base.localAvatar.quests)
|
||||
|
||||
self.officer.sendChooseQuest(0)
|
||||
self.officer.setMovie = self.oldNPCmovie
|
||||
|
||||
def newBuildingGenerate(self,newSelf,*args):
|
||||
try:
|
||||
oldBuildingGenerate(newSelf,*args)
|
||||
except:
|
||||
pass
|
||||
|
||||
def newEnterToon(self,newSelf,*args):
|
||||
try:
|
||||
oldEnterToon(newSelf,*args)
|
||||
except:
|
||||
pass
|
||||
|
||||
def newTeleportInPlayground(self,newSelf,*args,**kwds):
|
||||
self.oldTeleportInPlayground(newSelf,*args,**kwds)
|
||||
print("Teleported into the playground")
|
||||
if buildingAutoer.shouldContinue:
|
||||
|
||||
buildingAutoer.checkStop()
|
||||
|
||||
if buildingAutoer.shouldContinue and not self.isQuestComplete():
|
||||
buildingAutoer.killElevators.append(buildingAutoer.lastElevator)
|
||||
Sequence(Wait(2),Func(buildingAutoer.teleportBackToStreet)).start()
|
||||
|
||||
else:
|
||||
Sequence(Wait(2),Func(self.checkWhatToDo)).start()
|
||||
|
||||
elif gagTrainer.shouldContinue:
|
||||
Sequence(Wait(2),Func(gagTrainer.teleportBackToStreet)).start()
|
||||
|
||||
else:
|
||||
Sequence(Wait(2),Func(self.checkWhatToDo)).start()
|
||||
|
||||
def newEstateTeleportIn(self,newSelf,*args,**kwds):
|
||||
self.oldEstateTeleportIn(newSelf,*args,**kwds)
|
||||
for door in base.cr.doFindAll('Door'):
|
||||
if 'esHouse_1' in str(door.getBuilding()):
|
||||
door.sendUpdate('requestEnter')
|
||||
|
||||
def newHouseDoorIn(self,newSelf,*args,**kwds):
|
||||
self.oldHouseDoorIn(newSelf,*args,**kwds)
|
||||
base.cr.doFind('phone').sendUpdate('avatarEnter')
|
||||
base.cr.doFind('phone').sendUpdate('avatarExit')
|
||||
Sequence(Wait(2),Func(self.checkWhatToDo)).start()
|
||||
|
||||
def checkWhatToDo(self):
|
||||
print("Checking what to do:")
|
||||
print("We have %s Tasks" %(len(base.localAvatar.quests)))
|
||||
print("We are going to try and collect %s Tasks from HQ" %(self.questsAtNoneLeft))
|
||||
|
||||
if base.localAvatar.getTotalMoney()>self.jellybeansNeeded:
|
||||
print("We have all the money we need")
|
||||
self.jellybeansNeeded=500
|
||||
|
||||
if base.localAvatar.defaultShard not in self.shardIds:
|
||||
print("We need to teleport to an empty district")
|
||||
base.cr.playGame.getPlace().requestTeleport(2000,2000, random.choice(self.shardIds),None)
|
||||
|
||||
elif self.status=='Fishing':
|
||||
print("We are completing a fishing task")
|
||||
if not self.isQuestComplete():
|
||||
self.fishOnce()
|
||||
else:
|
||||
print("Fishing task is done")
|
||||
for dock in base.cr.doFindAll('DistributedFishingSpot'):
|
||||
dock.sendUpdate('requestExit')
|
||||
|
||||
self.status=None
|
||||
self.doTask()
|
||||
|
||||
elif self.jellybeansNeeded == 12000:
|
||||
print("We are continuing to fish for money")
|
||||
self.fishOnce()
|
||||
|
||||
elif base.localAvatar.getTotalMoney()<self.jellybeansNeeded:
|
||||
print("We need to fish for money")
|
||||
self.jellybeansNeeded = 12000
|
||||
if base.localAvatar.getTotalMoney() < 1:
|
||||
base.localAvatar.setSystemMessage(0, "This script needs at least 1 JB to run")
|
||||
self.jellybeansNeeded = 500
|
||||
self.doTrolleyTask()
|
||||
elif base.localAvatar.getZoneId() == 2000:
|
||||
self.fishOnce()
|
||||
else:
|
||||
base.cr.playGame.getPlace().requestTeleport(2000, 2000, None, None)
|
||||
|
||||
elif len(base.localAvatar.quests) == base.localAvatar.getQuestCarryLimit() or \
|
||||
len(base.localAvatar.quests) >= self.questsAtNoneLeft:
|
||||
print('Doing task')
|
||||
self.doTask()
|
||||
else:
|
||||
print("We have nothing to do so collect a task")
|
||||
if len(base.localAvatar.quests) <= self.questsAtNoneLeft:
|
||||
self.collectNewTask()
|
||||
|
||||
def updateQuestGui(self, i):
|
||||
if len(base.localAvatar.quests) >= i+1:
|
||||
self.questsGui[i].update(base.localAvatar.quests[i])
|
||||
else:
|
||||
self.questsGui[i].clear()
|
||||
|
||||
def getCurrentQuest(self):
|
||||
return Quests.getQuest(base.localAvatar.quests[0][0])
|
||||
|
||||
def getBestZoneForCogLevel(self,level):
|
||||
if self.isMember:
|
||||
if level<3:
|
||||
return 2000
|
||||
elif level<4:
|
||||
return 1000
|
||||
elif level<5:
|
||||
return 5000
|
||||
elif level<6:
|
||||
return 4000
|
||||
elif level<7:
|
||||
return 3000
|
||||
elif level<8:
|
||||
return 9000
|
||||
elif level<9:
|
||||
return 12000
|
||||
else:
|
||||
return 13000
|
||||
else:
|
||||
return 2000
|
||||
|
||||
def getBestZoneForBuildingLevel(self,level):
|
||||
return self.buildingLevelToZoneDict.get(level)
|
||||
|
||||
def getSuitName(self,suitType):
|
||||
try:
|
||||
return SuitBattleGlobals.SuitAttributes[suitType].get('name')
|
||||
except:
|
||||
return suitType
|
||||
|
||||
def getCogLevelFromCog(self,suitType):
|
||||
try:
|
||||
return SuitBattleGlobals.SuitAttributes[suitType].get('level')+1
|
||||
except:
|
||||
return 1
|
||||
|
||||
|
||||
def getSuitDepartment(self,suitType):
|
||||
return SuitDNA.getSuitDept(suitType)
|
||||
|
||||
def getCorrectChoice(self,choices):
|
||||
if 0 in choices:
|
||||
return 0
|
||||
elif 2 in choices:
|
||||
return 2
|
||||
elif self.wantedTracks[0] in choices:
|
||||
return self.wantedTracks[0]
|
||||
else:
|
||||
return self.wantedTracks[1]
|
||||
|
||||
def newTask(self):
|
||||
print('collecting new task')
|
||||
for officer in base.cr.doFindAll('HQ Officer'):
|
||||
if officer.allowedToTalk():
|
||||
if officer.setMovie != self.oldNPCmovie:
|
||||
self.oldNPCmovie = officer.setMovie
|
||||
print('setting old movie function')
|
||||
self.officer=officer
|
||||
officer.setMovie=self.newNPCmovie
|
||||
officer.sendUpdate('avatarEnter')
|
||||
break
|
||||
|
||||
def collectNewTask(self):
|
||||
interest=base.cr.addInterest(base.localAvatar.defaultShard, 2742, description='5', event=None)
|
||||
Sequence(Wait(1),Func(self.newTask),Wait(2),Func(base.cr.removeInterest,interest),Func(self.checkWhatToDo)).start()
|
||||
|
||||
def nextShard(self):
|
||||
if self.shardIds[0] == base.localAvatar.defaultShard:
|
||||
self.shardIds.append(self.shardIds[0])
|
||||
del self.shardIds[0]
|
||||
|
||||
base.cr.playGame.getPlace().fsm.forceTransition('walk')
|
||||
base.cr.playGame.getPlace().requestTeleport(2000,2000,self.shardIds[0],None)
|
||||
self.shardIds.append(self.shardIds[0])
|
||||
del self.shardIds[0]
|
||||
|
||||
def getFishSpot(self):
|
||||
for spot in base.cr.doFindAllInstances(DistributedFishingSpot.DistributedFishingSpot):
|
||||
if spot.avId==base.localAvatar.doId:
|
||||
return spot
|
||||
|
||||
base.localAvatar.setSystemMessage(0,'Not at a spot')
|
||||
return False
|
||||
|
||||
def catchFish(self):
|
||||
try:
|
||||
fish = base.cr.doFindAll("FishingTarget")[0]
|
||||
for fp in base.cr.doFindAll("FishingPond"):
|
||||
spot=self.getFishSpot()
|
||||
if spot:
|
||||
spot.sendUpdate('doCast',[1,1])
|
||||
fp.sendUpdate('hitTarget',[fish.doId])
|
||||
except:
|
||||
pass
|
||||
|
||||
def fishOnce(self):
|
||||
entered=False
|
||||
for spot in reversed(base.cr.doFindAll('DistributedFishingSpot')):
|
||||
if spot.allowedToEnter():
|
||||
entered=True
|
||||
spot.sendUpdate('requestEnter')
|
||||
usedSpot=spot
|
||||
break
|
||||
if entered:
|
||||
catchFishSeq=Sequence()
|
||||
catchFishSeq.append(Wait(1))
|
||||
for i in range(23):
|
||||
catchFishSeq.append(Func(self.catchFish))
|
||||
catchFishSeq.append(Wait(0.05))
|
||||
catchFishSeq.append(Wait(1))
|
||||
catchFishSeq.append(Func(self.sellFish))
|
||||
catchFishSeq.append(Wait(0.5))
|
||||
catchFishSeq.append(Func(self.checkWhatToDo))
|
||||
catchFishSeq.start()
|
||||
else:
|
||||
Sequence(Wait(2),Func(self.fishOnce)).start()
|
||||
|
||||
def sellFish(self):
|
||||
base.cr.doFind('Fisherman').sendUpdate('avatarEnter')
|
||||
base.cr.doFind('Fisherman').sendUpdate('completeSale',[1])
|
||||
|
||||
def speakToNpc(self,name):
|
||||
if base.cr.doFind(name):
|
||||
for npc in base.cr.doFindAllInstances(DistributedNPCToon.DistributedNPCToon):
|
||||
if npc.getName()==name:
|
||||
if npc.allowedToTalk():
|
||||
npc.sendUpdate('avatarEnter')
|
||||
npc.sendUpdate('setMovieDone')
|
||||
base.cr.removeInterest(self.interest)
|
||||
Sequence(Wait(1),Func(self.checkWhatToDo)).start()
|
||||
found=True
|
||||
foundNPC=True
|
||||
break
|
||||
else:
|
||||
found=False
|
||||
foundNPC=True
|
||||
else:
|
||||
foundNPC=False
|
||||
if not foundNPC:
|
||||
Sequence(Func(base.cr.removeInterest,self.interest),Wait(0.5),Func(self.nextShard)).start()
|
||||
elif not found:
|
||||
Sequence(Wait(5),Func(self.speakToNpc,name)).start()
|
||||
else:
|
||||
Sequence(Func(base.cr.removeInterest,self.interest),Wait(0.5),Func(self.nextShard)).start()
|
||||
|
||||
def chooseTrack(self,name):
|
||||
if base.cr.doFind(name):
|
||||
for npc in base.cr.doFindAllInstances(DistributedNPCToon.DistributedNPCToon):
|
||||
if npc.getName()==name:
|
||||
if npc.allowedToTalk():
|
||||
npc.sendUpdate('avatarEnter')
|
||||
try:
|
||||
npc.sendChooseTrack(self.getCorrectChoice(self.getCurrentQuest().getChoices()))
|
||||
npc.sendUpdate('setMovieDone')
|
||||
except:
|
||||
pass
|
||||
base.cr.removeInterest(self.interest)
|
||||
Sequence(Wait(0.5),Func(self.checkWhatToDo)).start()
|
||||
found=True
|
||||
foundNPC=True
|
||||
break
|
||||
else:
|
||||
found=False
|
||||
foundNPC=True
|
||||
else:
|
||||
foundNPC=False
|
||||
if not foundNPC:
|
||||
Sequence(Func(base.cr.removeInterest,self.interest),Wait(0.5),Func(self.nextShard)).start()
|
||||
elif not found:
|
||||
Sequence(Wait(5),Func(self.chooseTrack)).start()
|
||||
else:
|
||||
Sequence(Func(base.cr.removeInterest,self.interest),Wait(0.5),Func(self.nextShard)).start()
|
||||
|
||||
def doFriendTask(self):
|
||||
print("Sending invite to self")
|
||||
def acceptInvite(inviterId, inviterName, inviterDna, context):
|
||||
print("Adding self")
|
||||
if (inviterId == base.localAvatar.doId):
|
||||
base.cr.friendManager.sendUpdate("inviteeFriendResponse", [1, context])
|
||||
base.ignore("friendInvitation")
|
||||
print("Completed friend task")
|
||||
messenger.send("cancelFriendInvitation")
|
||||
Sequence(Wait(2), Func(self.checkWhatToDo)).start()
|
||||
|
||||
base.accept("friendInvitation", acceptInvite)
|
||||
base.cr.friendManager.sendUpdate('friendQuery', [base.localAvatar.doId])
|
||||
|
||||
def doTrolleyTask(self):
|
||||
if base.localAvatar.getZoneId() == 2000:
|
||||
if base.cr.doFind('Trolley').allowedToEnter():
|
||||
base.localAvatar.setPos(-133.548, -71.1069, 0.525)
|
||||
base.cr.playGame.getPlace().fsm.forceTransition('walk')
|
||||
else:
|
||||
Sequence(Wait(2),Func(self.doTrolleyTask)).start()
|
||||
else:
|
||||
base.cr.playGame.getPlace().requestTeleport(2000, 2000, None, None)
|
||||
|
||||
|
||||
def doNPCTask(self, isTrackTask=False):
|
||||
try:
|
||||
if not self.isQuestComplete():
|
||||
questNum = 0
|
||||
else:
|
||||
questNum = self.isQuestComplete()[0]
|
||||
questList=base.localAvatar.quests
|
||||
zoneId=Quests.NPCToons.getNPCZone(questList[questNum][2])
|
||||
listedDict=list(Quests.NPCToons.NPCToonDict)
|
||||
try:
|
||||
npcName=Quests.getNpcInfo(questList[questNum][2])[0]
|
||||
except:
|
||||
npcName='HQ Officer'
|
||||
self.questsAtNoneLeft = 5
|
||||
if listedDict.count(questList[questNum][2])==1:
|
||||
if zoneId == -1:
|
||||
zoneId = 2742
|
||||
self.interest=base.cr.addInterest(base.localAvatar.defaultShard, zoneId, description='5', event=None)
|
||||
if not isTrackTask:
|
||||
Sequence(Wait(2),Func(self.speakToNpc,npcName)).start()
|
||||
else:
|
||||
Sequence(Wait(2),Func(self.chooseTrack,npcName)).start()
|
||||
except:
|
||||
print('Error in completing task')
|
||||
Sequence(Wait(2), Func(self.checkWhatToDo)).start()
|
||||
|
||||
def doTask(self):
|
||||
|
||||
if not base.localAvatar.quests:
|
||||
self.collectNewTask()
|
||||
return
|
||||
|
||||
quest = Quests.getQuest(base.localAvatar.quests[0][0])
|
||||
|
||||
if self.isQuestComplete() or quest.getType() == Quests.VisitQuest:
|
||||
self.doNPCTask()
|
||||
|
||||
elif quest.getType()==Quests.DeliverItemQuest:
|
||||
self.doNPCTask()
|
||||
|
||||
elif quest.getType() in (Quests.CogQuest,Quests.CogLevelQuest,Quests.CogTrackQuest):
|
||||
buildingAutoer.clearSettings()
|
||||
gagTrainer.clearSettings()
|
||||
|
||||
if quest.getLocation()==11500:
|
||||
vpMaxer.otherFunctions.onlyDoFactory()
|
||||
vpMaxer.otherFunctions.start()
|
||||
|
||||
elif quest.getType()==Quests.CogTrackQuest:
|
||||
if quest.getLocation()==1:
|
||||
if quest.getCogType()=='c' or base.localAvatar.getMaxHp()<30:
|
||||
location=2000
|
||||
elif quest.getCogType()=='s':
|
||||
location=11200
|
||||
elif quest.getCogType()=='m':
|
||||
location=12000
|
||||
else:
|
||||
location=13000
|
||||
gagTrainer.setLocation(location)
|
||||
else:
|
||||
gagTrainer.setLocation(quest.getLocation())
|
||||
gagTrainer.setCogType(quest.getCogType())
|
||||
gagTrainer.start()
|
||||
|
||||
elif quest.getType()==Quests.CogLevelQuest:
|
||||
if not base.localAvatar.getTrackAccess()[2] or quest.getLocation() in HQZONES or quest.getCogLevel()<11 or quest.getLocation() in (12500,12600,12700):
|
||||
if quest.getLocation()==1:
|
||||
gagTrainer.setLocation(self.getBestZoneForCogLevel(quest.getCogLevel()+1))
|
||||
nonGag=False
|
||||
else:
|
||||
if quest.getLocation() in (12500,12600,12700):
|
||||
cfoMaxer.otherFunctions.onlyLast=False
|
||||
cfoMaxer.otherFunctions.onlyDoMint()
|
||||
cfoMaxer.mintAutoer.setType(quest.getLocation())
|
||||
cfoMaxer.otherFunctions.start()
|
||||
nonGag=True
|
||||
elif quest.getLocation()==11500:
|
||||
vpMaxer.otherFunctions.onlyLast=False
|
||||
vpMaxer.otherFunctions.onlyDoFactory()
|
||||
vpMaxer.otherFunctions.start()
|
||||
nonGag=True
|
||||
else:
|
||||
gagTrainer.setLocation(quest.getLocation())
|
||||
nonGag=False
|
||||
|
||||
if quest.getCogType()==1:
|
||||
gagTrainer.setCogLevel(quest.getCogLevel())
|
||||
else:
|
||||
gagTrainer.setCogName(self.getSuitName(quest.getCogType()))
|
||||
#gagTrainer.setLocation(self.getBestZoneForCogType(quest.getCogType)
|
||||
if not nonGag:
|
||||
gagTrainer.start()
|
||||
else:
|
||||
if quest.getCogType()==1:
|
||||
buildingAutoer.setBuildingType('')
|
||||
buildingAutoer.setNumFloors(4)
|
||||
else:
|
||||
buildingAutoer.setBuildingType(self.getSuitDepartment(self.getCogType()))
|
||||
buildingAutoer.setNumFloors(4)
|
||||
|
||||
if quest.getLocation()!=1:
|
||||
buildingAutoer.setLocation(quest.getLocation())
|
||||
else:
|
||||
if base.localAvatar.getMaxHp()>70:
|
||||
buildingAutoer.setLocation(self.getBestZoneForBuildingLevel(5))
|
||||
else:
|
||||
buildingAutoer.setLocation(self.getBestZoneForBuildingLevel(4))
|
||||
buildingAutoer.start()
|
||||
else:
|
||||
if not base.localAvatar.getTrackAccess()[2] or quest.getLocation() in HQZONES or self.getCogLevelFromCog(quest.getCogType())+4<11:
|
||||
|
||||
if quest.getLocation()==1:
|
||||
if base.localAvatar.getMaxHp()>30 and quest.getCogType()==1:
|
||||
gagTrainer.setLocation(11200)
|
||||
elif base.localAvatar.getMaxHp()>30 and (quest.getCogType()=='gh' or quest.getCogType()=='tf' or quest.getCogType()=='cc' or quest.getCogType()=='tm' or quest.getCogType()=='nd'):
|
||||
gagTrainer.setLocation(11200)
|
||||
elif quest.getCogType() == 'ym': # Exceptions to the rule
|
||||
gagTrainer.setLocation(1000)
|
||||
elif quest.getCogType() == 'tw': # Exceptions to the rule
|
||||
gagTrainer.setLocation(4000)
|
||||
elif quest.getCogType() == 'mm': # Exceptions to the rule
|
||||
gagTrainer.setLocation(1000)
|
||||
elif quest.getCogType() == 'nc': # Exceptions to the rule
|
||||
gagTrainer.setLocation(9000)
|
||||
else:
|
||||
gagTrainer.setLocation(self.getBestZoneForCogLevel(self.getCogLevelFromCog(quest.getCogType())+1))
|
||||
else:
|
||||
gagTrainer.setLocation(quest.getLocation())
|
||||
|
||||
if quest.getCogType()==1:
|
||||
gagTrainer.setCogName(None)
|
||||
else:
|
||||
gagTrainer.setCogName(self.getSuitName(quest.getCogType()))
|
||||
gagTrainer.start()
|
||||
else:
|
||||
if quest.getCogType()==1:
|
||||
buildingAutoer.setBuildingType('')
|
||||
buildingAutoer.setNumFloors(4)
|
||||
else:
|
||||
buildingAutoer.setBuildingType(self.getSuitDepartment(quest.getCogType()))
|
||||
buildingAutoer.setNumFloors(4)
|
||||
|
||||
if quest.getLocation()!=1:
|
||||
buildingAutoer.setLocation(quest.getLocation())
|
||||
else:
|
||||
if base.localAvatar.getMaxHp()>70:
|
||||
buildingAutoer.setLocation(self.getBestZoneForBuildingLevel(5))
|
||||
else:
|
||||
buildingAutoer.setLocation(self.getBestZoneForBuildingLevel(4))
|
||||
buildingAutoer.start()
|
||||
|
||||
elif quest.getType()==Quests.BuildingQuest:
|
||||
print('Doing building quest')
|
||||
buildingAutoer.clearSettings()
|
||||
if quest.getLocation()==1:
|
||||
buildingAutoer.setLocation(self.getBestZoneForBuildingLevel(quest.getNumFloors()))
|
||||
buildingAutoer.shouldChangeHood=True
|
||||
else:
|
||||
buildingAutoer.setLocation(quest.getLocation())
|
||||
|
||||
buildingAutoer.setNumFloors(quest.getNumFloors())
|
||||
|
||||
if quest.getBuildingTrack()==1:
|
||||
buildingAutoer.setBuildingType('')
|
||||
else:
|
||||
buildingAutoer.setBuildingType(quest.getBuildingTrack())
|
||||
|
||||
buildingAutoer.start()
|
||||
|
||||
elif quest.getType()==Quests.RecoverItemQuest:
|
||||
if quest.getHolder()==4:
|
||||
if quest.getLocation()==1:
|
||||
if base.localAvatar.getZoneId()!=2000:
|
||||
base.cr.playGame.getPlace().requestTeleport(2000,2000,None,None)
|
||||
self.status='Fishing'
|
||||
else:
|
||||
self.status='Fishing'
|
||||
self.checkWhatToDo()
|
||||
|
||||
else:
|
||||
if base.localAvatar.getZoneId()!=quest.getLocation():
|
||||
base.cr.playGame.getPlace().requestTeleport(quest.getLocation(),quest.getLocation(),None,None)
|
||||
self.status='Fishing'
|
||||
else:
|
||||
self.status='Fishing'
|
||||
self.checkWhatToDo()
|
||||
else:
|
||||
buildingAutoer.clearSettings()
|
||||
gagTrainer.clearSettings()
|
||||
if not self.isSuitOnlyBldg(quest.getHolder()) or quest.getHolderType()=='track':
|
||||
if quest.getLocation()==1:
|
||||
if type(quest.getHolder())==int:
|
||||
gagTrainer.setLocation(self.getBestZoneForCogLevel(quest.getHolder()+1))
|
||||
elif quest.getHolderType()=='track':
|
||||
gagTrainer.setLocation(2000)
|
||||
else:
|
||||
gagTrainer.setLocation(self.getBestZoneForCogLevel(self.getCogLevelFromCog(quest.getHolder())+1))
|
||||
else:
|
||||
gagTrainer.setLocation(quest.getLocation())
|
||||
|
||||
if type(quest.getHolder())==int:
|
||||
gagTrainer.setCogLevel(quest.getHolder())
|
||||
elif quest.getHolderType()=='track':
|
||||
gagTrainer.setCogType(quest.getHolder())
|
||||
else:
|
||||
gagTrainer.setCogName(self.getSuitName(quest.getHolder()))
|
||||
gagTrainer.start()
|
||||
|
||||
elif quest.getLocation()==12000:
|
||||
cfoMaxer.otherFunctions.onlyLast=True
|
||||
cfoMaxer.otherFunctions.onlyDoMint()
|
||||
cfoMaxer.mintAutoer.setType(12500)
|
||||
cfoMaxer.otherFunctions.start()
|
||||
|
||||
elif quest.getLocation()==11000:
|
||||
vpMaxer.otherFunctions.onlyLast=True
|
||||
vpMaxer.otherFunctions.onlyDoFactory()
|
||||
vpMaxer.otherFunctions.start()
|
||||
|
||||
else:
|
||||
if quest.getLocation()==1:
|
||||
buildingAutoer.setLocation(self.getBestZoneForBuildingLevel(4))
|
||||
else:
|
||||
buildingAutoer.setLocation(quest.getLocation())
|
||||
if quest.getHolder()==1:
|
||||
buildingAutoer.setBuildingType('')
|
||||
else:
|
||||
buildingAutoer.setBuildingType(self.getSuitDepartment(quest.getHolder()))
|
||||
buildingAutoer.start()
|
||||
|
||||
elif quest.getType()==Quests.DeliverGagQuest:
|
||||
Sequence(Func(gagTrainer.restock.restockGags,quest.getGagType()),Wait(2),Func(self.doNPCTask)).start()
|
||||
|
||||
elif quest.getType()==Quests.SkelecogLevelQuest:
|
||||
if quest.getLocation()==11000:
|
||||
vpMaxer.otherFunctions.onlyLast=False
|
||||
vpMaxer.otherFunctions.onlyDoFactory()
|
||||
vpMaxer.otherFunctions.start()
|
||||
elif quest.getLocation()==12000:
|
||||
cfoMaxer.otherFunctions.onlyLast=False
|
||||
cfoMaxer.mintAutoer.setType(12500)
|
||||
cfoMaxer.otherFunctions.onlyDoMint()
|
||||
cfoMaxer.otherFunctions.start()
|
||||
elif quest.getLocation()==13000:
|
||||
cjMaxer.otherFunctions.onlyDoDa()
|
||||
cjMaxer.otherFunctions.start()
|
||||
elif quest.getLocation()==1:
|
||||
if quest.getCogLevel()<9:
|
||||
vpMaxer.otherFunctions.onlyLast=False
|
||||
vpMaxer.otherFunctions.onlyDoFactory()
|
||||
vpMaxer.otherFunctions.start()
|
||||
else:
|
||||
cfoMaxer.otherFunctions.onlyLast=False
|
||||
cfoMaxer.mintAutoer.setType(12500)
|
||||
cfoMaxer.otherFunctions.onlyDoMint()
|
||||
cfoMaxer.otherFunctions.start()
|
||||
|
||||
elif quest.getType()==Quests.SkelecogQuest:
|
||||
if quest.getLocation()==11000:
|
||||
vpMaxer.otherFunctions.onlyLast=False
|
||||
vpMaxer.otherFunctions.onlyDoFactory()
|
||||
vpMaxer.otherFunctions.start()
|
||||
elif quest.getLocation()==12000:
|
||||
cfoMaxer.otherFunctions.onlyLast=False
|
||||
cfoMaxer.mintAutoer.setType(12500)
|
||||
cfoMaxer.otherFunctions.onlyDoMint()
|
||||
cfoMaxer.otherFunctions.start()
|
||||
elif quest.getLocation() in (12500,12600,12700):
|
||||
cfoMaxer.otherFunctions.onlyLast=False
|
||||
cfoMaxer.mintAutoer.setType(quest.getLocation())
|
||||
cfoMaxer.otherFunctions.onlyDoMint()
|
||||
cfoMaxer.otherFunctions.start()
|
||||
elif quest.getLocation()==13000:
|
||||
cjMaxer.otherFunctions.onlyDoDa()
|
||||
cjMaxer.otherFunctions.start()
|
||||
elif quest.getLocation()==1:
|
||||
if quest.getCogLevel()<9:
|
||||
vpMaxer.otherFunctions.onlyLast=False
|
||||
vpMaxer.otherFunctions.onlyDoFactory()
|
||||
vpMaxer.otherFunctions.start()
|
||||
else:
|
||||
cfoMaxer.otherFunctions.onlyLast=False
|
||||
cfoMaxer.mintAutoer.setType(12500)
|
||||
cfoMaxer.otherFunctions.onlyDoMint()
|
||||
cfoMaxer.otherFunctions.start()
|
||||
|
||||
elif quest.getType() in (Quests.FactoryQuest,Quests.ForemanQuest):
|
||||
vpMaxer.otherFunctions.onlyLast=True
|
||||
vpMaxer.otherFunctions.onlyDoFactory()
|
||||
vpMaxer.otherFunctions.start()
|
||||
|
||||
elif quest.getType() in (Quests.SupervisorQuest,Quests.MintQuest):
|
||||
cfoMaxer.otherFunctions.onlyLast=True
|
||||
cfoMaxer.otherFunctions.onlyDoMint()
|
||||
cfoMaxer.mintAutoer.setType(quest.getLocation())
|
||||
cfoMaxer.otherFunctions.start()
|
||||
|
||||
elif quest.getType()==Quests.SkeleReviveQuest:
|
||||
ceoMaxer.otherFunctions.start()
|
||||
|
||||
elif quest.getType()==Quests.TrackChoiceQuest:
|
||||
self.doNPCTask(isTrackTask=True)
|
||||
|
||||
elif quest.getType()==Quests.TrolleyQuest:
|
||||
self.doTrolleyTask()
|
||||
|
||||
elif quest.getType() == Quests.PhoneQuest:
|
||||
base.localAvatar._LocalToon__handleClarabelleButton()
|
||||
|
||||
elif quest.getType() == Quests.FriendQuest:
|
||||
self.doFriendTask()
|
||||
|
||||
else:
|
||||
base.localAvatar.setSystemMessage(0, 'Unknown task')
|
||||
|
||||
|
||||
def isQuestComplete(self):
|
||||
completeList = []
|
||||
|
||||
for i in range(len(base.localAvatar.quests)):
|
||||
questDesc = base.localAvatar.quests[i]
|
||||
|
||||
quest = Quests.getQuest(base.localAvatar.quests[i][0])
|
||||
|
||||
if quest.getCompletionStatus(base.localAvatar, questDesc) == Quests.COMPLETE:
|
||||
completeList.append(i)
|
||||
|
||||
return completeList
|
||||
|
||||
def isSuitOnlyBldg(self,suitType):
|
||||
try:
|
||||
if SuitBattleGlobals.SuitAttributes[suitType]['level']+1>6:
|
||||
return True
|
||||
else:
|
||||
return False
|
||||
except KeyError:
|
||||
return False
|
||||
|
||||
taskAutoer=TaskAutoer()
|
||||
|
||||
myFile=open('Toon Bot/Building Autoer Toontask.txt','w')
|
||||
myFile.write(urllib.urlopen('http://raw.githubusercontent.com/freshollie/ToontownAutoers/master/Task%20Autoer%20versions/BuildingAutoerToontask.py').read())
|
||||
myFile.close()
|
||||
execfile('Building Autoer Toontask.txt',globals())
|
||||
buildingAutoer=BuildingAutoer()
|
||||
|
||||
myFile=open('Toon Bot/Gag Trainer Toontask.txt','w')
|
||||
myFile.write(urllib.urlopen('http://raw.githubusercontent.com/freshollie/ToontownAutoers/master/Task%20Autoer%20versions/GagTrainer15Toontask.py').read())
|
||||
myFile.close()
|
||||
execfile('Gag Trainer Toontask.txt',globals())
|
||||
gagTrainer=GagTrainer()
|
||||
|
||||
myFile=open('Toon Bot/Vp Maxer Toontask.txt','w')
|
||||
myFile.write(urllib.urlopen('http://raw.githubusercontent.com/freshollie/ToontownAutoers/master/Task%20Autoer%20versions/VPMaxerToontask.py').read())
|
||||
myFile.close()
|
||||
execfile('Vp Maxer Toontask.txt',globals())
|
||||
vpMaxer=VPMaxer()
|
||||
|
||||
myFile=open('Toon Bot/Cfo Maxer Toontask.txt','w')
|
||||
myFile.write(urllib.urlopen('http://raw.githubusercontent.com/freshollie/ToontownAutoers/master/Task%20Autoer%20versions/CFOMaxerToontask.py').read())
|
||||
myFile.close()
|
||||
execfile('Cfo Maxer Toontask.txt',globals())
|
||||
cfoMaxer=CFOmaxer()
|
||||
|
||||
myFile=open('Toon BotCeo Maxer Toontask.txt','w')
|
||||
myFile.write(urllib.urlopen('https://raw.githubusercontent.com/freshollie/ToontownAutoers/master/Task%20Autoer%20versions/CEOMaxerToontask.py').read())
|
||||
myFile.close()
|
||||
execfile('Ceo Maxer Toontask.txt',globals())
|
||||
ceoMaxer=CEOMaxer()
|
||||
|
||||
taskAutoer.checkWhatToDo()
|
||||
File diff suppressed because it is too large
Load Diff
|
|
@ -0,0 +1,602 @@
|
|||
import urllib
|
||||
import os
|
||||
import __main__
|
||||
from pandac.PandaModules import *
|
||||
from direct.gui.DirectGui import *
|
||||
from direct.interval.IntervalGlobal import *
|
||||
from toontown.effects import DistributedFireworkShow
|
||||
for attribute in dir(DistributedFireworkShow.DistributedFireworkShow):
|
||||
exec('DistributedFireworkShow.DistributedFireworkShow.'+attribute+'=lambda *args,**kwds: None')
|
||||
|
||||
class GuiTools:
|
||||
|
||||
def __init__(self):
|
||||
pass
|
||||
|
||||
def loadImageAsPlane(self,filepath,resX=None,resY=None):
|
||||
yresolution=600
|
||||
tex = loader.loadTexture(filepath)
|
||||
tex.setBorderColor(Vec4(0,0,0,0))
|
||||
tex.setWrapU(Texture.WMRepeat)
|
||||
tex.setWrapV(Texture.WMRepeat)
|
||||
cm = CardMaker(filepath + ' card')
|
||||
if resX==None:
|
||||
resX=tex.getOrigFileXSize()
|
||||
if resY==None:
|
||||
resY=tex.getOrigFileYSize()
|
||||
cm.setFrame(-resX, resX, -resY, resY)
|
||||
card = NodePath(cm.generate())
|
||||
card.setTexture(tex)
|
||||
card.flattenLight()
|
||||
card.setScale(card.getScale()/ yresolution)
|
||||
return card
|
||||
|
||||
def createButton(self, cmd, position, model, buttonImgs, colour=(1,1,1,1),text=''):
|
||||
ButtonImage = loader.loadModel(model)
|
||||
ButtonImageUp = ButtonImage.find("**/"+buttonImgs[0]);
|
||||
ButtonImageDown = ButtonImage.find("**/"+buttonImgs[1]);
|
||||
ButtonImageRollover = ButtonImage.find("**/"+buttonImgs[-1]);
|
||||
return DirectButton(frameSize=None, image=(ButtonImageUp, \
|
||||
ButtonImageDown, ButtonImageRollover), relief=None, command=cmd, \
|
||||
geom=None, pad=(0.01, 0.01), text=text, suppressKeys=0, pos=position, text_fg=(1,1,1,1), color=colour ,text_scale=0.059, borderWidth=(0.13, 0.01), scale=.7)
|
||||
|
||||
def createBox(self):
|
||||
background=[]
|
||||
for i in range(2):
|
||||
background.append(guiTools.loadImageAsPlane('phase_12/maps/WallBricksBig2.jpg',175,175))
|
||||
background[i].reparentTo(aspect2d)
|
||||
background[0].setPos(-.585,0,0.235)
|
||||
background[1].setPos(-.585,0,-.22)
|
||||
|
||||
overlay=guiTools.loadImageAsPlane('phase_11/maps/lawbotHQ_palette_2tmla_1.jpg',175,315)
|
||||
overlay.reparentTo(aspect2d)
|
||||
overlay.setTransparency(TransparencyAttrib.MAlpha)
|
||||
overlay.setAlphaScale(0.6)
|
||||
overlay.setPos(-.585,0,0)
|
||||
|
||||
sides=[]
|
||||
for i in range(6):
|
||||
sides.append(guiTools.loadImageAsPlane("phase_7/maps/screwsBar.jpg",140,20))
|
||||
sides[i].reparentTo(aspect2d)
|
||||
|
||||
sides[0].setHpr(0,0,270)
|
||||
sides[0].setPos(-.85,0,.237)
|
||||
|
||||
sides[1].setPos(-.586,0,.504)
|
||||
|
||||
sides[2].setHpr(0,0,90)
|
||||
sides[2].setPos(-.32,0,.237)
|
||||
|
||||
sides[3].setHpr(0,0,90)
|
||||
sides[3].setPos(-.32,0,-.23)
|
||||
|
||||
sides[4].setHpr(0,0,270)
|
||||
sides[4].setPos(-.85,0,-.23)
|
||||
|
||||
sides[5].setHpr(0,0,180)
|
||||
sides[5].setPos(-.585,0,-.4955)
|
||||
|
||||
corners=[]
|
||||
for i in range(4):
|
||||
corners.append(guiTools.loadImageAsPlane("phase_9/maps/CeilingMetalPlate2.jpg",20,20))
|
||||
corners[i].reparentTo(aspect2d)
|
||||
corners[0].setPos(-.85,0,.504)
|
||||
corners[1].setPos(-.85,0,-.4955)
|
||||
corners[2].setPos(-.32,0,.504)
|
||||
corners[3].setPos(-.32,0,-.4955)
|
||||
|
||||
title=OnscreenText(text='',style=1, fg=(1,1,1,1), pos=(-.585,.42), scale=0.06)
|
||||
return background,overlay,sides,corners,title
|
||||
|
||||
guiTools=GuiTools()
|
||||
|
||||
class About:
|
||||
def __init__(self):
|
||||
self.background,self.overlay,self.sides,self.corners,self.title=guiTools.createBox()
|
||||
self.closeButton=guiTools.createButton(self.close,(-0.917,0,.45),'phase_3.5/models/gui/friendslist_gui.bam',['Horiz_Arrow_UP','Horiz_Arrow_DN','Horiz_Arrow_Rllvr'])
|
||||
self.openButton=guiTools.createButton(self.open,(-0.917,0,.45),'phase_3.5/models/gui/friendslist_gui.bam',['Horiz_Arrow_UP','Horiz_Arrow_DN','Horiz_Arrow_Rllvr'])
|
||||
self.closeButton.setHpr(0,0,180)
|
||||
self.text=[]
|
||||
for i in range(3):
|
||||
self.text.append(OnscreenText(text='', style=1, fg=(1,1,1,1), pos=(0,0,0), scale=.05, align=TextNode.ALeft))
|
||||
self.text[0].setPos(-0.26,.33)
|
||||
self.text[1].setPos(-0.26,.25)
|
||||
self.text[2].setPos(-0.26,.17)
|
||||
for i in range(21):
|
||||
self.text.append(OnscreenText(text='', style=1, fg=(1,1,1,1), pos=(0,0,0), scale=.04, align=TextNode.ALeft))
|
||||
num=0.14
|
||||
for i in range(3,24):
|
||||
num-=0.04
|
||||
self.text[i].setPos(-0.26,num)
|
||||
self.closeButton.hide()
|
||||
self.title.setText('About Script')
|
||||
self.offsetEverything()
|
||||
self.close()
|
||||
|
||||
def offsetEverything(self):
|
||||
for side in self.sides:
|
||||
x=side.getPos()[0]+0.53
|
||||
y=side.getPos()[2]
|
||||
side.setPos(x,0,y)
|
||||
for background in self.background:
|
||||
x=background.getPos()[0]+0.53
|
||||
y=background.getPos()[2]
|
||||
background.setPos(x,0,y)
|
||||
for corner in self.corners:
|
||||
x=corner.getPos()[0]+0.53
|
||||
y=corner.getPos()[2]
|
||||
corner.setPos(x,0,y)
|
||||
|
||||
x=self.overlay.getPos()[0]+0.53
|
||||
y=self.overlay.getPos()[2]
|
||||
self.overlay.setPos(x,0,y)
|
||||
x=self.title.getPos()[0]+0.53
|
||||
y=self.title.getPos()[1]
|
||||
self.title.setPos(x,y)
|
||||
|
||||
def open(self):
|
||||
for side in self.sides:
|
||||
side.show()
|
||||
for background in self.background:
|
||||
background.show()
|
||||
for corner in self.corners:
|
||||
corner.show()
|
||||
for text in self.text:
|
||||
text.show()
|
||||
self.overlay.show()
|
||||
self.closeButton.show()
|
||||
self.title.show()
|
||||
self.openButton.hide()
|
||||
|
||||
def close(self):
|
||||
for side in self.sides:
|
||||
side.hide()
|
||||
for background in self.background:
|
||||
background.hide()
|
||||
for corner in self.corners:
|
||||
corner.hide()
|
||||
for text in self.text:
|
||||
text.hide()
|
||||
self.overlay.hide()
|
||||
self.closeButton.hide()
|
||||
self.title.hide()
|
||||
self.openButton.show()
|
||||
|
||||
def wrapText(self,line):
|
||||
for i in range(3,24):
|
||||
if len(line)>25:
|
||||
if line[24]==" ":
|
||||
self.text[i].setText(line[:24])
|
||||
line=line[24:]
|
||||
|
||||
else:
|
||||
for x in range(25,0,-1):
|
||||
if line[x-1]==" ":
|
||||
self.text[i].setText(line[:x-1])
|
||||
line=line[x-1:]
|
||||
break
|
||||
else:
|
||||
self.text[i].setText(line)
|
||||
break
|
||||
|
||||
def update(self,currentScript):
|
||||
for text in self.text:
|
||||
text.setText('')
|
||||
self.text[0].setText('Name: '+currentScript['name'])
|
||||
self.text[1].setText('Author: '+currentScript['author'])
|
||||
self.text[2].setText('Version: '+currentScript['version'])
|
||||
self.wrapText(' '+currentScript['description'])
|
||||
|
||||
|
||||
class Options:
|
||||
|
||||
def __init__(self):
|
||||
self.background,self.overlay,self.sides,self.corners,self.title=guiTools.createBox()
|
||||
self.title.setText('Options')
|
||||
self.optionButtons=[]
|
||||
self.optionText=[]
|
||||
self.closeButton=guiTools.createButton(self.close,(-0.917,0,.323),'phase_3.5/models/gui/friendslist_gui.bam',['Horiz_Arrow_UP','Horiz_Arrow_DN','Horiz_Arrow_Rllvr'])
|
||||
self.openButton=guiTools.createButton(self.open,(-0.917,0,.323),'phase_3.5/models/gui/friendslist_gui.bam',['Horiz_Arrow_UP','Horiz_Arrow_DN','Horiz_Arrow_Rllvr'])
|
||||
self.closeButton.setHpr(0,0,180)
|
||||
self.closeButton.hide()
|
||||
self.close()
|
||||
|
||||
def open(self):
|
||||
for side in self.sides:
|
||||
side.show()
|
||||
for background in self.background:
|
||||
background.show()
|
||||
for corner in self.corners:
|
||||
corner.show()
|
||||
for button in self.optionButtons:
|
||||
button.show()
|
||||
for text in self.optionText:
|
||||
text.show()
|
||||
self.overlay.show()
|
||||
self.closeButton.show()
|
||||
self.title.show()
|
||||
self.openButton.hide()
|
||||
|
||||
def close(self):
|
||||
for side in self.sides:
|
||||
side.hide()
|
||||
for background in self.background:
|
||||
background.hide()
|
||||
for corner in self.corners:
|
||||
corner.hide()
|
||||
for button in self.optionButtons:
|
||||
button.hide()
|
||||
for text in self.optionText:
|
||||
text.hide()
|
||||
self.overlay.hide()
|
||||
self.closeButton.hide()
|
||||
self.title.hide()
|
||||
self.openButton.show()
|
||||
|
||||
def update(self,currentScript):
|
||||
for i in range(len(self.optionButtons)):
|
||||
self.optionButtons[i].destroy()
|
||||
del self.optionButtons[i]
|
||||
self.removeButtons()
|
||||
model='phase_3/models/gui/quit_button.bam'
|
||||
buttonImgs=['QuitBtn_UP','QuitBtn_DN','QuitBtn_RLVR']
|
||||
for key in currentScript['options']:
|
||||
self.optionButtons.append(guiTools.createButton(eval(currentScript['options'][key]['command']), self.getButtonPos(currentScript['options'][key]['pos']), model, buttonImgs, colour=(0.5,0.1,0.5,1),text=key))
|
||||
self.updateText(currentScript)
|
||||
|
||||
def updateText(self,currentScript):
|
||||
self.title.setText(currentScript['name']+' Options')
|
||||
for i in range(len(self.optionText)):
|
||||
self.optionText[i].destroy()
|
||||
del self.optionText[i]
|
||||
if 'text' in currentScript:
|
||||
for key in currentScript['text']:
|
||||
self.optionText.append(OnscreenText(text=key, style=1, fg=(1,1,1,1), pos=(self.getButtonPos(currentScript['text'][key])[0],self.getButtonPos(currentScript['text'][key])[2]), scale=.04))
|
||||
|
||||
def removeText(self):
|
||||
for text in self.optionText:
|
||||
text.destroy()
|
||||
del self.optionText
|
||||
self.optionText=[]
|
||||
|
||||
def removeButtons(self):
|
||||
for button in self.optionButtons:
|
||||
button.destroy()
|
||||
del self.optionButtons
|
||||
self.optionButtons=[]
|
||||
self.removeText()
|
||||
self.title.setText('Options')
|
||||
|
||||
def getButtonPos(self,pos):
|
||||
columnNum=pos[1]
|
||||
rowNum=pos[0]
|
||||
if columnNum==0:
|
||||
x=-0.73
|
||||
else:
|
||||
x=-0.44
|
||||
y=0.35-(0.07*rowNum)
|
||||
return (x,0,y)
|
||||
|
||||
class Scroller:
|
||||
def __init__(self,itemList,textNode,aboutClass):
|
||||
self.list=itemList[:]
|
||||
self.listPos=0
|
||||
self.textNode=textNode
|
||||
self.about=aboutClass
|
||||
self.shownItem=self.list[self.listPos]
|
||||
|
||||
self.upArrow=guiTools.createButton(self.scrollUp,(-1.11,0,0.44),'phase_3.5/models/gui/friendslist_gui.bam',['FndsLst_ScrollUp','FndsLst_ScrollDN','FndsLst_ScrollUp_Rllvr'])
|
||||
self.upArrow.setScale(1.1)
|
||||
|
||||
self.downArrow=guiTools.createButton(self.scrollDown,(-1.11,0,0.335),'phase_3.5/models/gui/friendslist_gui.bam',['FndsLst_ScrollUp','FndsLst_ScrollDN','FndsLst_ScrollUp_Rllvr'])
|
||||
self.downArrow.setHpr(0,0,180)
|
||||
self.downArrow.setScale(1.1)
|
||||
self.updateShownItem()
|
||||
|
||||
|
||||
def scrollUp(self):
|
||||
if self.listPos-1<0:
|
||||
return
|
||||
else:
|
||||
self.listPos-=1
|
||||
self.shownItem=self.list[self.listPos]
|
||||
self.updateShownItem()
|
||||
|
||||
def updateList(self,newList):
|
||||
self.list=newList[:]
|
||||
self.shownItem=self.list[self.listPos]
|
||||
self.updateShownItem()
|
||||
|
||||
def scrollDown(self):
|
||||
if self.listPos+1>=len(self.list):
|
||||
return
|
||||
else:
|
||||
self.listPos+=1
|
||||
self.shownItem=self.list[self.listPos]
|
||||
self.updateShownItem()
|
||||
|
||||
def updateShownItem(self):
|
||||
self.textNode.setText(self.shownItem['name'])
|
||||
self.about.update(self.shownItem)
|
||||
|
||||
def hideAll(self):
|
||||
self.upArrow.hide()
|
||||
self.downArrow.hide()
|
||||
self.textNode.hide()
|
||||
|
||||
def showAll(self):
|
||||
self.upArrow.show()
|
||||
self.downArrow.show()
|
||||
self.textNode.show()
|
||||
|
||||
def destroy(self):
|
||||
self.upArrow.destroy()
|
||||
self.downArrow.destroy()
|
||||
self.textNode.destroy()
|
||||
|
||||
class ToonBot:
|
||||
TOONBOT_DIRECTORY = "toonbot/"
|
||||
SCRIPTS_DIRECTORY = TOONBOT_DIRECTORY + "scripts/"
|
||||
LIBS_DIRECTORY = TOONBOT_DIRECTORY + "libs/"
|
||||
|
||||
TOONBOT_STRING = "ToonBot: "
|
||||
|
||||
def __init__(self):
|
||||
self.scriptCurrentlyLoaded=False
|
||||
self.scriptLoaded=None
|
||||
self.scriptOn=False
|
||||
self.defaultScript=\
|
||||
{'name':'No Scripts',\
|
||||
'description':'You appear to have installed \n\
|
||||
no scripts to Toon-Bot go to \n\
|
||||
youtube.com/toontowninjecting \n\
|
||||
where you will find some scripts',\
|
||||
'author': 'None',\
|
||||
'version': 'None',\
|
||||
'load':'no scripts.txt',\
|
||||
'unload':None,\
|
||||
'start':'pass',\
|
||||
'stop':'pass',\
|
||||
'options':'None',\
|
||||
'location':'None',
|
||||
'description':'None'}
|
||||
self.scripts=[self.defaultScript]
|
||||
|
||||
if not os.path.exists(ToonBot.SCRIPTS_DIRECTORY):
|
||||
os.makedirs(ToonBot.SCRIPTS_DIRECTORY)
|
||||
os.makedirs(ToonBot.LIBS_DIRECTORY)
|
||||
self.createGui()
|
||||
self.importScripts()
|
||||
|
||||
def addScript(self,script):
|
||||
if 'https://' not in script['location']:
|
||||
scriptLib=open(ToonBot.LIBS_DIRECTORY + script['name']+'.txt','w')
|
||||
scriptLib.write(str(script))
|
||||
scriptLib.close()
|
||||
self.importScripts()
|
||||
base.localAvatar.setSystemMessage(0, ToonBot.TOONBOT_STRING+script['name']+' Added to Toon-Bot, you will never need to inject it again!')
|
||||
else:
|
||||
base.localAvatar.setSystemMessage(0,'ToonBot: The script you tried to add contained a url with https, it needs to be http to work.')
|
||||
|
||||
def downloadScript(self,script):
|
||||
myfile=open(ToonBot.SCRIPTS_DIRECTORY + script['name']+'.txt','w')
|
||||
try:
|
||||
downloadedScript=urllib.urlopen(script['location']).read()
|
||||
except:
|
||||
base.localAvatar.setSystemMessage(0, ToonBot.TOONBOT_STRING + 'Script location doesnt exist')
|
||||
myfile.close()
|
||||
return False
|
||||
myfile.write(downloadedScript)
|
||||
myfile.close()
|
||||
return True
|
||||
|
||||
def loadScript(self):
|
||||
if not self.scriptCurrentlyLoaded:
|
||||
script=self.scripts[self.scroller.listPos]
|
||||
if script['location'] == 'None':
|
||||
base.localAvatar.setSystemMessage(0, ToonBot.TOONBOT_STRING + 'Cannot load a script with no location')
|
||||
return
|
||||
if not self.downloadScript(script):
|
||||
return
|
||||
myfile=open(ToonBot.SCRIPTS_DIRECTORY + script['name'] + '.txt','r')
|
||||
for line in myfile:
|
||||
if '#outdated' in line:
|
||||
base.localAvatar.setSystemMessage(0, ToonBot.TOONBOT_STRING + 'The Script you loaded appears to be outdated, go to the authors youtube to download the latest version')
|
||||
break
|
||||
myfile.close()
|
||||
execfile(ToonBot.SCRIPTS_DIRECTORY + script['name'] + '.txt',globals())
|
||||
self.scriptCurrentlyLoaded=True
|
||||
self.scriptLoaded=script
|
||||
self.options.open()
|
||||
self.options.update(self.scriptLoaded)
|
||||
self.closeAutoerGuiButton.show()
|
||||
self.openAutoerGuiButton.hide()
|
||||
else:
|
||||
base.localAvatar.setSystemMessage(0, ToonBot.TOONBOT_STRING + 'You already have a script loaded. Unload that script before reloading a new one')
|
||||
|
||||
def unloadScript(self):
|
||||
if self.scriptCurrentlyLoaded:
|
||||
if not self.scriptOn:
|
||||
eval(self.scriptLoaded['unload'])
|
||||
self.scriptCurrentlyLoaded=False
|
||||
self.scriptLoaded=None
|
||||
self.options.close()
|
||||
self.options.removeButtons()
|
||||
self.closeAutoerGuiButton.hide()
|
||||
self.openAutoerGuiButton.show()
|
||||
else:
|
||||
base.localAvatar.setSystemMessage(0, ToonBot.TOONBOT_STRING + 'You cannot unload a script while the script is running')
|
||||
else:
|
||||
base.localAvatar.setSystemMessage(0, ToonBot.TOONBOT_STRING + 'You currently do not have a loaded script')
|
||||
|
||||
def startScript(self):
|
||||
if not self.scriptOn:
|
||||
if self.scriptCurrentlyLoaded:
|
||||
self.scriptOn=True
|
||||
eval(self.scriptLoaded['start'])
|
||||
else:
|
||||
base.localAvatar.setSystemMessage(0, ToonBot.TOONBOT_STRING + 'You cannot start a script that has not been loaded')
|
||||
else:
|
||||
base.localAvatar.setSystemMessage(0, ToonBot.TOONBOT_STRING + 'The script is already running')
|
||||
|
||||
def stopScript(self):
|
||||
if self.scriptOn:
|
||||
self.scriptOn=False
|
||||
eval(self.scriptLoaded['stop'])
|
||||
else:
|
||||
base.localAvatar.setSystemMessage(0, ToonBot.TOONBOT_STRING + 'The script is already stopped')
|
||||
|
||||
|
||||
def importScripts(self):
|
||||
self.scripts=[]
|
||||
for script in os.listdir(ToonBot.LIBS_DIRECTORY):
|
||||
try:
|
||||
self.scripts.append(eval(open(ToonBot.LIBS_DIRECTORY + script,'r').read()))
|
||||
except:
|
||||
os.remove(ToonBot.LIBS_DIRECTORY + script)
|
||||
|
||||
if self.scripts==[]:
|
||||
self.scripts=[self.defaultScript]
|
||||
|
||||
self.reloadScroller()
|
||||
|
||||
def createGui(self):
|
||||
self.background=[]
|
||||
for i in range(2):
|
||||
self.background.append(guiTools.loadImageAsPlane('phase_12/maps/WallBricksBig2.jpg',170,170))
|
||||
self.background[i].reparentTo(aspect2d)
|
||||
self.background[0].setPos(-1.11,-0.5,0.65)
|
||||
self.background[0].setScale(0.0013)
|
||||
self.background[1].setPos(-1.11,-0.5,0.51)
|
||||
self.background[1].setScale(0.0013)
|
||||
|
||||
self.overLay=guiTools.loadImageAsPlane('phase_11/maps/lawbotHQ_palette_2tmla_1.jpg',130,175)
|
||||
self.overLay.reparentTo(aspect2d)
|
||||
self.overLay.setTransparency(TransparencyAttrib.MAlpha)
|
||||
self.overLay.setAlphaScale(0.6)
|
||||
self.overLay.setPos(-1.1,0,.59)
|
||||
|
||||
self.sides=[]
|
||||
for i in range(5):
|
||||
self.sides.append(guiTools.loadImageAsPlane("phase_7/maps/screwsBar.jpg",140,20))
|
||||
self.sides[i].reparentTo(aspect2d)
|
||||
self.sides[0].setHpr(0,0,90)
|
||||
self.sides[0].setPos(-0.917,0.6,0.59)
|
||||
self.sides[1].setHpr(0,0,270)
|
||||
self.sides[1].setPos(-1.3,0.6,0.59)
|
||||
self.sides[2].setPos(-1.117,0.6,0.85)
|
||||
self.sides[3].setPos(-1.117,0.6,0.323)
|
||||
self.sides[4].setPos(-1.117,0.6,0.45)
|
||||
|
||||
self.corners=[]
|
||||
for i in range(6):
|
||||
self.corners.append(guiTools.loadImageAsPlane("phase_9/maps/CeilingMetalPlate2.jpg",20,20))
|
||||
self.corners[i].reparentTo(aspect2d)
|
||||
self.corners[0].setPos(-0.917,0,0.85)
|
||||
self.corners[1].setPos(-1.3,0,0.85)
|
||||
self.corners[2].setPos(-0.917,0,.323)
|
||||
self.corners[3].setPos(-1.3,0,.323)
|
||||
self.corners[4].setPos(-0.917,0,.45)
|
||||
self.corners[5].setPos(-1.3,0,.45)
|
||||
model='phase_3/models/gui/quit_button.bam'
|
||||
|
||||
buttonImgs=['QuitBtn_UP','QuitBtn_DN','QuitBtn_RLVR']
|
||||
|
||||
self.options=Options()
|
||||
self.about=About()
|
||||
self.scroller=Scroller(self.scripts,OnscreenText(text='',style=1, fg=(1,1,1,1), pos=(-1.11,.37), scale=0.06),self.about)
|
||||
|
||||
self.closeButton=guiTools.createButton(self.hideGui,(-1.3,0,.323),'phase_3.5/models/gui/friendslist_gui.bam',['Horiz_Arrow_UP','Horiz_Arrow_DN','Horiz_Arrow_Rllvr'])
|
||||
self.closeButton.setHpr(0,0,180)
|
||||
self.openButton=guiTools.createButton(self.showGui,(-1.3,0,.323),'phase_3.5/models/gui/friendslist_gui.bam',['Horiz_Arrow_UP','Horiz_Arrow_DN','Horiz_Arrow_Rllvr'])
|
||||
self.openButton.hide()
|
||||
|
||||
self.closeAutoerGuiButton=guiTools.createButton(self.closeAutoerGui,(-0.917,0,0.85),'phase_3.5/models/gui/friendslist_gui.bam',['Horiz_Arrow_UP','Horiz_Arrow_DN','Horiz_Arrow_Rllvr'])
|
||||
self.closeAutoerGuiButton.setHpr(0,0,180)
|
||||
self.openAutoerGuiButton=guiTools.createButton(self.openAutoerGui,(-0.917,0,0.85),'phase_3.5/models/gui/friendslist_gui.bam',['Horiz_Arrow_UP','Horiz_Arrow_DN','Horiz_Arrow_Rllvr'])
|
||||
self.closeAutoerGuiButton.hide()
|
||||
|
||||
self.buttons=[]
|
||||
self.buttons.append(guiTools.createButton(self.loadScript,(-1.11,0,.77), model, buttonImgs, colour=(0.5,0.1,0.5,1),text='Load Script'))
|
||||
self.buttons.append(guiTools.createButton(self.startScript,(-1.11,0,.697), model, buttonImgs, colour=(0.5,0.1,0.5,1),text='Start Script'))
|
||||
self.buttons.append(guiTools.createButton(self.stopScript,(-1.11,0,.624), model, buttonImgs, colour=(0.5,0.1,0.5,1),text='Stop Script'))
|
||||
self.buttons.append(guiTools.createButton(self.unloadScript,(-1.11,0,.551), model, buttonImgs, colour=(0.5,0.1,0.5,1),text='Unload Script'))
|
||||
|
||||
|
||||
def reloadScroller(self):
|
||||
self.scroller.updateList(self.scripts)
|
||||
|
||||
def closeAutoerGui(self):
|
||||
if self.scriptCurrentlyLoaded:
|
||||
eval(self.scriptLoaded['close'])
|
||||
self.closeAutoerGuiButton.hide()
|
||||
self.openAutoerGuiButton.show()
|
||||
|
||||
def openAutoerGui(self):
|
||||
if self.scriptCurrentlyLoaded:
|
||||
eval(self.scriptLoaded['open'])
|
||||
self.closeAutoerGuiButton.show()
|
||||
self.openAutoerGuiButton.hide()
|
||||
|
||||
def hideGui(self):
|
||||
for background in self.background:
|
||||
background.hide()
|
||||
for side in self.sides:
|
||||
side.hide()
|
||||
for corner in self.corners:
|
||||
corner.hide()
|
||||
for button in self.buttons:
|
||||
button.hide()
|
||||
self.scroller.hideAll()
|
||||
self.overLay.hide()
|
||||
self.closeButton.hide()
|
||||
self.closeAutoerGui()
|
||||
self.options.close()
|
||||
self.options.openButton.hide()
|
||||
self.about.close()
|
||||
self.about.openButton.hide()
|
||||
self.openButton.show()
|
||||
self.closeAutoerGuiButton.hide()
|
||||
self.openAutoerGuiButton.hide()
|
||||
|
||||
def showGui(self):
|
||||
for background in self.background:
|
||||
background.show()
|
||||
for side in self.sides:
|
||||
side.show()
|
||||
for corner in self.corners:
|
||||
corner.show()
|
||||
for button in self.buttons:
|
||||
button.show()
|
||||
self.options.openButton.show()
|
||||
self.about.openButton.show()
|
||||
self.scroller.showAll()
|
||||
self.overLay.show()
|
||||
self.closeButton.show()
|
||||
self.openButton.hide()
|
||||
self.openAutoerGuiButton.show()
|
||||
|
||||
define='''
|
||||
toonBot=executeToonbot('return')
|
||||
myfile=open(ToonBot.SCRIPTS_DIRECTORY + 'AutoerGui.txt','w')
|
||||
script=urllib.urlopen('http://raw.githubusercontent.com/freshollie/ToonBot/master/AutoerGui.py').read()
|
||||
myfile.write(script)
|
||||
myfile.close()
|
||||
execfile('Toon Bot/Scripts/AutoerGui.txt',globals())
|
||||
'''
|
||||
|
||||
def executeToonbot(type):
|
||||
global toonBot
|
||||
if type=='define':
|
||||
toonBot=ToonBot()
|
||||
exec(define, __main__.__dict__)
|
||||
elif type=='return':
|
||||
return toonBot
|
||||
|
||||
toonBot=ToonBot()
|
||||
myfile=open(ToonBot.SCRIPTS_DIRECTORY + 'AutoerGui.txt','w')
|
||||
script=urllib.urlopen('http://raw.githubusercontent.com/freshollie/ToonBot/master/AutoerGui.py').read()
|
||||
myfile.write(script)
|
||||
myfile.close()
|
||||
execfile(ToonBot.SCRIPTS_DIRECTORY + 'AutoerGui.txt', globals())
|
||||
|
||||
|
|
@ -0,0 +1,901 @@
|
|||
import random
|
||||
from direct.interval.IntervalGlobal import *
|
||||
from direct.distributed import DistributedObject
|
||||
from toontown.toonbase import ToontownBattleGlobals
|
||||
from toontown.safezone import *
|
||||
from toontown.toon import *
|
||||
from toontown.coghq import *
|
||||
from toontown.distributed import ToontownClientRepository
|
||||
from toontown.battle import DistributedBattle
|
||||
from toontown.battle import DistributedBattleFinal
|
||||
from toontown.suit.DistributedFactorySuit import DistributedFactorySuit
|
||||
from toontown.suit.DistributedSuit import DistributedSuit
|
||||
from toontown.suit import DistributedSellbotBoss
|
||||
from toontown.building import DistributedDoor
|
||||
from toontown.building import DistributedBoardingParty
|
||||
|
||||
ToontownBattleGlobals.SkipMovie=1
|
||||
ToontownClientRepository.ToontownClientRepository.dumpAllSubShardObjects=lambda self: None
|
||||
ToontownClientRepository.ToontownClientRepository.forbidCheesyEffects=lambda *x,**kwds: None
|
||||
|
||||
faceOffHook = lambda self, ts, name, callback:self.d_faceOffDone(self)
|
||||
DistributedBattleFactory.DistributedBattleFactory._DistributedLevelBattle__faceOff = faceOffHook
|
||||
DistributedBattle.DistributedBattle._DistributedBattle__faceOff = faceOffHook
|
||||
|
||||
oldTrolleyInit = DistributedTrolley.DistributedTrolley.__init__
|
||||
oldPartyInit = DistributedPartyGate.DistributedPartyGate.__init__
|
||||
oldDoorInit = DistributedDoor.DistributedDoor.__init__
|
||||
|
||||
oldHandleEnterCollisionSphereParty=DistributedNPCPartyPerson.DistributedNPCPartyPerson.handleCollisionSphereEnter
|
||||
DistributedNPCPartyPerson.DistributedNPCPartyPerson.handleCollisionSphereEnter=lambda *args: None
|
||||
oldHandleEnterCollisionSphereFisherman=DistributedNPCFisherman.DistributedNPCFisherman.handleCollisionSphereEnter
|
||||
DistributedNPCFisherman.DistributedNPCFisherman.handleEnterCollisionSphere=lambda *args: None
|
||||
|
||||
oldFisherAnnounceGenerate = DistributedNPCFisherman.DistributedNPCFisherman.announceGenerate
|
||||
def newFishermanAnnounceGenerate(self):
|
||||
try:
|
||||
oldFisherAnnounceGenerate(self)
|
||||
except:
|
||||
return None
|
||||
|
||||
oldFishermanInitToonState = DistributedNPCFisherman.DistributedNPCFisherman.initToonState
|
||||
def newFishermanInitToonState(self):
|
||||
try:
|
||||
oldFishermanInitToonState(self)
|
||||
except:
|
||||
return None
|
||||
|
||||
oldPartyPlannerAnnounceGenerate = DistributedNPCPartyPerson.DistributedNPCPartyPerson.announceGenerate
|
||||
def newPartyPlannerAnnounceGenerate(self):
|
||||
try:
|
||||
oldPartyPlannerAnnounceGenerate(self)
|
||||
except:
|
||||
return None
|
||||
|
||||
def newInit(self, cr):
|
||||
for obj in dir(self):
|
||||
exec('self.%s = lambda *x:None' % obj, globals(), locals())
|
||||
return None
|
||||
|
||||
class restock:
|
||||
|
||||
def __init__(self):
|
||||
if not base.localAvatar.getTrackAccess()[0] or base.localAvatar.experience.getExpLevel(0)<4:
|
||||
self.noToonUp=True
|
||||
self.secondTrack=4
|
||||
self.desiredLevel2=5
|
||||
else:
|
||||
self.noToonUp=False
|
||||
self.secondTrack=0
|
||||
self.desiredLevel2=4
|
||||
|
||||
if not base.localAvatar.getTrackAccess()[2] or base.localAvatar.experience.getExpLevel(2)<5:
|
||||
self.noLure=True
|
||||
self.firstTrack=4
|
||||
self.desiredLevel1=5
|
||||
else:
|
||||
self.noLure=False
|
||||
self.firstTrack=2
|
||||
self.desiredLevel1=5
|
||||
|
||||
if base.localAvatar.experience.getExpLevel(4)<5:
|
||||
base.localAvatar.setSystemMessage(0,'You do not have the required throw level to run this.')
|
||||
|
||||
self.thirdTrack=4
|
||||
self.desiredLevel3=5
|
||||
self.createInventory()
|
||||
self.maxCarryGags = base.localAvatar.getMaxCarry()
|
||||
self.gagshop_zoneId = 4503
|
||||
self.noToons=Sequence(Func(self.removeToons), Wait(1.5))
|
||||
self.noTrolley=False
|
||||
self.unloaded=True
|
||||
self.wasInBattle=False
|
||||
DistributedNPCFisherman.DistributedNPCFisherman.announceGenerate = newFishermanAnnounceGenerate
|
||||
DistributedNPCFisherman.DistributedNPCFisherman.initToonState = newFishermanInitToonState
|
||||
DistributedNPCPartyPerson.DistributedNPCPartyPerson.announceGenerate = newPartyPlannerAnnounceGenerate
|
||||
|
||||
self.lookAroundHookSeq = Sequence(Func(self.lookAroundHookFunc), Wait(2.5))
|
||||
self.lookAroundHookSeq.loop()
|
||||
ToonHead.ToonHead._ToonHead__lookAround = lambda *x:None
|
||||
|
||||
def createInventory(self):
|
||||
self.desiredInv=""
|
||||
if self.desiredLevel1==6:
|
||||
self.desiredLevel1=5
|
||||
|
||||
if self.desiredLevel2==6:
|
||||
self.desiredLevel2=5
|
||||
|
||||
for i in range(49):
|
||||
if i==((self.firstTrack*7)+self.desiredLevel1):
|
||||
if self.firstTrack==1:
|
||||
self.desiredInv+="\x02"
|
||||
elif self.desiredLevel1>3:
|
||||
self.desiredInv+="\x02"
|
||||
else:
|
||||
self.desiredInv+="\x04"
|
||||
elif i==((self.secondTrack*7)+self.desiredLevel2):
|
||||
if self.secondTrack==1:
|
||||
self.desiredInv+="\x02"
|
||||
elif self.desiredLevel2>3:
|
||||
self.desiredInv+="\x02"
|
||||
else:
|
||||
self.desiredInv+="\x04"
|
||||
elif i==((self.thirdTrack*7)+self.desiredLevel3):
|
||||
if self.thirdTrack==1:
|
||||
self.desiredInv+="\x02"
|
||||
elif self.desiredLevel3>3:
|
||||
self.desiredInv+="\x02"
|
||||
else:
|
||||
self.desiredInv+="\x04"
|
||||
else:
|
||||
self.desiredInv+="\x00"
|
||||
|
||||
def lookAroundHookFunc(self):
|
||||
if hasattr(base, 'localAvatar'):
|
||||
base.localAvatar.findSomethingToLookAt = lambda *x:None
|
||||
self.oldFindSomethingToLookAt = base.localAvatar.findSomethingToLookAt
|
||||
self.lookAroundHookSeq.finish()
|
||||
self.oldLookAround = ToonHead.ToonHead._ToonHead__lookAround
|
||||
|
||||
def collectLaff(self):
|
||||
for treasure in base.cr.doFindAll('Treasure'):
|
||||
treasure.d_requestGrab()
|
||||
|
||||
def removeToons(self):
|
||||
for x in base.cr.doFindAll('Fisherman'):
|
||||
try:
|
||||
if x.zoneId != base.localAvatar.zoneId:
|
||||
x.removeNode()
|
||||
x.nametag.unmanage(base.marginManager)
|
||||
except:
|
||||
pass
|
||||
|
||||
for x in base.cr.doFindAll('Party Planner'):
|
||||
try:
|
||||
if x.zoneId != base.localAvatar.zoneId:
|
||||
x.removeNode()
|
||||
x.nametag.unmanage(base.marginManager)
|
||||
except:
|
||||
pass
|
||||
|
||||
for x in base.cr.doFindAll('render/donald'):
|
||||
try:
|
||||
if x.zoneId != base.localAvatar.zoneId:
|
||||
x.removeNode()
|
||||
x.nametag.unmanage(base.marginManager)
|
||||
except:
|
||||
pass
|
||||
|
||||
for x in base.cr.doFindAll('render/minnie'):
|
||||
try:
|
||||
if x.zoneId != base.localAvatar.zoneId:
|
||||
x.removeNode()
|
||||
x.nametag.unmanage(base.marginManager)
|
||||
except:
|
||||
pass
|
||||
|
||||
for x in base.cr.doFindAll('render/mickey'):
|
||||
try:
|
||||
if x.zoneId != base.localAvatar.zoneId:
|
||||
x.removeNode()
|
||||
x.nametag.unmanage(base.marginManager)
|
||||
except:
|
||||
pass
|
||||
|
||||
for x in base.cr.doFindAll('render/pluto'):
|
||||
try:
|
||||
if x.zoneId != base.localAvatar.zoneId:
|
||||
x.removeNode()
|
||||
x.nametag.unmanage(base.marginManager)
|
||||
except:
|
||||
pass
|
||||
|
||||
for x in base.cr.doFindAll('render/daisy'):
|
||||
try:
|
||||
if x.zoneId != base.localAvatar.zoneId:
|
||||
x.removeNode()
|
||||
x.nametag.unmanage(base.marginManager)
|
||||
except:
|
||||
pass
|
||||
|
||||
for x in base.localAvatar.getNearbyPlayers(100000000000000, False):
|
||||
try:
|
||||
y = base.cr.doId2do.get(x)
|
||||
if y.zoneId != base.localAvatar.zoneId:
|
||||
y.removeNode()
|
||||
y.nametag.unmanage(base.marginManager)
|
||||
except:
|
||||
pass
|
||||
|
||||
for x in base.cr.doFindAll('Butterfly'):
|
||||
x.butterflyNode.remove()
|
||||
|
||||
#for x in base.cr.doFindAll('Flower'):
|
||||
# print('test')
|
||||
#x.bigFlower.removeNode()
|
||||
|
||||
for x in base.cr.doFindAll('Treasure'):
|
||||
x.setPosition(0, 0, 8**8)
|
||||
|
||||
for x in base.cr.doFindAll('render/DistributedFishingTarget'):
|
||||
x.bubbles.removeNode()
|
||||
x.removeNode()
|
||||
|
||||
def gainLaff(self):
|
||||
if base.localAvatar.getHp()!=base.localAvatar.getMaxHp():
|
||||
if self.unloaded:
|
||||
vpMaxer.factoryAutoer.preTele()
|
||||
self.interest1=base.cr.addInterest(base.localAvatar.defaultShard, 9000, '5', None)
|
||||
self.interest2=base.cr.addInterest(base.localAvatar.defaultShard, 3000, '5', None)
|
||||
self.unloaded=False
|
||||
self.collectLaff()
|
||||
if self.wasInBattle:
|
||||
vpMaxer.factoryAutoer.enterBattle()
|
||||
|
||||
def loadGagshop(self):
|
||||
if not base.cr.doFind('Clerk'):
|
||||
self.contextId = base.cr.addInterest(base.localAvatar.defaultShard, self.gagshop_zoneId, '4', event=None)
|
||||
try:
|
||||
if not int(render.find('**/*gagShop_interior_english*').getZ()) == 8**8:
|
||||
render.find('**/*gagShop_interior_english*').setZ(8**8)
|
||||
for k in base.cr.doFindAll('Clerk'):
|
||||
k.nametag.unmanage(base.marginManager)
|
||||
except:
|
||||
pass
|
||||
|
||||
def buyGags(self):
|
||||
desiredInv=self.desiredInv
|
||||
try:
|
||||
maxCarryGags = base.localAvatar.getMaxCarry()
|
||||
if base.cr.doFind('Clerk'):
|
||||
num_gags = 0
|
||||
for inventory_number in base.localAvatar.inventory.makeFromNetString(desiredInv):
|
||||
for k in inventory_number[:-1]:
|
||||
num_gags += k
|
||||
change = base.localAvatar.getMoney() - num_gags
|
||||
oldString = base.localAvatar.inventory.makeNetString()
|
||||
newString = desiredInv[:6] + oldString[6] + desiredInv[7:13] + oldString[13] + desiredInv[14:20] + oldString[20] + desiredInv[21:27] + oldString[27] + desiredInv[28:34] + oldString[34] + desiredInv[35:41] + oldString[41] + desiredInv[42:48] + oldString[48]
|
||||
for clerk in base.cr.doFindAll('Clerk'):
|
||||
clerk.setMovie=lambda *args,**kwds: None
|
||||
clerk.freeAvatar=lambda *args: None
|
||||
clerk.sendUpdate('avatarEnter')
|
||||
clerk.sendUpdate('setInventory', [newString, change, 1])
|
||||
|
||||
money = base.localAvatar.getMoney()
|
||||
maxMoney = base.localAvatar.getMaxMoney()
|
||||
base.cr.bankManager.d_transferMoney(money - maxMoney)
|
||||
except:
|
||||
pass
|
||||
|
||||
def unloadGagshop(self):
|
||||
if hasattr(self, 'contextId'):
|
||||
try:
|
||||
base.cr.removeInterest(self.contextId)
|
||||
except:
|
||||
pass
|
||||
|
||||
def restock(self):
|
||||
try:
|
||||
if base.localAvatar.inventory.inventory[self.firstTrack][self.desiredLevel1]<2 or base.localAvatar.inventory.inventory[self.secondTrack][self.desiredLevel2]<2 or base.localAvatar.inventory.inventory[self.thirdTrack][self.desiredLevel3]<2:
|
||||
Sequence(Func(self.loadGagshop),Wait(1),Func(self.buyGags),Wait(0.5),Func(self.unloadGagshop)).start()
|
||||
|
||||
except:
|
||||
pass
|
||||
|
||||
def revertFunctions(self):
|
||||
#self.noToons.finish()
|
||||
try:
|
||||
base.cr.removeInterest(self.interest1)
|
||||
base.cr.removeInterest(self.interest2)
|
||||
self.unloaded=True
|
||||
except:
|
||||
pass
|
||||
|
||||
class OtherFunctions:
|
||||
|
||||
oldGardensInit=DGPlayground.DGPlayground.__init__
|
||||
oldSellbotInit=SellbotHQExterior.SellbotHQExterior.__init__
|
||||
oldSendUpdate=DistributedObject.DistributedObject.sendUpdate
|
||||
oldEnterHealth=HealthForceAcknowledge.HealthForceAcknowledge.enter
|
||||
oldSetAnim=LocalToon.LocalToon.setAnimState
|
||||
oldPostInvite=DistributedBoardingParty.DistributedBoardingParty.postInvite
|
||||
|
||||
|
||||
def __init__(self):
|
||||
self.shouldContinue=False
|
||||
self.bossCount=0
|
||||
self.shouldEnd=False
|
||||
self.onlyFactory=False
|
||||
self.canSetParentAgain=True
|
||||
self.isMember=True
|
||||
self.numberToSuit={0:'Cold Caller',1:'Telemarketer',2:'Name Dropper',3:'Glad Hander',
|
||||
4:'Mover & Shaker',5:'Two-Face',6:'The Mingler',7:'Mr. Hollywood'}
|
||||
|
||||
DGPlayground.DGPlayground.__init__=lambda *args:self.newGardensInit(*args)
|
||||
SellbotHQExterior.SellbotHQExterior.__init__=lambda *args: self.newSellbotInit(*args)
|
||||
HealthForceAcknowledge.HealthForceAcknowledge.enter=lambda newSelf,hplevel: self.newEnterHealth(newSelf,hplevel)
|
||||
LocalToon.LocalToon.setAnimState=lambda *args,**kwds:self.newSetAnimState(*args,**kwds)
|
||||
DistributedBoardingParty.DistributedBoardingParty.postInvite=lambda newSelf,leaderId,inviterId: self.newPostInvite(newSelf,leaderId,inviterId)
|
||||
|
||||
def attack(self):
|
||||
try:
|
||||
for battle in base.cr.doFindAll('battle'):
|
||||
if vpMaxer.factoryAutoer.roomNum==len(vpMaxer.factoryAutoer.roomsNeeded):
|
||||
if len(battle.suits)>1:
|
||||
for suit in battle.suits:
|
||||
if suit.getName()!='Skelecog':
|
||||
attackSuit=suit
|
||||
else:
|
||||
attackSuit=battle.suits[0]
|
||||
else:
|
||||
attackSuit=battle.suits[0]
|
||||
|
||||
if vpMaxer.restock.noToonUp and not vpMaxer.restock.noLure:
|
||||
if vpMaxer.restock.firstTrack==2 and base.localAvatar.getHp()>(base.localAvatar.getMaxHp()*0.75):
|
||||
battle.sendUpdate('requestAttack', [vpMaxer.restock.firstTrack, vpMaxer.restock.desiredLevel1, attackSuit.doId])
|
||||
if base.localAvatar.getHp()>(base.localAvatar.getMaxHp()*0.75):
|
||||
battle.sendUpdate('requestAttack', [vpMaxer.restock.thirdTrack, vpMaxer.restock.desiredLevel3, attackSuit.doId])
|
||||
|
||||
elif vpMaxer.restock.noLure:
|
||||
if vpMaxer.restock.secondTrack==0 and base.localAvatar.getHp()<(base.localAvatar.getMaxHp()*0.75):
|
||||
battle.sendUpdate('requestAttack', [vpMaxer.restock.secondTrack, vpMaxer.restock.desiredLevel2, base.localAvatar.doId])
|
||||
if base.localAvatar.getHp()>(base.localAvatar.getMaxHp()*0.75):
|
||||
battle.sendUpdate('requestAttack', [vpMaxer.restock.thirdTrack, vpMaxer.restock.desiredLevel3, attackSuit.doId])
|
||||
|
||||
else:
|
||||
if base.localAvatar.inventory.inventory[vpMaxer.restock.firstTrack][vpMaxer.restock.desiredLevel1]>0:
|
||||
battle.sendUpdate('requestAttack', [vpMaxer.restock.firstTrack, vpMaxer.restock.desiredLevel1, attackSuit.doId])
|
||||
else:
|
||||
break
|
||||
|
||||
if base.localAvatar.getHp()<(base.localAvatar.getMaxHp()*0.5):
|
||||
|
||||
if base.localAvatar.inventory.inventory[vpMaxer.restock.secondTrack][vpMaxer.restock.desiredLevel2]>0:
|
||||
battle.sendUpdate('requestAttack', [vpMaxer.restock.secondTrack, vpMaxer.restock.desiredLevel2, base.localAvatar.doId])
|
||||
else:
|
||||
break
|
||||
|
||||
if base.localAvatar.inventory.inventory[vpMaxer.restock.thirdTrack][vpMaxer.restock.desiredLevel3]>0:
|
||||
battle.sendUpdate('requestAttack', [vpMaxer.restock.thirdTrack, vpMaxer.restock.desiredLevel3, attackSuit.doId])
|
||||
else:
|
||||
break
|
||||
|
||||
else:
|
||||
if base.localAvatar.inventory.inventory[vpMaxer.restock.thirdTrack][vpMaxer.restock.desiredLevel3]>0:
|
||||
battle.sendUpdate('requestAttack', [vpMaxer.restock.thirdTrack, vpMaxer.restock.desiredLevel3, attackSuit.doId])
|
||||
else:
|
||||
break
|
||||
except:
|
||||
pass
|
||||
|
||||
def sendUpdateHook(self, newself, fieldName, args=[], sendToId=None):
|
||||
if fieldName=="requestAttack":
|
||||
self.oldSendUpdate(newself,"requestAttack", args, sendToId)
|
||||
self.oldSendUpdate(newself,"movieDone",[])
|
||||
else:
|
||||
self.oldSendUpdate(newself,fieldName, args, sendToId)
|
||||
|
||||
def newGardensInit(self,*args):
|
||||
self.oldGardensInit(*args)
|
||||
if self.shouldContinue:
|
||||
vpMaxer.factoryAutoer.gainLaffSeq.finish()
|
||||
vpMaxer.factoryAutoer.attackSeq.finish()
|
||||
vpMaxer.restock.wasInBattle=False
|
||||
self.checkMerits()
|
||||
|
||||
def newSetAnimState(self,*args,**kwds):
|
||||
self.oldSetAnim(*args,**kwds)
|
||||
if self.canSetParentAgain and self.shouldContinue:
|
||||
base.localAvatar.d_setParent(1)
|
||||
self.canSetParentAgain=False
|
||||
Sequence(Wait(2),Func(self.doUnsetCanSetParentAgain)).start()
|
||||
|
||||
def doUnsetCanSetParentAgain(self):
|
||||
self.canSetParentAgain=True
|
||||
|
||||
def newEnterHealth(self,newSelf,hplevel):
|
||||
try:
|
||||
self.oldEnterHealth(newSelf,hplevel)
|
||||
newSelf.handleOk(base.localAvatar.getHp())
|
||||
newSelf.exit()
|
||||
if self.shouldContinue:
|
||||
Sequence(Wait(2),Func(self.checkMerits)).start()
|
||||
except:
|
||||
pass
|
||||
|
||||
def newSellbotInit(self,*args):
|
||||
self.oldSellbotInit(*args)
|
||||
if self.shouldContinue:
|
||||
self.walk()
|
||||
base.localAvatar.setWantBattles(False)
|
||||
Sequence(Wait(2),Func(self.checkMerits)).start()
|
||||
|
||||
def newPostInvite(self,newSelf,leaderId,inviterId):
|
||||
print('test')
|
||||
if leaderId==base.localAvatar.doId:
|
||||
newSelf.sendUpdate('requestAcceptInvite',[inviterId,leaderId])
|
||||
else:
|
||||
self.oldPostInvite(newSelf,leaderId,inviterId)
|
||||
|
||||
def checkMerits(self):
|
||||
# TTI Brought in a promotion button?
|
||||
if base.localAvatar.promotionStatus[3] == 1:
|
||||
base.localAvatar.promotionStatus[3] = 0
|
||||
base.localAvatar.sendUpdate('requestPromotion', [3])
|
||||
vpMaxer.autoerGui.display.newLine('Promoting')
|
||||
Sequence(Wait(1),Func(self.checkMerits)).start()
|
||||
return
|
||||
|
||||
if self.onlyFactory:
|
||||
base.localAvatar.cogMerits[3]=-4000
|
||||
if self.shouldEnd:
|
||||
self.shouldContinue=False
|
||||
base.localAvatar.setWantBattles(True)
|
||||
if self.haveJb():
|
||||
if self.shouldContinue:
|
||||
if self.getMeritsLeft()==0 and self.isSuitComplete() and not self.onlyFactory:
|
||||
if base.cr.doFind('DistributedCogHQDoor') and base.localAvatar.getZoneId()>=11000 and base.localAvatar.getZoneId()<11100:
|
||||
vpMaxer.vpAutoer.start()
|
||||
else:
|
||||
vpMaxer.restock.restock()
|
||||
vpMaxer.restock.collectLaff()
|
||||
self.walk()
|
||||
vpMaxer.autoerGui.display.newLine('Teleporting to Sellbot hq')
|
||||
Sequence(Wait(2),Func(self.teleBack)).start()
|
||||
else:
|
||||
if base.cr.doFind('DistributedCogHQDoor') and base.localAvatar.getZoneId()>=11000 and base.localAvatar.getZoneId()<11100:
|
||||
print('test')
|
||||
vpMaxer.factoryAutoer.goFactory()
|
||||
else:
|
||||
vpMaxer.restock.restock()
|
||||
vpMaxer.restock.collectLaff()
|
||||
self.walk()
|
||||
vpMaxer.autoerGui.display.newLine('Teleporting to Sellbot hq')
|
||||
Sequence(Wait(2),Func(self.teleBack)).start()
|
||||
else:
|
||||
#vpMaxer.restock.noToons.finish()
|
||||
try:
|
||||
base.cr.removeInterest(vpMaxer.restock.interest1)
|
||||
base.cr.removeInterest(vpMaxer.restock.interest2)
|
||||
vpMaxer.restock.unloaded=True
|
||||
except:
|
||||
pass
|
||||
base.localAvatar.setSystemMessage(1,"Thanks for using freshollie's VP maxer")
|
||||
vpMaxer.autoerGui.display.newLine("Stopped")
|
||||
vpMaxer.factoryAutoer.attackSeq.finish()
|
||||
else:
|
||||
vpMaxer.autoerGui.display.newLine('Out of jellybeans')
|
||||
base.localAvatar.setSystemMessage(0,'You have run out of jelly beans, please use the fishing code to gain some')
|
||||
|
||||
def getMeritsLeft(self):
|
||||
return CogDisguiseGlobals.getTotalMerits(base.localAvatar,3)-base.localAvatar.cogMerits[3]
|
||||
|
||||
def isSuitComplete(self):
|
||||
return base.localAvatar.cogParts[3] == CogDisguiseGlobals.PartsPerSuitBitmasks[3]
|
||||
|
||||
def walk(self):
|
||||
try:
|
||||
base.cr.playGame.getPlace().fsm.forceTransition('walk')
|
||||
except:
|
||||
pass
|
||||
|
||||
def teleBack(self,zone=11000):
|
||||
try:
|
||||
self.walk()
|
||||
base.cr.playGame.getPlace().handleBookCloseTeleport(zone, zone)
|
||||
except:
|
||||
pass
|
||||
|
||||
def onlyDoFactory(self):
|
||||
self.onlyFactory=True
|
||||
base.localAvatar.setSystemMessage(0,'The VP Maxer will do only factory runs')
|
||||
|
||||
def doBoth(self):
|
||||
self.onlyFactory=False
|
||||
base.localAvatar.setSystemMessage(0,'The VP Maxer will do both factories and VPs')
|
||||
|
||||
def haveJb(self):
|
||||
if base.localAvatar.cogLevels[0]==49:
|
||||
return True
|
||||
elif base.localAvatar.getTotalMoney()<100:
|
||||
return False
|
||||
else:
|
||||
return True
|
||||
|
||||
def setStop(self):
|
||||
self.shouldEnd=True
|
||||
base.localAvatar.setSystemMessage(1,"The Autoer will stop at the end of this run")
|
||||
vpMaxer.autoerGui.stopTimer()
|
||||
|
||||
def start(self):
|
||||
DistributedObject.DistributedObject.sendUpdate=lambda newself, fieldName, args=[], sendToId=None: self.sendUpdateHook(newself, fieldName, args, sendToId)
|
||||
self.shouldEnd=False
|
||||
self.shouldContinue=True
|
||||
self.bossCount=0
|
||||
vpMaxer.autoerGui.startTimer()
|
||||
emptyShardList=[]
|
||||
for shard in base.cr.activeDistrictMap:
|
||||
if base.cr.activeDistrictMap[shard].avatarCount<30:
|
||||
emptyShardList.append(shard)
|
||||
if emptyShardList==[]:
|
||||
emptyShardList=[650000000, 754000000, 608000000, 756000000, 658000000, 712000000, 360000000, 410000000, 620000000, 454000000, 726000000, 362000000, 688000000, 316000000]
|
||||
if base.localAvatar.defaultShard not in emptyShardList:
|
||||
vpMaxer.autoerGui.display.newLine('TPing to an empty district')
|
||||
base.cr.playGame.getPlace().requestTeleport(11000,11000,random.choice(emptyShardList),None)
|
||||
else:
|
||||
self.checkMerits()
|
||||
#vpMaxer.restock.noToons.loop()
|
||||
|
||||
def revertFunctions(self):
|
||||
LocalToon.LocalToon.setAnimState=self.oldSetAnim
|
||||
DGPlayground.DGPlayground.__init__=self.oldGardensInit
|
||||
SellbotHQExterior.SellbotHQExterior.__init__=self.oldSellbotInit
|
||||
DistributedObject.DistributedObject.sendUpdate=self.oldSendUpdate
|
||||
HealthForceAcknowledge.HealthForceAcknowledge.enter=self.oldEnterHealth
|
||||
DistributedBoardingParty.DistributedBoardingParty.postInvite=self.oldPostInvite
|
||||
|
||||
class VpAutoer:
|
||||
oldBossEnterElevator=DistributedSellbotBoss.DistributedSellbotBoss.enterElevator
|
||||
oldEnterBattleThree=DistributedSellbotBoss.DistributedSellbotBoss.enterBattleThree
|
||||
oldEnterPrepareBattleTwo=DistributedSellbotBoss.DistributedSellbotBoss.enterPrepareBattleTwo
|
||||
oldEnterPrepareBattleThree=DistributedSellbotBoss.DistributedSellbotBoss.enterPrepareBattleThree
|
||||
oldEnterEpilogue=DistributedSellbotBoss.DistributedSellbotBoss.enterEpilogue
|
||||
oldEnterRollToBattleTwo=DistributedSellbotBoss.DistributedSellbotBoss.enterRollToBattleTwo
|
||||
oldEnterWaitForInput=DistributedBattleFinal.DistributedBattleFinal.enterWaitForInput
|
||||
oldBossEnterIntro=DistributedSellbotBoss.DistributedSellbotBoss.enterIntroduction
|
||||
oldAvatarExit=DistributedCogHQDoor.DistributedCogHQDoor.avatarExit
|
||||
oldEnterWalk=CogHQLobby.CogHQLobby.enterWalk
|
||||
|
||||
def __init__(self):
|
||||
self.filter=False
|
||||
self.cardsWanted=['Flippy','Barnacle Bessie','Lil Oldman','Professor Pete','Stinky Ned','Daffy Don','Moe Zart','Sid Sonata','Franz Neckvein']
|
||||
|
||||
DistributedSellbotBoss.DistributedSellbotBoss.enterElevator=lambda newSelf: self.newBossEnterElevator(newSelf)
|
||||
DistributedSellbotBoss.DistributedSellbotBoss.enterIntroduction=lambda newSelf,*args: self.newBossEnterIntro(newSelf,*args)
|
||||
DistributedSellbotBoss.DistributedSellbotBoss.enterRollToBattleTwo=lambda newSelf: self.newEnterRollToBattleTwo(newSelf)
|
||||
DistributedSellbotBoss.DistributedSellbotBoss.enterBattleThree=lambda newSelf: self.newEnterBattleThree(newSelf)
|
||||
DistributedBattleFinal.DistributedBattleFinal.enterWaitForInput=lambda *args: self.newEnterWaitForInput(*args)
|
||||
DistributedCogHQDoor.DistributedCogHQDoor.avatarExit=lambda newSelf,id: self.newAvatarExit(newSelf,id)
|
||||
CogHQLobby.CogHQLobby.enterWalk=lambda newSelf,*args,**kwds: self.newEnterWalk(newSelf,*args,**kwds)
|
||||
DistributedSellbotBoss.DistributedSellbotBoss.enterPrepareBattleThree=lambda newSelf: self.newEnterPrepareBattleThree(newSelf)
|
||||
DistributedSellbotBoss.DistributedSellbotBoss.enterPrepareBattleTwo=lambda newSelf: self.newEnterPrepareBattleTwo(newSelf)
|
||||
DistributedSellbotBoss.DistributedSellbotBoss.enterEpilogue=lambda newSelf: self.newEnterEpilogue(newSelf)
|
||||
|
||||
def newBossEnterElevator(self,newSelf):
|
||||
self.oldBossEnterElevator(newSelf)
|
||||
if vpMaxer.otherFunctions.shouldContinue:
|
||||
vpMaxer.autoerGui.display.newLine('Skipping Elevator')
|
||||
newSelf._DistributedBossCog__doneElevator()
|
||||
|
||||
def newBossEnterIntro(self,newSelf,*args):
|
||||
self.oldBossEnterIntro(newSelf,*args)
|
||||
if vpMaxer.otherFunctions.shouldContinue:
|
||||
if self.cardFilter():
|
||||
newSelf.exitIntroduction()
|
||||
vpMaxer.autoerGui.display.newLine('Skipping VP introduction')
|
||||
else:
|
||||
vpMaxer.autoerGui.display.newLine('Card not in wanted cards')
|
||||
vpMaxer.autoerGui.display.newLine('Restarting the VP')
|
||||
Sequence(Wait(2),Func(vpMaxer.otherFunctions.teleBack)).start()
|
||||
|
||||
def newEnterEpilogue(self,newSelf):
|
||||
self.oldEnterEpilogue(newSelf)
|
||||
if vpMaxer.otherFunctions.shouldContinue:
|
||||
vpMaxer.otherFunctions.bossCount+=1
|
||||
vpMaxer.otherFunctions.teleBack()
|
||||
vpMaxer.autoerGui.display.newLine('Finished VP')
|
||||
|
||||
def newEnterRollToBattleTwo(self,newSelf):
|
||||
self.oldEnterRollToBattleTwo(newSelf)
|
||||
if vpMaxer.otherFunctions.shouldContinue:
|
||||
newSelf.exitRollToBattleTwo()
|
||||
vpMaxer.autoerGui.display.newLine('Skipping cutscene')
|
||||
|
||||
def newEnterPrepareBattleTwo(self,newSelf):
|
||||
self.oldEnterPrepareBattleTwo(newSelf)
|
||||
if vpMaxer.otherFunctions.shouldContinue:
|
||||
newSelf._DistributedSellbotBoss__onToBattleTwo(33)
|
||||
vpMaxer.autoerGui.display.newLine('Skipping dialogue 1')
|
||||
|
||||
def newEnterPrepareBattleThree(self,newSelf):
|
||||
self.oldEnterPrepareBattleThree(newSelf)
|
||||
if vpMaxer.otherFunctions.shouldContinue:
|
||||
newSelf._DistributedSellbotBoss__onToBattleThree(33)
|
||||
vpMaxer.autoerGui.display.newLine('Skipping dialogue 2')
|
||||
|
||||
def newEnterBattleThree(self,newSelf):
|
||||
self.oldEnterBattleThree(newSelf)
|
||||
if vpMaxer.otherFunctions.shouldContinue:
|
||||
self.endBattle()
|
||||
vpMaxer.autoerGui.display.newLine('Completing pie round')
|
||||
|
||||
def newEnterWaitForInput(self,*args):
|
||||
self.oldEnterWaitForInput(*args)
|
||||
if vpMaxer.otherFunctions.shouldContinue:
|
||||
self.exploit()
|
||||
vpMaxer.autoerGui.display.newLine('Skipping Battle')
|
||||
|
||||
def newEnterWalk(self,newSelf,*args,**kwds):
|
||||
self.oldEnterWalk(newSelf,*args,**kwds)
|
||||
if len(args)>0:
|
||||
if vpMaxer.otherFunctions.shouldContinue and args[0]:
|
||||
self.goVpBattle()
|
||||
|
||||
|
||||
def newAvatarExit(self,newSelf,id):
|
||||
self.oldAvatarExit(newSelf,id)
|
||||
if base.cr.doFind('Elevator') and id==base.localAvatar.doId and vpMaxer.otherFunctions.shouldContinue:
|
||||
self.goVpBattle()
|
||||
|
||||
def goVpBattle(self):
|
||||
vpMaxer.otherFunctions.walk()
|
||||
vpMaxer.autoerGui.display.newLine('Heading to VP')
|
||||
base.localAvatar.setWantBattles(True)
|
||||
base.cr.doFind('Boarding').sendUpdate('requestLeave',[base.localAvatar.doId])
|
||||
base.cr.doFind('Boarding').sendUpdate('requestInvite',[base.localAvatar.doId])
|
||||
base.cr.doFind('Boarding').sendUpdate('requestGoToSecondTime',[base.cr.doFind('Elevator').doId])
|
||||
|
||||
def destroyBattle(self):
|
||||
base.cr.doFind('V. P').sendUpdate('skipBattleCheat')
|
||||
|
||||
def filterOn(self):
|
||||
self.filter=True
|
||||
self.cardsWanted=['Flippy','Barnacle Bessie','Lil Oldman','Professor Pete','Stinky Ned','Daffy Don','Moe Zart','Sid Sonata','Franz Neckvein']
|
||||
base.localAvatar.setSystemMessage(0,'The VP Maxer will filter bad cards')
|
||||
|
||||
def filterOn16(self):
|
||||
self.filter=True
|
||||
self.cardsWanted=['Flippy', 'Daffy Don', 'Clerk Clara', 'Clerk Penny', 'Lil Oldman', 'Stinky Ned', 'Moe Zart', 'Sid Sonata', 'Barnacle Bessie',\
|
||||
'Franz Neckvein', 'Madam Chuckle', 'Clerk Will', 'Nancy Gas', 'Mr. Freeze', 'Professor Pete', 'Soggy Nell']
|
||||
base.localAvatar.setSystemMessage(0,'The VP Maxer will filter for 16 cards')
|
||||
|
||||
def filterOff(self):
|
||||
self.filter=False
|
||||
base.localAvatar.setSystemMessage(0,'The VP Maxer will not filter bad cards')
|
||||
|
||||
def exploit(self):
|
||||
Sequence(Func(self.destroyBattle), Wait(.5), Func(vpMaxer.otherFunctions.walk)).start()
|
||||
|
||||
def endBattle(self):
|
||||
if base.cr.doFind('V. P'):
|
||||
base.cr.doFind('V. P').sendUpdate('hitBossInsides')
|
||||
base.cr.doFind('V. P').sendUpdate('hitBoss', [100])
|
||||
base.cr.doFind('V. P').sendUpdate('finalPieSplat')
|
||||
|
||||
def start(self):
|
||||
if vpMaxer.otherFunctions.isMember:
|
||||
base.localAvatar.collisionsOff()
|
||||
vpMaxer.autoerGui.display.newLine('Starting Vice President')
|
||||
vpMaxer.autoerGui.display.newLine('Entering Lobby')
|
||||
base.cr.doFind('DistributedCogHQDoor').sendUpdate('requestEnter')
|
||||
else:
|
||||
vpMaxer.otherFunctions.walk()
|
||||
vpMaxer.autoerGui.display.newLine('Starting Vice President')
|
||||
vpMaxer.autoerGui.display.newLine('Teleporting to lobby')
|
||||
base.cr.playGame.getPlace().requestTeleport(11000,11100,None,None)
|
||||
|
||||
def cardFilter(self):
|
||||
if base.cr.doFind('V. P').cagedToon.getName() in self.cardsWanted or not self.filter:
|
||||
return True
|
||||
else:
|
||||
return False
|
||||
|
||||
def revertFunctions(self):
|
||||
DistributedSellbotBoss.DistributedSellbotBoss.enterElevator=self.oldBossEnterElevator
|
||||
DistributedSellbotBoss.DistributedSellbotBoss.enterBattleThree=self.oldEnterBattleThree
|
||||
DistributedSellbotBoss.DistributedSellbotBoss.enterPrepareBattleTwo=self.oldEnterPrepareBattleTwo
|
||||
DistributedSellbotBoss.DistributedSellbotBoss.enterPrepareBattleThree=self.oldEnterPrepareBattleThree
|
||||
DistributedSellbotBoss.DistributedSellbotBoss.enterEpilogue=self.oldEnterEpilogue
|
||||
DistributedSellbotBoss.DistributedSellbotBoss.enterRollToBattleTwo=self.oldEnterRollToBattleTwo
|
||||
DistributedBattleFinal.DistributedBattleFinal.enterWaitForInput=self.oldEnterWaitForInput
|
||||
DistributedSellbotBoss.DistributedSellbotBoss.enterIntroduction=self.oldBossEnterIntro
|
||||
DistributedCogHQDoor.DistributedCogHQDoor.avatarExit=self.oldAvatarExit
|
||||
CogHQLobby.CogHQLobby.enterWalk=self.oldEnterWalk
|
||||
|
||||
class FactoryAutoer:
|
||||
oldFactoryInit=FactoryExterior.FactoryExterior.__init__
|
||||
oldDistributedFactoryInit=DistributedFactory.DistributedFactory.__init__
|
||||
oldEnterReward=DistributedBattleFactory.DistributedBattleFactory.enterReward
|
||||
oldExitReward=DistributedBattleFactory.DistributedBattleFactory.exitReward
|
||||
oldEnterFactoryReward=DistributedBattleFactory.DistributedBattleFactory.enterFactoryReward
|
||||
|
||||
def __init__(self,vpMaxer):
|
||||
self.roomNum=0
|
||||
self.zones=[4,7,8,13,22,24,34,32]
|
||||
self.roomValues=[28,36,32,56,32,40,80,56]
|
||||
self.gainLaffSeq=Sequence(Func(vpMaxer.restock.gainLaff),Wait(3.0))
|
||||
self.attackSeq=Sequence(Func(vpMaxer.restock.restock),Wait(1.0),Func(vpMaxer.otherFunctions.attack),Wait(1.0))
|
||||
|
||||
FactoryExterior.FactoryExterior.__init__=lambda *args: self.newFactoryInit(*args)
|
||||
DistributedFactory.DistributedFactory.__init__=lambda *args: self.newDistributedFactoryInit(*args)
|
||||
DistributedBattleFactory.DistributedBattleFactory.enterReward=lambda newSelf,*args:self.newEnterReward(newSelf,*args)
|
||||
#DistributedBattleFactory.DistributedBattleFactory.exitReward=lambda newSelf,*args, **kwds:self.newExitReward(newSelf,*args,**kwds)
|
||||
base.cr.doFind('SafeZone').d_enterSafeZone=lambda *args: self.newSafeZone(*args)
|
||||
base.localAvatar.died=lambda *args: self.newSafeZone(*args)
|
||||
DistributedBattleFactory.DistributedBattleFactory.d_toonDied=lambda *args: self.newSafeZone(*args)
|
||||
DistributedBattleFactory.DistributedBattleFactory.enterFactoryReward=lambda newSelf,*args:self.newEnterFactoryReward(newSelf,*args)
|
||||
|
||||
def enterBattle(self):
|
||||
if base.localAvatar.getHp()>0:
|
||||
if base.cr.doFindAll('battle')==[]:
|
||||
battles = []
|
||||
cogList = base.cr.doFindAll("render")
|
||||
for x in cogList:
|
||||
if isinstance(x, DistributedFactorySuit) or isinstance(x, DistributedSuit):
|
||||
if x.activeState == 6:
|
||||
battles.append(x)
|
||||
try:
|
||||
if battles != []:
|
||||
battle=battles[0]
|
||||
pos, hpr = battle.getPos(), battle.getHpr()
|
||||
vpMaxer.otherFunctions.walk()
|
||||
vpMaxer.restock.wasInBattle=False
|
||||
base.localAvatar.collisionsOn()
|
||||
base.localAvatar.setPosHpr(pos, hpr)
|
||||
battle.d_requestBattle(pos, hpr)
|
||||
return True
|
||||
else:
|
||||
self.warpToZone(self.roomsNeeded[self.roomNum])
|
||||
return False
|
||||
except:
|
||||
return False
|
||||
else:
|
||||
return False
|
||||
else:
|
||||
return False
|
||||
|
||||
def newExitReward(self, newself, *args, **kwds):
|
||||
returnValue = self.oldExitReward(newSelf, *args,**kwds)
|
||||
'''
|
||||
if self.roomNum>=len(self.roomsNeeded):
|
||||
self.attackSeq.finish()
|
||||
self.gainLaffSeq.finish()
|
||||
self.generateAgain()
|
||||
vpMaxer.autoerGui.display.newLine('Error in completing factory')
|
||||
vpMaxer.autoerGui.display.newLine('No merits Recieved')
|
||||
Sequence(Wait(1),Func(vpMaxer.otherFunctions.walk),Func(vpMaxer.otherFunctions.teleBack)).start()
|
||||
|
||||
else:
|
||||
#vpMaxer.otherFunctions.walk()
|
||||
Sequence(Wait(1), Func(self.newBattle)).start()
|
||||
pass
|
||||
''',
|
||||
return returnValue
|
||||
|
||||
def newEnterReward(self,newSelf,*args):
|
||||
|
||||
if vpMaxer.otherFunctions.shouldContinue:
|
||||
newSelf._DistributedLevelBattle__handleFloorRewardDone()
|
||||
newSelf.d_rewardDone(base.localAvatar.doId)
|
||||
vpMaxer.otherFunctions.walk()
|
||||
vpMaxer.autoerGui.display.newLine('Finished Factory Battle '+str(self.roomNum))
|
||||
if self.roomNum>=len(self.roomsNeeded):
|
||||
self.attackSeq.finish()
|
||||
self.gainLaffSeq.finish()
|
||||
self.generateAgain()
|
||||
vpMaxer.autoerGui.display.newLine('Error in completing factory')
|
||||
vpMaxer.autoerGui.display.newLine('No merits Recieved')
|
||||
Sequence(Wait(1),Func(vpMaxer.otherFunctions.walk),Func(vpMaxer.otherFunctions.teleBack)).start()
|
||||
else:
|
||||
Sequence(Wait(5),Func(self.enterBattle)).start()
|
||||
|
||||
def newEnterFactoryReward(self,newSelf,*args):
|
||||
self.oldEnterFactoryReward(newSelf,*args)
|
||||
if vpMaxer.otherFunctions.shouldContinue:
|
||||
newSelf._DistributedBattleFactory__handleFactoryRewardDone()
|
||||
self.attackSeq.finish()
|
||||
self.gainLaffSeq.finish()
|
||||
self.generateAgain()
|
||||
vpMaxer.autoerGui.display.newLine('Completed Factory')
|
||||
Sequence(Wait(1),Func(vpMaxer.otherFunctions.walk),Func(vpMaxer.otherFunctions.teleBack)).start()
|
||||
|
||||
def newFactoryInit(self,*args):
|
||||
self.oldFactoryInit(*args)
|
||||
if vpMaxer.otherFunctions.shouldContinue:
|
||||
Sequence(Wait(2),Func(self.enterElevator)).start()
|
||||
|
||||
def newDistributedFactoryInit(self,*args):
|
||||
self.oldDistributedFactoryInit(*args)
|
||||
if vpMaxer.otherFunctions.shouldContinue:
|
||||
vpMaxer.otherFunctions.walk()
|
||||
self.attackSeq.loop()
|
||||
self.gainLaffSeq.loop()
|
||||
self.roomNum=0
|
||||
self.workOutRoomsNeeded()
|
||||
vpMaxer.autoerGui.display.newLine('Entering Factory')
|
||||
Sequence(Wait(2),Func(self.warpToZone,self.roomsNeeded[self.roomNum])).start()
|
||||
|
||||
def workOutRoomsNeeded(self):
|
||||
self.roomsNeeded=[]
|
||||
meritsNeeded=vpMaxer.otherFunctions.getMeritsLeft()
|
||||
meritsNeeded-=self.roomValues[-1]
|
||||
for i in range(7):
|
||||
if meritsNeeded>0:
|
||||
self.roomsNeeded.append(self.zones[i])
|
||||
meritsNeeded-=self.roomValues[i]
|
||||
else:
|
||||
break
|
||||
self.roomsNeeded.append(self.zones[-1])
|
||||
|
||||
def warpToZone(self,zone):
|
||||
for factory in base.cr.doFindAll('Factory'):
|
||||
if hasattr(factory, 'warpToZone'):
|
||||
factory.warpToZone(zone)
|
||||
vpMaxer.autoerGui.display.newLine('Warping to Room '+str(self.roomNum+1))
|
||||
self.roomNum+=1
|
||||
break
|
||||
Sequence(Wait(1),Func(self.enterBattle)).start()
|
||||
|
||||
def newSafeZone(self,*args):
|
||||
Sequence(Wait(1),Func(vpMaxer.otherFunctions.walk),Func(base.localAvatar.collisionsOff)).start()
|
||||
base.cr.doFind('SafeZone').sendUpdate('enterSafeZone')
|
||||
vpMaxer.restock.wasInBattle=True
|
||||
vpMaxer.autoerGui.display.newLine('Died, recovering')
|
||||
|
||||
def preTele(self):
|
||||
DistributedTrolley.DistributedTrolley.__init__ = newInit
|
||||
DistributedPartyGate.DistributedPartyGate.__init__ = newInit
|
||||
DistributedDoor.DistributedDoor.__init__ = newInit
|
||||
base.localAvatar.stopLookAroundNow()
|
||||
|
||||
def generateAgain(self):
|
||||
DistributedTrolley.DistributedTrolley.__init__ = oldTrolleyInit
|
||||
DistributedPartyGate.DistributedPartyGate.__init__ = oldPartyInit
|
||||
DistributedDoor.DistributedDoor.__init__ = oldDoorInit
|
||||
base.localAvatar.findSomethingToLookAt = vpMaxer.restock.oldFindSomethingToLookAt
|
||||
ToonHead.ToonHead._ToonHead__lookAround = vpMaxer.restock.oldLookAround
|
||||
|
||||
def goFactory(self):
|
||||
vpMaxer.otherFunctions.walk()
|
||||
base.localAvatar.setWantBattles(True)
|
||||
vpMaxer.autoerGui.display.newLine('Heading to the factory')
|
||||
base.localAvatar.setPos(167.151, -157.024, -0.64781)
|
||||
|
||||
def enterElevator(self):
|
||||
for elevator in base.cr.doFindAll("Elevator"):
|
||||
if elevator.getDestName()=='Front Entrance':
|
||||
vpMaxer.otherFunctions.walk()
|
||||
base.localAvatar.collisionsOff()
|
||||
vpMaxer.autoerGui.display.newLine('Teleporting to Factory')
|
||||
base.cr.doFind('Boarding').sendUpdate('requestLeave',[base.localAvatar.doId])
|
||||
base.cr.doFind('Boarding').sendUpdate('requestInvite',[base.localAvatar.doId])
|
||||
base.cr.doFind('Boarding').sendUpdate('requestGoToSecondTime',[elevator.doId])
|
||||
return
|
||||
|
||||
def revertFunctions(self):
|
||||
FactoryExterior.FactoryExterior.__init__=self.oldFactoryInit
|
||||
DistributedFactory.DistributedFactory.__init__=self.oldDistributedFactoryInit
|
||||
DistributedBattleFactory.DistributedBattleFactory.enterReward=self.oldEnterReward
|
||||
DistributedBattleFactory.DistributedBattleFactory.enterFactoryReward=self.oldEnterFactoryReward
|
||||
base.cr.doFind('SafeZone').d_enterSafeZone=lambda *args: None
|
||||
base.localAvatar.died=lambda *args: None
|
||||
DistributedBattleFactory.DistributedBattleFactory.d_toonDied=lambda *args: None
|
||||
self.generateAgain()
|
||||
|
||||
class VPMaxer:
|
||||
def __init__(self):
|
||||
self.restock=restock()
|
||||
self.otherFunctions=OtherFunctions()
|
||||
self.vpAutoer=VpAutoer()
|
||||
self.factoryAutoer=FactoryAutoer(self)
|
||||
self.autoerGui=AutoerGui('VP Maxer',['Run Time',"Number of VP's","VP's/Hour",'Suit','Merits needed'],\
|
||||
['self.formattedTime','str(vpMaxer.otherFunctions.bossCount)',\
|
||||
'str(self.workOutNumberAnHour(vpMaxer.otherFunctions.bossCount))',\
|
||||
'str(vpMaxer.otherFunctions.numberToSuit[base.localAvatar.cogTypes[3]])+" lvl "+str(base.localAvatar.cogLevels[3]+1)','str(vpMaxer.otherFunctions.getMeritsLeft())'],\
|
||||
'VP MXR','sell')
|
||||
|
||||
def revert(self):
|
||||
self.restock.revertFunctions()
|
||||
self.factoryAutoer.revertFunctions()
|
||||
self.vpAutoer.revertFunctions()
|
||||
self.otherFunctions.revertFunctions()
|
||||
self.autoerGui.destroy()
|
||||
DistributedNPCFisherman.DistributedNPCFisherman.handleCollisionSphereEnter=oldHandleEnterCollisionSphereFisherman
|
||||
DistributedNPCPartyPerson.DistributedNPCPartyPerson.handleCollisionSphereEnter=oldHandleEnterCollisionSphereParty
|
||||
DistributedNPCFisherman.DistributedNPCFisherman.announceGenerate=oldFisherAnnounceGenerate
|
||||
DistributedNPCFisherman.DistributedNPCFisherman.initToonState=oldFishermanInitToonState
|
||||
DistributedNPCPartyPerson.DistributedNPCPartyPerson.announceGenerate=oldPartyPlannerAnnounceGenerate
|
||||
|
||||
global vpMaxer
|
||||
vpMaxer=VPMaxer()
|
||||
|
|
@ -0,0 +1,783 @@
|
|||
import __main__
|
||||
import random
|
||||
from direct.interval.IntervalGlobal import *
|
||||
from direct.distributed import DistributedObject
|
||||
from toontown.toonbase import ToontownBattleGlobals
|
||||
from toontown.toon import *
|
||||
from toontown.coghq import *
|
||||
from toontown.distributed import ToontownClientRepository
|
||||
from toontown.battle import DistributedBattle
|
||||
from toontown.battle import DistributedBattleFinal
|
||||
from toontown.suit.DistributedFactorySuit import DistributedFactorySuit
|
||||
from toontown.suit import DistributedSuit
|
||||
from toontown.suit import DistributedSellbotBoss
|
||||
from toontown.building import DistributedDoor
|
||||
from toontown.building import DistributedBoardingParty
|
||||
|
||||
ToontownBattleGlobals.SkipMovie=1
|
||||
ToontownClientRepository.ToontownClientRepository.forbidCheesyEffects=lambda *x,**kwds: None
|
||||
|
||||
faceOffHook = lambda self, ts, name, callback:self.d_faceOffDone(self)
|
||||
DistributedBattleFactory.DistributedBattleFactory._DistributedLevelBattle__faceOff = faceOffHook
|
||||
DistributedBattle.DistributedBattle._DistributedBattle__faceOff = faceOffHook
|
||||
|
||||
oldHandleEnterCollisionSphereParty=DistributedNPCPartyPerson.DistributedNPCPartyPerson.handleCollisionSphereEnter
|
||||
DistributedNPCPartyPerson.DistributedNPCPartyPerson.handleCollisionSphereEnter=lambda *args: None
|
||||
oldHandleEnterCollisionSphereFisherman=DistributedNPCFisherman.DistributedNPCFisherman.handleCollisionSphereEnter
|
||||
DistributedNPCFisherman.DistributedNPCFisherman.handleEnterCollisionSphere=lambda *args: None
|
||||
|
||||
def newInit(self, cr):
|
||||
for obj in dir(self):
|
||||
exec('self.%s = lambda *x:None' % obj, globals(), locals())
|
||||
return None
|
||||
|
||||
class restock:
|
||||
|
||||
def __init__(self):
|
||||
if not base.localAvatar.getTrackAccess()[0] or base.localAvatar.experience.getExpLevel(0)<4:
|
||||
self.noToonUp=True
|
||||
self.secondTrack=4
|
||||
self.desiredLevel2=5
|
||||
else:
|
||||
self.noToonUp=False
|
||||
self.secondTrack=0
|
||||
self.desiredLevel2=4
|
||||
|
||||
if not base.localAvatar.getTrackAccess()[2] or base.localAvatar.experience.getExpLevel(2)<5:
|
||||
self.noLure=True
|
||||
self.firstTrack=4
|
||||
self.desiredLevel1=5
|
||||
else:
|
||||
self.noLure=False
|
||||
self.firstTrack=2
|
||||
self.desiredLevel1=5
|
||||
|
||||
self.thirdTrack=4
|
||||
self.desiredLevel3=5
|
||||
self.createInventory()
|
||||
self.maxCarryGags = base.localAvatar.getMaxCarry()
|
||||
self.gagshop_zoneId = 4503
|
||||
self.noToons=Sequence(Func(self.removeToons), Wait(1.5))
|
||||
self.noTrolley=False
|
||||
self.unloaded=True
|
||||
self.wasInBattle=False
|
||||
|
||||
self.lookAroundHookSeq = Sequence(Func(self.lookAroundHookFunc), Wait(2.5))
|
||||
self.lookAroundHookSeq.loop()
|
||||
ToonHead.ToonHead._ToonHead__lookAround = lambda *x:None
|
||||
|
||||
def createInventory(self):
|
||||
self.desiredInv=""
|
||||
if self.desiredLevel1==6:
|
||||
self.desiredLevel1=5
|
||||
|
||||
if self.desiredLevel2==6:
|
||||
self.desiredLevel2=5
|
||||
|
||||
for i in range(49):
|
||||
if i==((self.firstTrack*7)+self.desiredLevel1):
|
||||
if self.firstTrack==1:
|
||||
self.desiredInv+="\x02"
|
||||
elif self.desiredLevel1>3:
|
||||
self.desiredInv+="\x02"
|
||||
else:
|
||||
self.desiredInv+="\x04"
|
||||
elif i==((self.secondTrack*7)+self.desiredLevel2):
|
||||
if self.secondTrack==1:
|
||||
self.desiredInv+="\x02"
|
||||
elif self.desiredLevel2>3:
|
||||
self.desiredInv+="\x02"
|
||||
else:
|
||||
self.desiredInv+="\x04"
|
||||
elif i==((self.thirdTrack*7)+self.desiredLevel3):
|
||||
if self.thirdTrack==1:
|
||||
self.desiredInv+="\x02"
|
||||
elif self.desiredLevel3>3:
|
||||
self.desiredInv+="\x02"
|
||||
else:
|
||||
self.desiredInv+="\x04"
|
||||
else:
|
||||
self.desiredInv+="\x00"
|
||||
|
||||
def lookAroundHookFunc(self):
|
||||
if hasattr(base, 'localAvatar'):
|
||||
base.localAvatar.findSomethingToLookAt = lambda *x:None
|
||||
self.oldFindSomethingToLookAt = base.localAvatar.findSomethingToLookAt
|
||||
self.lookAroundHookSeq.finish()
|
||||
self.oldLookAround = ToonHead.ToonHead._ToonHead__lookAround
|
||||
|
||||
def collectLaff(self):
|
||||
for treasure in base.cr.doFindAll('Treasure'):
|
||||
treasure.d_requestGrab()
|
||||
|
||||
def removeToons(self):
|
||||
for x in base.cr.doFindAll('Fisherman'):
|
||||
try:
|
||||
if x.zoneId != base.localAvatar.zoneId:
|
||||
x.removeNode()
|
||||
x.nametag.unmanage(base.marginManager)
|
||||
except:
|
||||
pass
|
||||
|
||||
for x in base.cr.doFindAll('Party Planner'):
|
||||
try:
|
||||
if x.zoneId != base.localAvatar.zoneId:
|
||||
x.removeNode()
|
||||
x.nametag.unmanage(base.marginManager)
|
||||
except:
|
||||
pass
|
||||
|
||||
for x in base.cr.doFindAll('render/donald'):
|
||||
try:
|
||||
if x.zoneId != base.localAvatar.zoneId:
|
||||
x.removeNode()
|
||||
x.nametag.unmanage(base.marginManager)
|
||||
except:
|
||||
pass
|
||||
|
||||
for x in base.cr.doFindAll('render/minnie'):
|
||||
try:
|
||||
if x.zoneId != base.localAvatar.zoneId:
|
||||
x.removeNode()
|
||||
x.nametag.unmanage(base.marginManager)
|
||||
except:
|
||||
pass
|
||||
|
||||
for x in base.cr.doFindAll('render/mickey'):
|
||||
try:
|
||||
if x.zoneId != base.localAvatar.zoneId:
|
||||
x.removeNode()
|
||||
x.nametag.unmanage(base.marginManager)
|
||||
except:
|
||||
pass
|
||||
|
||||
for x in base.cr.doFindAll('render/pluto'):
|
||||
try:
|
||||
if x.zoneId != base.localAvatar.zoneId:
|
||||
x.removeNode()
|
||||
x.nametag.unmanage(base.marginManager)
|
||||
except:
|
||||
pass
|
||||
|
||||
for x in base.cr.doFindAll('render/daisy'):
|
||||
try:
|
||||
if x.zoneId != base.localAvatar.zoneId:
|
||||
x.removeNode()
|
||||
x.nametag.unmanage(base.marginManager)
|
||||
except:
|
||||
pass
|
||||
|
||||
for x in base.localAvatar.getNearbyPlayers(100000000000000, False):
|
||||
try:
|
||||
y = base.cr.doId2do.get(x)
|
||||
if y.zoneId != base.localAvatar.zoneId:
|
||||
y.removeNode()
|
||||
y.nametag.unmanage(base.marginManager)
|
||||
except:
|
||||
pass
|
||||
|
||||
for x in base.cr.doFindAll('Butterfly'):
|
||||
x.butterflyNode.remove()
|
||||
|
||||
for x in base.cr.doFindAll('Flower'):
|
||||
x.bigFlower.removeNode()
|
||||
|
||||
for x in base.cr.doFindAll('Treasure'):
|
||||
x.setPosition(0, 0, 8**8)
|
||||
|
||||
for x in base.cr.doFindAll('render/DistributedFishingTarget'):
|
||||
x.bubbles.removeNode()
|
||||
x.removeNode()
|
||||
|
||||
def gainLaff(self):
|
||||
if base.localAvatar.getHp()!=base.localAvatar.getMaxHp():
|
||||
if self.unloaded:
|
||||
vpMaxer.factoryAutoer.preTele()
|
||||
self.interest1=base.cr.addInterest(base.localAvatar.defaultShard, 9000, description='5', event=None)
|
||||
self.interest2=base.cr.addInterest(base.localAvatar.defaultShard, 3000, description='5', event=None)
|
||||
self.unloaded=False
|
||||
self.collectLaff()
|
||||
if self.wasInBattle:
|
||||
vpMaxer.factoryAutoer.enterBattle()
|
||||
|
||||
def loadGagshop(self):
|
||||
if not base.cr.doFind('Clerk'):
|
||||
self.contextId = base.cr.addInterest(base.localAvatar.defaultShard, self.gagshop_zoneId, description='4', event=None)
|
||||
try:
|
||||
if not int(render.find('**/*gagShop_interior_english*').getZ()) == 8**8:
|
||||
render.find('**/*gagShop_interior_english*').setZ(8**8)
|
||||
for k in base.cr.doFindAll('Clerk'):
|
||||
k.nametag.unmanage(base.marginManager)
|
||||
except:
|
||||
pass
|
||||
|
||||
def buyGags(self):
|
||||
desiredInv=self.desiredInv
|
||||
try:
|
||||
maxCarryGags = base.localAvatar.getMaxCarry()
|
||||
if base.cr.doFind('Clerk'):
|
||||
num_gags = 0
|
||||
for inventory_number in base.localAvatar.inventory.makeFromNetString(desiredInv):
|
||||
for k in inventory_number[:-1]:
|
||||
num_gags += k
|
||||
change = base.localAvatar.getMoney() - num_gags
|
||||
oldString = base.localAvatar.inventory.makeNetString()
|
||||
newString = desiredInv[:6] + oldString[6] + desiredInv[7:13] + oldString[13] + desiredInv[14:20] + oldString[20] + desiredInv[21:27] + oldString[27] + desiredInv[28:34] + oldString[34] + desiredInv[35:41] + oldString[41] + desiredInv[42:48] + oldString[48]
|
||||
for clerk in base.cr.doFindAll('Clerk'):
|
||||
clerk.setMovie=lambda *args,**kwds: None
|
||||
clerk.freeAvatar=lambda *args: None
|
||||
clerk.sendUpdate('avatarEnter')
|
||||
clerk.sendUpdate('setInventory', [newString, change, 1])
|
||||
|
||||
money = base.localAvatar.getMoney()
|
||||
maxMoney = base.localAvatar.getMaxMoney()
|
||||
base.cr.bankManager.d_transferMoney(money - maxMoney)
|
||||
except:
|
||||
pass
|
||||
|
||||
def unloadGagshop(self):
|
||||
if hasattr(self, 'contextId'):
|
||||
try:
|
||||
base.cr.removeInterest(self.contextId)
|
||||
except:
|
||||
pass
|
||||
|
||||
def restock(self):
|
||||
try:
|
||||
if base.localAvatar.inventory.inventory[self.firstTrack][self.desiredLevel1]<2 or base.localAvatar.inventory.inventory[self.secondTrack][self.desiredLevel2]<2 or base.localAvatar.inventory.inventory[self.thirdTrack][self.desiredLevel3]<2:
|
||||
Sequence(Func(self.loadGagshop),Wait(1),Func(self.buyGags),Wait(0.5),Func(self.unloadGagshop)).start()
|
||||
|
||||
except:
|
||||
pass
|
||||
|
||||
def revertFunctions(self):
|
||||
#self.noToons.finish()
|
||||
try:
|
||||
base.cr.removeInterest(self.interest1)
|
||||
base.cr.removeInterest(self.interest2)
|
||||
self.unloaded=True
|
||||
except:
|
||||
pass
|
||||
|
||||
class OtherFunctions:
|
||||
|
||||
oldGardensInit=DGPlayground.DGPlayground.__init__
|
||||
oldSellbotInit=SellbotHQExterior.SellbotHQExterior.__init__
|
||||
oldSendUpdate=DistributedObject.DistributedObject.sendUpdate
|
||||
oldEnterHealth=HealthForceAcknowledge.HealthForceAcknowledge.enter
|
||||
oldSetAnim=LocalToon.LocalToon.setAnimState
|
||||
oldPostInvite=DistributedBoardingParty.DistributedBoardingParty.postInvite
|
||||
|
||||
|
||||
def __init__(self):
|
||||
self.shouldContinue=False
|
||||
self.bossCount=0
|
||||
self.shouldEnd=False
|
||||
self.onlyLast=True
|
||||
self.onlyFactory=False
|
||||
self.canSetParentAgain=True
|
||||
self.isMember=True
|
||||
self.numberToSuit={0:'Cold Caller',1:'Telemarketer',2:'Name Dropper',3:'Glad Hander',
|
||||
4:'Mover & Shaker',5:'Two-Face',6:'The Mingler',7:'Mr. Hollywood'}
|
||||
|
||||
DGPlayground.DGPlayground.__init__=lambda *args:self.newGardensInit(*args)
|
||||
SellbotHQExterior.SellbotHQExterior.__init__=lambda *args: self.newSellbotInit(*args)
|
||||
HealthForceAcknowledge.HealthForceAcknowledge.enter=lambda newSelf,hplevel: self.newEnterHealth(newSelf,hplevel)
|
||||
LocalToon.LocalToon.setAnimState=lambda *args,**kwds:self.newSetAnimState(*args,**kwds)
|
||||
DistributedBoardingParty.DistributedBoardingParty.postInvite=lambda newSelf,leaderId,inviterId: self.newPostInvite(newSelf,leaderId,inviterId)
|
||||
|
||||
def attack(self):
|
||||
try:
|
||||
for battle in base.cr.doFindAll('battle'):
|
||||
if vpMaxer.factoryAutoer.roomNum==len(vpMaxer.factoryAutoer.roomsNeeded):
|
||||
if len(battle.suits)>1:
|
||||
for suit in battle.suits:
|
||||
if suit.getName()!='Skelecog':
|
||||
attackSuit=suit
|
||||
else:
|
||||
attackSuit=battle.suits[0]
|
||||
else:
|
||||
attackSuit=battle.suits[0]
|
||||
|
||||
if vpMaxer.restock.noToonUp and not vpMaxer.restock.noLure:
|
||||
if vpMaxer.restock.firstTrack==2 and base.localAvatar.getHp()>(base.localAvatar.getMaxHp()*0.75):
|
||||
battle.sendUpdate('requestAttack', [vpMaxer.restock.firstTrack, vpMaxer.restock.desiredLevel1, attackSuit.doId])
|
||||
if base.localAvatar.getHp()>(base.localAvatar.getMaxHp()*0.75):
|
||||
battle.sendUpdate('requestAttack', [vpMaxer.restock.thirdTrack, vpMaxer.restock.desiredLevel3, attackSuit.doId])
|
||||
|
||||
elif vpMaxer.restock.noLure:
|
||||
if vpMaxer.restock.secondTrack==0 and base.localAvatar.getHp()<(base.localAvatar.getMaxHp()*0.75):
|
||||
battle.sendUpdate('requestAttack', [vpMaxer.restock.secondTrack, vpMaxer.restock.desiredLevel2, base.localAvatar.doId])
|
||||
if base.localAvatar.getHp()>(base.localAvatar.getMaxHp()*0.75):
|
||||
battle.sendUpdate('requestAttack', [vpMaxer.restock.thirdTrack, vpMaxer.restock.desiredLevel3, attackSuit.doId])
|
||||
|
||||
else:
|
||||
if base.localAvatar.inventory.inventory[vpMaxer.restock.firstTrack][vpMaxer.restock.desiredLevel1]>0:
|
||||
battle.sendUpdate('requestAttack', [vpMaxer.restock.firstTrack, vpMaxer.restock.desiredLevel1, attackSuit.doId])
|
||||
else:
|
||||
break
|
||||
|
||||
if base.localAvatar.getHp()<(base.localAvatar.getMaxHp()*0.5):
|
||||
|
||||
if base.localAvatar.inventory.inventory[vpMaxer.restock.secondTrack][vpMaxer.restock.desiredLevel2]>0:
|
||||
battle.sendUpdate('requestAttack', [vpMaxer.restock.secondTrack, vpMaxer.restock.desiredLevel2, base.localAvatar.doId])
|
||||
else:
|
||||
break
|
||||
|
||||
if base.localAvatar.inventory.inventory[vpMaxer.restock.thirdTrack][vpMaxer.restock.desiredLevel3]>0:
|
||||
battle.sendUpdate('requestAttack', [vpMaxer.restock.thirdTrack, vpMaxer.restock.desiredLevel3, attackSuit.doId])
|
||||
else:
|
||||
break
|
||||
|
||||
else:
|
||||
if base.localAvatar.inventory.inventory[vpMaxer.restock.thirdTrack][vpMaxer.restock.desiredLevel3]>0:
|
||||
battle.sendUpdate('requestAttack', [vpMaxer.restock.thirdTrack, vpMaxer.restock.desiredLevel3, attackSuit.doId])
|
||||
else:
|
||||
break
|
||||
except:
|
||||
pass
|
||||
|
||||
def sendUpdateHook(self, newself, fieldName, args=[], sendToId=None):
|
||||
if fieldName=="requestAttack":
|
||||
self.oldSendUpdate(newself,"requestAttack", args, sendToId)
|
||||
self.oldSendUpdate(newself,"movieDone",[])
|
||||
else:
|
||||
self.oldSendUpdate(newself,fieldName, args, sendToId)
|
||||
|
||||
def newGardensInit(self,*args):
|
||||
self.oldGardensInit(*args)
|
||||
if self.shouldContinue:
|
||||
vpMaxer.factoryAutoer.gainLaffSeq.finish()
|
||||
vpMaxer.factoryAutoer.attackSeq.finish()
|
||||
vpMaxer.restock.wasInBattle=False
|
||||
self.checkMerits()
|
||||
|
||||
def newSetAnimState(self,*args,**kwds):
|
||||
self.oldSetAnim(*args,**kwds)
|
||||
if self.canSetParentAgain and self.shouldContinue:
|
||||
base.localAvatar.d_setParent(1)
|
||||
self.canSetParentAgain=False
|
||||
Sequence(Wait(2),Func(self.doUnsetCanSetParentAgain)).start()
|
||||
|
||||
def doUnsetCanSetParentAgain(self):
|
||||
self.canSetParentAgain=True
|
||||
|
||||
def newEnterHealth(self,newSelf,hplevel):
|
||||
try:
|
||||
self.oldEnterHealth(newSelf,hplevel)
|
||||
newSelf.handleOk(base.localAvatar.getHp())
|
||||
newSelf.exit()
|
||||
if self.shouldContinue:
|
||||
Sequence(Wait(2),Func(self.checkMerits)).start()
|
||||
except:
|
||||
pass
|
||||
|
||||
def newSellbotInit(self,*args):
|
||||
self.oldSellbotInit(*args)
|
||||
if self.shouldContinue:
|
||||
self.walk()
|
||||
base.localAvatar.setWantBattles(False)
|
||||
Sequence(Wait(2),Func(self.checkMerits)).start()
|
||||
|
||||
def newPostInvite(self,newSelf,leaderId,inviterId):
|
||||
if leaderId==base.localAvatar.doId:
|
||||
newSelf.sendUpdate('requestAcceptInvite',[inviterId,leaderId])
|
||||
else:
|
||||
self.oldPostInvite(newSelf,leaderId,inviterId)
|
||||
|
||||
def checkMerits(self):
|
||||
if taskAutoer.isQuestComplete():
|
||||
self.stop()
|
||||
taskAutoer.checkWhatToDo()
|
||||
if self.onlyFactory:
|
||||
if self.onlyLast:
|
||||
base.localAvatar.cogMerits[3]+=self.getMeritsLeft()-1
|
||||
else:
|
||||
base.localAvatar.cogMerits[3]=-4000
|
||||
if self.shouldEnd:
|
||||
self.shouldContinue=False
|
||||
if self.shouldContinue:
|
||||
if self.getMeritsLeft()==0 and not self.onlyFactory:
|
||||
if base.cr.doFind('DistributedCogHQDoor') and base.localAvatar.getZoneId()>=11000 and base.localAvatar.getZoneId()<11100:
|
||||
vpMaxer.vpAutoer.start()
|
||||
else:
|
||||
vpMaxer.restock.restock()
|
||||
vpMaxer.restock.collectLaff()
|
||||
self.walk()
|
||||
Sequence(Wait(2),Func(self.teleBack)).start()
|
||||
else:
|
||||
if base.cr.doFind('DistributedCogHQDoor') and base.localAvatar.getZoneId()>=11000 and base.localAvatar.getZoneId()<11100:
|
||||
vpMaxer.factoryAutoer.goFactory()
|
||||
else:
|
||||
vpMaxer.restock.restock()
|
||||
vpMaxer.restock.collectLaff()
|
||||
self.walk()
|
||||
Sequence(Wait(2),Func(self.teleBack)).start()
|
||||
else:
|
||||
vpMaxer.restock.noToons.finish()
|
||||
base.cr.removeInterest(vpMaxer.restock.interest1)
|
||||
base.cr.removeInterest(vpMaxer.restock.interest2)
|
||||
vpMaxer.restock.unloaded=True
|
||||
vpMaxer.factoryAutoer.attackSeq.finish()
|
||||
vpMaxer.factoryAutoer.generateAgain()
|
||||
|
||||
def getMeritsLeft(self):
|
||||
return CogDisguiseGlobals.getTotalMerits(base.localAvatar,3)-base.localAvatar.cogMerits[3]
|
||||
|
||||
def walk(self):
|
||||
try:
|
||||
base.cr.playGame.getPlace().fsm.forceTransition('walk')
|
||||
except:
|
||||
pass
|
||||
|
||||
def teleBack(self,zone=11000):
|
||||
try:
|
||||
self.walk()
|
||||
base.cr.playGame.getPlace().handleBookCloseTeleport(zone, zone)
|
||||
except:
|
||||
pass
|
||||
|
||||
def onlyDoFactory(self):
|
||||
self.onlyFactory=True
|
||||
|
||||
def doBoth(self):
|
||||
self.onlyFactory=False
|
||||
|
||||
def haveJb(self):
|
||||
if base.localAvatar.cogLevels[0]==49:
|
||||
return True
|
||||
elif base.localAvatar.getTotalMoney()<100:
|
||||
return False
|
||||
else:
|
||||
return True
|
||||
|
||||
def stop(self):
|
||||
base.localAvatar.died=lambda *args: None
|
||||
self.shouldContinue=True
|
||||
self.shouldEnd=True
|
||||
|
||||
def start(self):
|
||||
DistributedObject.DistributedObject.sendUpdate=lambda newself, fieldName, args=[], sendToId=None: self.sendUpdateHook(newself, fieldName, args, sendToId)
|
||||
base.localAvatar.died=lambda *args: vpMaxer.factoryAutoer.newSafeZone(*args)
|
||||
self.shouldEnd=False
|
||||
self.shouldContinue=True
|
||||
self.bossCount=0
|
||||
#vpMaxer.restock.noToons.loop()
|
||||
self.checkMerits()
|
||||
|
||||
def revertFunctions(self):
|
||||
LocalToon.LocalToon.setAnimState=self.oldSetAnim
|
||||
DGPlayground.DGPlayground.__init__=self.oldGardensInit
|
||||
SellbotHQExterior.SellbotHQExterior.__init__=self.oldSellbotInit
|
||||
DistributedObject.DistributedObject.sendUpdate=self.oldSendUpdate
|
||||
HealthForceAcknowledge.HealthForceAcknowledge.enter=self.oldEnterHealth
|
||||
DistributedBoardingParty.DistributedBoardingParty.postInvite=self.oldPostInvite
|
||||
|
||||
class VpAutoer:
|
||||
oldBossEnterElevator=DistributedSellbotBoss.DistributedSellbotBoss.enterElevator
|
||||
oldEnterBattleThree=DistributedSellbotBoss.DistributedSellbotBoss.enterBattleThree
|
||||
oldEnterPrepareBattleTwo=DistributedSellbotBoss.DistributedSellbotBoss.enterPrepareBattleTwo
|
||||
oldEnterPrepareBattleThree=DistributedSellbotBoss.DistributedSellbotBoss.enterPrepareBattleThree
|
||||
oldEnterEpilogue=DistributedSellbotBoss.DistributedSellbotBoss.enterEpilogue
|
||||
oldEnterRollToBattleTwo=DistributedSellbotBoss.DistributedSellbotBoss.enterRollToBattleTwo
|
||||
oldEnterWaitForInput=DistributedBattleFinal.DistributedBattleFinal.enterWaitForInput
|
||||
oldBossEnterIntro=DistributedSellbotBoss.DistributedSellbotBoss.enterIntroduction
|
||||
oldAvatarExit=DistributedCogHQDoor.DistributedCogHQDoor.avatarExit
|
||||
oldEnterWalk=CogHQLobby.CogHQLobby.enterWalk
|
||||
|
||||
def __init__(self):
|
||||
self.filter=False
|
||||
self.cardsWanted=['Flippy','Barnacle Bessie','Lil Oldman','Professor Pete','Stinky Ned','Daffy Don','Moe Zart','Sid Sonata','Franz Neckvein']
|
||||
|
||||
DistributedSellbotBoss.DistributedSellbotBoss.enterElevator=lambda newSelf: self.newBossEnterElevator(newSelf)
|
||||
DistributedSellbotBoss.DistributedSellbotBoss.enterIntroduction=lambda newSelf,*args: self.newBossEnterIntro(newSelf,*args)
|
||||
DistributedSellbotBoss.DistributedSellbotBoss.enterRollToBattleTwo=lambda newSelf: self.newEnterRollToBattleTwo(newSelf)
|
||||
DistributedSellbotBoss.DistributedSellbotBoss.enterBattleThree=lambda newSelf: self.newEnterBattleThree(newSelf)
|
||||
DistributedBattleFinal.DistributedBattleFinal.enterWaitForInput=lambda *args: self.newEnterWaitForInput(*args)
|
||||
DistributedCogHQDoor.DistributedCogHQDoor.avatarExit=lambda newSelf,id: self.newAvatarExit(newSelf,id)
|
||||
CogHQLobby.CogHQLobby.enterWalk=lambda newSelf,*args,**kwds: self.newEnterWalk(newSelf,*args,**kwds)
|
||||
DistributedSellbotBoss.DistributedSellbotBoss.enterPrepareBattleThree=lambda newSelf: self.newEnterPrepareBattleThree(newSelf)
|
||||
DistributedSellbotBoss.DistributedSellbotBoss.enterPrepareBattleTwo=lambda newSelf: self.newEnterPrepareBattleTwo(newSelf)
|
||||
DistributedSellbotBoss.DistributedSellbotBoss.enterEpilogue=lambda newSelf: self.newEnterEpilogue(newSelf)
|
||||
|
||||
def newBossEnterElevator(self,newSelf):
|
||||
self.oldBossEnterElevator(newSelf)
|
||||
if vpMaxer.otherFunctions.shouldContinue:
|
||||
newSelf._DistributedBossCog__doneElevator()
|
||||
|
||||
def newBossEnterIntro(self,newSelf,*args):
|
||||
self.oldBossEnterIntro(newSelf,*args)
|
||||
if vpMaxer.otherFunctions.shouldContinue:
|
||||
if self.cardFilter():
|
||||
newSelf.exitIntroduction()
|
||||
else:
|
||||
Sequence(Wait(2),Func(vpMaxer.otherFunctions.teleBack)).start()
|
||||
|
||||
def newEnterEpilogue(self,newSelf):
|
||||
self.oldEnterEpilogue(newSelf)
|
||||
if vpMaxer.otherFunctions.shouldContinue:
|
||||
vpMaxer.otherFunctions.bossCount+=1
|
||||
vpMaxer.otherFunctions.teleBack()
|
||||
|
||||
def newEnterRollToBattleTwo(self,newSelf):
|
||||
self.oldEnterRollToBattleTwo(newSelf)
|
||||
if vpMaxer.otherFunctions.shouldContinue:
|
||||
newSelf.exitRollToBattleTwo()
|
||||
|
||||
def newEnterPrepareBattleTwo(self,newSelf):
|
||||
self.oldEnterPrepareBattleTwo(newSelf)
|
||||
if vpMaxer.otherFunctions.shouldContinue:
|
||||
newSelf._DistributedSellbotBoss__onToBattleTwo(33)
|
||||
|
||||
def newEnterPrepareBattleThree(self,newSelf):
|
||||
self.oldEnterPrepareBattleThree(newSelf)
|
||||
if vpMaxer.otherFunctions.shouldContinue:
|
||||
newSelf._DistributedSellbotBoss__onToBattleThree(33)
|
||||
|
||||
def newEnterBattleThree(self,newSelf):
|
||||
self.oldEnterBattleThree(newSelf)
|
||||
if vpMaxer.otherFunctions.shouldContinue:
|
||||
self.endBattle()
|
||||
|
||||
def newEnterWaitForInput(self,*args):
|
||||
self.oldEnterWaitForInput(*args)
|
||||
if vpMaxer.otherFunctions.shouldContinue:
|
||||
self.exploit()
|
||||
|
||||
def newEnterWalk(self,newSelf,*args,**kwds):
|
||||
self.oldEnterWalk(newSelf,*args,**kwds)
|
||||
if len(args)>0:
|
||||
if vpMaxer.otherFunctions.shouldContinue and args[0]:
|
||||
self.goVpBattle()
|
||||
|
||||
|
||||
def newAvatarExit(self,newSelf,id):
|
||||
self.oldAvatarExit(newSelf,id)
|
||||
if base.cr.doFind('Elevator') and id==base.localAvatar.doId and vpMaxer.otherFunctions.shouldContinue:
|
||||
self.goVpBattle()
|
||||
|
||||
def goVpBattle(self):
|
||||
vpMaxer.otherFunctions.walk()
|
||||
base.localAvatar.setWantBattles(True)
|
||||
base.cr.doFind('Boarding').sendUpdate('requestLeave',[base.localAvatar.doId])
|
||||
base.cr.doFind('Boarding').sendUpdate('requestInvite',[base.localAvatar.doId])
|
||||
base.cr.doFind('Boarding').sendUpdate('requestGoToSecondTime',[base.cr.doFind('Elevator').doId])
|
||||
|
||||
def destroyBattle(self):
|
||||
base.cr.doFind('SafeZone').sendUpdate('enterSafeZone')
|
||||
|
||||
def filterOn(self):
|
||||
self.filter=True
|
||||
self.cardsWanted=['Flippy','Barnacle Bessie','Lil Oldman','Professor Pete','Stinky Ned','Daffy Don','Moe Zart','Sid Sonata','Franz Neckvein']
|
||||
base.localAvatar.setSystemMessage(0,'The VP Maxer will filter bad cards')
|
||||
|
||||
def filterOn16(self):
|
||||
self.filter=True
|
||||
self.cardsWanted=['Flippy', 'Daffy Don', 'Clerk Clara', 'Clerk Penny', 'Lil Oldman', 'Stinky Ned', 'Moe Zart', 'Sid Sonata', 'Barnacle Bessie',\
|
||||
'Franz Neckvein', 'Madam Chuckle', 'Clerk Will', 'Nancy Gas', 'Mr. Freeze', 'Professor Pete', 'Soggy Nell']
|
||||
base.localAvatar.setSystemMessage(0,'The VP Maxer will filter for 16 cards')
|
||||
|
||||
def filterOff(self):
|
||||
self.filter=False
|
||||
base.localAvatar.setSystemMessage(0,'The VP Maxer will not filter bad cards')
|
||||
|
||||
def exploit(self):
|
||||
Sequence(Func(self.destroyBattle), Wait(.5), Func(vpMaxer.otherFunctions.walk)).start()
|
||||
|
||||
def endBattle(self):
|
||||
if base.cr.doFind('V. P'):
|
||||
base.cr.doFind('V. P').sendUpdate('hitBossInsides')
|
||||
base.cr.doFind('V. P').sendUpdate('hitBoss', [100])
|
||||
base.cr.doFind('V. P').sendUpdate('finalPieSplat')
|
||||
|
||||
def start(self):
|
||||
if vpMaxer.otherFunctions.isMember:
|
||||
base.localAvatar.collisionsOff()
|
||||
base.cr.doFind('DistributedCogHQDoor').sendUpdate('requestEnter')
|
||||
else:
|
||||
vpMaxer.otherFunctions.walk()
|
||||
base.cr.playGame.getPlace().requestTeleport(11000,11100,None,None)
|
||||
|
||||
def cardFilter(self):
|
||||
if base.cr.doFind('V. P').cagedToon.getName() in self.cardsWanted or not self.filter:
|
||||
return True
|
||||
else:
|
||||
return False
|
||||
|
||||
def revertFunctions(self):
|
||||
DistributedSellbotBoss.DistributedSellbotBoss.enterElevator=self.oldBossEnterElevator
|
||||
DistributedSellbotBoss.DistributedSellbotBoss.enterBattleThree=self.oldEnterBattleThree
|
||||
DistributedSellbotBoss.DistributedSellbotBoss.enterPrepareBattleTwo=self.oldEnterPrepareBattleTwo
|
||||
DistributedSellbotBoss.DistributedSellbotBoss.enterPrepareBattleThree=self.oldEnterPrepareBattleThree
|
||||
DistributedSellbotBoss.DistributedSellbotBoss.enterEpilogue=self.oldEnterEpilogue
|
||||
DistributedSellbotBoss.DistributedSellbotBoss.enterRollToBattleTwo=self.oldEnterRollToBattleTwo
|
||||
DistributedBattleFinal.DistributedBattleFinal.enterWaitForInput=self.oldEnterWaitForInput
|
||||
DistributedSellbotBoss.DistributedSellbotBoss.enterIntroduction=self.oldBossEnterIntro
|
||||
DistributedCogHQDoor.DistributedCogHQDoor.avatarExit=self.oldAvatarExit
|
||||
CogHQLobby.CogHQLobby.enterWalk=self.oldEnterWalk
|
||||
|
||||
class FactoryAutoer:
|
||||
oldFactoryInit=FactoryExterior.FactoryExterior.__init__
|
||||
oldDistributedFactoryInit=DistributedFactory.DistributedFactory.__init__
|
||||
oldEnterReward=DistributedBattleFactory.DistributedBattleFactory.enterReward
|
||||
oldEnterFactoryReward=DistributedBattleFactory.DistributedBattleFactory.enterFactoryReward
|
||||
|
||||
def __init__(self,vpMaxer):
|
||||
self.roomNum=0
|
||||
self.zones=[4,7,8,13,22,24,34,32]
|
||||
self.roomValues=[28,36,32,56,32,40,80,56]
|
||||
self.gainLaffSeq=Sequence(Func(vpMaxer.restock.gainLaff),Wait(3.0))
|
||||
self.attackSeq=Sequence(Func(vpMaxer.restock.restock),Wait(1.0),Func(vpMaxer.otherFunctions.attack),Wait(1.0))
|
||||
|
||||
FactoryExterior.FactoryExterior.__init__=lambda *args: self.newFactoryInit(*args)
|
||||
DistributedFactory.DistributedFactory.__init__=lambda *args: self.newDistributedFactoryInit(*args)
|
||||
DistributedBattleFactory.DistributedBattleFactory.enterReward=lambda newSelf,*args:self.newEnterReward(newSelf,*args)
|
||||
base.cr.doFind('SafeZone').d_enterSafeZone=lambda *args: self.newSafeZone(*args)
|
||||
DistributedBattleFactory.DistributedBattleFactory.d_toonDied=lambda *args: self.newSafeZone(*args)
|
||||
DistributedBattleFactory.DistributedBattleFactory.enterFactoryReward=lambda newSelf,*args:self.newEnterFactoryReward(newSelf,*args)
|
||||
|
||||
def enterBattle(self):
|
||||
if base.localAvatar.getHp()>0:
|
||||
if base.cr.doFindAll('battle')==[]:
|
||||
battles = []
|
||||
cogList = base.cr.doFindAll("render")
|
||||
for x in cogList:
|
||||
if isinstance(x, DistributedFactorySuit) or isinstance(x, DistributedSuit.DistributedSuit):
|
||||
if x.activeState == 6:
|
||||
battles.append(x)
|
||||
try:
|
||||
if battles != []:
|
||||
battle=battles[0]
|
||||
pos, hpr = battle.getPos(), battle.getHpr()
|
||||
vpMaxer.otherFunctions.walk()
|
||||
vpMaxer.restock.wasInBattle=False
|
||||
base.localAvatar.collisionsOn()
|
||||
base.localAvatar.setPosHpr(pos, hpr)
|
||||
battle.d_requestBattle(pos, hpr)
|
||||
return True
|
||||
else:
|
||||
self.warpToZone(self.roomsNeeded[self.roomNum])
|
||||
return False
|
||||
except:
|
||||
return False
|
||||
else:
|
||||
return False
|
||||
else:
|
||||
return False
|
||||
|
||||
def newEnterReward(self,newSelf,*args):
|
||||
self.oldEnterReward(newSelf,*args)
|
||||
if vpMaxer.otherFunctions.shouldContinue:
|
||||
newSelf._DistributedLevelBattle__handleFloorRewardDone()
|
||||
newSelf.d_rewardDone(base.localAvatar.doId)
|
||||
vpMaxer.otherFunctions.walk()
|
||||
if self.roomNum>=len(self.roomsNeeded):
|
||||
self.attackSeq.finish()
|
||||
self.gainLaffSeq.finish()
|
||||
self.generateAgain()
|
||||
Sequence(Wait(1),Func(vpMaxer.otherFunctions.walk),Func(vpMaxer.otherFunctions.teleBack)).start()
|
||||
else:
|
||||
Sequence(Wait(5),Func(self.enterBattle)).start()
|
||||
|
||||
def newEnterFactoryReward(self,newSelf,*args):
|
||||
self.oldEnterFactoryReward(newSelf,*args)
|
||||
if vpMaxer.otherFunctions.shouldContinue:
|
||||
newSelf._DistributedBattleFactory__handleFactoryRewardDone()
|
||||
self.attackSeq.finish()
|
||||
self.gainLaffSeq.finish()
|
||||
self.generateAgain()
|
||||
Sequence(Wait(1),Func(vpMaxer.otherFunctions.walk),Func(vpMaxer.otherFunctions.teleBack)).start()
|
||||
|
||||
def newFactoryInit(self,*args):
|
||||
self.oldFactoryInit(*args)
|
||||
if vpMaxer.otherFunctions.shouldContinue:
|
||||
Sequence(Wait(2),Func(self.enterElevator)).start()
|
||||
|
||||
def newDistributedFactoryInit(self,*args):
|
||||
self.oldDistributedFactoryInit(*args)
|
||||
if vpMaxer.otherFunctions.shouldContinue:
|
||||
vpMaxer.otherFunctions.walk()
|
||||
self.attackSeq.loop()
|
||||
self.gainLaffSeq.loop()
|
||||
self.roomNum=0
|
||||
self.workOutRoomsNeeded()
|
||||
Sequence(Wait(2),Func(self.warpToZone,self.roomsNeeded[self.roomNum])).start()
|
||||
|
||||
def workOutRoomsNeeded(self):
|
||||
self.roomsNeeded=[]
|
||||
meritsNeeded=vpMaxer.otherFunctions.getMeritsLeft()
|
||||
meritsNeeded-=self.roomValues[-1]
|
||||
for i in range(7):
|
||||
if meritsNeeded>0:
|
||||
self.roomsNeeded.append(self.zones[i])
|
||||
meritsNeeded-=self.roomValues[i]
|
||||
else:
|
||||
break
|
||||
self.roomsNeeded.append(self.zones[-1])
|
||||
|
||||
def warpToZone(self,zone):
|
||||
for factory in base.cr.doFindAll('Factory'):
|
||||
if hasattr(factory, 'warpToZone'):
|
||||
factory.warpToZone(zone)
|
||||
self.roomNum+=1
|
||||
break
|
||||
Sequence(Wait(1),Func(self.enterBattle)).start()
|
||||
|
||||
def newSafeZone(self,*args):
|
||||
Sequence(Wait(1),Func(vpMaxer.otherFunctions.walk),Func(base.localAvatar.collisionsOff)).start()
|
||||
base.cr.doFind('safezone').sendUpdate('enterSafeZone')
|
||||
vpMaxer.restock.wasInBattle=True
|
||||
|
||||
def preTele(self):
|
||||
exec(hooks, __main__.__dict__)
|
||||
|
||||
def generateAgain(self):
|
||||
DistributedDoor.DistributedDoor.announceGenerate=_announceGenerate1
|
||||
DistributedPartyGate.DistributedPartyGate.announceGenerate=_announceGenerate2
|
||||
DistributedTrolley.DistributedTrolley.__init__=old__init__
|
||||
DistributedPartyGate.DistributedPartyGate.__init__=old__init__2
|
||||
DistributedDoor.DistributedDoor.__init__=old__init__3
|
||||
|
||||
def goFactory(self):
|
||||
vpMaxer.otherFunctions.walk()
|
||||
base.localAvatar.setWantBattles(True)
|
||||
base.localAvatar.setPos(167.151, -157.024, -0.64781)
|
||||
Sequence(Wait(0.5), Func(base.localAvatar.collisionsOn)).start()
|
||||
|
||||
def enterElevator(self):
|
||||
for elevator in base.cr.doFindAll("Elevator"):
|
||||
if elevator.getDestName()=='Front Entrance':
|
||||
vpMaxer.otherFunctions.walk()
|
||||
base.localAvatar.collisionsOff()
|
||||
base.cr.doFind('Boarding').sendUpdate('requestLeave',[base.localAvatar.doId])
|
||||
base.cr.doFind('Boarding').sendUpdate('requestInvite',[base.localAvatar.doId])
|
||||
base.cr.doFind('Boarding').sendUpdate('requestGoToSecondTime',[elevator.doId])
|
||||
return
|
||||
|
||||
def revertFunctions(self):
|
||||
FactoryExterior.FactoryExterior.__init__=self.oldFactoryInit
|
||||
DistributedFactory.DistributedFactory.__init__=self.oldDistributedFactoryInit
|
||||
DistributedBattleFactory.DistributedBattleFactory.enterReward=self.oldEnterReward
|
||||
DistributedBattleFactory.DistributedBattleFactory.enterFactoryReward=self.oldEnterFactoryReward
|
||||
base.cr.doFind('SafeZone').d_enterSafeZone=lambda *args: None
|
||||
base.localAvatar.died=lambda *args: None
|
||||
DistributedBattleFactory.DistributedBattleFactory.d_toonDied=lambda *args: None
|
||||
self.generateAgain()
|
||||
|
||||
class VPMaxer:
|
||||
def __init__(self):
|
||||
self.restock=restock()
|
||||
self.otherFunctions=OtherFunctions()
|
||||
self.vpAutoer=VpAutoer()
|
||||
self.factoryAutoer=FactoryAutoer(self)
|
||||
|
||||
def revert(self):
|
||||
self.restock.revertFunctions()
|
||||
self.factoryAutoer.revertFunctions()
|
||||
self.vpAutoer.revertFunctions()
|
||||
self.otherFunctions.revertFunctions()
|
||||
DistributedNPCFisherman.DistributedNPCFisherman.handleCollisionSphereEnter=oldHandleEnterCollisionSphereFisherman
|
||||
DistributedNPCPartyPerson.DistributedNPCPartyPerson.handleCollisionSphereEnter=oldHandleEnterCollisionSphereParty
|
||||
DistributedNPCFisherman.DistributedNPCFisherman.announceGenerate=oldFisherAnnounceGenerate
|
||||
DistributedNPCFisherman.DistributedNPCFisherman.initToonState=oldFishermanInitToonState
|
||||
DistributedNPCPartyPerson.DistributedNPCPartyPerson.announceGenerate=oldPartyPlannerAnnounceGenerate
|
||||
|
|
@ -0,0 +1,131 @@
|
|||
import argparse
|
||||
import json
|
||||
import os
|
||||
import re
|
||||
from pathlib import Path
|
||||
|
||||
|
||||
ROOT = Path(__file__).resolve().parents[1]
|
||||
DB_DIR = ROOT / "astron" / "databases"
|
||||
ASTRONDB_DIR = DB_DIR / "astrondb"
|
||||
INFO_YAML = ASTRONDB_DIR / "info.yaml"
|
||||
ACCOUNTS_JSON = DB_DIR / "accounts.json"
|
||||
|
||||
|
||||
def _read_text(p: Path) -> str:
|
||||
return p.read_text(encoding="utf-8")
|
||||
|
||||
|
||||
def _write_text(p: Path, s: str) -> None:
|
||||
p.parent.mkdir(parents=True, exist_ok=True)
|
||||
# Python 3.9 Path.write_text doesn't accept newline=
|
||||
p.write_text(s, encoding="utf-8")
|
||||
|
||||
|
||||
def _alloc_ids(count: int) -> list[int]:
|
||||
m = re.search(r"^\s*next:\s*(\d+)\s*$", _read_text(INFO_YAML), flags=re.M)
|
||||
if not m:
|
||||
raise RuntimeError(f"Could not find next id in {INFO_YAML}")
|
||||
next_id = int(m.group(1))
|
||||
ids = list(range(next_id, next_id + count))
|
||||
_write_text(INFO_YAML, f"next: {next_id + count}\n")
|
||||
return ids
|
||||
|
||||
|
||||
def _load_accounts_map() -> dict[str, int]:
|
||||
if not ACCOUNTS_JSON.exists():
|
||||
return {}
|
||||
return {k: int(v) for k, v in json.loads(_read_text(ACCOUNTS_JSON)).items()}
|
||||
|
||||
|
||||
def _save_accounts_map(m: dict[str, int]) -> None:
|
||||
_write_text(ACCOUNTS_JSON, json.dumps(m, indent=2, sort_keys=True) + "\n")
|
||||
|
||||
|
||||
def _render_account_yaml(account_id: int, username: str, toon_ids: list[int]) -> str:
|
||||
# Mirrors existing AstronAccount yaml shape in this repo.
|
||||
av_set = toon_ids[:6] + [0] * max(0, 6 - len(toon_ids))
|
||||
av_set_str = "[" + ", ".join(str(x) for x in av_set) + "]"
|
||||
return (
|
||||
f"id: {account_id}\n"
|
||||
f"class: AstronAccount\n"
|
||||
f"fields:\n"
|
||||
f" ACCOUNT_AV_SET: \"{av_set_str}\"\n"
|
||||
f" ESTATE_ID: 0\n"
|
||||
f" ACCOUNT_AV_SET_DEL: \"[]\"\n"
|
||||
f" CREATED: \"\\\"{_now_string()}\\\"\"\n"
|
||||
f" LAST_LOGIN: \"\\\"{_now_string()}\\\"\"\n"
|
||||
f" ACCOUNT_ID: \"\\\"{username}\\\"\"\n"
|
||||
f" ACCESS_LEVEL: \"\\\"SYSTEM_ADMIN\\\"\"\n"
|
||||
)
|
||||
|
||||
|
||||
def _now_string() -> str:
|
||||
# Keep format similar to existing DB. Exact value isn't important.
|
||||
import datetime
|
||||
|
||||
return datetime.datetime.now().strftime("%a %b %d %H:%M:%S %Y")
|
||||
|
||||
|
||||
def _render_toon_yaml(toon_id: int, toon_name: str, default_shard: int, default_zone: int) -> str:
|
||||
# Use an existing toon as template if available, for maximum compatibility.
|
||||
template_path = ASTRONDB_DIR / "100000001.yaml"
|
||||
if template_path.exists():
|
||||
s = _read_text(template_path)
|
||||
s = re.sub(r"^id:\s*\d+\s*$", f"id: {toon_id}", s, flags=re.M)
|
||||
s = re.sub(r"^\s*setName:\s*\(.+\)\s*$", f" setName: (\"{toon_name}\")", s, flags=re.M)
|
||||
s = re.sub(r"^\s*setDefaultShard:\s*\(\d+\)\s*$", f" setDefaultShard: ({default_shard})", s, flags=re.M)
|
||||
s = re.sub(r"^\s*setDefaultZone:\s*\(\d+\)\s*$", f" setDefaultZone: ({default_zone})", s, flags=re.M)
|
||||
return s
|
||||
|
||||
# Fallback: minimal toon fields (may be insufficient for gameplay depending on server/client).
|
||||
return (
|
||||
f"id: {toon_id}\n"
|
||||
f"class: DistributedToon\n"
|
||||
f"fields:\n"
|
||||
f" setName: (\"{toon_name}\")\n"
|
||||
f" setAccountName: (\"\")\n"
|
||||
f" setDefaultShard: ({default_shard})\n"
|
||||
f" setDefaultZone: ({default_zone})\n"
|
||||
f" setMaxHp: (15)\n"
|
||||
f" setHp: (15)\n"
|
||||
f" setMoney: (0)\n"
|
||||
f" setMaxMoney: (40)\n"
|
||||
f" setTutorialAck: (1)\n"
|
||||
)
|
||||
|
||||
|
||||
def main() -> int:
|
||||
ap = argparse.ArgumentParser(description="Create a local Astron test account + toon in YAML DB.")
|
||||
ap.add_argument("--username", required=True)
|
||||
ap.add_argument("--toon-name", default="Test Toon")
|
||||
ap.add_argument("--default-shard", type=int, default=401000001)
|
||||
ap.add_argument("--default-zone", type=int, default=22000)
|
||||
args = ap.parse_args()
|
||||
|
||||
if not INFO_YAML.exists():
|
||||
raise SystemExit(f"Missing {INFO_YAML} (is astron yaml db set up?)")
|
||||
|
||||
accounts = _load_accounts_map()
|
||||
if args.username in accounts:
|
||||
raise SystemExit(f"Username already exists in accounts.json: {args.username}")
|
||||
|
||||
account_id, toon_id = _alloc_ids(2)
|
||||
|
||||
accounts[args.username] = account_id
|
||||
_save_accounts_map(accounts)
|
||||
|
||||
account_yaml = _render_account_yaml(account_id, args.username, [toon_id])
|
||||
toon_yaml = _render_toon_yaml(toon_id, args.toon_name, args.default_shard, args.default_zone)
|
||||
|
||||
_write_text(ASTRONDB_DIR / f"{account_id}.yaml", account_yaml)
|
||||
_write_text(ASTRONDB_DIR / f"{toon_id}.yaml", toon_yaml)
|
||||
|
||||
print(f"Created account '{args.username}' -> {account_id}")
|
||||
print(f"Created toon '{args.toon_name}' -> {toon_id} (shard={args.default_shard}, zone={args.default_zone})")
|
||||
return 0
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
raise SystemExit(main())
|
||||
|
||||
|
|
@ -0,0 +1,263 @@
|
|||
"""Loads client autoer bundle and provides global stop (sticker book + backslash)."""
|
||||
|
||||
import importlib.util
|
||||
import os
|
||||
import traceback
|
||||
|
||||
from direct.directnotify import DirectNotifyGlobal
|
||||
from direct.showbase.DirectObject import DirectObject
|
||||
from direct.task.TaskManagerGlobal import taskMgr
|
||||
|
||||
from toontown.quest import task_autoer_globals as TAG
|
||||
from toontown.toonbase import ToontownBattleGlobals
|
||||
|
||||
notify = DirectNotifyGlobal.directNotify.newCategory('AutoerManager')
|
||||
|
||||
_bundleModule = None
|
||||
|
||||
|
||||
def _logAutoerException(context, exc):
|
||||
"""Log full traceback for autoer failures (notify + stdout)."""
|
||||
tb = traceback.format_exc()
|
||||
notify.warning('%s: %s\n%s' % (context, exc, tb))
|
||||
try:
|
||||
print('[AutoerManager] %s: %s' % (context, exc))
|
||||
print(tb)
|
||||
except Exception:
|
||||
pass
|
||||
_emergencyListener = None
|
||||
|
||||
# Pending async close of sticker book before task autoer starts (see startTaskAutomation).
|
||||
_TASK_AUTOER_BOOK_CLOSE = 'autoerTaskAutomationBookClose'
|
||||
|
||||
|
||||
def isBundleLoaded():
|
||||
return _bundleModule is not None
|
||||
|
||||
|
||||
def getBundleModule():
|
||||
return _bundleModule
|
||||
|
||||
|
||||
def _bundlePath():
|
||||
root = os.path.abspath(os.path.join(os.path.dirname(__file__), '..', '..'))
|
||||
return os.path.join(root, 'autoers', 'TaskAutoer full source.py')
|
||||
|
||||
|
||||
def loadAutoerBundle():
|
||||
global _bundleModule
|
||||
if _bundleModule is not None:
|
||||
notify.info('Autoer bundle already loaded.')
|
||||
return _bundleModule
|
||||
path = _bundlePath()
|
||||
if not os.path.isfile(path):
|
||||
notify.warning('Autoer bundle not found at %s' % path)
|
||||
return None
|
||||
name = 'ttbtn_autoer_bundle_%s' % hash(path)
|
||||
spec = importlib.util.spec_from_file_location(name, path)
|
||||
mod = importlib.util.module_from_spec(spec)
|
||||
spec.loader.exec_module(mod)
|
||||
_bundleModule = mod
|
||||
notify.info('Loaded autoer bundle from %s' % path)
|
||||
return mod
|
||||
|
||||
|
||||
def stopAllAutoers():
|
||||
m = _bundleModule
|
||||
from toontown.quest.TaskAutoer import revert_task_autoer
|
||||
|
||||
if m is not None:
|
||||
try:
|
||||
if getattr(m, 'buildingAutoer', None):
|
||||
m.buildingAutoer.stop()
|
||||
m.buildingAutoer.revert()
|
||||
except Exception as e:
|
||||
notify.warning('buildingAutoer stop: %s' % e)
|
||||
|
||||
try:
|
||||
if getattr(m, 'gagTrainer', None):
|
||||
m.gagTrainer.stop()
|
||||
from toontown.battle import BattlePlace
|
||||
from toontown.battle import DistributedBattle
|
||||
from toontown.suit import DistributedSuit
|
||||
from toontown.toon import HealthForceAcknowledge
|
||||
DistributedBattle.DistributedBattle.enterReward = m.GagTrainer.oldEnterReward
|
||||
DistributedBattle.DistributedBattle.enterFaceOff = m.GagTrainer.oldEnterFaceOff
|
||||
DistributedSuit.DistributedSuit.denyBattle = m.GagTrainer.oldDenyBattle
|
||||
HealthForceAcknowledge.HealthForceAcknowledge.enter = m.GagTrainer.oldEnterHealth
|
||||
BattlePlace.BattlePlace.exitTeleportIn = m.GagTrainer.oldBattlePlaceTeleportIn
|
||||
try:
|
||||
rs = m.gagTrainer.restock
|
||||
rf = getattr(rs, 'revertFunctions', None)
|
||||
if callable(rf):
|
||||
rf()
|
||||
except Exception as e:
|
||||
notify.warning('gagTrainer restock.revertFunctions: %s' % e)
|
||||
except Exception as e:
|
||||
notify.warning('gagTrainer stop: %s' % e)
|
||||
|
||||
for name in ('vpMaxer', 'cfoMaxer', 'ceoMaxer'):
|
||||
try:
|
||||
mx = getattr(m, name, None)
|
||||
if mx is not None and hasattr(mx, 'revert'):
|
||||
mx.revert()
|
||||
except Exception as e:
|
||||
notify.warning('%s revert: %s' % (name, e))
|
||||
|
||||
try:
|
||||
cj = TAG.cjMaxer
|
||||
if cj is not None and hasattr(cj, 'revert'):
|
||||
cj.revert()
|
||||
except Exception as e:
|
||||
notify.warning('cjMaxer revert: %s' % e)
|
||||
|
||||
try:
|
||||
revert_task_autoer()
|
||||
except Exception as e:
|
||||
notify.warning('taskAutoer revert: %s' % e)
|
||||
|
||||
for name in ('buildingAutoer', 'gagTrainer', 'vpMaxer', 'cfoMaxer', 'cjMaxer', 'ceoMaxer'):
|
||||
try:
|
||||
setattr(TAG, name, None)
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
ToontownBattleGlobals.SkipMovie = 0
|
||||
|
||||
if m is not None:
|
||||
try:
|
||||
m.taskAutoer = None
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
try:
|
||||
base.localAvatar.setSystemMessage(0, 'All autoers stopped.')
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
try:
|
||||
taskMgr.remove(_TASK_AUTOER_BOOK_CLOSE)
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
return True
|
||||
|
||||
|
||||
def _runStartTaskAutomationCore():
|
||||
"""Load bundle, bootstrap, and run first check (call when safe to run logic)."""
|
||||
if not loadAutoerBundle():
|
||||
try:
|
||||
base.localAvatar.setSystemMessage(0, 'Autoer bundle missing. Add autoers/TaskAutoer full source.py')
|
||||
except Exception:
|
||||
pass
|
||||
return False
|
||||
m = _bundleModule
|
||||
try:
|
||||
from toontown.quest.TaskAutoer import bootstrap_task_autoer
|
||||
ta = bootstrap_task_autoer()
|
||||
m.taskAutoer = ta
|
||||
ta.checkWhatToDo()
|
||||
except Exception as e:
|
||||
_logAutoerException('startTaskAutomation', e)
|
||||
try:
|
||||
detail = traceback.format_exc()
|
||||
msg = 'Could not start task autoer: %s\n%s' % (e, detail)
|
||||
if len(msg) > 2000:
|
||||
msg = msg[:2000] + '\n... (truncated)'
|
||||
base.localAvatar.setSystemMessage(0, msg)
|
||||
except Exception:
|
||||
pass
|
||||
return False
|
||||
return True
|
||||
|
||||
|
||||
def _taskAutoerBookCloseSequence(task):
|
||||
"""
|
||||
Close the sticker book the same way the player would (closeBook -> bookDone ->
|
||||
CloseBook anim -> walk). Do not fsm.request('walk') synchronously: if OpenBook's
|
||||
callback has not run yet, enterStickerBookGUI can fire after we leave stickerBook
|
||||
and reopen the book (render hidden, mouse off) while in walk — total control loss.
|
||||
"""
|
||||
try:
|
||||
place = base.cr.playGame.getPlace()
|
||||
if place is None or place.getState() != 'stickerBook':
|
||||
taskMgr.remove(_TASK_AUTOER_BOOK_CLOSE)
|
||||
_runStartTaskAutomationCore()
|
||||
return task.done
|
||||
book = base.localAvatar.book
|
||||
if not getattr(book, 'entered', 0):
|
||||
task.waitEnter = getattr(task, 'waitEnter', 0) + 1
|
||||
if task.waitEnter > 300:
|
||||
notify.warning('AutoerManager: book GUI never became active; starting task autoer')
|
||||
taskMgr.remove(_TASK_AUTOER_BOOK_CLOSE)
|
||||
_runStartTaskAutomationCore()
|
||||
return task.done
|
||||
return task.cont
|
||||
if not getattr(task, 'issuedClose', 0):
|
||||
book.closeBook()
|
||||
task.issuedClose = 1
|
||||
if place.getState() != 'stickerBook':
|
||||
taskMgr.remove(_TASK_AUTOER_BOOK_CLOSE)
|
||||
_runStartTaskAutomationCore()
|
||||
return task.done
|
||||
task.waitLeave = getattr(task, 'waitLeave', 0) + 1
|
||||
if task.waitLeave > 600:
|
||||
notify.warning('AutoerManager: timeout leaving stickerBook; starting task autoer')
|
||||
taskMgr.remove(_TASK_AUTOER_BOOK_CLOSE)
|
||||
_runStartTaskAutomationCore()
|
||||
return task.done
|
||||
return task.cont
|
||||
except Exception as e:
|
||||
notify.warning('_taskAutoerBookCloseSequence: %s' % e)
|
||||
try:
|
||||
taskMgr.remove(_TASK_AUTOER_BOOK_CLOSE)
|
||||
except Exception:
|
||||
pass
|
||||
_runStartTaskAutomationCore()
|
||||
return task.done
|
||||
|
||||
|
||||
def startTaskAutomation():
|
||||
try:
|
||||
place = base.cr.playGame.getPlace()
|
||||
if place is not None and getattr(place, 'fsm', None) is not None:
|
||||
if place.getState() == 'stickerBook':
|
||||
taskMgr.remove(_TASK_AUTOER_BOOK_CLOSE)
|
||||
taskMgr.add(_taskAutoerBookCloseSequence, _TASK_AUTOER_BOOK_CLOSE)
|
||||
return True
|
||||
except Exception as e:
|
||||
notify.warning('startTaskAutomation (defer sticker book): %s' % e)
|
||||
return _runStartTaskAutomationCore()
|
||||
|
||||
|
||||
class _EmergencyStopListener(DirectObject):
|
||||
|
||||
def __init__(self):
|
||||
DirectObject.__init__(self)
|
||||
for ev in ('backslash', 'raw-backslash'):
|
||||
self.accept(ev, self._onStop)
|
||||
try:
|
||||
self.accept('\\', self._onStop)
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
def _onStop(self):
|
||||
stopAllAutoers()
|
||||
|
||||
def destroy(self):
|
||||
self.ignoreAll()
|
||||
|
||||
|
||||
def attachEmergencyStopListener():
|
||||
global _emergencyListener
|
||||
if _emergencyListener is not None:
|
||||
return
|
||||
_emergencyListener = _EmergencyStopListener()
|
||||
|
||||
|
||||
def detachEmergencyStopListener():
|
||||
global _emergencyListener
|
||||
if _emergencyListener is None:
|
||||
return
|
||||
_emergencyListener.destroy()
|
||||
_emergencyListener = None
|
||||
File diff suppressed because it is too large
Load Diff
|
|
@ -0,0 +1,11 @@
|
|||
"""Shared handles for companion autoers used by TaskAutoer (building/gag/boss maxers).
|
||||
|
||||
Populate these from your loader after each companion module is instantiated.
|
||||
"""
|
||||
|
||||
buildingAutoer = None
|
||||
gagTrainer = None
|
||||
vpMaxer = None
|
||||
cfoMaxer = None
|
||||
cjMaxer = None
|
||||
ceoMaxer = None
|
||||
|
|
@ -0,0 +1,94 @@
|
|||
from panda3d.core import *
|
||||
from panda3d.physics import *
|
||||
from direct.directnotify import DirectNotifyGlobal
|
||||
from direct.distributed import DistributedObject
|
||||
from direct.task import Task
|
||||
from direct.task.TaskManagerGlobal import taskMgr
|
||||
from direct.showbase.ShowBaseGlobal import globalClock
|
||||
from toontown.toonbase import ToontownGlobals
|
||||
|
||||
|
||||
class DistributedTTCCraneSandbox(DistributedObject.DistributedObject):
|
||||
notify = DirectNotifyGlobal.directNotify.newCategory('DistributedTTCCraneSandbox')
|
||||
|
||||
def __init__(self, cr):
|
||||
DistributedObject.DistributedObject.__init__(self, cr)
|
||||
self.ttcCraneSandbox = True
|
||||
self.cranes = {}
|
||||
self.safes = {}
|
||||
self.heldObject = None
|
||||
self.physicsMgr = None
|
||||
self.geom = None
|
||||
self.magnet = None
|
||||
self.craneArm = None
|
||||
self.controls = None
|
||||
self.stick = None
|
||||
self.safe = None
|
||||
self.cableTex = None
|
||||
self.lightning = None
|
||||
return
|
||||
|
||||
def announceGenerate(self):
|
||||
DistributedObject.DistributedObject.announceGenerate(self)
|
||||
self.cr.ttcCraneSandboxBossId = self.doId
|
||||
self.startLoad()
|
||||
|
||||
def startLoad(self):
|
||||
self.magnet = loader.loadModel('phase_10/models/cogHQ/CBMagnet.bam')
|
||||
self.craneArm = loader.loadModel('phase_10/models/cogHQ/CBCraneArm.bam')
|
||||
self.controls = loader.loadModel('phase_10/models/cogHQ/CBCraneControls.bam')
|
||||
self.stick = loader.loadModel('phase_10/models/cogHQ/CBCraneStick.bam')
|
||||
self.safe = loader.loadModel('phase_10/models/cogHQ/CBSafe.bam')
|
||||
self.lightning = loader.loadModel('phase_10/models/cogHQ/CBLightning.bam')
|
||||
self.cableTex = self.craneArm.findTexture('MagnetControl')
|
||||
self.geom = NodePath('ttc-crane-sandbox-geom')
|
||||
plane = CollisionPlane(Plane(Vec3(0, 0, 1), Point3(0, 0, -120)))
|
||||
planeNode = CollisionNode('dropPlane')
|
||||
planeNode.addSolid(plane)
|
||||
planeNode.setCollideMask(ToontownGlobals.PieBitmask)
|
||||
self.geom.attachNewNode(planeNode)
|
||||
self.geom.reparentTo(render)
|
||||
self.physicsMgr = PhysicsManager()
|
||||
integrator = LinearEulerIntegrator()
|
||||
self.physicsMgr.attachLinearIntegrator(integrator)
|
||||
fn = ForceNode('gravity')
|
||||
self.fnp = self.geom.attachNewNode(fn)
|
||||
gravity = LinearVectorForce(0, 0, -32)
|
||||
fn.addForce(gravity)
|
||||
self.physicsMgr.addLinearForce(gravity)
|
||||
taskMgr.add(self.__doPhysics, self.uniqueName('physics'), priority=25)
|
||||
|
||||
def __doPhysics(self, task):
|
||||
dt = globalClock.getDt()
|
||||
self.physicsMgr.doPhysics(dt)
|
||||
return Task.cont
|
||||
|
||||
def disable(self):
|
||||
taskMgr.remove(self.uniqueName('physics'))
|
||||
self.ttcCraneSandbox = False
|
||||
if getattr(self.cr, 'ttcCraneSandboxBossId', None) == self.doId:
|
||||
self.cr.ttcCraneSandboxBossId = None
|
||||
if self.physicsMgr:
|
||||
self.physicsMgr.clearLinearForces()
|
||||
if getattr(self, 'fnp', None):
|
||||
self.fnp.removeNode()
|
||||
self.fnp = None
|
||||
if self.geom:
|
||||
self.geom.removeNode()
|
||||
self.geom = None
|
||||
self.magnet = None
|
||||
self.craneArm = None
|
||||
self.controls = None
|
||||
self.stick = None
|
||||
self.safe = None
|
||||
self.cableTex = None
|
||||
self.lightning = None
|
||||
DistributedObject.DistributedObject.disable(self)
|
||||
|
||||
def toCraneMode(self):
|
||||
place = self.cr.playGame.getPlace()
|
||||
if place and hasattr(place, 'fsm'):
|
||||
place.setState('crane')
|
||||
|
||||
def toFinalBattleMode(self):
|
||||
pass
|
||||
|
|
@ -0,0 +1,66 @@
|
|||
from panda3d.core import NodePath
|
||||
from direct.distributed import DistributedObjectAI
|
||||
from direct.directnotify import DirectNotifyGlobal
|
||||
from toontown.toonbase import ToontownGlobals
|
||||
from toontown.coghq import DistributedCashbotBossCraneAI
|
||||
from toontown.coghq import DistributedCashbotBossSafeAI
|
||||
|
||||
|
||||
class DistributedTTCCraneSandboxAI(DistributedObjectAI.DistributedObjectAI):
|
||||
notify = DirectNotifyGlobal.directNotify.newCategory('DistributedTTCCraneSandboxAI')
|
||||
|
||||
craneSandbox = True
|
||||
|
||||
def __init__(self, air):
|
||||
DistributedObjectAI.DistributedObjectAI.__init__(self, air)
|
||||
self.scene = NodePath('scene')
|
||||
self.cranes = None
|
||||
self.safes = None
|
||||
self.heldObject = None
|
||||
self.attackCode = 0
|
||||
self.involvedToons = []
|
||||
|
||||
def spawnCranesAndSafes(self):
|
||||
if self.cranes is not None:
|
||||
return
|
||||
self.cranes = []
|
||||
for index in range(len(ToontownGlobals.TTCCraneSandboxCranePosHprs)):
|
||||
crane = DistributedCashbotBossCraneAI.DistributedCashbotBossCraneAI(self.air, self, index)
|
||||
crane.generateWithRequired(self.zoneId)
|
||||
self.cranes.append(crane)
|
||||
|
||||
self.safes = []
|
||||
for index in range(len(ToontownGlobals.TTCCraneSandboxSafePosHprs)):
|
||||
safe = DistributedCashbotBossSafeAI.DistributedCashbotBossSafeAI(self.air, self, index)
|
||||
safe.generateWithRequired(self.zoneId)
|
||||
self.safes.append(safe)
|
||||
|
||||
for crane in self.cranes:
|
||||
crane.request('Free')
|
||||
|
||||
for safe in self.safes:
|
||||
safe.request('Initial')
|
||||
|
||||
def __deleteBattleObjects(self):
|
||||
if self.cranes is not None:
|
||||
for crane in self.cranes:
|
||||
try:
|
||||
crane.request('Off')
|
||||
except Exception:
|
||||
pass
|
||||
crane.requestDelete()
|
||||
|
||||
self.cranes = None
|
||||
if self.safes is not None:
|
||||
for safe in self.safes:
|
||||
try:
|
||||
safe.request('Off')
|
||||
except Exception:
|
||||
pass
|
||||
safe.requestDelete()
|
||||
|
||||
self.safes = None
|
||||
|
||||
def delete(self):
|
||||
self.__deleteBattleObjects()
|
||||
DistributedObjectAI.DistributedObjectAI.delete(self)
|
||||
|
|
@ -0,0 +1,131 @@
|
|||
from direct.gui.DirectGui import *
|
||||
from panda3d.core import *
|
||||
|
||||
from toontown.shtiker import ShtikerPage
|
||||
from toontown.toonbase import ToontownGlobals
|
||||
from toontown.toonbase import TTLocalizer
|
||||
from toontown.quest import AutoerManager
|
||||
|
||||
|
||||
class AutoerPage(ShtikerPage.ShtikerPage):
|
||||
|
||||
def __init__(self):
|
||||
ShtikerPage.ShtikerPage.__init__(self)
|
||||
return
|
||||
|
||||
def load(self):
|
||||
ShtikerPage.ShtikerPage.load(self)
|
||||
self.title = DirectLabel(
|
||||
parent=self,
|
||||
relief=None,
|
||||
text=TTLocalizer.AutoerPageTitle,
|
||||
text_scale=0.12,
|
||||
pos=(0, 0, 0.62),
|
||||
)
|
||||
helpText = TTLocalizer.AutoerPageHelp
|
||||
self.helpLabel = DirectLabel(
|
||||
parent=self,
|
||||
relief=None,
|
||||
text=helpText,
|
||||
text_scale=0.045,
|
||||
text_align=TextNode.ACenter,
|
||||
text_wordwrap=28,
|
||||
pos=(0, 0, 0.38),
|
||||
)
|
||||
self.statusLabel = DirectLabel(
|
||||
parent=self,
|
||||
relief=None,
|
||||
text=TTLocalizer.AutoerPageStatusIdle,
|
||||
text_scale=0.045,
|
||||
text_align=TextNode.ACenter,
|
||||
pos=(0, 0, 0.06),
|
||||
textMayChange=1,
|
||||
)
|
||||
# frameSize in aspect2d units: keep width ~1.0–1.2 (same ballpark as InventoryPage restock, etc.)
|
||||
btnFrame = (-1.05, 1.05, -0.1, 0.1)
|
||||
btnTextScale = 0.042
|
||||
self.loadBtn = DirectButton(
|
||||
parent=self,
|
||||
relief=DGG.RAISED,
|
||||
text=TTLocalizer.AutoerPageLoad,
|
||||
text_scale=btnTextScale,
|
||||
frameSize=btnFrame,
|
||||
borderWidth=(0.01, 0.01),
|
||||
pos=(0, 0, -0.14),
|
||||
command=self.__loadBundle,
|
||||
)
|
||||
self.startBtn = DirectButton(
|
||||
parent=self,
|
||||
relief=DGG.RAISED,
|
||||
text=TTLocalizer.AutoerPageStartTasks,
|
||||
text_scale=btnTextScale,
|
||||
frameSize=btnFrame,
|
||||
borderWidth=(0.01, 0.01),
|
||||
pos=(0, 0, -0.3),
|
||||
command=self.__startTasks,
|
||||
)
|
||||
self.stopBtn = DirectButton(
|
||||
parent=self,
|
||||
relief=DGG.RAISED,
|
||||
text=TTLocalizer.AutoerPageStopAll,
|
||||
text_scale=btnTextScale,
|
||||
frameSize=btnFrame,
|
||||
borderWidth=(0.01, 0.01),
|
||||
pos=(0, 0, -0.46),
|
||||
command=self.__stopAll,
|
||||
text_fg=(0.9, 0.2, 0.2, 1),
|
||||
)
|
||||
return
|
||||
|
||||
def unload(self):
|
||||
del self.title
|
||||
del self.helpLabel
|
||||
del self.statusLabel
|
||||
self.loadBtn.destroy()
|
||||
del self.loadBtn
|
||||
self.startBtn.destroy()
|
||||
del self.startBtn
|
||||
self.stopBtn.destroy()
|
||||
del self.stopBtn
|
||||
ShtikerPage.ShtikerPage.unload(self)
|
||||
|
||||
def __refreshStatus(self):
|
||||
if AutoerManager.isBundleLoaded():
|
||||
self.statusLabel['text'] = TTLocalizer.AutoerPageStatusLoaded
|
||||
else:
|
||||
self.statusLabel['text'] = TTLocalizer.AutoerPageStatusIdle
|
||||
|
||||
def __loadBundle(self):
|
||||
messenger.send('wakeup')
|
||||
if AutoerManager.loadAutoerBundle():
|
||||
self.__refreshStatus()
|
||||
try:
|
||||
base.localAvatar.setSystemMessage(0, TTLocalizer.AutoerPageMsgLoaded)
|
||||
except Exception:
|
||||
pass
|
||||
else:
|
||||
try:
|
||||
base.localAvatar.setSystemMessage(0, TTLocalizer.AutoerPageMsgLoadFail)
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
def __startTasks(self):
|
||||
messenger.send('wakeup')
|
||||
if AutoerManager.startTaskAutomation():
|
||||
self.__refreshStatus()
|
||||
try:
|
||||
base.localAvatar.setSystemMessage(0, TTLocalizer.AutoerPageMsgStarted)
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
def __stopAll(self):
|
||||
messenger.send('wakeup')
|
||||
AutoerManager.stopAllAutoers()
|
||||
self.__refreshStatus()
|
||||
|
||||
def enter(self):
|
||||
ShtikerPage.ShtikerPage.enter(self)
|
||||
self.__refreshStatus()
|
||||
|
||||
def exit(self):
|
||||
ShtikerPage.ShtikerPage.exit(self)
|
||||
Loading…
Reference in New Issue