2015-03-03 22:10:12 +00:00
|
|
|
from direct.distributed.PyDatagram import *
|
|
|
|
from pandac.PandaModules import *
|
|
|
|
|
|
|
|
from otp.ai.AIZoneData import AIZoneDataStore
|
|
|
|
from otp.ai.MagicWordManagerAI import MagicWordManagerAI
|
|
|
|
from otp.ai.TimeManagerAI import TimeManagerAI
|
|
|
|
from otp.ai import BanManagerAI
|
|
|
|
from otp.distributed.OtpDoGlobals import *
|
|
|
|
from otp.friends.FriendManagerAI import FriendManagerAI
|
|
|
|
from toontown.ai import CogPageManagerAI
|
|
|
|
from toontown.ai import CogSuitManagerAI
|
|
|
|
from toontown.ai import PromotionManagerAI
|
|
|
|
from toontown.ai.AchievementsManagerAI import AchievementsManagerAI
|
|
|
|
from toontown.ai.FishManagerAI import FishManagerAI
|
|
|
|
from toontown.ai.HolidayManagerAI import HolidayManagerAI
|
|
|
|
from toontown.ai.NewsManagerAI import NewsManagerAI
|
|
|
|
from toontown.ai.QuestManagerAI import QuestManagerAI
|
|
|
|
from toontown.ai import BankManagerAI
|
2015-03-09 22:11:27 +00:00
|
|
|
from toontown.catalog.AccountDateAI import AccountDateAI
|
2015-03-03 22:10:12 +00:00
|
|
|
from toontown.building.DistributedBuildingQueryMgrAI import DistributedBuildingQueryMgrAI
|
|
|
|
from toontown.building.DistributedTrophyMgrAI import DistributedTrophyMgrAI
|
|
|
|
from toontown.catalog.CatalogManagerAI import CatalogManagerAI
|
|
|
|
from toontown.coghq import CountryClubManagerAI
|
|
|
|
from toontown.coghq import FactoryManagerAI
|
|
|
|
from toontown.coghq import LawOfficeManagerAI
|
|
|
|
from toontown.coghq import MintManagerAI
|
|
|
|
from toontown.distributed.ToontownDistrictAI import ToontownDistrictAI
|
|
|
|
from toontown.distributed.ToontownDistrictStatsAI import ToontownDistrictStatsAI
|
|
|
|
from toontown.distributed.ToontownInternalRepository import ToontownInternalRepository
|
2015-04-20 14:29:11 +00:00
|
|
|
from toontown.coderedemption.TTCodeRedemptionMgrAI import TTCodeRedemptionMgrAI
|
2015-03-03 22:10:12 +00:00
|
|
|
from toontown.dna.DNAParser import loadDNAFileAI
|
|
|
|
from toontown.estate.EstateManagerAI import EstateManagerAI
|
|
|
|
from toontown.hood import BRHoodAI
|
|
|
|
from toontown.hood import BossbotHQAI
|
|
|
|
from toontown.hood import CashbotHQAI
|
|
|
|
from toontown.hood import DDHoodAI
|
|
|
|
from toontown.hood import DGHoodAI
|
|
|
|
from toontown.hood import DLHoodAI
|
|
|
|
from toontown.hood import GSHoodAI
|
|
|
|
from toontown.hood import GZHoodAI
|
|
|
|
from toontown.hood import LawbotHQAI
|
|
|
|
from toontown.hood import MMHoodAI
|
|
|
|
from toontown.hood import OZHoodAI
|
|
|
|
from toontown.hood import SellbotHQAI
|
|
|
|
from toontown.hood import TTHoodAI
|
|
|
|
from toontown.hood import ZoneUtil
|
|
|
|
from toontown.pets.PetManagerAI import PetManagerAI
|
|
|
|
from toontown.safezone.SafeZoneManagerAI import SafeZoneManagerAI
|
|
|
|
from toontown.suit.SuitInvasionManagerAI import SuitInvasionManagerAI
|
2015-03-08 10:22:51 +00:00
|
|
|
from toontown.groups.GroupManagerAI import GroupManagerAI
|
2015-03-03 22:10:12 +00:00
|
|
|
from toontown.toon import NPCToons
|
|
|
|
from toontown.toonbase import ToontownGlobals
|
|
|
|
from toontown.tutorial.TutorialManagerAI import TutorialManagerAI
|
|
|
|
from toontown.uberdog.DistributedPartyManagerAI import DistributedPartyManagerAI
|
|
|
|
|
|
|
|
|
|
|
|
class ToontownAIRepository(ToontownInternalRepository):
|
|
|
|
def __init__(self, baseChannel, stateServerChannel, districtName):
|
|
|
|
ToontownInternalRepository.__init__(
|
|
|
|
self, baseChannel, stateServerChannel, dcSuffix='AI')
|
|
|
|
|
|
|
|
self.districtName = districtName
|
|
|
|
|
|
|
|
self.notify.setInfo(True) # Our AI repository should always log info.
|
|
|
|
self.hoods = []
|
|
|
|
self.cogHeadquarters = []
|
|
|
|
self.dnaStoreMap = {}
|
|
|
|
self.dnaDataMap = {}
|
|
|
|
self.suitPlanners = {}
|
|
|
|
self.buildingManagers = {}
|
|
|
|
self.factoryMgr = None
|
|
|
|
self.mintMgr = None
|
|
|
|
self.lawOfficeMgr = None
|
|
|
|
self.countryClubMgr = None
|
2015-03-07 08:24:33 +00:00
|
|
|
self.groupManager = GroupManagerAI(self)
|
2015-03-03 22:10:12 +00:00
|
|
|
|
|
|
|
self.zoneAllocator = UniqueIdAllocator(ToontownGlobals.DynamicZonesBegin,
|
|
|
|
ToontownGlobals.DynamicZonesEnd)
|
|
|
|
self.zoneDataStore = AIZoneDataStore()
|
|
|
|
|
|
|
|
self.wantFishing = self.config.GetBool('want-fishing', True)
|
|
|
|
self.wantHousing = self.config.GetBool('want-housing', True)
|
|
|
|
self.wantPets = self.config.GetBool('want-pets', True)
|
|
|
|
self.wantParties = self.config.GetBool('want-parties', True)
|
|
|
|
self.wantCogbuildings = self.config.GetBool('want-cogbuildings', True)
|
|
|
|
self.wantCogdominiums = self.config.GetBool('want-cogdominiums', True)
|
|
|
|
self.doLiveUpdates = self.config.GetBool('want-live-updates', False)
|
|
|
|
self.wantTrackClsends = self.config.GetBool('want-track-clsends', False)
|
|
|
|
self.wantAchievements = self.config.GetBool('want-achievements', True)
|
2015-03-07 15:01:47 +00:00
|
|
|
self.wantGloveNpc = self.config.GetBool('want-glove-npc', True)
|
2015-03-03 22:10:12 +00:00
|
|
|
self.baseXpMultiplier = self.config.GetFloat('base-xp-multiplier', 1.0)
|
|
|
|
self.wantHalloween = self.config.GetBool('want-halloween', False)
|
|
|
|
self.wantChristmas = self.config.GetBool('want-christmas', False)
|
|
|
|
|
|
|
|
self.cogSuitMessageSent = False
|
|
|
|
|
|
|
|
def createManagers(self):
|
|
|
|
self.timeManager = TimeManagerAI(self)
|
|
|
|
self.timeManager.generateWithRequired(2)
|
|
|
|
self.magicWordManager = MagicWordManagerAI(self)
|
|
|
|
self.magicWordManager.generateWithRequired(2)
|
|
|
|
self.newsManager = NewsManagerAI(self)
|
|
|
|
self.newsManager.generateWithRequired(2)
|
|
|
|
self.safeZoneManager = SafeZoneManagerAI(self)
|
|
|
|
self.safeZoneManager.generateWithRequired(2)
|
|
|
|
self.tutorialManager = TutorialManagerAI(self)
|
|
|
|
self.tutorialManager.generateWithRequired(2)
|
|
|
|
self.friendManager = FriendManagerAI(self)
|
|
|
|
self.friendManager.generateWithRequired(2)
|
|
|
|
self.questManager = QuestManagerAI(self)
|
|
|
|
self.banManager = BanManagerAI.BanManagerAI(self)
|
|
|
|
self.achievementsManager = AchievementsManagerAI(self)
|
|
|
|
self.suitInvasionManager = SuitInvasionManagerAI(self)
|
|
|
|
self.trophyMgr = DistributedTrophyMgrAI(self)
|
|
|
|
self.trophyMgr.generateWithRequired(2)
|
|
|
|
self.cogSuitMgr = CogSuitManagerAI.CogSuitManagerAI(self)
|
|
|
|
self.promotionMgr = PromotionManagerAI.PromotionManagerAI(self)
|
|
|
|
self.cogPageManager = CogPageManagerAI.CogPageManagerAI()
|
|
|
|
self.bankManager = BankManagerAI.BankManagerAI(self)
|
|
|
|
self.holidayManager = HolidayManagerAI(self)
|
2015-04-20 14:29:11 +00:00
|
|
|
self.codeRedemptionMgr = TTCodeRedemptionMgrAI(self)
|
|
|
|
self.codeRedemptionMgr.generateWithRequired(2)
|
2015-03-09 22:11:27 +00:00
|
|
|
self.accountDateMgr = AccountDateAI(self)
|
|
|
|
self.accountDateMgr.generateWithRequired(2)
|
2015-03-03 22:10:12 +00:00
|
|
|
self.buildingQueryMgr = DistributedBuildingQueryMgrAI(self)
|
|
|
|
self.buildingQueryMgr.generateWithRequired(2)
|
2015-03-07 08:24:33 +00:00
|
|
|
self.groupManager.generateWithRequired(2)
|
2015-03-03 22:10:12 +00:00
|
|
|
if self.wantFishing:
|
|
|
|
self.fishManager = FishManagerAI(self)
|
|
|
|
if self.wantHousing:
|
|
|
|
self.estateManager = EstateManagerAI(self)
|
|
|
|
self.estateManager.generateWithRequired(2)
|
|
|
|
self.catalogManager = CatalogManagerAI(self)
|
|
|
|
self.catalogManager.generateWithRequired(2)
|
|
|
|
self.deliveryManager = self.generateGlobalObject(
|
|
|
|
OTP_DO_ID_TOONTOWN_DELIVERY_MANAGER, 'DistributedDeliveryManager')
|
|
|
|
if self.wantPets:
|
|
|
|
self.petMgr = PetManagerAI(self)
|
|
|
|
if self.wantParties:
|
|
|
|
self.partyManager = DistributedPartyManagerAI(self)
|
|
|
|
self.partyManager.generateWithRequired(2)
|
|
|
|
self.globalPartyMgr = self.generateGlobalObject(
|
|
|
|
OTP_DO_ID_GLOBAL_PARTY_MANAGER, 'GlobalPartyManager')
|
|
|
|
|
|
|
|
def createSafeZones(self):
|
|
|
|
NPCToons.generateZone2NpcDict()
|
|
|
|
if self.config.GetBool('want-toontown-central', True):
|
|
|
|
self.hoods.append(TTHoodAI.TTHoodAI(self))
|
|
|
|
if self.config.GetBool('want-donalds-dock', True):
|
|
|
|
self.hoods.append(DDHoodAI.DDHoodAI(self))
|
|
|
|
if self.config.GetBool('want-daisys-garden', True):
|
|
|
|
self.hoods.append(DGHoodAI.DGHoodAI(self))
|
|
|
|
if self.config.GetBool('want-minnies-melodyland', True):
|
|
|
|
self.hoods.append(MMHoodAI.MMHoodAI(self))
|
|
|
|
if self.config.GetBool('want-the-burrrgh', True):
|
|
|
|
self.hoods.append(BRHoodAI.BRHoodAI(self))
|
|
|
|
if self.config.GetBool('want-donalds-dreamland', True):
|
|
|
|
self.hoods.append(DLHoodAI.DLHoodAI(self))
|
|
|
|
if self.config.GetBool('want-goofy-speedway', True):
|
|
|
|
self.hoods.append(GSHoodAI.GSHoodAI(self))
|
|
|
|
if self.config.GetBool('want-outdoor-zone', True):
|
|
|
|
self.hoods.append(OZHoodAI.OZHoodAI(self))
|
|
|
|
if self.config.GetBool('want-golf-zone', True):
|
|
|
|
self.hoods.append(GZHoodAI.GZHoodAI(self))
|
|
|
|
|
|
|
|
def createCogHeadquarters(self):
|
|
|
|
NPCToons.generateZone2NpcDict()
|
|
|
|
if self.config.GetBool('want-sellbot-headquarters', True):
|
|
|
|
self.factoryMgr = FactoryManagerAI.FactoryManagerAI(self)
|
|
|
|
self.cogHeadquarters.append(SellbotHQAI.SellbotHQAI(self))
|
|
|
|
if self.config.GetBool('want-cashbot-headquarters', True):
|
|
|
|
self.mintMgr = MintManagerAI.MintManagerAI(self)
|
|
|
|
self.cogHeadquarters.append(CashbotHQAI.CashbotHQAI(self))
|
|
|
|
if self.config.GetBool('want-lawbot-headquarters', True):
|
|
|
|
self.lawOfficeMgr = LawOfficeManagerAI.LawOfficeManagerAI(self)
|
|
|
|
self.cogHeadquarters.append(LawbotHQAI.LawbotHQAI(self))
|
|
|
|
if self.config.GetBool('want-bossbot-headquarters', True):
|
|
|
|
self.countryClubMgr = CountryClubManagerAI.CountryClubManagerAI(self)
|
|
|
|
self.cogHeadquarters.append(BossbotHQAI.BossbotHQAI(self))
|
|
|
|
|
|
|
|
def handleConnected(self):
|
|
|
|
self.districtId = self.allocateChannel()
|
|
|
|
self.notify.info('Creating ToontownDistrictAI(%d)...' % self.districtId)
|
|
|
|
self.distributedDistrict = ToontownDistrictAI(self)
|
|
|
|
self.distributedDistrict.setName(self.districtName)
|
|
|
|
self.distributedDistrict.generateWithRequiredAndId(
|
|
|
|
self.districtId, self.getGameDoId(), 2)
|
|
|
|
self.notify.info('Claiming ownership of channel ID: %d...' % self.districtId)
|
|
|
|
self.claimOwnership(self.districtId)
|
|
|
|
|
|
|
|
self.districtStats = ToontownDistrictStatsAI(self)
|
|
|
|
self.districtStats.settoontownDistrictId(self.districtId)
|
|
|
|
self.districtStats.generateWithRequiredAndId(
|
|
|
|
self.allocateChannel(), self.getGameDoId(), 3)
|
|
|
|
self.notify.info('Created ToontownDistrictStats(%d)' % self.districtStats.doId)
|
|
|
|
|
|
|
|
self.notify.info('Creating managers...')
|
|
|
|
self.createManagers()
|
|
|
|
if self.config.GetBool('want-safe-zones', True):
|
|
|
|
self.notify.info('Creating safe zones...')
|
|
|
|
self.createSafeZones()
|
|
|
|
if self.config.GetBool('want-cog-headquarters', True):
|
|
|
|
self.notify.info('Creating Cog headquarters...')
|
|
|
|
self.createCogHeadquarters()
|
|
|
|
|
|
|
|
self.notify.info('Making district available...')
|
|
|
|
self.distributedDistrict.b_setAvailable(1)
|
|
|
|
self.notify.info('Done.')
|
|
|
|
|
|
|
|
def claimOwnership(self, channelId):
|
|
|
|
datagram = PyDatagram()
|
|
|
|
datagram.addServerHeader(channelId, self.ourChannel, STATESERVER_OBJECT_SET_AI)
|
|
|
|
datagram.addChannel(self.ourChannel)
|
|
|
|
self.send(datagram)
|
|
|
|
|
|
|
|
def lookupDNAFileName(self, zoneId):
|
|
|
|
zoneId = ZoneUtil.getCanonicalZoneId(zoneId)
|
|
|
|
hoodId = ZoneUtil.getCanonicalHoodId(zoneId)
|
|
|
|
hood = ToontownGlobals.dnaMap[hoodId]
|
|
|
|
if hoodId == zoneId:
|
|
|
|
zoneId = 'sz'
|
|
|
|
phaseNum = ToontownGlobals.phaseMap[hoodId]
|
|
|
|
else:
|
|
|
|
phaseNum = ToontownGlobals.streetPhaseMap[hoodId]
|
|
|
|
return 'phase_%s/dna/%s_%s.pdna' % (phaseNum, hood, zoneId)
|
|
|
|
|
|
|
|
def loadDNAFileAI(self, dnastore, filename):
|
|
|
|
return loadDNAFileAI(dnastore, filename)
|
|
|
|
|
|
|
|
def incrementPopulation(self):
|
|
|
|
self.districtStats.b_setAvatarCount(self.districtStats.getAvatarCount() + 1)
|
|
|
|
|
|
|
|
def decrementPopulation(self):
|
|
|
|
self.districtStats.b_setAvatarCount(self.districtStats.getAvatarCount() - 1)
|
|
|
|
|
|
|
|
def allocateZone(self):
|
|
|
|
return self.zoneAllocator.allocate()
|
|
|
|
|
|
|
|
def deallocateZone(self, zone):
|
|
|
|
self.zoneAllocator.free(zone)
|
|
|
|
|
|
|
|
def getZoneDataStore(self):
|
|
|
|
return self.zoneDataStore
|
|
|
|
|
|
|
|
def getTrackClsends(self):
|
|
|
|
return self.wantTrackClsends
|
|
|
|
|
|
|
|
def getAvatarExitEvent(self, avId):
|
|
|
|
return 'distObjDelete-%d' % avId
|
|
|
|
|
|
|
|
def trueUniqueName(self, name):
|
|
|
|
return self.uniqueName(name)
|