toontown-just-works/toontown/ai/FishManagerAI.py
2024-07-07 18:08:39 -05:00

125 lines
5.5 KiB
Python

import random
from otp.ai.MagicWordGlobal import *
from toontown.fishing import FishGlobals
from toontown.fishing.FishBase import FishBase
from toontown.toonbase import TTLocalizer, ToontownGlobals
from toontown.uberdog import TopToonsGlobals
class FishManagerAI:
def __init__(self, air):
self.air = air
self.ponds = {}
self.requestedFish = {}
def creditFishTank(self, av):
totalFish = len(av.fishCollection)
trophies = int(totalFish / 10)
curTrophies = len(av.fishingTrophies)
av.addMoney(av.fishTank.getTotalValue())
av.b_setFishTank([], [], [])
if trophies > curTrophies:
av.b_setMaxHp(av.getMaxHp() + trophies - curTrophies)
av.toonUp(av.getMaxHp())
av.b_setFishingTrophies(range(trophies))
return True
return False
def generateCatch(self, av, zoneId):
if len(av.fishTank) >= av.getMaxFishTank():
return [FishGlobals.OverTankLimit, 0, 0, 0]
rand = random.random() * 100.0
for cutoff in FishGlobals.SortedProbabilityCutoffs:
if rand <= cutoff:
itemType = FishGlobals.ProbabilityDict[cutoff]
break
if av.doId in self.requestedFish:
genus, species = self.requestedFish[av.doId]
weight = FishGlobals.getRandomWeight(genus, species)
fish = FishBase(genus, species, weight)
fishType = av.fishCollection.collectFish(fish)
if fishType == FishGlobals.COLLECT_NEW_ENTRY:
itemType = FishGlobals.FishItemNewEntry
elif fishType == FishGlobals.COLLECT_NEW_RECORD:
itemType = FishGlobals.FishItemNewRecord
else:
itemType = FishGlobals.FishItem
netlist = av.fishCollection.getNetLists()
av.d_setFishCollection(netlist[0], netlist[1], netlist[2])
av.fishTank.addFish(fish)
netlist = av.fishTank.getNetLists()
av.d_setFishTank(netlist[0], netlist[1], netlist[2])
del self.requestedFish[av.doId]
av.addStat(ToontownGlobals.STAT_FISH)
return [itemType, genus, species, weight]
if itemType == FishGlobals.FishItem:
success, genus, species, weight = FishGlobals.getRandomFishVitals(zoneId, av.getFishingRod())
fish = FishBase(genus, species, weight)
fishType = av.fishCollection.collectFish(fish)
if fishType == FishGlobals.COLLECT_NEW_ENTRY:
itemType = FishGlobals.FishItemNewEntry
elif fishType == FishGlobals.COLLECT_NEW_RECORD:
itemType = FishGlobals.FishItemNewRecord
else:
itemType = FishGlobals.FishItem
netlist = av.fishCollection.getNetLists()
av.d_setFishCollection(netlist[0], netlist[1], netlist[2])
av.fishTank.addFish(fish)
netlist = av.fishTank.getNetLists()
av.d_setFishTank(netlist[0], netlist[1], netlist[2])
messenger.send('topToonsManager-event', [av.doId, TopToonsGlobals.CAT_FISH, 1])
av.addStat(ToontownGlobals.STAT_FISH)
return [itemType, genus, species, weight]
elif itemType == FishGlobals.BootItem:
return [itemType, 0, 0, 0]
elif itemType == FishGlobals.QuestItem:
itemId = simbase.air.questManager.toonCaughtFishingItem(av)
if itemId != -1:
return [itemType, itemId, 0, 0]
else:
success, genus, species, weight = FishGlobals.getRandomFishVitals(zoneId, av.getFishingRod())
fish = FishBase(genus, species, weight)
fishType = av.fishCollection.collectFish(fish)
if fishType == FishGlobals.COLLECT_NEW_ENTRY:
itemType = FishGlobals.FishItemNewEntry
elif fishType == FishGlobals.COLLECT_NEW_RECORD:
itemType = FishGlobals.FishItemNewRecord
else:
itemType = FishGlobals.FishItem
netlist = av.fishCollection.getNetLists()
av.d_setFishCollection(netlist[0], netlist[1], netlist[2])
av.fishTank.addFish(fish)
netlist = av.fishTank.getNetLists()
av.d_setFishTank(netlist[0], netlist[1], netlist[2])
messenger.send('topToonsManager-event', [av.doId, TopToonsGlobals.CAT_FISH, 1])
av.addStat(ToontownGlobals.STAT_FISH)
return [itemType, genus, species, weight]
else:
money = FishGlobals.Rod2JellybeanDict[av.getFishingRod()]
av.addMoney(money)
return [itemType, money, 0, 0]
@magicWord(category=CATEGORY_ADMINISTRATOR, types=[str])
def fish(fishName):
"""
Register/unregister the fish to be caught on the invoker.
"""
invoker = spellbook.getInvoker()
if fishName.lower() == 'remove':
if invoker.doId not in simbase.air.fishManager.requestedFish:
return 'You have not requested a fish.'
del simbase.air.fishManager.requestedFish[invoker.doId]
return 'Removed your fish request.'
for genus, species in TTLocalizer.FishSpeciesNames:
for name in species:
if fishName.lower() != name.lower():
continue
fishRequest = (genus, species.index(name))
simbase.air.fishManager.requestedFish[invoker.doId] = fishRequest
return 'A request for the fish %s was saved.' % name
return "Couldn't find a fish with the name %s!" % fishName