75 lines
3 KiB
Python
75 lines
3 KiB
Python
from direct.directnotify import DirectNotifyGlobal
|
|
from direct.distributed.DistributedObjectAI import DistributedObjectAI
|
|
from otp.ai.MagicWordGlobal import *
|
|
from direct.distributed.PyDatagram import PyDatagram
|
|
from direct.distributed.MsgTypes import *
|
|
|
|
class MagicWordManagerAI(DistributedObjectAI):
|
|
notify = DirectNotifyGlobal.directNotify.newCategory("MagicWordManagerAI")
|
|
|
|
def sendMagicWord(self, word, targetId):
|
|
invokerId = self.air.getAvatarIdFromSender()
|
|
invoker = self.air.doId2do.get(invokerId)
|
|
|
|
if not 'DistributedToonAI' in str(self.air.doId2do.get(targetId)):
|
|
self.sendUpdateToAvatarId(invokerId, 'sendMagicWordResponse', ['Target is not a toon object!'])
|
|
return
|
|
|
|
if not invoker:
|
|
self.sendUpdateToAvatarId(invokerId, 'sendMagicWordResponse', ['missing invoker'])
|
|
return
|
|
|
|
if not invoker.isAdmin():
|
|
self.air.writeServerEvent('suspicious', invokerId, 'Attempted to issue magic word: %s' % word)
|
|
dg = PyDatagram()
|
|
dg.addServerHeader(self.GetPuppetConnectionChannel(invokerId), self.air.ourChannel, CLIENTAGENT_EJECT)
|
|
dg.addUint16(102)
|
|
dg.addString('Magic Words are reserved for administrators only!')
|
|
self.air.send(dg)
|
|
return
|
|
|
|
target = self.air.doId2do.get(targetId)
|
|
if not target:
|
|
self.sendUpdateToAvatarId(invokerId, 'sendMagicWordResponse', ['missing target'])
|
|
return
|
|
|
|
response = spellbook.process(invoker, target, word)
|
|
if response:
|
|
self.sendUpdateToAvatarId(invokerId, 'sendMagicWordResponse', [response])
|
|
|
|
self.air.writeServerEvent('magic-word',
|
|
invokerId, invoker.getAdminAccess(),
|
|
targetId, target.getAdminAccess(),
|
|
word, response)
|
|
|
|
@magicWord(category=CATEGORY_COMMUNITY_MANAGER, types=[str])
|
|
def help(wordName=None):
|
|
if not wordName:
|
|
return "What were you interested getting help for?"
|
|
word = spellbook.words.get(wordName.lower())
|
|
if not word:
|
|
accessLevel = spellbook.getInvoker().getAdminAccess()
|
|
wname = wordName.lower()
|
|
for key in spellbook.words:
|
|
if spellbook.words.get(key).access <= accessLevel:
|
|
if wname in key:
|
|
return 'Did you mean %s' % (spellbook.words.get(key).name)
|
|
return 'I have no clue what %s is referring to' % (wordName)
|
|
return word.doc
|
|
|
|
@magicWord(category=CATEGORY_COMMUNITY_MANAGER, types=[])
|
|
def words():
|
|
accessLevel = spellbook.getInvoker().getAdminAccess()
|
|
wordString = None
|
|
for key in spellbook.words:
|
|
word = spellbook.words.get(key)
|
|
if word.access <= accessLevel:
|
|
if wordString is None:
|
|
wordString = key
|
|
else:
|
|
wordString += ", ";
|
|
wordString += key;
|
|
if wordString is None:
|
|
return "You are chopped liver"
|
|
else:
|
|
return wordString
|