DistributedObjectGlobalUD.py 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. from .DistributedObjectUD import DistributedObjectUD
  2. from direct.directnotify.DirectNotifyGlobal import directNotify
  3. import sys
  4. class DistributedObjectGlobalUD(DistributedObjectUD):
  5. notify = directNotify.newCategory('DistributedObjectGlobalUD')
  6. doNotDeallocateChannel = 1
  7. isGlobalDistObj = 1
  8. def __init__(self, air):
  9. DistributedObjectUD.__init__(self, air)
  10. self.ExecNamespace = {"self":self}
  11. def announceGenerate(self):
  12. self.air.registerForChannel(self.doId)
  13. DistributedObjectUD.announceGenerate(self)
  14. def delete(self):
  15. self.air.unregisterForChannel(self.doId)
  16. ## self.air.removeDOFromTables(self)
  17. DistributedObjectUD.delete(self)
  18. def execCommand(self, command, mwMgrId, avId, zoneId):
  19. text = str(self.__execMessage(command))[:config.GetInt("ai-debug-length",300)]
  20. dclass = uber.air.dclassesByName.get("PiratesMagicWordManagerAI")
  21. dg = dclass.aiFormatUpdate(
  22. "setMagicWordResponse", mwMgrId, (1<<32)+avId, uber.air.ourChannel, [text])
  23. uber.air.send(dg)
  24. def __execMessage(self, message):
  25. if not self.ExecNamespace:
  26. # Import some useful variables into the ExecNamespace initially.
  27. import panda3d.core
  28. for key, value in panda3d.core.__dict__.items():
  29. if not key.startswith('__'):
  30. self.ExecNamespace[key] = value
  31. #self.importExecNamespace()
  32. # Now try to evaluate the expression using ChatInputNormal.ExecNamespace as
  33. # the local namespace.
  34. try:
  35. return str(eval(message, globals(), self.ExecNamespace))
  36. except SyntaxError:
  37. # Maybe it's only a statement, like "x = 1", or
  38. # "import math". These aren't expressions, so eval()
  39. # fails, but they can be exec'ed.
  40. try:
  41. exec(message, globals(), self.ExecNamespace)
  42. return 'ok'
  43. except:
  44. exception = sys.exc_info()[0]
  45. extraInfo = sys.exc_info()[1]
  46. if extraInfo:
  47. return str(extraInfo)
  48. else:
  49. return str(exception)
  50. except:
  51. exception = sys.exc_info()[0]
  52. extraInfo = sys.exc_info()[1]
  53. if extraInfo:
  54. return str(extraInfo)
  55. else:
  56. return str(exception)