automation: add bot scripts, quest task autoers, and custom autoer shtiker page

This commit is contained in:
Toontown Super 2026-07-13 14:08:48 -04:00
parent 04599db6d6
commit ebdae1b2ad
35 changed files with 17423 additions and 0 deletions

262
autoers/AutoerGui.py Normal file
View File

@ -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

464
autoers/BuildingAutoer.py Normal file
View File

@ -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()

View File

@ -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()

839
autoers/CEOMaxer.py Normal file
View File

@ -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()

759
autoers/CEOMaxerToontask.py Normal file
View File

@ -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

768
autoers/CFOMaxer.py Normal file
View File

@ -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()

748
autoers/CFOMaxerToontask.py Normal file
View File

@ -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

786
autoers/CJMaxer.py Normal file
View File

@ -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()

785
autoers/CJMaxerToontask.py Normal file
View File

@ -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()

838
autoers/GagTrainer15.py Normal file
View File

@ -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()

View File

@ -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')

232
autoers/GolfAutoer.py Normal file
View File

@ -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()

253
autoers/RaceAutoer.py Normal file
View File

@ -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()

View File

@ -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)

View File

@ -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)

View File

@ -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)')

View File

@ -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)

View File

@ -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)

View File

@ -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')

View File

@ -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)

View File

@ -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)')

View File

@ -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)

View File

@ -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)')

View File

@ -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

602
autoers/ToonBot.py Normal file
View File

@ -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())

901
autoers/VPMaxer.py Normal file
View File

@ -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()

783
autoers/VPMaxerToontask.py Normal file
View File

@ -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

View File

@ -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())

View File

@ -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

1203
toontown/quest/TaskAutoer.py Normal file

File diff suppressed because it is too large Load Diff

View File

@ -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

View File

@ -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

View File

@ -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)

View File

@ -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.01.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)