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

📄 npctxtanalysis.cpp

📁 好游戏的客户端原码
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// NPCTxtAnalysis.cpp: implementation of the CNPCTxtAnalysis class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"

#define LINE_DIVIDER				0x01			// Line Divider

#define DEFAULT_TEXT_HEIGHT			16				// Default Text Height(as Pixel)
#define DEFAULT_TEXT_WIDTH			16				// Default Text Width(as Pixel)

#define	DEFAULT_TXT_COLOR			RGB(255,255,255)	// WHITE COLOR
#define DEFAULT_BTN_COLOR			RGB(255,255,0)		// YELLOW COLOR
#define DEFAULT_BTN_CLICK_COLOR		RGB(255,0,0)		// RED COLOR

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CNPCTxtAnalysis::CNPCTxtAnalysis()
{
	m_pxBtn = NULL;
	m_pxpTxt = NULL;
	m_pSourceText = NULL;
	m_bReady = FALSE;
	m_bInited = FALSE;
	m_pxGWND = NULL;
}

CNPCTxtAnalysis::~CNPCTxtAnalysis()
{
	FreeAllMsg();
}

BOOL CNPCTxtAnalysis::InitAnalysis(CTextButton *xpBtn,CPDLList<CMText>*	pxpTxt,CWHDXGraphicWindow*	pxGWND)
{
	m_pxBtn = xpBtn;									// Link to Text Button Class
	m_pxpTxt = pxpTxt;
	ZeroMemory(m_InnerResult,MAX_BUFFER_SIZE);
	m_pxGWND=pxGWND;
	m_bInited = TRUE;
	return TRUE;
}

BOOL CNPCTxtAnalysis::FreeAllMsg(VOID)
{
	if(m_bInited)
	{
		m_pxpTxt->ClearAllNodes();							// 盒籍等 臂 葛滴 朝府扁
		m_pxBtn->ReleaseButtons();							// 积己等 窜捧 葛滴 朝府扁
	}

	if(m_pSourceText!=NULL)
	{
		delete[] m_pSourceText;								// 罐篮 家胶档 葛滴 朝府扁
		m_pSourceText = NULL;
	}

	m_bReady = FALSE;
	return TRUE;
}

// Divider 绰 阿 CHAR喊肺 葛滴 八免茄促.
// 搬苞绰 罐绰 溜矫 Memcpy甫 且巴.. 酒聪搁 静饭扁 蔼栏 凳...
CHAR* CNPCTxtAnalysis::GetValidStr(CHAR* szSource,CHAR* szDest,CHAR* Divider)
{
	CHAR* szBuffer;
	int nSrcLen;
	int	nBuf_Count,nCount;
	int nArrCount;

	szBuffer = new CHAR[MAX_BUFFER_SIZE];
	nSrcLen = strlen(szSource);

	nBuf_Count	=	0;
	nCount		=	0;

	if (nSrcLen >= MAX_BUFFER_SIZE - 1 )				// 弥措 辨捞焊促 辨搁 角青阑 秒家 茄促.
	{
		ZeroMemory(szDest,sizeof(szDest));
		delete[] szBuffer;
		return NULL;
	}

	if (strlen(szSource)==0)						// 家胶 Text啊 绝栏搁 角青阑 秒家 茄促.
	{
		ZeroMemory(szDest,sizeof(szDest));
		delete[] szBuffer;
		return szDest;
	}

	nArrCount = strlen(Divider)/sizeof(char);		// Divider狼 辨捞甫 备茄促.

	while(true)
	{
		char Ch;

		if( nCount <= nSrcLen )
		{
			Ch=szSource[nCount];
			for(int i = 0; i<= nArrCount-1;i++)		
			{
				if(Ch == Divider[i])				// Divider 八免
				{
					goto CATCH_DIV;
				}
			}
		}
		if(nCount > nSrcLen)
		{
			CATCH_DIV:
			if(nBuf_Count >0)
			{
				if(nBuf_Count < MAX_BUFFER_SIZE -1)
				{
					szBuffer[nBuf_Count] = '\0';	// End String (sz)
					strcpy(szDest,szBuffer);
					strncpy(m_InnerResult,szSource + nCount+1,nSrcLen-nCount);
				}
				break;
			}
			else
			{
				if(nCount>nSrcLen)
				{
					ZeroMemory(szDest,sizeof(szDest));
					strncpy(m_InnerResult,szSource +nCount+2,nSrcLen-1);
					break;
				}
			}
		}
		else
		{
			if(nBuf_Count< MAX_BUFFER_SIZE -1)
			{
				szBuffer[nBuf_Count] = Ch;
				nBuf_Count++;
			}
		}
		nCount++;
	}

	delete[] szBuffer;
	return m_InnerResult;
}


CHAR* CNPCTxtAnalysis::GetValidStr(CHAR* szSource,CHAR* szDest,CHAR Divider)
{
	CHAR* szBuffer;
	int nSrcLen;
	int	nBuf_Count,nCount;

	szBuffer = new CHAR[MAX_BUFFER_SIZE];
	nSrcLen = strlen(szSource);

	nBuf_Count	=	0;
	nCount		=	0;

	if (nSrcLen >= MAX_BUFFER_SIZE - 1 )				// 弥措 辨捞焊促 辨搁 角青阑 秒家 茄促.
	{
		ZeroMemory(szDest,sizeof(szDest));
		delete[] szBuffer;
		return NULL;
	}

	if (strlen(szSource)==0)							// 家胶 Text啊 绝栏搁 角青阑 秒家 茄促.
	{
		ZeroMemory(szDest,sizeof(szDest));
		delete[] szBuffer;
		return szDest;
	}

	while(true)
	{
		char Ch;

		if( nCount <= nSrcLen )
		{
			Ch=szSource[nCount];
			if(Ch == Divider)				// Divider 八免
			{
				goto CATCH_DIV;
			}
		}
		if(nCount > nSrcLen)
		{
			CATCH_DIV:
			if(nBuf_Count >0)
			{
				if(nBuf_Count < MAX_BUFFER_SIZE -1)
				{
					szBuffer[nBuf_Count] = '\0';	// End String (sz)
					strcpy(szDest,szBuffer);
					ZeroMemory(m_InnerResult,MAX_BUFFER_SIZE);
					if(nSrcLen-nCount>0) 
						strncpy(m_InnerResult,szSource + nCount+1,nSrcLen-nCount);
				}
				break;
			}
			else
			{
				if(nCount>nSrcLen)
				{
					ZeroMemory(szDest,sizeof(szDest));
					ZeroMemory(m_InnerResult,MAX_BUFFER_SIZE);
					if(nSrcLen-1>0) strncpy(m_InnerResult,szSource +nCount+2,nSrcLen-1);
					break;
				}
			}
		}
		else
		{
			if(nBuf_Count< MAX_BUFFER_SIZE -1)
			{
				szBuffer[nBuf_Count] = Ch;
				nBuf_Count++;
			}
		}
		nCount++;
	}
	if(szBuffer!=NULL)
	{
		delete[] szBuffer;
		szBuffer = NULL;
	}

	return m_InnerResult;
}

CHAR* CNPCTxtAnalysis::GetValidStr(CHAR* szSource,INT nSrcLen,CHAR* szDest,INT nDestLen,CHAR Divider)
{
	CHAR* szBuffer;
	int	nBuf_Count,nCount;

	szBuffer = new CHAR[MAX_BUFFER_SIZE];

	nBuf_Count	=	0;
	nCount		=	0;

	if (nSrcLen >= MAX_BUFFER_SIZE - 1 )				// 弥措 辨捞焊促 辨搁 角青阑 秒家 茄促.
	{
		ZeroMemory(szDest,nDestLen);
		delete[] szBuffer;
		return NULL;
	}

	if (strlen(szSource)==0)							// 家胶 Text啊 绝栏搁 角青阑 秒家 茄促.
	{
		ZeroMemory(szDest,nDestLen);
		delete[] szBuffer;
		return szDest;
	}

	while(true)
	{
		char Ch;

		if( nCount <= nSrcLen )
		{
			Ch=szSource[nCount];
			if(Ch == Divider)				// Divider 八免
			{
				goto CATCH_DIV;
			}
		}
		if(nCount > nSrcLen)
		{
			CATCH_DIV:
			if(nBuf_Count >0)
			{
				if(nBuf_Count < MAX_BUFFER_SIZE -1)
				{
					szBuffer[nBuf_Count] = '\0';	// End String (sz)
					memcpy(szDest,szBuffer,nBuf_Count);
					ZeroMemory(m_InnerResult,MAX_BUFFER_SIZE);
					if(nSrcLen-nCount>0) 
						strncpy(m_InnerResult,szSource + nCount+1,nSrcLen-nCount);
				}
				break;
			}
			else
			{
				if(nCount>nSrcLen)
				{
					ZeroMemory(szDest,nDestLen);
					ZeroMemory(m_InnerResult,MAX_BUFFER_SIZE);
					if(nSrcLen-1>0) strncpy(m_InnerResult,szSource +nCount+2,nSrcLen-1);
					break;
				}
			}
		}
		else
		{
			if(nBuf_Count< MAX_BUFFER_SIZE -1)
			{
				szBuffer[nBuf_Count] = Ch;
				nBuf_Count++;
			}
		}
		nCount++;
	}
	if(szBuffer!=NULL)
	{
		delete[] szBuffer;
		szBuffer = NULL;
	}

	return m_InnerResult;
}

CHAR* CNPCTxtAnalysis::ArrestString(CHAR* szSource,CHAR SearchAfter,CHAR AssertBefore,CHAR* AssertStr)
{
	int Src_Len;
	bool Right_Data,Fin;

	ZeroMemory(AssertStr,strlen(AssertStr));
	ZeroMemory(m_InnerResult,MAX_BUFFER_SIZE);

	if(strlen(szSource)==0)
	{
		ZeroMemory(AssertStr,sizeof(AssertStr));
		return m_InnerResult;
	}
	int n;
	Src_Len = strlen(szSource);
	Right_Data = false;
	if(Src_Len >=2)
	{
		if(szSource[0] == SearchAfter)
		{
			strncpy(szSource,szSource+1,Src_Len-1);
			szSource[Src_Len-1]=NULL;
			Src_Len = strlen(szSource);
			Right_Data = true;
		}
		else
		{
			n= FindChr(szSource,SearchAfter);
			if(n>=0)
			{
				strncpy(szSource,szSource+n,Src_Len - (n));
				Src_Len = strlen(szSource);
				Right_Data = true;
			}
		}

		Fin = false;

		if(Right_Data)
		{
			n = FindChr(szSource,AssertBefore);
			if(n>=0)
			{
				strncpy(AssertStr,szSource,n);
				strncpy(m_InnerResult,szSource+n,Src_Len - n);
			}
			else
			{
				strncat(m_InnerResult,&SearchAfter,1);
				strcat(m_InnerResult,szSource);
			}
		}
		else
		{
			for(int i = 0; i< Src_Len;i++)
			{
				if(szSource[i] == SearchAfter)
				{

					strncpy(m_InnerResult,szSource+i,Src_Len-i+2);
					break;
				}
			}
		}
	}
	return m_InnerResult;
}


CHAR* CNPCTxtAnalysis::UpperCase(CHAR* szStr)
{
	int Len;
	ZeroMemory(m_InnerResult,MAX_BUFFER_SIZE);
	Len = strlen(szStr);
	for(int i = 0;i<Len;i++)
	{
		if(szStr[i]>'a' && szStr[i]<'z')
		{
			m_InnerResult[i] = szStr[i]-32;
		}
		else
		{
			m_InnerResult[i] = szStr[i];
		}
	}
	return m_InnerResult;
}

CHAR CNPCTxtAnalysis::UpperCase(CHAR chr)
{
	char szResult;
	szResult=0x00;

	szResult = (chr>'a' && chr<'z') ? chr-32:chr;

	return szResult;
}

int CNPCTxtAnalysis::FindChr(CHAR* szstr,CHAR ch)
{
	int Count = 0;
	bool Conditions=true;
	while(Conditions && Count<((int)strlen(szstr)))
	{
		if(szstr[Count]==ch)
			Conditions = false;
		Count++;
	}

	if(!Conditions) return Count;
	else return -1;
}

int CNPCTxtAnalysis::FindChr(CHAR* szStr,CHAR* ch)
{
	int Count = 0;
	int nLenObject;
	bool Conditions=true;

	nLenObject = strlen(ch);

	while(Conditions && Count <((int)strlen(szStr)))
	{
		if(szStr[Count]==ch[0])
		{
			int nChk=0;
			for(int i = 0 ; (i <nLenObject)&&(Count+i<(int)strlen(szStr)); i++)
			{
				if(szStr[Count+i]==ch[i])
					nChk++;
			}
			if(nChk == nLenObject)
				Conditions = false;
			// Text啊 葛滴 老摹 且 版快父 八免
		}
		Count++;
	}

	if(!Conditions) return Count;
	else return -1;
}

int CNPCTxtAnalysis::StrLength(CHAR* str)
{
	int Counter = 0;
	while(str[Counter++]!='\0');
	return Counter;
}


void CNPCTxtAnalysis::AnalySisText(CDLList<CHAR*>* pxpTxt,INT nLineMax)
{
	BOOL	DrawCenter = FALSE;
	CHAR*	szTemp;
	CHAR*	CmdStr;
	CHAR*	CmdParamStr;
	CHAR*	szStr;

	INT	nPosX = 20;;
	INT nLineCount = 0;
	COLORREF	cColor = RGB(1,1,1);

	SIZE	tSize;

	if(m_bInited)
	{

		// Init Buffers
		CmdParamStr	=	new CHAR[MAX_BUFFER_SIZE];
		CmdStr		=	new CHAR[MAX_BUFFER_SIZE];
		szStr		=	new CHAR[MAX_BUFFER_SIZE];

		ZeroMemory(CmdStr,MAX_BUFFER_SIZE);
		ZeroMemory(szStr,MAX_BUFFER_SIZE);

		pxpTxt->MoveCurrentToTop();
		while(true)
		{
			if(nLineMax<=nLineCount) 
				break;
			strcpy(szStr,*pxpTxt->GetCurrentData());	//	Line Divide

			if(strlen(szStr)!=0)
			{

				while((FindChr(szStr,'<')>0)&&(FindChr(szStr,'>')>0) && (strlen(szStr)!=0))
				{
					CHAR*	Fdata;
					Fdata	=	new CHAR[MAX_BUFFER_SIZE];
					ZeroMemory(Fdata,MAX_BUFFER_SIZE);
					// <>Tag 盒府 Text Button 积己
					if((szStr[0])!='<')
					{
						szTemp =  GetValidStr(szStr,Fdata,'<');
						strcpy(szStr,"<");
						strcat(szStr,szTemp);				
					}	// endif

					// <>救俊 乐绰 郴侩 CmdStr肺
					szTemp = ArrestString(szStr,'<','>',CmdStr);
					strcpy(szStr,szTemp);
					szTemp = NULL;
					
					if(strlen(CmdStr)!=0)
					{
						switch(UpperCase(CmdStr[0]))
						{
							case '0':		// <0> 老版快 臂磊祸 BLACK
							{
								cColor = RGB(0,0,0);
							}
							break;
							case '1':		// <1> 老版快 臂磊祸 RED
							{
								cColor = RGB(255,0,0);
							}
							break;
							case '2':		// <2> 老版快 臂磊祸 GREEN
							{
								cColor = RGB(0,128,0);
							}
							break;
							case '3':		// <3> 老版快 臂磊祸 Olive
							{
								cColor = RGB(128,128,0);
							}
							break;
							case '4':		// <4> 老版快 臂磊祸 GRAY
							{
								cColor = RGB(128,128,128);
							}
							break;
							case '5':		// <5> 老版快 臂磊祸 Maroon
							{
								cColor = RGB(128,0,0);
							}
							break;
							case '6':		// <6> 老版快 臂磊祸 Teal
							{
								cColor = RGB(0,128,128);
							}

⌨️ 快捷键说明

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