from pandac.PandaModules import * from direct.distributed import DistributedObject from direct.directnotify import DirectNotifyGlobal from toontown.toonbase import ToontownGlobals from toontown.toonbase import ToontownBattleGlobals from toontown.battle import SuitBattleGlobals from toontown.toonbase import TTLocalizer import HolidayDecorator import HalloweenHolidayDecorator import CrashedLeaderBoardDecorator from direct.interval.IntervalGlobal import * import calendar from copy import deepcopy from toontown.suit import SuitDNA from otp.ai.MagicWordGlobal import * decorationHolidays = [ToontownGlobals.WINTER_DECORATIONS, ToontownGlobals.WACKY_WINTER_DECORATIONS, ToontownGlobals.HALLOWEEN_PROPS, ToontownGlobals.SPOOKY_PROPS, ToontownGlobals.HALLOWEEN_COSTUMES, ToontownGlobals.SPOOKY_COSTUMES, ToontownGlobals.CRASHED_LEADERBOARD] promotionalSpeedChatHolidays = [] class NewsManager(DistributedObject.DistributedObject): notify = DirectNotifyGlobal.directNotify.newCategory('NewsManager') neverDisable = 1 YearlyHolidayType = 1 OncelyHolidayType = 2 RelativelyHolidayType = 3 OncelyMultipleStartHolidayType = 4 def __init__(self, cr): DistributedObject.DistributedObject.__init__(self, cr) self.population = 0 self.invading = 0 forcedHolidayDecorations = base.config.GetString('force-holiday-decorations', '') self.decorationHolidayIds = [] if forcedHolidayDecorations != '': forcedHolidayDecorations = forcedHolidayDecorations.split(',') for HID in forcedHolidayDecorations: try: self.decorationHolidayIds.append(decorationHolidays[int(HID)]) except: print 'holidayId value error: "%s"... skipping' %HID self.holidayDecorator = None self.holidayIdList = [] base.cr.newsManager = self base.localAvatar.inventory.setInvasionCreditMultiplier(1) self.weeklyCalendarHolidays = [] return def delete(self): self.cr.newsManager = None if self.holidayDecorator: self.holidayDecorator.exit() DistributedObject.DistributedObject.delete(self) return def setPopulation(self, population): self.population = population messenger.send('newPopulation', [population]) def getPopulation(self): return self.population def sendSystemMessage(self, message, style): base.localAvatar.setSystemMessage(style, message) def setInvasionStatus(self, msgType, suitType, remaining, flags): if suitType in SuitDNA.suitHeadTypes: suitName = SuitBattleGlobals.SuitAttributes[suitType]['name'] suitNamePlural = SuitBattleGlobals.SuitAttributes[suitType]['pluralname'] elif suitType in SuitDNA.suitDepts: suitName = SuitDNA.getDeptFullname(suitType) suitNamePlural = SuitDNA.getDeptFullnameP(suitType) messages = [] if msgType == ToontownGlobals.SuitInvasionBegin: messages.append(TTLocalizer.SuitInvasionBegin1) messages.append(TTLocalizer.SuitInvasionBegin2 % suitNamePlural) self.invading = 1 elif msgType == ToontownGlobals.SuitInvasionEnd: messages.append(TTLocalizer.SuitInvasionEnd1 % suitName) messages.append(TTLocalizer.SuitInvasionEnd2) self.invading = 0 elif msgType == ToontownGlobals.SuitInvasionUpdate: messages.append(TTLocalizer.SuitInvasionUpdate1) messages.append(TTLocalizer.SuitInvasionUpdate2) self.invading = 1 elif msgType == ToontownGlobals.SuitInvasionBulletin: messages.append(TTLocalizer.SuitInvasionBulletin1) messages.append(TTLocalizer.SuitInvasionBulletin2 % suitNamePlural) self.invading = 1 elif msgType == ToontownGlobals.SkelecogInvasionBegin: messages.append(TTLocalizer.SkelecogInvasionBegin1) messages.append(TTLocalizer.SkelecogInvasionBegin2) messages.append(TTLocalizer.SkelecogInvasionBegin3) self.invading = 1 elif msgType == ToontownGlobals.SkelecogInvasionEnd: messages.append(TTLocalizer.SkelecogInvasionEnd1) messages.append(TTLocalizer.SkelecogInvasionEnd2) self.invading = 0 elif msgType == ToontownGlobals.SkelecogInvasionBulletin: messages.append(TTLocalizer.SkelecogInvasionBulletin1) messages.append(TTLocalizer.SkelecogInvasionBulletin2) messages.append(TTLocalizer.SkelecogInvasionBulletin3) self.invading = 1 elif msgType == ToontownGlobals.WaiterInvasionBegin: messages.append(TTLocalizer.WaiterInvasionBegin1) messages.append(TTLocalizer.WaiterInvasionBegin2) self.invading = 1 elif msgType == ToontownGlobals.WaiterInvasionEnd: messages.append(TTLocalizer.WaiterInvasionEnd1) messages.append(TTLocalizer.WaiterInvasionEnd2) self.invading = 0 elif msgType == ToontownGlobals.WaiterInvasionBulletin: messages.append(TTLocalizer.WaiterInvasionBulletin1) messages.append(TTLocalizer.WaiterInvasionBulletin2) messages.append(TTLocalizer.WaiterInvasionBulletin3) self.invading = 1 elif msgType == ToontownGlobals.V2InvasionBegin: messages.append(TTLocalizer.V2InvasionBegin1) messages.append(TTLocalizer.V2InvasionBegin2) messages.append(TTLocalizer.V2InvasionBegin3) self.invading = 1 elif msgType == ToontownGlobals.V2InvasionEnd: messages.append(TTLocalizer.V2InvasionEnd1) messages.append(TTLocalizer.V2InvasionEnd2) self.invading = 0 elif msgType == ToontownGlobals.V2InvasionBulletin: messages.append(TTLocalizer.V2InvasionBulletin1) messages.append(TTLocalizer.V2InvasionBulletin2) messages.append(TTLocalizer.V2InvasionBulletin3) self.invading = 1 else: self.notify.warning('setInvasionStatus: invalid msgType: %s' % msgType) return multiplier = 1 if self.invading: multiplier = ToontownBattleGlobals.getInvasionMultiplier() base.localAvatar.inventory.setInvasionCreditMultiplier(multiplier) track = Sequence(name='newsManagerWait', autoPause=1) for i, message in enumerate(messages): if i == 0: track.append(Wait(1)) else: track.append(Wait(5)) track.append(Func(base.localAvatar.setSystemMessage, 0, message)) track.start() def getInvading(self): return self.invading def startHoliday(self, holidayId): if holidayId not in self.holidayIdList: self.notify.info('setHolidayId: Starting Holiday %s' % holidayId) self.holidayIdList.append(holidayId) if holidayId in decorationHolidays: self.decorationHolidayIds.append(holidayId) if holidayId == ToontownGlobals.HALLOWEEN_PROPS: if hasattr(base, 'localAvatar') and base.localAvatar and hasattr(base.localAvatar, 'chatMgr') and base.localAvatar.chatMgr: base.localAvatar.chatMgr.chatInputSpeedChat.addHalloweenMenu() self.setHalloweenPropsHolidayStart() elif holidayId == ToontownGlobals.SPOOKY_PROPS: if hasattr(base, 'localAvatar') and base.localAvatar and hasattr(base.localAvatar, 'chatMgr') and base.localAvatar.chatMgr: base.localAvatar.chatMgr.chatInputSpeedChat.addHalloweenMenu() self.setSpookyPropsHolidayStart() elif holidayId == ToontownGlobals.WINTER_DECORATIONS: if hasattr(base, 'localAvatar') and base.localAvatar and hasattr(base.localAvatar, 'chatMgr') and base.localAvatar.chatMgr: base.localAvatar.chatMgr.chatInputSpeedChat.addWinterMenu() self.setWinterDecorationsStart() elif holidayId == ToontownGlobals.WACKY_WINTER_DECORATIONS: if hasattr(base, 'localAvatar') and base.localAvatar and hasattr(base.localAvatar, 'chatMgr') and base.localAvatar.chatMgr: base.localAvatar.chatMgr.chatInputSpeedChat.addWinterMenu() self.setWackyWinterDecorationsStart() if hasattr(base.cr.playGame, 'dnaStore') and hasattr(base.cr.playGame, 'hood') and hasattr(base.cr.playGame.hood, 'loader'): if holidayId == ToontownGlobals.HALLOWEEN_COSTUMES or holidayId == ToontownGlobals.SPOOKY_COSTUMES: self.holidayDecorator = HalloweenHolidayDecorator.HalloweenHolidayDecorator() elif holidayId == ToontownGlobals.CRASHED_LEADERBOARD: self.holidayDecorator = CrashedLeaderBoardDecorator.CrashedLeaderBoardDecorator() else: self.holidayDecorator = HolidayDecorator.HolidayDecorator() self.holidayDecorator.decorate() messenger.send('decorator-holiday-%d-starting' % holidayId) elif holidayId in promotionalSpeedChatHolidays: if hasattr(base, 'TTSCPromotionalMenu'): base.TTSCPromotionalMenu.startHoliday(holidayId) elif holidayId == ToontownGlobals.MORE_XP_HOLIDAY: self.setMoreXpHolidayStart() elif holidayId == ToontownGlobals.JELLYBEAN_DAY: pass elif holidayId == ToontownGlobals.CIRCUIT_RACING_EVENT: self.setGrandPrixWeekendStart() elif holidayId == ToontownGlobals.HYDRANT_ZERO_HOLIDAY: self.setHydrantZeroHolidayStart() elif holidayId == ToontownGlobals.APRIL_FOOLS_COSTUMES: if hasattr(base, 'localAvatar') and base.localAvatar and hasattr(base.localAvatar, 'chatMgr') and base.localAvatar.chatMgr: base.localAvatar.chatMgr.chatInputSpeedChat.addAprilToonsMenu() elif holidayId == ToontownGlobals.WINTER_CAROLING: if hasattr(base, 'localAvatar') and base.localAvatar and hasattr(base.localAvatar, 'chatMgr') and base.localAvatar.chatMgr: base.localAvatar.chatMgr.chatInputSpeedChat.addCarolMenu() self.setWinterCarolingStart() elif holidayId == ToontownGlobals.WACKY_WINTER_CAROLING: if hasattr(base, 'localAvatar') and base.localAvatar and hasattr(base.localAvatar, 'chatMgr') and base.localAvatar.chatMgr: base.localAvatar.chatMgr.chatInputSpeedChat.addCarolMenu() elif holidayId == ToontownGlobals.VALENTINES_DAY: messenger.send('ValentinesDayStart') base.localAvatar.setSystemMessage(0, TTLocalizer.ValentinesDayStart) elif holidayId == ToontownGlobals.SILLY_CHATTER_ONE: if hasattr(base, 'localAvatar') and base.localAvatar and hasattr(base.localAvatar, 'chatMgr') and base.localAvatar.chatMgr: base.localAvatar.chatMgr.chatInputSpeedChat.addSillyPhaseOneMenu() elif holidayId == ToontownGlobals.SILLY_CHATTER_TWO: if hasattr(base, 'localAvatar') and base.localAvatar and hasattr(base.localAvatar, 'chatMgr') and base.localAvatar.chatMgr: base.localAvatar.chatMgr.chatInputSpeedChat.addSillyPhaseTwoMenu() elif holidayId == ToontownGlobals.SILLY_CHATTER_THREE: if hasattr(base, 'localAvatar') and base.localAvatar and hasattr(base.localAvatar, 'chatMgr') and base.localAvatar.chatMgr: base.localAvatar.chatMgr.chatInputSpeedChat.addSillyPhaseThreeMenu() elif holidayId == ToontownGlobals.SILLY_CHATTER_FOUR: if hasattr(base, 'localAvatar') and base.localAvatar and hasattr(base.localAvatar, 'chatMgr') and base.localAvatar.chatMgr: base.localAvatar.chatMgr.chatInputSpeedChat.addSillyPhaseFourMenu() elif holidayId == ToontownGlobals.SILLY_CHATTER_FIVE: if hasattr(base, 'localAvatar') and base.localAvatar and hasattr(base.localAvatar, 'chatMgr') and base.localAvatar.chatMgr: base.localAvatar.chatMgr.chatInputSpeedChat.addSillyPhaseFiveMenu() elif holidayId == ToontownGlobals.VICTORY_PARTY_HOLIDAY: if hasattr(base, 'localAvatar') and base.localAvatar and hasattr(base.localAvatar, 'chatMgr') and base.localAvatar.chatMgr: base.localAvatar.chatMgr.chatInputSpeedChat.addVictoryPartiesMenu() elif holidayId == ToontownGlobals.SELLBOT_NERF_HOLIDAY: if hasattr(base, 'localAvatar') and base.localAvatar and hasattr(base.localAvatar, 'chatMgr') and base.localAvatar.chatMgr: self.setSellbotNerfHolidayStart() base.localAvatar.chatMgr.chatInputSpeedChat.addSellbotNerfMenu() elif holidayId == ToontownGlobals.JELLYBEAN_TROLLEY_HOLIDAY or holidayId == ToontownGlobals.JELLYBEAN_TROLLEY_HOLIDAY_MONTH: if hasattr(base, 'localAvatar') and base.localAvatar and hasattr(base.localAvatar, 'chatMgr') and base.localAvatar.chatMgr: base.localAvatar.chatMgr.chatInputSpeedChat.addJellybeanJamMenu(TTSCJellybeanJamMenu.JellybeanJamPhases.TROLLEY) elif holidayId == ToontownGlobals.JELLYBEAN_FISHING_HOLIDAY or holidayId == ToontownGlobals.JELLYBEAN_FISHING_HOLIDAY_MONTH: if hasattr(base, 'localAvatar') and base.localAvatar and hasattr(base.localAvatar, 'chatMgr') and base.localAvatar.chatMgr: base.localAvatar.chatMgr.chatInputSpeedChat.addJellybeanJamMenu(TTSCJellybeanJamMenu.JellybeanJamPhases.FISHING) elif holidayId == ToontownGlobals.JELLYBEAN_PARTIES_HOLIDAY: if hasattr(base, 'localAvatar') and base.localAvatar and hasattr(base.localAvatar, 'chatMgr') and base.localAvatar.chatMgr: self.setJellybeanPartiesHolidayStart() elif holidayId == ToontownGlobals.JELLYBEAN_PARTIES_HOLIDAY_MONTH: if hasattr(base, 'localAvatar') and base.localAvatar and hasattr(base.localAvatar, 'chatMgr') and base.localAvatar.chatMgr: self.setJellybeanMonthHolidayStart() elif holidayId == ToontownGlobals.BLACK_CAT_DAY: if hasattr(base, 'localAvatar') and base.localAvatar and hasattr(base.localAvatar, 'chatMgr') and base.localAvatar.chatMgr: self.setBlackCatHolidayStart() elif holidayId == ToontownGlobals.SPOOKY_BLACK_CAT: if hasattr(base, 'localAvatar') and base.localAvatar and hasattr(base.localAvatar, 'chatMgr') and base.localAvatar.chatMgr: self.setSpookyBlackCatHolidayStart() elif holidayId == ToontownGlobals.LAUGHING_MAN: if hasattr(base, 'localAvatar') and base.localAvatar: self.setLaughingManHolidayStart() elif holidayId == ToontownGlobals.TOP_TOONS_MARATHON: if hasattr(base, 'localAvatar') and base.localAvatar and hasattr(base.localAvatar, 'chatMgr') and base.localAvatar.chatMgr: self.setTopToonsMarathonStart() elif holidayId == ToontownGlobals.SELLBOT_INVASION: if hasattr(base, 'localAvatar') and base.localAvatar and hasattr(base.localAvatar, 'chatMgr') and base.localAvatar.chatMgr: base.localAvatar.chatMgr.chatInputSpeedChat.addSellbotInvasionMenu() elif holidayId == ToontownGlobals.SELLBOT_FIELD_OFFICE: if hasattr(base, 'localAvatar') and base.localAvatar and hasattr(base.localAvatar, 'chatMgr') and base.localAvatar.chatMgr: base.localAvatar.chatMgr.chatInputSpeedChat.addSellbotFieldOfficeMenu() elif holidayId == ToontownGlobals.IDES_OF_MARCH: if hasattr(base, 'localAvatar') and base.localAvatar and hasattr(base.localAvatar, 'chatMgr') and base.localAvatar.chatMgr: self.setIdesOfMarchStart() base.localAvatar.chatMgr.chatInputSpeedChat.addIdesOfMarchMenu() elif holidayId == ToontownGlobals.EXPANDED_CLOSETS: self.setExpandedClosetsStart() elif holidayId == ToontownGlobals.KARTING_TICKETS_HOLIDAY: self.setKartingTicketsHolidayStart() return True return False def endHoliday(self, holidayId): if holidayId in self.holidayIdList: self.notify.info('setHolidayId: Ending Holiday %s' % holidayId) self.holidayIdList.remove(holidayId) if holidayId in self.decorationHolidayIds: self.decorationHolidayIds.remove(holidayId) if holidayId == ToontownGlobals.HALLOWEEN_PROPS: if hasattr(base, 'localAvatar') and base.localAvatar and hasattr(base.localAvatar, 'chatMgr') and base.localAvatar.chatMgr: base.localAvatar.chatMgr.chatInputSpeedChat.removeHalloweenMenu() self.setHalloweenPropsHolidayEnd() elif holidayId == ToontownGlobals.SPOOKY_PROPS: if hasattr(base, 'localAvatar') and base.localAvatar and hasattr(base.localAvatar, 'chatMgr') and base.localAvatar.chatMgr: base.localAvatar.chatMgr.chatInputSpeedChat.removeHalloweenMenu() self.setSpookyPropsHolidayEnd() elif holidayId == ToontownGlobals.WINTER_DECORATIONS: if hasattr(base, 'localAvatar') and base.localAvatar and hasattr(base.localAvatar, 'chatMgr') and base.localAvatar.chatMgr: base.localAvatar.chatMgr.chatInputSpeedChat.removeWinterMenu() self.setWinterDecorationsEnd() elif holidayId == ToontownGlobals.WACKY_WINTER_DECORATIONS: if hasattr(base, 'localAvatar') and base.localAvatar and hasattr(base.localAvatar, 'chatMgr') and base.localAvatar.chatMgr: base.localAvatar.chatMgr.chatInputSpeedChat.removeWinterMenu() if hasattr(base.cr.playGame, 'dnaStore') and hasattr(base.cr.playGame, 'hood') and hasattr(base.cr.playGame.hood, 'loader'): if holidayId == ToontownGlobals.HALLOWEEN_COSTUMES or holidayId == ToontownGlobals.SPOOKY_COSTUMES: self.holidayDecorator = HalloweenHolidayDecorator.HalloweenHolidayDecorator() elif holidayId == ToontownGlobals.CRASHED_LEADERBOARD: self.holidayDecorator = CrashedLeaderBoardDecorator.CrashedLeaderBoardDecorator() else: self.holidayDecorator = HolidayDecorator.HolidayDecorator() self.holidayDecorator.undecorate() messenger.send('decorator-holiday-%d-ending' % holidayId) elif holidayId in promotionalSpeedChatHolidays: if hasattr(base, 'TTSCPromotionalMenu'): base.TTSCPromotionalMenu.endHoliday(holidayId) elif holidayId == ToontownGlobals.MORE_XP_HOLIDAY: self.setMoreXpHolidayEnd() elif holidayId == ToontownGlobals.JELLYBEAN_DAY: pass elif holidayId == ToontownGlobals.CIRCUIT_RACING_EVENT: self.setGrandPrixWeekendEnd() elif holidayId == ToontownGlobals.APRIL_FOOLS_COSTUMES: if hasattr(base, 'localAvatar') and base.localAvatar and hasattr(base.localAvatar, 'chatMgr') and base.localAvatar.chatMgr: base.localAvatar.chatMgr.chatInputSpeedChat.removeAprilToonsMenu() elif holidayId == ToontownGlobals.VALENTINES_DAY: messenger.send('ValentinesDayStop') base.localAvatar.setSystemMessage(0, TTLocalizer.ValentinesDayEnd) elif holidayId == ToontownGlobals.SILLY_CHATTER_ONE: if hasattr(base, 'localAvatar') and base.localAvatar and hasattr(base.localAvatar, 'chatMgr') and base.localAvatar.chatMgr: base.localAvatar.chatMgr.chatInputSpeedChat.removeSillyPhaseOneMenu() elif holidayId == ToontownGlobals.SILLY_CHATTER_TWO: if hasattr(base, 'localAvatar') and base.localAvatar and hasattr(base.localAvatar, 'chatMgr') and base.localAvatar.chatMgr: base.localAvatar.chatMgr.chatInputSpeedChat.removeSillyPhaseTwoMenu() elif holidayId == ToontownGlobals.SILLY_CHATTER_THREE: if hasattr(base, 'localAvatar') and base.localAvatar and hasattr(base.localAvatar, 'chatMgr') and base.localAvatar.chatMgr: base.localAvatar.chatMgr.chatInputSpeedChat.removeSillyPhaseThreeMenu() elif holidayId == ToontownGlobals.SILLY_CHATTER_FOUR: if hasattr(base, 'localAvatar') and base.localAvatar and hasattr(base.localAvatar, 'chatMgr') and base.localAvatar.chatMgr: base.localAvatar.chatMgr.chatInputSpeedChat.removeSillyPhaseFourMenu() elif holidayId == ToontownGlobals.SILLY_CHATTER_FIVE: if hasattr(base, 'localAvatar') and base.localAvatar and hasattr(base.localAvatar, 'chatMgr') and base.localAvatar.chatMgr: base.localAvatar.chatMgr.chatInputSpeedChat.removeSillyPhaseFiveMenu() elif holidayId == ToontownGlobals.VICTORY_PARTY_HOLIDAY: if hasattr(base, 'localAvatar') and base.localAvatar and hasattr(base.localAvatar, 'chatMgr') and base.localAvatar.chatMgr: base.localAvatar.chatMgr.chatInputSpeedChat.removeVictoryPartiesMenu() elif holidayId == ToontownGlobals.WINTER_CAROLING: if hasattr(base, 'localAvatar') and base.localAvatar and hasattr(base.localAvatar, 'chatMgr') and base.localAvatar.chatMgr: base.localAvatar.chatMgr.chatInputSpeedChat.removeCarolMenu() elif holidayId == ToontownGlobals.WACKY_WINTER_CAROLING: if hasattr(base, 'localAvatar') and base.localAvatar and hasattr(base.localAvatar, 'chatMgr') and base.localAvatar.chatMgr: base.localAvatar.chatMgr.chatInputSpeedChat.removeCarolMenu() elif holidayId == ToontownGlobals.SELLBOT_NERF_HOLIDAY: if hasattr(base, 'localAvatar') and base.localAvatar and hasattr(base.localAvatar, 'chatMgr') and base.localAvatar.chatMgr: self.setSellbotNerfHolidayEnd() base.localAvatar.chatMgr.chatInputSpeedChat.removeSellbotNerfMenu() elif holidayId == ToontownGlobals.JELLYBEAN_TROLLEY_HOLIDAY or holidayId == ToontownGlobals.JELLYBEAN_TROLLEY_HOLIDAY_MONTH: if hasattr(base, 'localAvatar') and base.localAvatar and hasattr(base.localAvatar, 'chatMgr') and base.localAvatar.chatMgr: base.localAvatar.chatMgr.chatInputSpeedChat.removeJellybeanJamMenu() elif holidayId == ToontownGlobals.JELLYBEAN_FISHING_HOLIDAY or holidayId == ToontownGlobals.JELLYBEAN_FISHING_HOLIDAY_MONTH: if hasattr(base, 'localAvatar') and base.localAvatar and hasattr(base.localAvatar, 'chatMgr') and base.localAvatar.chatMgr: base.localAvatar.chatMgr.chatInputSpeedChat.removeJellybeanJamMenu() elif holidayId == ToontownGlobals.JELLYBEAN_PARTIES_HOLIDAY or holidayId == ToontownGlobals.JELLYBEAN_PARTIES_HOLIDAY_MONTH: if hasattr(base, 'localAvatar') and base.localAvatar and hasattr(base.localAvatar, 'chatMgr') and base.localAvatar.chatMgr: self.setJellybeanPartiesHolidayEnd() base.localAvatar.chatMgr.chatInputSpeedChat.removeJellybeanJamMenu() elif holidayId == ToontownGlobals.BLACK_CAT_DAY: if hasattr(base, 'localAvatar') and base.localAvatar and hasattr(base.localAvatar, 'chatMgr') and base.localAvatar.chatMgr: self.setBlackCatHolidayEnd() elif holidayId == ToontownGlobals.SPOOKY_BLACK_CAT: if hasattr(base, 'localAvatar') and base.localAvatar and hasattr(base.localAvatar, 'chatMgr') and base.localAvatar.chatMgr: self.setSpookyBlackCatHolidayEnd() elif holidayId == ToontownGlobals.LAUGHING_MAN: if hasattr(base, 'localAvatar') and base.localAvatar: self.setLaughingManHolidayEnd() elif holidayId == ToontownGlobals.TOP_TOONS_MARATHON: if hasattr(base, 'localAvatar') and base.localAvatar and hasattr(base.localAvatar, 'chatMgr') and base.localAvatar.chatMgr: self.setTopToonsMarathonEnd() elif holidayId == ToontownGlobals.SELLBOT_INVASION: if hasattr(base, 'localAvatar') and base.localAvatar and hasattr(base.localAvatar, 'chatMgr') and base.localAvatar.chatMgr: base.localAvatar.chatMgr.chatInputSpeedChat.removeSellbotInvasionMenu() elif holidayId == ToontownGlobals.SELLBOT_FIELD_OFFICE: if hasattr(base, 'localAvatar') and base.localAvatar and hasattr(base.localAvatar, 'chatMgr') and base.localAvatar.chatMgr: base.localAvatar.chatMgr.chatInputSpeedChat.removeSellbotFieldOfficeMenu() elif holidayId == ToontownGlobals.IDES_OF_MARCH: if hasattr(base, 'localAvatar') and base.localAvatar and hasattr(base.localAvatar, 'chatMgr') and base.localAvatar.chatMgr: base.localAvatar.chatMgr.chatInputSpeedChat.removeIdesOfMarchMenu() return True return False def setHolidayIdList(self, holidayIdList): def isEnding(id): return id not in holidayIdList def isStarting(id): return id not in self.holidayIdList toEnd = filter(isEnding, self.holidayIdList) for endingHolidayId in toEnd: self.endHoliday(endingHolidayId) toStart = filter(isStarting, holidayIdList) for startingHolidayId in toStart: self.startHoliday(startingHolidayId) messenger.send('setHolidayIdList', [holidayIdList]) def getDecorationHolidayId(self): return self.decorationHolidayIds def getHolidayIdList(self): return self.holidayIdList def setBingoWin(self, zoneId): base.localAvatar.setSystemMessage(0, 'Bingo congrats!') def setBingoStart(self): base.localAvatar.setSystemMessage(0, TTLocalizer.FishBingoStart) def setBingoOngoing(self): base.localAvatar.setSystemMessage(0, TTLocalizer.FishBingoOngoing) def setBingoEnd(self): base.localAvatar.setSystemMessage(0, TTLocalizer.FishBingoEnd) def setCircuitRaceStart(self): base.localAvatar.setSystemMessage(0, TTLocalizer.CircuitRaceStart) def setCircuitRaceOngoing(self): base.localAvatar.setSystemMessage(0, TTLocalizer.CircuitRaceOngoing) def setCircuitRaceEnd(self): base.localAvatar.setSystemMessage(0, TTLocalizer.CircuitRaceEnd) def setTrolleyHolidayStart(self): base.localAvatar.setSystemMessage(0, TTLocalizer.TrolleyHolidayStart) def setTrolleyHolidayOngoing(self): base.localAvatar.setSystemMessage(0, TTLocalizer.TrolleyHolidayOngoing) def setTrolleyHolidayEnd(self): base.localAvatar.setSystemMessage(0, TTLocalizer.TrolleyHolidayEnd) def setTrolleyWeekendStart(self): base.localAvatar.setSystemMessage(0, TTLocalizer.TrolleyWeekendStart) def setTrolleyWeekendEnd(self): base.localAvatar.setSystemMessage(0, TTLocalizer.TrolleyWeekendEnd) def setMoreXpHolidayStart(self): base.localAvatar.setSystemMessage(0, TTLocalizer.MoreXpHolidayStart) def setMoreXpHolidayOngoing(self): base.localAvatar.setSystemMessage(0, TTLocalizer.MoreXpHolidayOngoing) def setMoreXpHolidayEnd(self): base.localAvatar.setSystemMessage(0, TTLocalizer.MoreXpHolidayEnd) def setJellybeanDayStart(self): base.localAvatar.setSystemMessage(0, TTLocalizer.JellybeanDayHolidayStart) def setJellybeanDayEnd(self): base.localAvatar.setSystemMessage(0, TTLocalizer.JellybeanDayHolidayEnd) def setGrandPrixWeekendStart(self): base.localAvatar.setSystemMessage(0, TTLocalizer.GrandPrixWeekendHolidayStart) def setGrandPrixWeekendEnd(self): base.localAvatar.setSystemMessage(0, TTLocalizer.GrandPrixWeekendHolidayEnd) def setHydrantZeroHolidayStart(self): messenger.send('HydrantZeroIsRunning', [True]) def setSellbotNerfHolidayStart(self): base.localAvatar.setSystemMessage(0, TTLocalizer.SellbotNerfHolidayStart) def setSellbotNerfHolidayEnd(self): base.localAvatar.setSystemMessage(0, TTLocalizer.SellbotNerfHolidayEnd) def setJellybeanTrolleyHolidayStart(self): base.localAvatar.setSystemMessage(0, TTLocalizer.JellybeanTrolleyHolidayStart) def setJellybeanTrolleyHolidayEnd(self): base.localAvatar.setSystemMessage(0, TTLocalizer.JellybeanTrolleyHolidayEnd) def setJellybeanFishingHolidayStart(self): base.localAvatar.setSystemMessage(0, TTLocalizer.JellybeanFishingHolidayStart) def setJellybeanFishingHolidayEnd(self): base.localAvatar.setSystemMessage(0, TTLocalizer.JellybeanFishingHolidayEnd) def setJellybeanPartiesHolidayStart(self): base.localAvatar.setSystemMessage(0, TTLocalizer.JellybeanPartiesHolidayStart) def setJellybeanMonthHolidayStart(self): base.localAvatar.setSystemMessage(0, TTLocalizer.JellybeanMonthHolidayStart) def setJellybeanPartiesHolidayEnd(self): base.localAvatar.setSystemMessage(0, TTLocalizer.JellybeanPartiesHolidayEnd) def setHalloweenPropsHolidayStart(self): base.localAvatar.setSystemMessage(0, TTLocalizer.HalloweenPropsHolidayStart) def setHalloweenPropsHolidayEnd(self): base.localAvatar.setSystemMessage(0, TTLocalizer.HalloweenPropsHolidayEnd) def setSpookyPropsHolidayStart(self): base.localAvatar.setSystemMessage(0, TTLocalizer.SpookyPropsHolidayStart) def setSpookyPropsHolidayEnd(self): pass def setBlackCatHolidayStart(self): base.localAvatar.setSystemMessage(0, TTLocalizer.BlackCatHolidayStart) def setBlackCatHolidayEnd(self): base.localAvatar.setSystemMessage(0, TTLocalizer.BlackCatHolidayEnd) def setSpookyBlackCatHolidayStart(self): base.localAvatar.setSystemMessage(0, TTLocalizer.SpookyBlackCatHolidayStart) for currToon in base.cr.toons.values(): currToon.setDNA(currToon.style.clone()) def setSpookyBlackCatHolidayEnd(self): for currToon in base.cr.toons.values(): currToon.setDNA(currToon.style.clone()) def setLaughingManHolidayStart(self): base.localAvatar.setSystemMessage(0, TTLocalizer.LaughingManHolidayStart) for currToon in base.cr.toons.values(): currToon.generateLaughingMan() def setLaughingManHolidayEnd(self): for currToon in base.cr.toons.values(): currToon.swapToonHead(laughingMan=currToon.getWantLaughingMan()) def setTopToonsMarathonStart(self): base.localAvatar.setSystemMessage(0, TTLocalizer.TopToonsMarathonStart) def setTopToonsMarathonEnd(self): base.localAvatar.setSystemMessage(0, TTLocalizer.TopToonsMarathonEnd) def setWinterDecorationsStart(self): base.localAvatar.setSystemMessage(0, TTLocalizer.WinterDecorationsStart) def setWinterDecorationsEnd(self): base.localAvatar.setSystemMessage(0, TTLocalizer.WinterDecorationsEnd) def setWackyWinterDecorationsStart(self): base.localAvatar.setSystemMessage(0, TTLocalizer.WackyWinterDecorationsStart) def setWinterCarolingStart(self): base.localAvatar.setSystemMessage(0, TTLocalizer.WinterCarolingStart) def setExpandedClosetsStart(self): base.localAvatar.setSystemMessage(0, TTLocalizer.ExpandedClosetsStart) def setKartingTicketsHolidayStart(self): base.localAvatar.setSystemMessage(0, TTLocalizer.KartingTicketsHolidayStart) def setIdesOfMarchStart(self): base.localAvatar.setSystemMessage(0, TTLocalizer.IdesOfMarchStart) def holidayNotify(self): for id in self.holidayIdList: if id == 19: self.setBingoOngoing() elif id == 20: self.setCircuitRaceOngoing() elif id == 21: self.setTrolleyHolidayOngoing() def setWeeklyCalendarHolidays(self, weeklyCalendarHolidays): self.weeklyCalendarHolidays = weeklyCalendarHolidays def getHolidaysForWeekday(self, day): result = [] for item in self.weeklyCalendarHolidays: if item[1] == day: result.append(item[0]) return result def setYearlyCalendarHolidays(self, yearlyCalendarHolidays): self.yearlyCalendarHolidays = yearlyCalendarHolidays def getYearlyHolidaysForDate(self, theDate): result = [] for item in self.yearlyCalendarHolidays: if item[1][0] == theDate.month and item[1][1] == theDate.day: newItem = [self.YearlyHolidayType] + list(item) result.append(tuple(newItem)) continue if item[2][0] == theDate.month and item[2][1] == theDate.day: newItem = [self.YearlyHolidayType] + list(item) result.append(tuple(newItem)) return result def setMultipleStartHolidays(self, multipleStartHolidays): self.multipleStartHolidays = multipleStartHolidays def getMultipleStartHolidaysForDate(self, theDate): result = [] for theHoliday in self.multipleStartHolidays: times = theHoliday[1:] tempTimes = times[0] for startAndStopTimes in tempTimes: startTime = startAndStopTimes[0] endTime = startAndStopTimes[1] if startTime[0] == theDate.year and startTime[1] == theDate.month and startTime[2] == theDate.day: fakeOncelyHoliday = [theHoliday[0], startTime, endTime] newItem = [self.OncelyMultipleStartHolidayType] + fakeOncelyHoliday result.append(tuple(newItem)) continue if endTime[0] == theDate.year and endTime[1] == theDate.month and endTime[2] == theDate.day: fakeOncelyHoliday = [theHoliday[0], startTime, endTime] newItem = [self.OncelyMultipleStartHolidayType] + fakeOncelyHoliday result.append(tuple(newItem)) return result def setOncelyCalendarHolidays(self, oncelyCalendarHolidays): self.oncelyCalendarHolidays = oncelyCalendarHolidays def getOncelyHolidaysForDate(self, theDate): result = [] for item in self.oncelyCalendarHolidays: if item[1][0] == theDate.year and item[1][1] == theDate.month and item[1][2] == theDate.day: newItem = [self.OncelyHolidayType] + list(item) result.append(tuple(newItem)) continue if item[2][0] == theDate.year and item[2][1] == theDate.month and item[2][2] == theDate.day: newItem = [self.OncelyHolidayType] + list(item) result.append(tuple(newItem)) return result def setRelativelyCalendarHolidays(self, relativelyCalendarHolidays): self.relativelyCalendarHolidays = relativelyCalendarHolidays def getRelativelyHolidaysForDate(self, theDate): result = [] self.weekDaysInMonth = [] self.numDaysCorMatrix = [(28, 0), (29, 1), (30, 2), (31, 3)] for i in xrange(7): self.weekDaysInMonth.append((i, 4)) for holidayItem in self.relativelyCalendarHolidays: item = deepcopy(holidayItem) newItem = [] newItem.append(item[0]) i = 1 while i < len(item): sRepNum = item[i][1] sWeekday = item[i][2] eWeekday = item[i+1][2] while 1: eRepNum = item[i+1][1] self.initRepMatrix(theDate.year, item[i][0]) while self.weekDaysInMonth[sWeekday][1] < sRepNum: sRepNum -= 1 sDay = self.dayForWeekday(theDate.year, item[i][0], sWeekday, sRepNum) self.initRepMatrix(theDate.year, item[i+1][0]) while self.weekDaysInMonth[eWeekday][1] < eRepNum: eRepNum -= 1 nDay = self.dayForWeekday(theDate.year, item[i+1][0], eWeekday, eRepNum) if ((nDay > sDay and item[i+1][0] == item[i][0] and (item[i+1][1] - item[i][1]) <= (nDay - sDay + abs(eWeekday - sWeekday))/7) or item[i+1][0] != item[i][0]): break if self.weekDaysInMonth[eWeekday][1] > eRepNum: eRepNum += 1 else: item[i+1][0] += 1 item[i+1][1] = 1 newItem.append([item[i][0], sDay, item[i][3], item[i][4], item[i][5]]) newItem.append([item[i+1][0], nDay, item[i+1][3], item[i+1][4], item[i+1][5]]) i += 2 if item[1][0] == theDate.month and newItem[1][1] == theDate.day: nItem = [self.RelativelyHolidayType] + list(newItem) result.append(tuple(nItem)) continue if item[2][0] == theDate.month and newItem[2][1] == theDate.day: nItem = [self.RelativelyHolidayType] + list(newItem) result.append(tuple(nItem)) return result def dayForWeekday(self, year, month, weekday, repNum): monthDays = calendar.monthcalendar(year, month) if monthDays[0][weekday] == 0: repNum += 1 return monthDays[repNum - 1][weekday] def initRepMatrix(self, year, month): for i in xrange(7): self.weekDaysInMonth[i] = (i, 4) startingWeekDay, numDays = calendar.monthrange(year, month) if startingWeekDay > 6: import pdb pdb.set_trace() for i in xrange(4): if numDays == self.numDaysCorMatrix[i][0]: break for j in xrange(self.numDaysCorMatrix[i][1]): self.weekDaysInMonth[startingWeekDay] = (self.weekDaysInMonth[startingWeekDay][0], self.weekDaysInMonth[startingWeekDay][1] + 1) startingWeekDay = (startingWeekDay + 1) % 7 def isHolidayRunning(self, holidayId): return holidayId in self.holidayIdList def getHoliday(id): if id.isdigit(): return int(id) elif hasattr(ToontownGlobals, id): return getattr(ToontownGlobals, id) return -1 @magicWord(category=CATEGORY_PROGRAMMER, types=[str]) def startHoliday(id): """ Start a holiday. """ holiday = getHoliday(id.upper()) if holiday < 0: return "Couldn't find holiday " + id + '!' if base.cr.newsManager.startHoliday(holiday): return 'Successfully started holiday ' + id + '!' else: return id + ' is already running!' @magicWord(category=CATEGORY_PROGRAMMER, types=[str]) def endHoliday(id): """ End a holiday. """ holiday = getHoliday(id.upper()) if holiday < 0: return "Couldn't find holiday " + id + '!' if base.cr.newsManager.endHoliday(holiday): return 'Successfully stopped holiday ' + id + '!' else: return id + ' is not running!'