2019-11-02 17:27:54 -05:00
|
|
|
from direct.showbase import DirectObject
|
|
|
|
from otp.otpbase import OTPGlobals
|
|
|
|
import sys
|
|
|
|
from direct.gui.DirectGui import *
|
2022-12-16 18:40:57 -06:00
|
|
|
from panda3d.core import *
|
2019-11-02 17:27:54 -05:00
|
|
|
from otp.otpbase import OTPLocalizer
|
|
|
|
|
|
|
|
class ChatInputTyped(DirectObject.DirectObject):
|
|
|
|
ExecNamespace = None
|
|
|
|
|
|
|
|
def __init__(self, mainEntry = 0):
|
|
|
|
self.whisperName = None
|
|
|
|
self.whisperId = None
|
|
|
|
self.toPlayer = 0
|
|
|
|
self.mainEntry = mainEntry
|
|
|
|
wantHistory = 0
|
|
|
|
if __dev__:
|
|
|
|
wantHistory = 1
|
|
|
|
self.wantHistory = base.config.GetBool('want-chat-history', wantHistory)
|
|
|
|
self.history = ['']
|
|
|
|
self.historySize = base.config.GetInt('chat-history-size', 10)
|
|
|
|
self.historyIndex = 0
|
|
|
|
return
|
|
|
|
|
|
|
|
def typeCallback(self, extraArgs):
|
|
|
|
self.activate()
|
|
|
|
|
|
|
|
def delete(self):
|
|
|
|
self.ignore('arrow_up-up')
|
|
|
|
self.ignore('arrow_down-up')
|
|
|
|
self.chatFrame.destroy()
|
|
|
|
del self.chatFrame
|
|
|
|
del self.chatButton
|
|
|
|
del self.cancelButton
|
|
|
|
del self.chatEntry
|
|
|
|
del self.whisperLabel
|
|
|
|
del self.chatMgr
|
|
|
|
|
|
|
|
def show(self, whisperId = None, toPlayer = 0):
|
|
|
|
self.toPlayer = toPlayer
|
|
|
|
self.whisperId = whisperId
|
|
|
|
self.whisperName = None
|
|
|
|
if self.whisperId:
|
|
|
|
self.whisperName = base.talkAssistant.findName(whisperId, toPlayer)
|
|
|
|
if hasattr(self, 'whisperPos'):
|
|
|
|
self.chatFrame.setPos(self.whisperPos)
|
|
|
|
self.whisperLabel['text'] = OTPLocalizer.ChatInputWhisperLabel % self.whisperName
|
|
|
|
self.whisperLabel.show()
|
|
|
|
else:
|
|
|
|
if hasattr(self, 'normalPos'):
|
|
|
|
self.chatFrame.setPos(self.normalPos)
|
|
|
|
self.whisperLabel.hide()
|
|
|
|
self.chatEntry['focus'] = 1
|
|
|
|
self.chatEntry.set('')
|
|
|
|
self.chatFrame.show()
|
|
|
|
self.chatEntry.show()
|
|
|
|
self.cancelButton.show()
|
|
|
|
self.typedChatButton.hide()
|
|
|
|
self.typedChatBar.hide()
|
|
|
|
if self.wantHistory:
|
|
|
|
self.accept('arrow_up-up', self.getPrevHistory)
|
|
|
|
self.accept('arrow_down-up', self.getNextHistory)
|
|
|
|
return
|
|
|
|
|
|
|
|
def hide(self):
|
|
|
|
self.chatEntry.set('')
|
|
|
|
self.chatEntry['focus'] = 0
|
|
|
|
self.chatFrame.hide()
|
|
|
|
self.chatEntry.hide()
|
|
|
|
self.cancelButton.hide()
|
|
|
|
self.typedChatButton.show()
|
|
|
|
self.typedChatBar.show()
|
|
|
|
self.ignore('arrow_up-up')
|
|
|
|
self.ignore('arrow_down-up')
|
|
|
|
|
|
|
|
def activate(self):
|
|
|
|
self.chatEntry.set('')
|
|
|
|
self.chatEntry['focus'] = 1
|
|
|
|
self.chatFrame.show()
|
|
|
|
self.chatEntry.show()
|
|
|
|
self.cancelButton.show()
|
|
|
|
self.typedChatButton.hide()
|
|
|
|
self.typedChatBar.hide()
|
|
|
|
if self.whisperId:
|
2019-12-30 00:00:16 -06:00
|
|
|
print('have id')
|
2019-11-02 17:27:54 -05:00
|
|
|
if self.toPlayer:
|
|
|
|
if not base.talkAssistant.checkWhisperTypedChatPlayer(self.whisperId):
|
|
|
|
messenger.send('Chat-Failed player typed chat test')
|
|
|
|
self.deactivate()
|
|
|
|
elif not base.talkAssistant.checkWhisperTypedChatAvatar(self.whisperId):
|
|
|
|
messenger.send('Chat-Failed avatar typed chat test')
|
|
|
|
self.deactivate()
|
|
|
|
elif not base.talkAssistant.checkOpenTypedChat():
|
|
|
|
messenger.send('Chat-Failed open typed chat test')
|
|
|
|
self.deactivate()
|
|
|
|
|
|
|
|
def deactivate(self):
|
|
|
|
self.chatEntry.set('')
|
|
|
|
self.chatEntry['focus'] = 0
|
|
|
|
self.chatFrame.show()
|
|
|
|
self.chatEntry.hide()
|
|
|
|
self.cancelButton.hide()
|
|
|
|
self.typedChatButton.show()
|
|
|
|
self.typedChatBar.show()
|
|
|
|
|
|
|
|
def sendChat(self, text):
|
|
|
|
self.deactivate()
|
|
|
|
if text:
|
|
|
|
if self.toPlayer:
|
|
|
|
if self.whisperId:
|
|
|
|
pass
|
|
|
|
elif self.whisperId:
|
|
|
|
pass
|
|
|
|
elif base.config.GetBool('exec-chat', 0) and text[0] == '>':
|
|
|
|
text = self.__execMessage(text[1:])
|
|
|
|
base.localAvatar.setChatAbsolute(text, CFSpeech | CFTimeout)
|
|
|
|
return
|
|
|
|
else:
|
|
|
|
base.talkAssistant.sendOpenTalk(text)
|
|
|
|
if self.wantHistory:
|
|
|
|
self.addToHistory(text)
|
|
|
|
self.chatEntry.set('')
|
|
|
|
|
|
|
|
def chatOverflow(self, overflowText):
|
|
|
|
self.sendChat(self.chatEntry.get())
|
|
|
|
|
|
|
|
def __execMessage(self, message):
|
|
|
|
if not ChatInputTyped.ExecNamespace:
|
|
|
|
ChatInputTyped.ExecNamespace = {}
|
2022-12-16 18:40:57 -06:00
|
|
|
exec('from panda3d.core import *', globals(), self.ExecNamespace)
|
2019-11-02 17:27:54 -05:00
|
|
|
self.importExecNamespace()
|
|
|
|
try:
|
2021-07-08 23:51:16 -05:00
|
|
|
if not __debug__ or __execWarnings__:
|
2019-12-30 00:00:16 -06:00
|
|
|
print('EXECWARNING ChatInputNormal eval: %s' % message)
|
2019-11-02 17:27:54 -05:00
|
|
|
printStack()
|
|
|
|
return str(eval(message, globals(), ChatInputTyped.ExecNamespace))
|
|
|
|
except SyntaxError:
|
|
|
|
try:
|
2021-07-08 23:51:16 -05:00
|
|
|
if not __debug__ or __execWarnings__:
|
2019-12-30 00:00:16 -06:00
|
|
|
print('EXECWARNING ChatInputNormal exec: %s' % message)
|
2019-11-02 17:27:54 -05:00
|
|
|
printStack()
|
2019-12-30 00:00:16 -06:00
|
|
|
exec(message, globals(), ChatInputTyped.ExecNamespace)
|
2019-11-02 17:27:54 -05:00
|
|
|
return 'ok'
|
|
|
|
except:
|
|
|
|
exception = sys.exc_info()[0]
|
|
|
|
extraInfo = sys.exc_info()[1]
|
|
|
|
if extraInfo:
|
|
|
|
return str(extraInfo)
|
|
|
|
else:
|
|
|
|
return str(exception)
|
|
|
|
|
|
|
|
except:
|
|
|
|
exception = sys.exc_info()[0]
|
|
|
|
extraInfo = sys.exc_info()[1]
|
|
|
|
if extraInfo:
|
|
|
|
return str(extraInfo)
|
|
|
|
else:
|
|
|
|
return str(exception)
|
|
|
|
|
|
|
|
def cancelButtonPressed(self):
|
|
|
|
self.chatEntry.set('')
|
|
|
|
self.deactivate()
|
|
|
|
|
|
|
|
def chatButtonPressed(self):
|
|
|
|
self.sendChat(self.chatEntry.get())
|
|
|
|
|
|
|
|
def importExecNamespace(self):
|
|
|
|
pass
|
|
|
|
|
|
|
|
def addToHistory(self, text):
|
|
|
|
self.history = [text] + self.history[:self.historySize - 1]
|
|
|
|
self.historyIndex = 0
|
|
|
|
|
|
|
|
def getPrevHistory(self):
|
|
|
|
self.chatEntry.set(self.history[self.historyIndex])
|
|
|
|
self.historyIndex += 1
|
|
|
|
self.historyIndex %= len(self.history)
|
|
|
|
|
|
|
|
def getNextHistory(self):
|
|
|
|
self.chatEntry.set(self.history[self.historyIndex])
|
|
|
|
self.historyIndex -= 1
|
|
|
|
self.historyIndex %= len(self.history)
|