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

📄 chrlog.cpp

📁 国内著名网络游戏dragon的服务端完整源码 内附完整数据库结构
💻 CPP
📖 第 1 页 / 共 2 页
字号:
#include "StdAfx.h"
#include "packed.h"
#include "servertable.h"
#include "MAIN.H"
#include "Scrp_exe.H"
#include "ID.h"
#include "SealStone.h"
#include "Debug.h"
#include "mainheader.h"
#include "monitor.h"
#include "Citem.h"
#include "Pay.h"
#include "network.h"

#define MAX_CHR_LOG_	1000

typedef struct chr_log
{
	int index;
	char id[ NM_LENGTH];
	char name[ NM_LENGTH];

	char state;
	char Level;
	int	 fame_pk;	// 010915 LTS	//Fame_PK -> NWCharacter肺 背眉 DB俊绰 角力肺 NWCharacter狼 蔼捞 甸绢癌聪促.		
	NW_Character	NWCharacter;	// 010915 LTS
	int  Str;
	int  Con;
	int  Dex;
	int  Wis;
	int  Int;
	int  MoveP;
	int  Char;
	int  Endu;
	int  Moral;
	int  Luck;
	int  wsps;

	int  Tactics;
	DWORD nation;	

	DWORD Money;
	int HpMax ;
	int ManaMax;

	char MapName[ NM_LENGTH];
	int HungryMax;

	int Resis_Poison;
	int Resis_Stone	;
	int Resis_Magic	;
	int Resis_Fire	;
	int Resis_Ice	;
	int Resis_Elect	;

	int X, Y;

	int		reserved_point;
	DWORD	BankMoney;
	DWORD	Exp;

	char Skill[ SIZE_OF_SKILL];
	char skillexp[ SIZE_OF_SKILL_EXP];
	char tac_skillEXP[ SIZE_OF_TAC_SKILL_EXP];
	char equip[ SIZE_OF_EQUIP];
	char quick[ SIZE_OF_QUICK];
	char inv[ SIZE_OF_INV];
	char bankitem[ SIZE_OF_BANKITEM];

	struct chr_log	*next;
	struct chr_log	*prev;
	
}t_chr_log;

 
t_chr_log  *chr_log;

int Push_Chr_Log( t_chr_log *q )
{		
	t_chr_log  *temp;
		
	if( chr_log == NULL )
	{	
		chr_log = q;
		chr_log->next	= NULL;
		chr_log->prev	= NULL;
		return 1;
	}	
	else
	{	
		temp = chr_log;

		chr_log = q;
		chr_log->next = temp;
		chr_log->prev = NULL;
		temp->prev = chr_log;

		return 1;
	}
}

int Delete_Chr_Log( t_chr_log *q )
{
	t_chr_log *temp;


	if( chr_log == q )
	{	
		temp = chr_log;

		chr_log = temp;
		chr_log->prev = NULL;

		delete temp;
		return 1;
	}	
	else		
	{			
		temp = chr_log->next;
				
		while( temp )
		{		
			if( temp == q )
			{	
				if( temp->next )
				{
					temp->next->prev = temp->prev;
					temp->prev->next = temp->next;
				}
				else
				{
					temp->prev->next = NULL;
				}

				delete temp;
				return 1;
			}	
				
			temp = temp->next;
		}		
	}			
	return 0;
}				
				
t_chr_log *Find_Chr_Log( char *name )
{
	t_chr_log *t = chr_log;

	while( t )
	{
		if( strcmp( t->name, name ) == 0 ) return t;
		t = t->next;
	}
	return NULL;
}


int PushCharData2ChrLogDB_Basic( t_chr_log *t )
{
	char		szQuerry[1024];
	HSTMT		hStmt = NULL;
	RETCODE		retCode;
	SQLINTEGER	cbskilllen, cbskillexplen,cbtacskillexplen, cbinvlen, cbquick, cbequip, cbbankitem;		
	SQLINTEGER	cbInt[33] = {0, };			// int 屈篮 0
	SQLINTEGER	cbName, cbId, cbMapName;	// 巩磊凯篮 SQL_NTS
	cbName = cbId = cbMapName = SQL_NTS;

	int			s_IntOuput[33];
	char		szName[20], szId[20], szMapName[20];

	SQLPOINTER	pParamData;

	int			server_set_num;
	SQLINTEGER	server_set_num_int = 0;


	struct tm *today;
	time_t lTime;
	time(&lTime);
	today = localtime(&lTime);
	
	g_year = today->tm_year + 1900;
	g_mon  = today->tm_mon;
	g_yday = today->tm_yday + 1;
	g_day  = today->tm_mday;
	g_hour = today->tm_hour;
	g_min  = today->tm_min;
	g_sec  = today->tm_sec;

	server_set_num = g_pServerTable->GetServerSetNum();


//	sprintf(szQuerry, "INSERT INTO ChrLog ( name, skill ) VALUES ( ? , ? ) " );
	sprintf(szQuerry, 
			"INSERT INTO ChrLog_%04d%02d%02d  "
			"( server_set_num, id,name,state, Lev,fame_pk,Str,Con,Dex,Wis,Int,"
			"  MoveP,Char,Endu,Moral,Luck,wsps,Tactics,nation,Money,HpMax, "
			"  ManaMax,MapName,HungryMax,Resis_Poison,Resis_Stone,Resis_Magic,Resis_Fire,Resis_Ice,Resis_Elect,X, "
			"  Y,reserved_point,BankMoney,Exp, "
			"  skill, skill_exp, tac_skillEXP, inventory, equip, quick, bankitem )"
			" VALUES "
			" (	?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, "
			"	?, ?, ?, ?, ?, ?, ?, ?, ?, ?, "
			"	?, ?, ?, ?, ?, ?, ?, ?, ?, ?, "
			"	?, ?, ?, ?, "
			"	?, ?, ?, ?, ?, ?, ? ) ", g_year, g_mon+1, g_day );

	SQLAllocStmt(hDBC_ChrLogDB, &hStmt);
	retCode= SQLPrepare(hStmt, (UCHAR *)szQuerry, SQL_NTS);
	if(retCode == SQL_SUCCESS || retCode == SQL_SUCCESS_WITH_INFO)
	{	
		WORD ct = 1;

		SQLBindParameter(hStmt, ct, SQL_PARAM_INPUT, SQL_C_LONG, SQL_INTEGER, 0, 0, &server_set_num, 0, &server_set_num_int);	ct++;
		SQLBindParameter(hStmt, ct, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_CHAR, 20, 0, &szId, 0, &cbId); ct++;
		SQLBindParameter(hStmt, ct, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_CHAR, 20, 0, &szName, 0, &cbName); ct++;
		for( int i=0; i<32; i++ )
		{
			if( i == 19 )		// because mapname field
			{
				SQLBindParameter(hStmt, ct, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_CHAR, 20, 0, &szMapName, 0, &cbMapName);
			}
			else 
			{
				SQLBindParameter(hStmt, ct, SQL_PARAM_INPUT, SQL_C_LONG,SQL_INTEGER, 0, 0, &s_IntOuput[i], 0, &cbInt[i]);				
			}			
			ct++;
		}
		SQLBindParameter(hStmt, ct, SQL_PARAM_INPUT, SQL_C_BINARY,SQL_LONGVARBINARY, SIZE_OF_SKILL, 0, t->Skill, 0, &cbskilllen); ct++;
		SQLBindParameter(hStmt, ct, SQL_PARAM_INPUT, SQL_C_BINARY,SQL_LONGVARBINARY, SIZE_OF_SKILL_EXP, 0, t->skillexp, 0, &cbskillexplen);  ct++;
		SQLBindParameter(hStmt, ct, SQL_PARAM_INPUT, SQL_C_BINARY,SQL_LONGVARBINARY, SIZE_OF_TAC_SKILL_EXP, 0, t->tac_skillEXP, 0, &cbtacskillexplen); ct++;
		SQLBindParameter(hStmt, ct, SQL_PARAM_INPUT, SQL_C_BINARY,SQL_LONGVARBINARY, SIZE_OF_INV, 0, t->inv, 0, &cbinvlen); ct++;
		SQLBindParameter(hStmt, ct, SQL_PARAM_INPUT, SQL_C_BINARY,SQL_LONGVARBINARY, SIZE_OF_EQUIP, 0, t->equip, 0, &cbequip); ct++;
		SQLBindParameter(hStmt, ct, SQL_PARAM_INPUT, SQL_C_BINARY,SQL_LONGVARBINARY, SIZE_OF_QUICK, 0, t->quick, 0, &cbquick); ct++;
		SQLBindParameter(hStmt, ct, SQL_PARAM_INPUT, SQL_C_BINARY,SQL_LONGVARBINARY, SIZE_OF_BANKITEM, 0, t->bankitem, 0, &cbbankitem); ct++;



		strcpy( szId, t->id );
		strcpy(	szName, t->name );

		
		s_IntOuput[0] =t->state; 
		s_IntOuput[1] =t->Level; 
		//s_IntOuput[2] =t->fame_pk;	// 010915 LTS				//Fame_PK -> NWCharacter肺 背眉 DB俊绰 角力肺 NWCharacter狼 蔼捞 甸绢癌聪促.		
		memcpy(&s_IntOuput[2],&t->NWCharacter,sizeof(DWORD));		// 010915 LTS
		s_IntOuput[3] =t->Str; 
		s_IntOuput[4] =t->Con; 
		s_IntOuput[5] =t->Dex; 
		s_IntOuput[6] =t->Wis; 
		s_IntOuput[7] =t->Int;
		s_IntOuput[8] =t->MoveP; 
		s_IntOuput[9] =t->Char; 

		s_IntOuput[10] =t->Endu; 
		s_IntOuput[11] =t->Moral; 
		s_IntOuput[12] =t->Luck ; 
		s_IntOuput[13] =t->wsps ; 
		s_IntOuput[14] =t->Tactics ; 
		s_IntOuput[15] =t->nation ; 
		s_IntOuput[16] =t->Money ; 
		s_IntOuput[17] =t->HpMax  ;
		s_IntOuput[18] =t->ManaMax ;
		strcpy( szMapName, t->MapName );		// 19

		s_IntOuput[20] =t->HungryMax ;
		s_IntOuput[21] =t->Resis_Poison ; 
		s_IntOuput[22] =t->Resis_Stone	 ; 
		s_IntOuput[23] =t->Resis_Magic	 ; 
		s_IntOuput[24] =t->Resis_Fire	 ; 
		s_IntOuput[25] =t->Resis_Ice	 ; 
		s_IntOuput[26] =t->Resis_Elect; 
		s_IntOuput[27] =t->X / 32;
		s_IntOuput[28] =t->Y / 32;
		s_IntOuput[29] =t->reserved_point; 

		s_IntOuput[30] =t->BankMoney;
		s_IntOuput[31] =t->Exp;

		cbskilllen		= SQL_LEN_DATA_AT_EXEC(0);
		cbskillexplen	= SQL_LEN_DATA_AT_EXEC(0);
		cbtacskillexplen= SQL_LEN_DATA_AT_EXEC(0);
		cbinvlen		= SQL_LEN_DATA_AT_EXEC(0);
		cbequip			= SQL_LEN_DATA_AT_EXEC(0);
		cbquick			= SQL_LEN_DATA_AT_EXEC(0);
		cbbankitem		= SQL_LEN_DATA_AT_EXEC(0);
				
		retCode = SQLExecute(hStmt) ;

		while(retCode == SQL_NEED_DATA) 
		{		
			retCode = SQLParamData(hStmt, &pParamData) ;
			if(retCode == SQL_NEED_DATA) 
			{	
					 if(pParamData == t->Skill) 		SQLPutData(hStmt, t->Skill,		SIZE_OF_SKILL);      
				else if(pParamData == t->skillexp) 		SQLPutData(hStmt, t->skillexp,	SIZE_OF_SKILL_EXP );      
				else if(pParamData == t->tac_skillEXP)	SQLPutData(hStmt, t->tac_skillEXP, SIZE_OF_TAC_SKILL_EXP );      
				else if(pParamData == t->inv) 			SQLPutData(hStmt, t->inv,		SIZE_OF_INV);
				else if(pParamData == t->equip) 		SQLPutData(hStmt, t->equip,	SIZE_OF_EQUIP);
				else if(pParamData == t->quick) 		SQLPutData(hStmt, t->quick,	SIZE_OF_QUICK );
				else if(pParamData == t->bankitem ) 	SQLPutData(hStmt, t->bankitem,	SIZE_OF_BANKITEM );
			}	
			else break ;
		}
		retCode = SQLExecute(hStmt) ;
		
		if(retCode == SQL_NEED_DATA)
		{
			SQLCancel(hStmt) ;
//			SQLTransact(SQL_NULL_HENV, hDBC_ChrLogDB, SQL_COMMIT);
			SQLFreeStmt(hStmt, SQL_DROP);
			return 1;
		}
		else
		{
			SQLFreeStmt(hStmt, SQL_DROP);
			return 0;
		}
	}		
	else 
	{
		SQLFreeStmt(hStmt, SQL_DROP);
		return 0; // fail....
	}

}

int PushCharData2ChrLogDB_Binary( t_chr_log *t )
{	
	SQLINTEGER	cbskilllen, cbskillexplen,cbtacskillexplen, cbinvlen, cbquick, cbequip, cbbankitem;
	SQLRETURN	retcode;
	SQLHSTMT	hstmt;
	SQLPOINTER	pParamData;
	char		query[256];

	
//	sprintf(query, "Insert into ChrLog ( skill, skill_exp, tac_skillEXP, inventory, equip, quick, bankitem )"
//		"values ( ?, ?, ?, ?, ?, ?, ? ) ");

	sprintf(query, "Update ChrLog_%d%d%d SET skill=?, skill_exp=?, tac_skillEXP=?, inventory=?, equip=?, quick=?, bankitem=? WHERE index_ = %d", t->index );


	SQLAllocStmt(hDBC_ChrLogDB, &hstmt);
	retcode = SQLPrepare(hstmt, (UCHAR *)query, SQL_NTS);
	if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO) 
	{
		retcode= SQLBindParameter(hstmt, 1, SQL_PARAM_INPUT, SQL_C_BINARY,SQL_LONGVARBINARY, SIZE_OF_SKILL,			0, t->Skill,			0, &cbskilllen); 
		retcode= SQLBindParameter(hstmt, 2, SQL_PARAM_INPUT, SQL_C_BINARY,SQL_LONGVARBINARY, SIZE_OF_SKILL_EXP,		0, t->skillexp,		0, &cbskillexplen); 
		retcode= SQLBindParameter(hstmt, 3, SQL_PARAM_INPUT, SQL_C_BINARY,SQL_LONGVARBINARY, SIZE_OF_TAC_SKILL_EXP,	0, t->tac_skillEXP,		0, &cbtacskillexplen); 
		retcode= SQLBindParameter(hstmt, 4, SQL_PARAM_INPUT, SQL_C_BINARY,SQL_LONGVARBINARY, SIZE_OF_INV,			0, t->inv,				0, &cbinvlen); 
		retcode= SQLBindParameter(hstmt, 5, SQL_PARAM_INPUT, SQL_C_BINARY,SQL_LONGVARBINARY, SIZE_OF_EQUIP,			0, t->equip,			0, &cbequip); 
		retcode= SQLBindParameter(hstmt, 6, SQL_PARAM_INPUT, SQL_C_BINARY,SQL_LONGVARBINARY, SIZE_OF_QUICK,			0, t->quick,			0, &cbquick); 
		retcode= SQLBindParameter(hstmt, 7, SQL_PARAM_INPUT, SQL_C_BINARY,SQL_LONGVARBINARY, SIZE_OF_BANKITEM,		0, t->bankitem,	0, &cbbankitem); 
		
		cbequip			= SQL_LEN_DATA_AT_EXEC(0);
		cbquick			= SQL_LEN_DATA_AT_EXEC(0);
		cbskilllen		= SQL_LEN_DATA_AT_EXEC(0);
		cbskillexplen	= SQL_LEN_DATA_AT_EXEC(0);
		cbtacskillexplen= SQL_LEN_DATA_AT_EXEC(0);
		cbinvlen		= SQL_LEN_DATA_AT_EXEC(0);
		cbbankitem		= SQL_LEN_DATA_AT_EXEC(0);
				
		retcode = SQLExecute(hstmt) ;
				
		while(retcode == SQL_NEED_DATA) 
		{		
			retcode = SQLParamData(hstmt, &pParamData) ;
			if(retcode == SQL_NEED_DATA) 
			{	
					 if(pParamData == t->Skill) 		SQLPutData(hstmt, t->Skill,		SIZE_OF_SKILL);      
				else if(pParamData == t->skillexp) 		SQLPutData(hstmt, t->skillexp,	SIZE_OF_SKILL_EXP );      
				else if(pParamData == t->tac_skillEXP)	SQLPutData(hstmt, t->tac_skillEXP, SIZE_OF_TAC_SKILL_EXP );      
				else if(pParamData == t->inv) 			SQLPutData(hstmt, t->inv,		SIZE_OF_INV);
				else if(pParamData == t->equip) 		SQLPutData(hstmt, t->equip,	SIZE_OF_EQUIP);
				else if(pParamData == t->quick) 		SQLPutData(hstmt, t->quick,	SIZE_OF_QUICK );
				else if(pParamData == t->bankitem ) 	SQLPutData(hstmt, t->bankitem,	SIZE_OF_BANKITEM );
			}	
			else break ;
		}		
		
		retcode = SQLExecute(hstmt);
		
		if(retcode == SQL_NEED_DATA)
		{
			retcode= SQLCancel(hstmt);
//			retcode= SQLTransact(SQL_NULL_HENV, hDBC_ChrLogDB, SQL_COMMIT);
					
			if(retcode != SQL_SUCCESS && retcode != SQL_SUCCESS_WITH_INFO) 
			{		
				//printf("\n Transact commit Error");
			}		
					
			retcode= SQLFreeStmt(hstmt, SQL_DROP );
			return(1); // succeed
		}			
		else		
		{			

⌨️ 快捷键说明

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