125 lines
5.5 KiB
Python
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
|