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

📄 language.cpp

📁 完整龙族的无错反外挂登陆器,b编译后直接直接就可以放在客户端下运行
💻 CPP
字号:
#include "stdafx.h"
#include <stdio.h>

#include "Language.h"
#include "hong_sub.h"
/*////////////////////////////////////////////////////////////////////////////////////////////
// 备己 : CLan.cpp,CLan.h 拳老.                                                             //
// 格利 : txt拳老肺 何磐 胶飘傅阑 佬绢辑 皋葛府俊 历厘. 寇何俊 力傍窍绰 OutputMessage窃荐甫 //
//        烹秦辑 秦寸 胶飘傅阑 力傍.                                                        //
// 备泅 : txt拳老阑 扩档快俊 嘎霸 秦寸 攫绢狼 txt甫 茫酒辑 肺爹. txt拳老阑 茄锅 盒籍窍咯    //
//        鞘夸茄 皋葛府甫 拌魂, new甫 茄锅父 龋免窍咯 牢郸胶侩 抛捞喉苞 胶飘傅阑 窃膊 历厘. //
// 漂隆 : 抗傈俊绰 胶飘傅喊肺 new甫 龋免窍绊 牢郸胶狼 积己俊档 new甫 荤侩窍咯 皋葛府狼 窜祈 //
//        拳 棺 memory leak阑 蜡惯窍看栏哥, 3窜 器牢磐狼 荤侩栏肺, 蜡瘤焊荐狼 绢妨框 惯积.  //
//        泅力绰 new甫 茄锅父 龋免窃栏肺辑 memory leak狼 规瘤 棺 皋葛府 窜祈拳甫 规瘤茄促.  //
//        All code is made by zoung. zoung@esofnet.com ICQ : 66924157  Written at 2002/4/12 //
*/////////////////////////////////////////////////////////////////////////////////////////////

LanguagePack* lan = NULL;

char    LanguageInt[6][3]={ "en", "kr", "ch", "en", "jp","th"};
char	header[10][20]={ "[melee]","[magic]","[skill]","[notice]","[item]","[etc]","[justmsg]","[sprintf]","[yesorno]","[temp]"};	

int		CLanguage::CheckArea()			//绢恫 攫绢甫 静绰瘤 眉农窍绰 窃荐
{
	AreaCode=1;	// KR
	
#ifdef JAPAN_LOCALIZING_
	AreaCode=4;	// JP
#endif

#if defined TAIWAN_LOCALIZING_  || defined CHINA_LOCALIZING_ || defined HONGKONG_LOCALIZING_
	AreaCode=2;	// TH
#endif

#ifdef USA_LOCALIZING_
	AreaCode=0;	// EN
	#ifndef MALAYSIA_LOCALIZING_ // 031013 kyo
		#ifndef THAI_LOCALIZING_	// BBD 040114

			const short WinAreaCode=GetUserDefaultLangID();
			switch(WinAreaCode)
			{
			case 0x0404:// Chinese (Taiwan Region) 
			case 0x0804:// Chinese (PRC) 
			case 0x0c04:// Chinese (Hong Kong SAR, PRC) 
			case 0x1004:// Chinese (Singapore) 
			case 0x0411:// Japanese 
				{
					::ExitApplication(EA_LANGUAGE_ERROR);
					return 0;
				}break;
			}

		#endif	// BBD 040114
	#endif	// 031013 kyo
#endif

	return(1);
}

int CLanguage::LoadingByAreaCode()	//AreaCode俊 狼秦辑 秦寸窍绰 拳老阑 佬绢 甸牢促.
{
	char path[MAX_FILE_LENGTH];
	wsprintf(LoadedFileName,"%s_lan.txt",LanguageInt[AreaCode]);
	wsprintf(path, "./data/%s", LoadedFileName );	
	wsprintf(this->LoadedFileName,"%s",path);

	FILE * fp=Fopen(path,"rt");
	if(fp==NULL)	{	MessageBox(NULL,"Can't Find Language Text","Language Error",NULL);	return -1;}
	fclose(fp);
	return(1);
}

char*	CLanguage::OutputMessage(int NumOfSentence)	//秦寸窍绰 皋矫瘤甫 Sentence俊促 持绊 绝栏搁 Sentence俊绰 酒公蔼档 绝促.
{
	int kind=0,number=0;
	kind=NumOfSentence/100000;
	number=NumOfSentence%100000;
	return this->OutputMessage(kind,number);
}
char*	CLanguage::OutputMessage(int Kind,int Num)	//秦寸窍绰 皋矫瘤甫 Sentence俊促 持绊 绝栏搁 Sentence俊绰 酒公蔼档 绝促.
{
	if (Kind == 1 && Num == 25)
	{
		int k = 0;
	}

	if( Kind < 0 || Kind >=MAX_KIND )
		return this->szNullString;

	if( Num  <=0 || Num  > this->m_dwMaxLineNumberOfKind[Kind])
		return this->szNullString;

	DWORD MaxNumber = 0;
	if( Kind == 0 )
		MaxNumber = 0;
	else
	{
		for( int i=0;i<Kind;i++)
			MaxNumber += this->m_dwMaxLineNumberOfKind[i];
	}
	DWORD Number = MaxNumber*4 + Num*4;	
	DWORD ReturnAddress = 0;
	memcpy(&ReturnAddress,(this->IndexAddress + Number),4);
	if( ReturnAddress!=NULL)//020501 lsw
	{
		return (char*)ReturnAddress;
	}
	else
	{
		return this->szNullString;
	}
	
	return this->szNullString;
}


CLanguage::CLanguage()
{
	memset(this,0,sizeof( *this ) );
	this->Init();
}

CLanguage::~CLanguage()
{
	SAFE_DELETE(this->IndexAddress);
}

int CLanguage::Init()
{	
	if( this->CheckArea()	< 0 )			return -1;
	if( this->LoadingByAreaCode() < 0 )		return -2;	
	if( this->Preloading()	< 0 )			return -3;
	if( this->Loading()		< 0	)			return -4;
	return 1;
}

int	CLanguage::Preloading()
{
	FILE* fp=NULL;
	fp = Fopen(this->LoadedFileName,"rt");
	if( fp == NULL)
		return -1;

	DWORD Header=0,Number=0;
	
	while(!feof(fp))		//拳老狼 场捞 唱棵锭 鳖瘤 拌加 馆汗
	{
		int i=0;
		char Original_Sentence[MAX_ONE_LINE_CHAR_NUM]={0,},Temp_Sentence[MAX_ONE_LINE_CHAR_NUM]={0,},Sentence[MAX_ONE_LINE_CHAR_NUM]={0,};
		if( GetOneLine(Original_Sentence,fp) <0)
			continue;		
		//咯扁鳖瘤 吭促绰 巴篮 ;捞 绝绰 扼牢捞扼绰 舵
		strcpy(Temp_Sentence,Original_Sentence);	//老窜 盔夯阑 归诀秦 敌促

		//老窜 秦歹甫 犬牢茄促.		//秦歹捞搁 付捞呈胶. 庆歹啊 酒聪搁 敲矾胶
		if( CheckHeader(Header,Temp_Sentence) < 0 )
			continue;		

		//锅龋甫 犬牢茄促.//锅龋啊 何利例窍芭唱 绝栏搁 付捞呈胶
		if( CheckNumber(Number,Temp_Sentence) < 0 )
			continue;		

		//郴侩拱阑 犬牢茄促.//郴侩拱狼 郴侩捞 绝啊唱 "啊 2俺啊 酒聪搁 付捞呈胶
		if( CheckSentence(Sentence,Temp_Sentence) < 0 )
			continue;		

		this->m_dwMaxLineNumberOfKind[Header] = 
			this->m_dwMaxLineNumberOfKind[Header] > Number ? this->m_dwMaxLineNumberOfKind[Header] : Number;
		this->m_dwTotalLineOfKind[Header]++;
		this->m_dwSumOfTotalLine++;
		this->m_dwTotalLength = this->m_dwTotalLength + strlen(Sentence) + 1;
	}
	for( int i=0;i<MAX_KIND;i++)
		this->m_dwSumOfMaxLineNumber += this->m_dwMaxLineNumberOfKind[i];

	fclose(fp);
	return 1;
}

// 020620 YGI
void ConvertSpecialWord(char *txt,const char *delTarget,const char AfterConvert)
{
	char *pdest = txt;
	while( pdest = strstr(pdest,delTarget) )
	{
		*pdest = ' '; pdest++;
		*pdest = AfterConvert;
	} 
}


int	CLanguage::Loading()
{
	FILE* fp=NULL;
	fp = Fopen(this->LoadedFileName,"rt");
	if( fp == NULL)
		return -1;

	DWORD Header=0,Number=0;
	DWORD DataPos=0;

	this->IndexAddress = new char [this->m_dwSumOfMaxLineNumber*4 + this->m_dwTotalLength + 4];
	if( IndexAddress == NULL)
		return -1;
	this->DataAddress = this->IndexAddress + this->m_dwSumOfMaxLineNumber*4 + 4;
	memset(this->IndexAddress , 0 ,this->m_dwSumOfMaxLineNumber*4 + this->m_dwTotalLength + 4);
	
	while(!feof(fp))		//拳老狼 场捞 唱棵锭 鳖瘤 拌加 馆汗
	{
		int i=0;
		char Original_Sentence[MAX_ONE_LINE_CHAR_NUM]={0,},Temp_Sentence[MAX_ONE_LINE_CHAR_NUM]={0,},Sentence[MAX_ONE_LINE_CHAR_NUM]={0,};
		if( GetOneLine(Original_Sentence,fp) <0)
			continue;		
		//咯扁鳖瘤 吭促绰 巴篮 ;捞 绝绰 扼牢捞扼绰 舵
		strcpy(Temp_Sentence,Original_Sentence);	//老窜 盔夯阑 归诀秦 敌促

		//老窜 秦歹甫 犬牢茄促.		//秦歹捞搁 付捞呈胶. 庆歹啊 酒聪搁 敲矾胶
		if( CheckHeader(Header,Temp_Sentence) < 0 )
			continue;

		//锅龋甫 犬牢茄促.//锅龋啊 何利例窍芭唱 绝栏搁 付捞呈胶
		if( CheckNumber(Number,Temp_Sentence) < 0 )
			continue;		

		//郴侩拱阑 犬牢茄促.//郴侩拱狼 郴侩捞 绝啊唱 "啊 2俺啊 酒聪搁 付捞呈胶
		if( CheckSentence(Sentence,Temp_Sentence) < 0 )
			continue;

		//咯扁鳖瘤 吭促绰 巴篮 力措肺 等 皋矫瘤扼绰 巴. 蝶扼辑 锭妨 冠绰促.^^
//		ConvertSpecialWord(Sentence,"%%s",'%s');
//		ConvertSpecialWord(Sentence,"%%s",'%d');
//		ConvertSpecialWord(Sentence,"%%s",'%u');

		ConvertSpecialWord(Sentence,"\\n",'\n');
		ConvertSpecialWord(Sentence,"\\r",'\r');
		ConvertSpecialWord(Sentence,"\\t",'\t');
		DWORD Sentence_Length = strlen(Sentence);
		DWORD BaseAddress = 0;
		
		if( Header > 0 )
			for( int i=0;i<Header;i++)
				BaseAddress += this->m_dwMaxLineNumberOfKind[i];
		else
			BaseAddress = 0;

		strcpy(this->DataAddress + DataPos , Sentence);

		DWORD TempDataAddress = (DWORD)((this->DataAddress + DataPos));
		memcpy(this->IndexAddress + Number*4 + BaseAddress*4 ,&TempDataAddress,4);

		DataPos+=Sentence_Length+1;
	}
	fclose(fp);
	return 0;
}

int CLanguage::GetOneLine(void * data,FILE* fp)
{
	int i=0,ret=1;
	bool loop=true;
	while(loop)
	{
		if( feof(fp) )
			break;
		char chardata = fgetc(fp);
		((char*)(data))[i++] = chardata;
		switch(chardata)
		{
		case 10:		//青捞 官差搁
			loop=false;
			break;
		case 59:		//;捞 唱坷搁
			ret=-1;
			break;
		default:
			break;
		}
	}
	return ret;
}


int	CLanguage::CheckHeader(DWORD &Header,char* data)				//辆幅牢啊甫 魄窜	.割锅掳 锅龋牢瘤 馆券
{
	for(int i=0;i<MAX_KIND;i++)
	{
		if( strlen(header[i]) > strlen(data) )
			continue;
		if( memicmp(header[i],data,strlen(header[i])) )			//父距 老摹窍绰 header啊 乐栏搁
			continue;
		Header = i;
		return -1;		//庆歹甫 茫栏搁 -甫 馆券
	}
	return 1;
}
int	CLanguage::CheckNumber(DWORD &Number,char* data)				//锅龋啊 割锅牢瘤 犬牢茄促.锅龋 馆券
{
	char *semi = NULL;
	semi = strchr(data,':');
	if( semi == NULL)		//:啊 绝栏搁
		return -1;
	char temp[MAX_ONE_LINE_CHAR_NUM]={0,};
	memcpy(temp,data,( (DWORD)(semi-data) ) );
	Number = atoi(temp);
	return 1;
}
int	CLanguage::CheckSentence(void * sentence,char* data)			//巩厘捞 倔付唱 变啊甫 犬牢茄促.巩厘狼 辨捞 馆券
{
	DWORD length = strlen(data);
	char *start = NULL,*end=NULL;
	start = strchr(data,'"');
	if( start == NULL)		//"啊 绝栏搁
		return -1;

	//弥家茄 场俊辑 2锅掳 捞绢具 茄促.
	if( start-data+1 >= length )
		return -2;

	end = strchr(start+1,'"');
	if( end == NULL)
		return -3;

	//弥家茄 场俊辑 霉锅掳 捞绢具 茄促
	if( end-data >= length )
		return -4;

	if( start+1 > end -1 )
		return -5;

	//咯扁鳖瘤 吭促绰 巴篮 "栏肺 焊龋登绰 巩厘捞 乐促绰 捞具扁啊 等促. 矫累篮 start, 场篮 end捞促
	memset(sentence,0,end-start+2);
	memcpy(sentence,start+1,end-start-1);
	return 1;
}

void	CLanguage::DisplayAllData()
{
	int count=0;
	for( int i=0;i<MAX_KIND;i++)
	{
		for( int j=0;j<this->m_dwMaxLineNumberOfKind[i]+1;j++)
		{
			char* data = (char*)this->OutputMessage(i,j);
			if( data[0] != 0 )	printf("[%2d:%6d] %s\n",i,j,data );
		//	if( count++%100 == 0 )
		//		getchar();
		}
	}
	printf("\nTotal Summary\n");
	for( i=0;i<MAX_KIND;i++)
	{		
		printf("Line 1 : Max Line Number : %d , Total Line Number : %d\n",this->m_dwMaxLineNumberOfKind[i],this->m_dwTotalLineOfKind[i]);				
	}
	printf("\nSum of Max Line Number : %d Sum of Total Line : %d , Total Length : %d" , this->m_dwSumOfMaxLineNumber,
		this->m_dwSumOfTotalLine,
		this->m_dwTotalLength); 

}

// 020428 YGI acer
extern int CheckSumError;
int LoadLanguageText()
{
	lan = new LanguagePack;
	if(lan==NULL)	return 0;
	else			return 1;
}

⌨️ 快捷键说明

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