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

📄 chat.h

📁 网络游戏龙族 完整的登陆器 C++ 源代码
💻 H
字号:
// Chat.h: interface for the CChat class.
//
//////////////////////////////////////////////////////////////////////

#if !defined(AFX_CHAT_H__5DFB83E9_CE7C_4319_A6EF_3E15B16B0566__INCLUDED_)
#define AFX_CHAT_H__5DFB83E9_CE7C_4319_A6EF_3E15B16B0566__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#include "network.h"
#include "menuset.h"
#include "CurrentMsgMgr.h"
//DisplayChatBackCustom客 悼老 茄 风凭 鸥涝俊 NEW_CHAT_IMG,0 +3n 阑 持绢林搁 等促 7啊瘤 规侥 啊瓷

////////////////////////////////////////////////
// yes no 免仿 叼颇牢
enum YesOrNoType
{	//< CSD-030806
	YN_NO				=0,
	YN_GUILD_JOIN_OK	=1,		// 辨靛俊 啊涝且贰?
	YN_MERCHANT_REQUIRE_DIRECT_EXCHANGE = 2,//惑牢俊霸 流立芭贰甫 夸没
};	//> CSD-030806

//弊覆 锅龋聪鳖 捞芭 阜 官操搁 救邓聪促.
enum eCHAT_BACK_IMG_COLOR_NUMBER
{
	CHAT_COLOR_TYPE_DEFAULT			=0,
	CHAT_COLOR_TYPE_HIGHLEVEL		=3,
	CHAT_COLOR_TYPE_NPC				=6,
	CHAT_COLOR_TYPE_DUAL_CLASS		=9,
	CHAT_COLOR_TYPE_SIT_DOWN		=12,
	CHAT_COLOR_TYPE_GM				=15,
	CHAT_COLOR_TYPE_TUTORIAL_NPC	=18,
	CHAT_COLOR_TYPE_ANI2			=21,
	CHAT_COLOR_TYPE_ANI3			=24,
	CHAT_COLOR_TYPE_GUILDMASTER		=27,
	CHAT_COLOR_TYPE_MERCHANT_BBS	=30,
};

const int CHAT_DELAY_TYPE_MERCHANT_PC	= 500;//惑牢傍瘤绰 5盒 悼救 焊牢促
const int CHAT_DELAY_TYPE_NPC			= 120;
const int CHAT_DELAY_TYPE_LONG_PC		= 80;
const int CHAT_DELAY_TYPE_DEFAULT_PC	= 40;

const int	MAX_CHAT_STRING_				= 150 ;//020515 lsw
const int	MAX_CHAT_COUNT					= 10;//盲泼 扼牢狼 弥措 扼牢荐
const int	MAX_DISPLAY_CHAT_WIDTH_BY_PIXEL	= 410;
const int	MAX_CHAT_DISPLAY_TIME			= 30000;//拳搁俊 焊老 荐 乐绰 矫埃.
const int	MAX_CHAT_STAY_TIME				= 60000;//拳搁俊绰 焊捞瘤 臼瘤父 扁废捞 巢酒乐阑 矫埃,

const int	MAX_NORMAL_COUNT		=	20;
const int	MAX_WHISPER_COUNT		=	20;	
const int	MAX_GUILD_COUNT			=	20;
const int	MAX_GUILDBBS_COUNT		=	20;
const int	MAX_PARTY_COUNT			=	20;
const int	MAX_NATIONWAR_COUNT		=	20;
const int	MAX_LOCALWAR_COUNT		=	20;
const int	MAX_COLOSUSS_COUNT		=	20;
const int	MAX_YES_NO_COUNT		=	1;
const int	MAX_NOTICE_COUNT		=	10;

enum ChatGroups
{
	NORMAL_CHAT_GROUP				=0,
	GUILD_CHAT_GROUP				=1,
	WHISPER_CHAT_GROUP				=2,
	CHAT_GROUP_MAX					=3
};//盲泼 弊缝狼 付瘤阜 捞促

#include "MyTypes.h"
#include <list>
#include <vector>
using namespace std;
class CChatData
{
public:
	CChatData()
	{
		m_szData = NULL; 
		m_szTotalChatData = NULL; 
		m_szHeader[0] = NULL; 
		m_szName[0] = NULL; 
		bIsHaveHeader = false;
	}
	~CChatData()
	{
		SAFE_DELETE_ARRAY(m_szData);
		SAFE_DELETE_ARRAY(m_szTotalChatData);
	}
public:
	int			m_iIndex;
	int			m_iIndex2;
	
private:
	int			m_iChatType;

	WORD		m_wHeaderColor;
	WORD		m_wNameColor;
	WORD		m_wDataColor;	

	bool		m_bIsDisplayAble;

	bool		bIsHaveHeader;

	char		m_szHeader[20];
	char		m_szName[20];
	char*		m_szData;

	char*		m_szTotalChatData;
	
	DWORD		m_dwWriteTime;
	DWORD		m_dwMaxDisplayTime;//啊厘 坷阀悼救 免仿 瞪 荐 乐绰 矫埃.//捞矫埃捞 逞菌促绊 瘤况瘤瘤绰 臼澜

public:
	void SetData(const WORD wValue, const char* szValue)
	{
		SetData(szValue);
		SetDataColor(wValue);
	}
	void SetName(const WORD wValue, const char* szValue)
	{
		SetName(szValue);
		SetNameColor(wValue);
	}
	void SetHeader(const WORD wValue, const char* szValue)
	{
		SetHeader(szValue);
		SetHeaderColor(wValue);
	}

	void SetDataColor(const WORD wValue){m_wDataColor = wValue;}
	void SetNameColor(const WORD wValue){m_wNameColor = wValue;}
	void SetHeaderColor(const WORD wValue){m_wHeaderColor = wValue;}

	void SetData(const char* szValue)
	{
		const int iDataLen = strlen(szValue);
		if( 0 >= iDataLen ) {return;}//单捞鸥 辨捞啊 捞惑窍搁 涝仿 登搁 救等促
		m_szData = new char[iDataLen+1];//+1 篮 NULL 巩磊 iDataLen篮 1焊促 农促 绊肺 硅凯狼 屈怕啊 等促 馆靛矫 硅凯肺 new 秦具 茄促
		strcpy(m_szData,szValue);
	}

	void MakeTotalData()
	{
		char szTemp[600] = {0,};
		( IsHaveHeader() )?
		sprintf(szTemp,"%s %s %s",GetHeader(),GetName(),GetData()):		
		sprintf(szTemp,"%s %s",GetName(),GetData());
		szTemp[599] = 0;
		m_szTotalChatData = new char[strlen(szTemp)+1];
		strcpy(m_szTotalChatData,szTemp);
	}

	void SetName(const char* szValue)
	{
		if( NULL == szValue || NULL== szValue[0]){m_szName[0] = NULL; return;}//悸泼 且 荐 绝阑锭
		const int iNameLen = strlen(szValue);
		if(20 > iNameLen && 0 < iNameLen)//捞抚 辨捞啊 20 焊促 累阑锭
		{
			strcpy(m_szName,szValue);
		}
		else
		{
			{m_szName[0] = NULL; return;}//悸泼 且 荐 绝阑锭(辨捞 坷滚
		}
	}
	void SetHeader(const char* szValue)
	{
		if( NULL == szValue || NULL== szValue[0]){m_szHeader[0] = NULL; return;}//悸泼 且 荐 绝阑锭
		const int iHeaderLen = strlen(szValue);
		if(20 > iHeaderLen && 0 < iHeaderLen)//捞抚 辨捞啊 20 焊促 累阑锭
		{
			strcpy(m_szHeader,szValue);
			bIsHaveHeader = true;
		}
		else
		{
			{m_szHeader[0] = NULL; return;}//悸泼 且 荐 绝阑锭(辨捞 坷滚
		}
	}
	void SetChatType(const int iValue,const int iIndex1,const int iIndex2)	//盲泼 鸥涝阑 瘤沥 窍搁辑 扁废 矫埃 瘤况龙 矫埃殿阑 悸泼 茄促
	{
		m_iChatType=iValue;
		m_dwWriteTime=timeGetTime();
		m_dwMaxDisplayTime = m_dwWriteTime+MAX_CHAT_DISPLAY_TIME;//20檬埃 叼胶敲饭捞 瞪 荐 乐澜
		m_iIndex = iIndex1;
		m_iIndex2= iIndex2;
		m_bIsDisplayAble = true;
	}
	void SetDisplayAble(const bool bValue){m_bIsDisplayAble=bValue;}
public:
	DWORD GetWriteTime()const{return m_dwWriteTime;}
	DWORD GetMaxDisplayTime()const{return m_dwMaxDisplayTime;}
	char* GetData(){return m_szData;}
	char* GetName(){return m_szName;}
	char* GetHeader(){return m_szHeader;}
	char* GetTotalData(){return m_szTotalChatData;}
	bool IsHaveHeader()const{return bIsHaveHeader;}
	bool IsDisplayAble()const{return m_bIsDisplayAble;}
	
	WORD GetDataColor()const{return m_wDataColor;}
	WORD GetNameColor()const{return m_wNameColor;}
	WORD GetHeaderColor()const{return m_wHeaderColor;}
	
	int	GetChatType()const{return m_iChatType;}
	int	GetIndex()const{return m_iIndex;}
	int	GetIndex2()const{return m_iIndex2;}
};

typedef list<CChatData*>::iterator chatitor;
typedef list<CChatData*>::reverse_iterator rchatitor;

typedef vector<char*>::iterator vpcitor;
class CChatMgr
{
public:
	CChatMgr()
	{
		m_iAlpha = 3;
		m_iBlendType = 3;
		m_iLineGab = 15;
		m_iWidth = MAX_DISPLAY_CHAT_WIDTH_BY_PIXEL;
		Clear();
	}
	~CChatMgr(){Clear();}

private:
	int	m_iNormalChatView;//焊烹盲泼 夯促 救夯促
	int	m_iWhisperChatView;//庇富盲泼 夯促 救夯促
	int	m_iGuildChatView;//辨靛盲泼 夯促 救夯促
	//墨款磐甸 捞抚焊搁 购 墨款磐牢瘤 舅疤聪促.
	int	m_iTotalCounter;
	int	m_iNormalCounter;
	int	m_iWhisperCounter;	
	int	m_iGuildCounter;
	int	m_iGuildBBSCounter;
	int	m_iPartyCounter;
	int	m_iNationWarCounter;
	int	m_iLocalWarCounter;
	int	m_iColosussCounter;
	int	m_iYesNoCounter;
	int	m_iNoticeCounter;
	
private:
	int m_iAlpha;//舅颇 蔼
	int m_iBlendType;//硅版 嘛洒绰 喉坊爹 鸥涝
	int m_iLineGab;//临寸 埃拜 14肺 绊沥且 巴
	int m_iWidth;//盲泼捞 嘛洒绰 扼牢狼 侨伎 辨捞
///////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////
//庇加富 包访
private:
	int m_iRefuseAllWhisper;
	vector<char*> vRefuseList;//
public:
	void RecvWhisper( const char *szName, char *szMsg, const WORD dSenderServerIndex, const WORD dSenderCn);// 促弗 荤恩捞 焊辰 庇加富
	void ReplyWhisper( const WORD dSenderServerIndex, const WORD dSenderCn, const char cResult );
	void SetRefuseWhiper(const char* szName)
	{
		if(!szName || !(*szName))//捞抚捞 涝仿 登瘤 臼栏搁
		{
			m_iRefuseAllWhisper = 1;//葛滴 庇富 芭何
			m_iWhisperChatView = false;//救航 
			::AddCurrentStatusMessage(FONT_COLOR_RED,lan->OutputMessage(2,611));
			return;
		}
		
		if(!IsRefuseGuy(szName))//芭何措惑捞 酒聪搁 眠啊 矫难霖促
		{
			char* pszTemp = new char[strlen(szName)+1];
			strcpy (pszTemp,szName);
			vRefuseList.push_back(pszTemp);
		}
		/*
vRefuseList
	if( !*name || !strcmp( name,lan->OutputMessage(7,118)  ))		// 葛滴 芭何
	{
		ChatMgr.RefuseWhiperAll();
		AddCurrentStatusMessage( 200, 0 ,0 , lan->OutputMessage(7,114));//010215 lsw
	}
	else 
	AddCurrentStatusMessage( 250, 0 ,250 , lan->OutputMessage(7,115), name );//010215 lsw
	else
	AddCurrentStatusMessage( 200, 0 ,0 , lan->OutputMessage(7,116), name );//010215 lsw
*/
	}

	void SetAcceptWhiper(const char* szName)
	{
		if(!szName || !(*szName))//捞抚捞 涝仿 登瘤 臼栏搁
		{
			m_iRefuseAllWhisper = 0;//葛滴 庇富 倾啊
			m_iWhisperChatView = true;
			::AddCurrentStatusMessage(FONT_COLOR_GREEN,lan->OutputMessage(2,610));
			return;
		}

		for(vpcitor itor = vRefuseList.begin();vRefuseList.end() != itor;itor++)
		{
			if(!strcmp( (*itor),szName))
			{
				SAFE_DELETE((*itor));
				vRefuseList.erase(itor);//捞抚阑 力芭
			}
		}
		/*
	if( !*name || !strcmp( name, lan->OutputMessage(7,118) ) )
	{
		AddCurrentStatusMessage( FONT_COLOR_GREEN, lan->OutputMessage(7,117) );//021001 lsw
		ChatMgr.AcceptWhiperAll();
	}
	else
	{
		AddCurrentStatusMessage( 200, 0 ,200 , lan->OutputMessage(7,119), name );//010215 lsw
	}
*/
	}

	void DisplayRefuseList();//庇富 芭何 府胶飘 免仿	

	int	 IsRefuseAllWhisper(){return m_iRefuseAllWhisper;}//true蔼捞搁 庇富 芭何惑怕
	int  IsRefuseGuy(const char *szName)
	{
		for(vpcitor itor = vRefuseList.begin();vRefuseList.end() != itor;itor++)
		{
			if(!strcmp( (*itor),szName))
			{
				return 1;
			}
		}
		return 0;
	}
	
///////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////
//YesOrNo 矫胶袍
private:
	int m_iYesOrNoType;//郴啊 罐篮 YesNo狼 鸥涝//ex>YN_GUILD_JOIN_OK
	int m_dwSelectWaitTime;//YesNo 绊福绰 矫埃(肺拿 矫埃栏肺 悸泼)
	int m_iYesOrNoDemanderCn;//YesNo甫 夸备窍绰 仇狼 cn
public:
	void ClearYesNo()
	{
		m_iYesOrNoType			= YN_NO;//郴啊 罐篮 YesNo狼 鸥涝//ex>YN_GUILD_JOIN_OK
		m_dwSelectWaitTime		= 0;//YesNo 绊福绰 矫埃(肺拿 矫埃栏肺 悸泼)
		m_iYesOrNoDemanderCn	= 0;//YesNo甫 夸备窍绰 仇狼 cn
	}
	int RecvNeedYesNoMsg( const int iType, const int iDemanderCn, const char *szMsg, ... );
	
	bool IsCheckYesNoAble()
	{

		DWORD dwTemp = m_dwSelectWaitTime;
		int	isss = m_iYesOrNoType;
		return (m_dwSelectWaitTime && m_iYesOrNoType)?true:false;
	}
	
	void CheckYesNo( const int iIsYes );
///////////////////////////////////////////////////////////////


private:
	list<CChatData*> ChatList;//
public:
	void AddString(const char* szName, const char* szChatData, const int iChatType);//盲泼 单捞鸥 眠啊
	void DeleteCheck();//瘤况龙 措惑 眉农 
	void DisplayCheck();//瘤况龙 措惑 眉农 
	void DisplayData(const int iX, const int iY,const int iOption = 0);//拳搁俊 谎府扁//
	void SetViewChat(const int iChatType , const int iIsView);//盲泼 夯促 救夯促 眉农
	int GetViewChat(const int iChatType );//瘤陛 杭 荐 乐绰 鸥涝 啊廉咳
	void Clear();
	void DisplayPastData(const int iType);
	int	GetDisplayAbleCounter(){return m_iTotalCounter-MAX_CHAT_COUNT;}// '-蔼'捞登绢档 惑包 绝促
	int	IsDisplayAbleType(const int iChatType);
	int DrawChatData(CChatData* pData, const int iLineCount, const int iX, const int iY);//臂磊 嘛绰 何盒阑 毒巴涝聪促.//嘛篮 临 荐甫 府畔钦聪促.


//////////////////////////////////////////////////////////////////////
//1.3 傍瘤 力茄 //kyo
private:
	enum{
		MAX_LIMIT_USER	= 20,
	};

	vector<string> m_szLimiteName;
	bool	m_bIsActiveBBS;
public:
	void	ClearLimiteBBS();	
	void	SetActiveBBS( bool bIsActiveBBS ) {m_bIsActiveBBS = bIsActiveBBS; };
	bool	IsActiveBBS() const { return m_bIsActiveBBS ; }
	bool	AddLimintedBBSName(char* szLimitList);
	bool	AddLimintedBBSNameOne( const string szName);
	bool	IsLimitedBBSName( const string szName);	
	void	ShowLimitedList();
//
//////////////////////////////////////////////////////////////////////

};

extern CChatMgr ChatMgr;
extern int GetDisplayChatType( LPCHARACTER ch );
extern void	DisplayChatMessage( LPCHARACTER lpCharacter );

extern bool IsAbleChatTargetName(const int iType);//捞沫捞 棵官弗 沫牢啊(措惑瘤沥捞 沥犬茄啊)
extern int GetChatMode();
extern	int InsertWisperList(const char* name);

extern bool SendChatWisper(const char *name, char *msg);
extern bool SendChatNormal(char* msg);
extern bool SendChatGuild(char *msg );//020515 lsw
extern void SetChatTarget(const int iType);
extern bool IsChatBoxLock();
extern int GetChatTarget();//泅犁 盲泼 惑措 啊瘤绊 坷扁

extern void RecvWhisperReply( const int type, const char *szName);		// 庇加富..
extern void RecvWhisperReply2( const int ret );
extern void RecvWhisperReplyEtc( t_packet *p );
extern Spr *chatimage[3*10];
////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////
// 庇加富 包访 努饭胶
#endif // !defined(AFX_CHAT_H__5DFB83E9_CE7C_4319_A6EF_3E15B16B0566__INCLUDED_)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -