📄 npctxtanalysis.cpp
字号:
// 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 + -