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

📄 mysql.cpp

📁 国内著名网络游戏dragon的服务端完整源码 内附完整数据库结构
💻 CPP
📖 第 1 页 / 共 5 页
字号:
#include "StdAfx.h"

#include "MAIN.H"
#include "NPC_Pattern.h"
#include "Map.h"
#include "Scrp_exe.h"
#include "monitor.h"
#include "MyLog.h"
#include "ChrLog.h"

#ifdef _GAME_SERVER_
#include "Hong_Area.h"
#include "Kein_Item.h"
#endif

#include "Citem.h"
#include "StepMigration.h"

#define BLOCK_SIZE 6000

#define SIZE_OF_ITEMLIST	sizeof(ITEMLIST) * 1000
#define SIZE_OF_NPCLIST		sizeof(CHARLIST) * 500

HENV  hEnv			= NULL;
HDBC  hDBC			= NULL;
HENV  hEnv_TotalDB	= NULL;
HDBC  hDBC_TotalDB	= NULL;
HENV  hEnv_ChrLogDB	= NULL;
HDBC  hDBC_ChrLogDB	= NULL;
HENV  hEnv_NGCDB	= NULL;//030207 lsw
HDBC  hDBC_NGCDB	= NULL;
int FREE_LEVEL_ = 0; // CSD-040127

NPCLev_to_Exp NPC_Lev_Ref[Num_Of_NPC_Lev]; // CSD-TW-030606

extern int var[ DRAGON_MAX_CONNECTIONS][ _SCRIPT_VARABLE_POINT_ ];

extern int  calcAC( CHARLIST *ch );
extern int  calcDefenceRate( CHARLIST *ch );
extern int  calcAttackPowerMax( CHARLIST *ch );
extern int dexDefenseCor( CHARLIST *d ); // 0129 KHS
extern int GetTotalItemWeight( CHARLIST *ch );

extern int get_BinaryData_from_Chr_Info  (UCHAR *ws, UCHAR *ps, UCHAR *skill, UCHAR *skill_exp, UCHAR *tac_skillEXP, UCHAR *script_var, UCHAR *inv, UCHAR *equip, UCHAR *quick,UCHAR *party,UCHAR *relation,UCHAR *employment,UCHAR *itemindex, char *login_id, char *name);
extern int get_BinaryData_from_Chr_Info2 (UCHAR *bankitem,	 char *login_id, char *name);
extern int update_BinaryData_to_Chr_Info	(UCHAR *ws, UCHAR *pa,  UCHAR *akill, UCHAR *skill_exp, UCHAR *tac_skill_exp, UCHAR *script_var, UCHAR *inv,  UCHAR *equip, UCHAR *quick, UCHAR *party,UCHAR *relation,UCHAR *employment,UCHAR *itemindex,char *, char *) ;	//1219 YGI
extern int update_BinaryData_to_Chr_Info2	(UCHAR *bankitem, char *login_id, char *name); // 1225

extern int FREE_LVELE_; // CSD-040127

int CreateChar2_SQL(t_connection c[], int cn );

int UpdateCharID_SQL( int char_id );
int GetCharID_SQL( void );



int InsertBBS( char *name, char *title, char *contents );
int	GetTitleBBS( int count, char date[10][ FILENAME_MAX], char name[10][ FILENAME_MAX], char title[10][ FILENAME_MAX] );
int	GetContentsBBS( char *date, char *con );


char tempdate [10][ FILENAME_MAX];
char tempname [10][ FILENAME_MAX];
char temptitle[10][ FILENAME_MAX];
char tempbbs  [10][ FILENAME_MAX];



////////////////////////////////////////////////////////////////////////////////////////////////////////////////


typedef struct tag_Updating		// 泅犁 Updateing窍绊 乐绰 Character俊 措茄 Table捞促. 
{								// GameServer肺 Access Join窍妨绰 Client啊 乐阑锭, 
	char id[ ID_LENGTH];		// 捞 Table俊 绢恫 蔼捞 乐促搁 泪矫扁促妨具 茄促. 
}UPDATE, *LPUPDATE;

int		CurUpdateChar;
UPDATE  UpdateChar[ MAX_UPDATE_CHARACTER_];

void ConvertLoad(char* pData, int nSize = MAX_STEP)
{	//< CSD-TW-030620
	CStepMigration stepMigration;
	stepMigration.Load(pData);
}	//> CSD-TW-030620

void ConvertSave(char* pData, int nSize = MAX_STEP)
{	//< CSD-TW-030620
	CStepMigration stepMigration;
	stepMigration.Save(pData);
}	//> CSD-TW-030620

void ConvertQueryString(const char* szStr, char* szResult, const int iMaxString = MAX_STEP)
{// ' 巩磊甫 茫绊 '' 肺 官层霖促
//	if(!szStr){return;}

//	const int iLen = ::strlen(szStr);
	int i = 0, j = 0;
	for(; iMaxString > i; i++,j++)
	{
		::memcpy(szResult+j,szStr+i,sizeof(char));
		if(*(szStr+i) == '\'')
		{
			j++;
			::memcpy(szResult+j,szStr+i,sizeof(char));
		}
	}
	
	::memset(szResult+j,0,sizeof(char));
		
	return;//
}

void DisplaySQLError(SQLHDBC hDBC, HSTMT hStmt)
{
	
	UCHAR 	szSqlState[100];
	UCHAR	szErrorMsg[100];
	
	SQLINTEGER	fNativeError	= 0;
	SWORD		cbErrorMsg		= 100;
	RETCODE		rc;
	
	rc = SQLError(hEnv,
		hDBC,
		hStmt,
		szSqlState,
		&fNativeError,
		szErrorMsg,
		100,
		&cbErrorMsg
		);
	
	if (rc != SQL_NO_DATA_FOUND || rc != SQL_ERROR)
	{
		if (fNativeError != 0x1645)	// ignore change database to master context message
		{
			char Buffer[256];
			wsprintf(Buffer,"Error Message: %s SqlState: %s, fNativeError: %x",szErrorMsg, szSqlState,fNativeError);
			MessageBox(GetActiveWindow(),Buffer,"SQLError",MB_OK);
		}
	}
	else
	{	
		MessageBox(GetActiveWindow(),"SQLError() failed: , NO_DATA_FOUND OR SQL_ERROR","SQLError",MB_OK);
	}
	
}



////////////////////////////////////////////////////////////////////////////////////////////////////////////////
int SQLExecDirect_kein( HSTMT hstmt, UCHAR *szQuery, int sql_type )
{
/*
char query[100];
strncpy( query, (char *)szQuery, 99 );
query[99] = 0;

	MyLog(LOG_DEBUG, "Query : %s", query );*/
	return SQLExecDirect( hstmt, szQuery, sql_type );
}

int Init_SQL(LPSTR szDSN, LPSTR szUID, LPSTR szUPW)
{	
	RETCODE		retCode;
	
	SQLAllocEnv(&hEnv);
	SQLAllocConnect( hEnv, &hDBC );
	
	retCode = SQLConnect(hDBC, (UCHAR *)szDSN, SQL_NTS, (UCHAR *)szUID, SQL_NTS, (UCHAR *)szUPW, SQL_NTS);
	
	if(retCode == SQL_SUCCESS || retCode == SQL_SUCCESS_WITH_INFO)
	{
		return(1);
	}
	
	return(0);
}

int Release_SQL(void)
{	
	if(hDBC != NULL)
		SQLDisconnect(hDBC);
	
	SQLFreeConnect(hDBC);
	SQLFreeEnv(hEnv);
	
	return(1);
}

int Init_TotalDB_SQL(LPSTR szDSN, LPSTR szUID, LPSTR szUPW )
{		
	RETCODE		retCode;
	
	SQLAllocEnv(&hEnv_TotalDB);
	SQLAllocConnect(hEnv_TotalDB, &hDBC_TotalDB);
	
	retCode = SQLConnect(hDBC_TotalDB, (UCHAR *)szDSN, SQL_NTS, (UCHAR *)szUID, SQL_NTS, (UCHAR *)szUPW, SQL_NTS);
	
	if(retCode == SQL_SUCCESS || retCode == SQL_SUCCESS_WITH_INFO)
	{	
		return(1);
	}	
	
	return(0);
}

int Release_TotalDB_SQL(void)
{	
	if(hDBC_TotalDB != NULL)	
		SQLDisconnect(hDBC_TotalDB);
	
	SQLFreeConnect(hDBC_TotalDB);
	SQLFreeEnv(hEnv_TotalDB);
	
	return(1);
}

int Init_NGCDB_SQL(LPSTR szDSN, LPSTR szUID, LPSTR szUPW )//030207 lsw
{		
	RETCODE		retCode;
	
	SQLAllocEnv(&hEnv_NGCDB);
	SQLAllocConnect(hEnv_NGCDB, &hDBC_NGCDB);
		
	retCode = SQLConnect(hDBC_NGCDB, (UCHAR *)szDSN, SQL_NTS, (UCHAR *)szUID, SQL_NTS, (UCHAR *)szUPW, SQL_NTS);
		
	if(retCode == SQL_SUCCESS || retCode == SQL_SUCCESS_WITH_INFO)
	{	
		return(1);
	}	
		
	return(0);
}

int Release_NGCDB_SQL(void)//030207 lsw
{	
	if(hDBC_NGCDB != NULL)	
		SQLDisconnect(hDBC_NGCDB);
	
	SQLFreeConnect(hDBC_NGCDB);
	SQLFreeEnv(hEnv_NGCDB);
	
	return(1);
}

int Init_ChrLogDB_SQL(LPSTR szDSN, LPSTR szUID, LPSTR szUPW )
{
	RETCODE		retCode;
	
	SQLAllocEnv(&hEnv_ChrLogDB);
	SQLAllocConnect(hEnv_ChrLogDB, &hDBC_ChrLogDB);
	
	retCode = SQLConnect(hDBC_ChrLogDB, (UCHAR *)szDSN, SQL_NTS, (UCHAR *)szUID, SQL_NTS, (UCHAR *)szUPW, SQL_NTS);
	
	if(retCode == SQL_SUCCESS || retCode == SQL_SUCCESS_WITH_INFO)
	{
		return(1);
	}
	
	return(0);
};


int Release_ChrLogDB_SQL(void)
{	
	if(hDBC_ChrLogDB != NULL)	SQLDisconnect(hDBC_ChrLogDB );
	
	SQLFreeConnect(hDBC_ChrLogDB);
	SQLFreeEnv(hEnv_ChrLogDB);
	
	return(1);
};	

int Querry_SQL(LPSTR szQuerry, HDBC hdbc)
{	//< CSD-030804
	HSTMT		hStmt = NULL;
	RETCODE		retCode;
	if( hdbc == NULL ) hdbc = hDBC;
	
	SQLAllocStmt(hdbc, &hStmt);
	retCode = SQLExecDirect(hStmt, (UCHAR *)szQuerry, SQL_NTS);
	if(retCode == SQL_SUCCESS || retCode == SQL_SUCCESS_WITH_INFO)
	{
		SQLFreeStmt(hStmt, SQL_DROP);
		return 1;
	}
	
	SQLFreeStmt(hStmt, SQL_DROP);
	return -1;
}	//> CSD-030804

// chr_log_info 抛捞喉俊辑 某腐磐捞抚阑 茫绰促. 
int GetCharacterNameInID( LPSTR id, char name[4][20] )
{	
	HSTMT		hStmt = NULL;
	RETCODE		retCode;
	SDWORD		cbValue;
	char		szQuerry[255];
	
	sprintf( szQuerry, "login_id = '%s'", id );
	if( !IsExitRecordOfDB( "chr_log_info",  szQuerry ) )
	{
		// 货肺款 某腐磐
		sprintf( szQuerry, "INSERT chr_log_info ( login_id, vote, passwd ) VALUES ( '%s', 0, 'make by db_demon' )", id );
		retCode = Querry_SQL( szQuerry );
	}
	
	//sprintf(szQuerry, "select name1, name2, name3, name4 "
	//					         " from chr_log_info where login_id='%s'", id );
	/////////////////////////////////////////////////////////////////////////////
	sprintf(szQuerry, "EXEC up_get_char_all_name '%s'", id);
	/////////////////////////////////////////////////////////////////////////////
	SQLAllocStmt(hDBC, &hStmt);
	retCode = SQLExecDirect(hStmt, (UCHAR *)szQuerry, SQL_NTS);
	if(retCode == SQL_SUCCESS || retCode == SQL_SUCCESS_WITH_INFO)
	{
		retCode = SQLFetch(hStmt);
		//"select name, lev, job, class, gender, bodyr, bodyg, bodyb, "
		retCode = SQLGetData(hStmt, 1, SQL_C_CHAR, name[0], NM_LENGTH, &cbValue);
		retCode = SQLGetData(hStmt, 2, SQL_C_CHAR, name[1], NM_LENGTH, &cbValue);
		retCode = SQLGetData(hStmt, 3, SQL_C_CHAR, name[2], NM_LENGTH, &cbValue);
		retCode = SQLGetData(hStmt, 4, SQL_C_CHAR, name[3], NM_LENGTH, &cbValue);
		SQLFreeStmt(hStmt, SQL_DROP);
		return(1);
	}
	
	SQLFreeStmt(hStmt, SQL_DROP);		// 0308 YGI
	return(-1);
}				


// GetCharacterNameInID( LPSTR id, char *name[4] )俊辑 茫篮 捞抚阑 啊瘤绊  扁夯沥焊甫 惶酒辰促. 
int GetCharInfo_SQL2( char *realid, char name[4][20], t_packet *packet)		// 1027 YGI
{				
	HSTMT		hStmt = NULL;
	RETCODE		retCode;
	SDWORD		cbValue;
	char		szQuerry[255];
	int			i;
	char		id[ 20];
	int			Level, Job, Class, Gender;
	int			bodyr, bodyg, bodyb, clothr, clothg, clothb;
	DWORD		money;
	int			age;
	int 		acc_equip1, acc_equip2, acc_equip3, acc_equip4;
	int			nation[4];
	
	t_server_accept_login *tp;
	tp = &packet->u.server_accept_login;
				
	for( i = 0 ; i < 4 ; i ++)
	{
		if( name[i][0] == 0 )
		{
			tp->name[i][0] = 0;
			continue;
		}		
		
		sprintf(szQuerry, "select login_id, lev, job, class, gender, bodyr, bodyg, bodyb, "
			"clothr,clothg, clothb, money, age, "
			"acc_equip1, acc_equip2, acc_equip3, acc_equip4, nation "
			" from chr_info where name='%s'", name[i] );
		
		//    sprintf(szQuerry, "EXEC up_get_char_info2 '%s'", name[i]);
		
		SQLAllocStmt(hDBC, &hStmt);
		retCode = SQLExecDirect(hStmt, (UCHAR *)szQuerry, SQL_NTS);
		if(retCode == SQL_SUCCESS || retCode == SQL_SUCCESS_WITH_INFO)
		{		
			retCode = SQLFetch(hStmt);
			// 010301 KHS   chr_log_info has name, but There isn't name in chr_info
			if( retCode == SQL_NO_DATA ) 
			{	
				tp->name[i][0] = 0;
			}	
			else
			{	
				//"select login_id, name, lev, job, class, gender, bodyr, bodyg, bodyb, "
				retCode = SQLGetData(hStmt, 1, SQL_C_CHAR,  &id,	   20, &cbValue);
				

⌨️ 快捷键说明

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