📄 rpgchat.cc
字号:
//RPGChat.cc
/*/////////////////////////////////////////////////////////////////
李亦
liease@163.com 4040719
2006-7-18
/*/////////////////////////////////////////////////////////////////
#include "rpg/RPGChat.h"
#include "rpg/RPGSetting.h"
#include "console/consoleTypes.h"
//#include "console/macroManager.h"
#include "rpg/gobjects/GPlayer.h"
#include "rpg/RPGSetting.h"
#include "rpg/RPGChat.h"
#include "rpg/RPGTextParse.h"
#ifdef TGE_RPGCLIENT
#include "gui/game/guiChatLog.h"
#define RPGUI_CHATLOG "ChatUIChatLog"
#endif
namespace RPG
{
RPGChat* g_pRPGChat = NULL;
IMPLEMENT_CONOBJECT(RPGChat);
///////////////////////////////////////////////////////////////
//构造函数 /析构函数
RPGChat::RPGChat()
{
#ifdef TGE_RPGCLIENT
m_pUIChatLog = NULL;
m_chatTypes = CHATT_CLOSEBY;
CSTR s_arIcons[]=
{
"", "sys", "tip","toyou", "tome"
};
for(U32 n=0; n < CHATS_AMOUNT; n++)
m_arStateIcons[n] = StringTable->insert(s_arIcons[n]);//avar("ui/exps/%s",s_arIcons[n]));
m_arStateColors[CHATS_CLOSEBY].set(0xff, 0xbf, 0xff);
m_arStateColors[CHATS_TO].set(0xff, 0x00, 0xff);
m_arStateColors[CHATS_FROM].set(0xff, 0x80, 0xff);
m_arStateColors[CHATS_SYS].set(0xff, 0x60, 0x20);
m_arStateColors[CHATS_TIP].set(0xff, 0xff, 0x50);
#endif
}
RPGChat::~RPGChat()
{
}
bool RPGChat::OutputToUI(CSTR sText, StringTableEntry sYou,EChatStates state)
{
if(sText == NULL || dIsBlank(sText))
{
return false;
}
if(!g_pRPGTextParse)
return false;
#ifdef TGE_RPGCLIENT
if(m_pUIChatLog)
{
//state = (ChatStates)(sText[0] - '0');
if(state >= CHATS_AMOUNT || state < 0)
state = CHATS_CLOSEBY;
CSTR szText;
StringTableEntry pIcon;
pIcon = m_arStateIcons[state];
switch(state)
{
case CHATS_CLOSEBY:
szText = g_pRPGTextParse->ParseTextF("%s\n", sText);
break;
case CHATS_SYS:
case CHATS_TIP:
szText = g_pRPGTextParse->ParseTextF("/%s %s\n",pIcon, sText);
//szText = avar("<bitmap:%s> %s\n",pIcon, sText);
break;
case CHATS_TO:
case CHATS_FROM:
szText = g_pRPGTextParse->ParseTextF("/%s[%s] %s\n",pIcon,sYou, sText);
//szText = avar("<bitmap:%s>[%s] %s\n",pIcon,sYou, sText);
break;
}
if(!dIsBlank(szText))
{
m_pUIChatLog->SetColor(m_arStateColors[state]);
m_pUIChatLog->AppendText(szText);
}
}
else
#endif
{
switch(state)
{
case CHATS_SYS:
case CHATS_TIP:
Con::printf("系统: %s", sText);
break;
case CHATS_TO:
case CHATS_FROM:
Con::printf("=>%s: %s",sYou?sYou:"",sText);
break;
}
}
return true;
}
bool RPGChat::OutputToLog(CSTR sText, StringTableEntry sYou,EChatStates state)
{
if(g_pRPGChat)
{
return g_pRPGChat->OutputToUI(sText, sYou, state);
}
else
{
Con::printf("=>%s: %s",sYou?sYou:"",sText);
}
return true;
}
void RPGChat::OutputF(EChatStates state, ...)
{
static char buffer[4096];
va_list args;
CSTR argText;
StringTableEntry sYou;
va_start(args, state);
switch(state)
{
//格式: state,sDest,sText,...
case CHATS_TO:
case CHATS_FROM:
sYou = va_arg(args, StringTableEntry);
argText = va_arg(args, CSTR);
break;
//格式: state,sText,...
case CHATS_TIP:
case CHATS_SYS:
default:
sYou = NULL;
argText = va_arg(args, CSTR);
break;
}
dVsprintf(buffer, sizeof(buffer), argText, args);
va_end(args);
OutputToLog(buffer, sYou, state);
}
void RPGChat::OutputTipF(EGameTipTexts tipText, ...)
{
static char buffer[4096];
va_list args;
CSTR sText;
if(tipText < 0 || tipText >= TIP_AMOUNT || g_pRPGSetting == NULL)
return;
sText = g_pRPGSetting->GetTipTextName(tipText);
if(sText == NULL || sText[0] == 0)
return;
va_start(args, tipText);
dVsprintf(buffer, sizeof(buffer), sText, args);
va_end(args);
OutputToLog(buffer, NULL, CHATS_TIP);
}
void RPGChat::Initialize(CSTR pScriptName)
{
AssertWarn(g_pRPGChat==NULL,"RPGChat实例不能创建第2个");
g_pRPGChat = new RPGChat();
g_pRPGChat->registerObject(pScriptName);
//OutputLogF(CHATS_TO,"hi","=> %d %x %s %s",123,0xff, "leo", "abcdefg");
//OutputF(CHATS_SYS,"欢迎%s进入%s ", "狮子座", "亚工" );
/////////////////////////////////////////////////////////
//聊天记录初始化
//g_pRPGChat->setDataField("chatLogUI",NULL, RPGUI_CHATLOG);
}
void RPGChat::Destroy()
{
if(g_pRPGChat)
{
g_pRPGChat->deleteObject();
g_pRPGChat = NULL;
}
}
void RPGChat::initPersistFields()
{
Parent::initPersistFields();
#ifdef TGE_RPGCLIENT
addField("chatLogUI", TypeGuiChatLogPtr,Offset(m_pUIChatLog,RPGChat));
addField("arStateIcons", TypeFilename, Offset(m_arStateIcons,RPGChat), CHATS_AMOUNT);
#endif
}
//void RPGChat::consoleInit()
//{
//}
ConsoleMethod(RPGChat,Output,bool,5,5,"RPGChatLog(text,you,type)")
{
return object->OutputToUI(argv[2],
StringTable->insert(argv[3]),
(EChatStates)dAtoi(argv[4]));
}
};//namespace RPG
//#endif//#ifdef TGE_RPGCLIENT
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -