Poodletooth-iLand/toontown/toon/DistributedSmartNPCAI.py
2015-07-05 19:59:25 -04:00

76 lines
2.7 KiB
Python
Executable file

from otp.ai.AIBaseGlobal import *
from direct.task.Task import Task
from panda3d.core import *
from DistributedNPCToonBaseAI import *
from toontown.quest import Quests
import time
from QuestionMgr import ChatterBotFactory, ChatterBotType
from direct.task import Task
class DistributedSmartNPCAI(DistributedNPCToonBaseAI):
def __init__(self, air, npcId, questCallback = None, hq = 0):
DistributedNPCToonBaseAI.__init__(self, air, npcId, questCallback)
self.air = air
self.personOfInterest = 0
self.stopDouble = 0
self.nameOfInterest = ''
self.factory = ChatterBotFactory()
self.engine = self.factory.create(ChatterBotType.CLEVERBOT)
self.brain = self.engine.create_session()
self.myTask = taskMgr.doMethodLater(0.5, self.tylerTask, 'tylerTask')
self.index = 0
def tylerTask(self, task):
if task.time >= 5:
self.index = 0
if task.time <= 25:
return task.cont
self.response('I guess you don\'t want to talk anymore %s' % self.nameOfInterest + '...', self.personOfInterest)
self.stopDouble = self.personOfInterest
self.personOfInterest = 0
self.nameOfInterest = ''
return task.done
def restartTask(self):
taskMgr.remove(self.myTask)
taskMgr.add(self.myTask)
def avatarEnter(self):
if not self.personOfInterest:
sender = self.air.getAvatarIdFromSender()
if not sender == self.stopDouble:
name = self.air.doId2do.get(sender).getName()
self.personOfInterest = sender
self.nameOfInterest = name
self.sendUpdate('greet', [self.npcId, sender])
self.brain = self.engine.create_session()
else:
self.sendUpdate('dismiss', [sender, 2])
pass
else:
#Tyler is busy!
pass
def talkMessage(self, sender, message):
if sender == self.personOfInterest:
self.index += 1
if self.index >= 4:
self.stopDouble = self.personOfInterest
self.personOfInterest = 0
self.nameOfInterest = ''
taskMgr.remove(self.myTask)
self.index = 0
self.sendUpdate('dismiss', [sender, 1])
return
self.restartTask()
self.generateAnswer(message, sender)
def generateAnswer(self, message, sender):
name = self.air.doId2do.get(sender).getName()
answer = self.brain.think(message)
self.response(answer, sender)
def response(self, response, sendTo):
self.sendUpdate('respond', [self.npcId, response, sendTo])
self.restartTask()