⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rpgchat.cc

📁 五行MMORPG引擎系统V1.0
💻 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 + -