from direct.directnotify import DirectNotifyGlobal from enum import IntEnum from toontown.pets import PetTricks import types notify = DirectNotifyGlobal.directNotify.newCategory('PetObserve') def getEventName(zoneId): return 'PetObserve-%s' % zoneId def send(zoneIds, petObserve): if petObserve.isValid(): if type(zoneIds) not in (list, tuple): zoneIds = [zoneIds] for zoneId in zoneIds: messenger.send(getEventName(zoneId), [petObserve]) Phrases = IntEnum('Phrases', ('HI', 'BYE', 'YES', 'NO', 'SOOTHE', 'PRAISE', 'CRITICISM', 'HAPPY', 'SAD', 'ANGRY', 'HURRY', 'QUESTION', 'FRIENDLY', 'LETS_PLAY', 'COME', 'FOLLOW_ME', 'STAY', 'NEED_LAFF', 'NEED_GAGS', 'NEED_JB','GO_AWAY', 'DO_TRICK'), start=0) Actions = IntEnum('Actions', ('FEED', 'SCRATCH', 'ATTENDED_START', 'ATTENDED_STOP', 'ATTENDING_START', 'ATTENDING_STOP', 'CHANGE_ZONE', 'LOGOUT', 'GARDEN'), start=0) class PetObserve: def isValid(self): return 1 def isForgettable(self): return 0 def _influence(self, petBrain): petBrain._handleGenericObserve(self) def __repr__(self): return '%s()' % self.__class__.__name__ class PetActionObserve(PetObserve): def __init__(self, action, avId, data = None): self.action = action self.avId = avId self.data = data def getAction(self): return self.action def getAvId(self): return self.avId def getData(self): return self.data def _influence(self, petBrain): petBrain._handleActionObserve(self) def __repr__(self): return '%s(%s,%s)' % (self.__class__.__name__, Actions.getString(self.action), self.avId) class PetPhraseObserve(PetObserve): def __init__(self, petPhrase, avId): self.petPhrase = petPhrase self.avId = avId def getPetPhrase(self): return self.petPhrase def getAvId(self): return self.avId def isForgettable(self): return 1 def _influence(self, petBrain): petBrain._handlePhraseObserve(self) def __repr__(self): return '%s(%s,%s)' % (self.__class__.__name__, Phrases(self.petPhrase).name, self.avId) class SCObserve(PetPhraseObserve): def __init__(self, msgId, petPhrase, avId): self.msgId = msgId PetPhraseObserve.__init__(self, petPhrase, avId) def isValid(self): return self.petPhrase is not None class TrickRequestObserve(PetPhraseObserve): def __init__(self, trickId, avId): self.trickId = trickId PetPhraseObserve.__init__(self, Phrases.DO_TRICK, avId) def isForgettable(self): return 0 def getTrickId(self): return self.trickId OP = Phrases _scPhrase2petPhrase = {1: OP.YES, 2: OP.NO, 3: OP.SOOTHE, 100: OP.HI, 101: OP.HI, 102: OP.HI, 103: OP.HI, 104: OP.HI, 105: OP.HI, 107: OP.HI, 108: OP.HI, 200: OP.BYE, 201: OP.BYE, 202: OP.BYE, 203: OP.BYE, 204: OP.BYE, 205: OP.BYE, 206: OP.BYE, 207: OP.BYE, 300: OP.HAPPY, 301: OP.HAPPY, 302: OP.HAPPY, 303: OP.HAPPY, 304: OP.HAPPY, 305: OP.HAPPY, 306: OP.HAPPY, 307: OP.HAPPY, 308: OP.HAPPY, 309: OP.HAPPY, 310: OP.HAPPY, 311: OP.HAPPY, 312: OP.HAPPY, 313: OP.HAPPY, 314: OP.HAPPY, 315: OP.HAPPY, 400: OP.SAD, 401: OP.SAD, 402: OP.SAD, 403: OP.SAD, 404: OP.SAD, 405: OP.SAD, 406: OP.SAD, 407: OP.NO, 410: OP.NEED_LAFF, 500: OP.FRIENDLY, 505: OP.PRAISE, 506: OP.HAPPY, 507: OP.FRIENDLY, 508: OP.FRIENDLY, 509: OP.FRIENDLY, 510: OP.QUESTION, 511: OP.QUESTION, 513: OP.QUESTION, 514: OP.NEED_LAFF, 600: OP.PRAISE, 601: OP.PRAISE, 602: OP.PRAISE, 603: OP.PRAISE, 700: OP.PRAISE, 701: OP.PRAISE, 900: OP.CRITICISM, 901: OP.CRITICISM, 902: OP.CRITICISM, 903: OP.CRITICISM, 904: OP.CRITICISM, 905: OP.CRITICISM, 1006: OP.FOLLOW_ME, 1007: OP.STAY, 1010: OP.STAY, 1015: OP.STAY, 1201: OP.CRITICISM, 1300: OP.NEED_LAFF, 1400: OP.HURRY, 1404: OP.PRAISE, 1405: OP.PRAISE, 1413: OP.NEED_GAGS, 1414: OP.NEED_LAFF, 1601: OP.NEED_JB, 1603: OP.HURRY, 1605: OP.LETS_PLAY, 1606: OP.LETS_PLAY, 21000: OP.COME, 21001: OP.COME, 21002: OP.STAY, 21003: OP.PRAISE, 21004: OP.PRAISE, 21005: OP.PRAISE} for scId in PetTricks.ScId2trickId: _scPhrase2petPhrase[scId] = OP.DO_TRICK del OP def getSCObserve(msgId, speakerDoId): phrase = _scPhrase2petPhrase.get(msgId) if phrase == Phrases.DO_TRICK: trickId = PetTricks.ScId2trickId[msgId] return TrickRequestObserve(trickId, speakerDoId) return SCObserve(msgId, phrase, speakerDoId)