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

📄 mysql.cpp

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

#include "DefaultHeader.h"
#include "NPC_Pattern.h"
#include "Map.h"
#include "Scrp_exe.h"

#include "Kein_Item.h"

#include "..\LowerLayers\MyLog.h"
#include "Ability.h"
#include "FileMgr.h"
#include "CItem.h"
#include "WeatherControl.h"//020610 lsw
#include "dungeon.h"
#include "eventmgr.h"
#include "teambattle.h"
#include "LogManager.h"
#include "UserManager.h"
#include "DualManager.h"
#include "GuildManager.h"
#include "ArenaManager.h"
#include "RegenManager.h"
#include "WarStartInfo.h"
#include "StepMigration.h"
#include "NationSys.h"

#define BLOCK_SIZE 6000

//class CGuardianGuild;
CGuardianGuild g_CGuardianGuild;

HENV  hEnv  = NULL;
HDBC  hDBC  = NULL;
HENV  hEnv_ChrLogDB= NULL;
HDBC  hDBC_ChrLogDB= NULL;

extern cNation* g_pNation;
extern void CheckFightMap( char *mapname, short int &x, short int &y, CHARLIST *ch );		// 0910 YGI
extern int GetTotalItemWeight( CHARLIST *ch );
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

void displaySQLError(SQLHSTMT) ;
int UpdateCharID_SQL( int char_id );
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 );

// 030919 HK YGI
bool CanSaveUserData(LPCHARLIST ch, const int iCallType)
{	//< CSD-040212
	Dbg_Assert(ch != NULL);

	int iErrorType = 0;

	if (ch->GetLevel() == 0)
	{
		iErrorType = 1;
	}

	if (ch->HpMax == 0)
	{
		iErrorType = 2;
	}

	if (ch->ManaMax == 0)
	{
		iErrorType = 3;
	}

	if (ch->HungryMax == 0)
	{
		iErrorType = 4;
	}

	if (ch->updatable == 0)
	{
		iErrorType = 5;
	}
	// 030915 HK YGI
	if( strcmp( ch->Name, connections[ch->GetServerID()].name ) != 0 )
	{
		iErrorType = 6;
	}
	// 眠啊绰 捞镑俊
	// 030923 HK YGI
	if (iErrorType == 0)
	{
		extern void SaveLoginLogoutLogByKein( CHARLIST *ch, int type, int );
		SaveLoginLogoutLogByKein( ch, 0, iCallType );
		return true;
	}		

	MyLog(LOG_IMPORTANT,
		  "CanSaveUserData() Failed : Name(%s), CallType(%d), ErrorType(%d)",
		  ch->Name, iCallType, iErrorType);
	return false;
}	//> CSD-040212

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
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);
};

// acer 2
int Release_ChrLogDB_SQL(void)
{	
	if(hDBC_ChrLogDB != NULL)	SQLDisconnect(hDBC_ChrLogDB );
	if(hDBC_ChrLogDB != NULL)	SQLFreeConnect(hDBC_ChrLogDB);
	if(hEnv_ChrLogDB != NULL)	SQLFreeEnv(hEnv_ChrLogDB);
	
	return(1);
};	
// acer 2
int Release_SQL(void)
{
	if(hDBC != NULL)
		SQLDisconnect(hDBC);
	
	SQLFreeConnect(hDBC);
	SQLFreeEnv(hEnv);
	
	Release_ChrLogDB_SQL();
	
	return(1);
};

// 020430 acer 2
int Querry_SQL(LPSTR szQuerry, HDBC hdbc /*= NULL */)
{
	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);
	}
	else {
		MyLog( LOG_DEBUG, "\n SQL: %s", szQuerry) ;
		displaySQLError(hStmt) ;
		SQLFreeStmt(hStmt, SQL_DROP);
		return(-1);
	}
}

/////////////////////////////////////////////////////////////////////////////
//
// 窃荐汲疙: 某腐磐狼 binary(农扁啊 奴硅凯甸篮 binary肺 历厘窍绊 binary肺
//				佬绢柯促)甫 历厘(update)窍绰 窃荐.
//
// 颇扼固磐:	ws; 某腐磐 沥焊吝 WS[200]硅凯狼 *, ps; PS[200]硅凯狼 *
//				inv; inv[3][3][8]硅凯狼 *
//				equip, quick; 秦寸 硅凯狼 *
//				(曼绊: inv, equip, quick篮 ItemAttr Structure狼 硅凯捞促)
//
// 府畔蔼: update狼 己傍 咯何; 己傍(1), 角菩(ret < 0)
//
/////////////////////////////////////////////////////////////////////////////

int update_BinaryData_to_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)		// 1219 YGI
{
	SQLINTEGER  cbdata = 200, cbvalue = SQL_DATA_AT_EXEC ;
	SQLINTEGER	cbwslen, cbpslen, cbskilllen, cbskillexplen,cbtacskillexplen, cbscriptvarlen, cbinvlen, cbquick, cbequip, cbparty, cbrelation, cbemployment, cbitemindex;
	SQLRETURN	retcode;
	SQLHSTMT	hstmt;
	SQLPOINTER	pParamData;
	int			n=0;
	char		aaa=20;
	char		query[256]={0,};
	
	sprintf(query, "UPDATE chr_info SET ws=?, ps=?,skill=?, skill_exp=?, tac_skillEXP=?, script_var=?, inventory=?, equip=?, quick=?, party=?, relation=?, employment=?, itemindex=?  WHERE name='%s'", name) ;
	
	//printf("\nSQL: %s", query) ;
	SQLAllocStmt(hDBC, &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_WS,			0, ws,			0, &cbwslen); 
		retcode= SQLBindParameter(hstmt, 2, SQL_PARAM_INPUT, SQL_C_BINARY,SQL_LONGVARBINARY, SIZE_OF_PS,			0, ps,			0, &cbpslen); 
		retcode= SQLBindParameter(hstmt, 3, SQL_PARAM_INPUT, SQL_C_BINARY,SQL_LONGVARBINARY, SIZE_OF_SKILL,			0, skill,		0, &cbskilllen); 
		retcode= SQLBindParameter(hstmt, 4, SQL_PARAM_INPUT, SQL_C_BINARY,SQL_LONGVARBINARY, SIZE_OF_SKILL_EXP,		0, skill_exp,	0, &cbskillexplen); 
		retcode= SQLBindParameter(hstmt, 5, SQL_PARAM_INPUT, SQL_C_BINARY,SQL_LONGVARBINARY, SIZE_OF_TAC_SKILL_EXP,	0, tac_skillEXP,0, &cbtacskillexplen); 
		retcode= SQLBindParameter(hstmt, 6, SQL_PARAM_INPUT, SQL_C_BINARY,SQL_LONGVARBINARY, SIZE_OF_SCRIPT_VAR,	0, script_var,	0, &cbscriptvarlen); 
		retcode= SQLBindParameter(hstmt, 7, SQL_PARAM_INPUT, SQL_C_BINARY,SQL_LONGVARBINARY, SIZE_OF_INV,			0, inv,			0, &cbinvlen); 
		retcode= SQLBindParameter(hstmt, 8, SQL_PARAM_INPUT, SQL_C_BINARY,SQL_LONGVARBINARY, SIZE_OF_EQUIP,			0, equip,		0, &cbequip); 
		retcode= SQLBindParameter(hstmt, 9, SQL_PARAM_INPUT, SQL_C_BINARY,SQL_LONGVARBINARY, SIZE_OF_QUICK,			0, quick,		0, &cbquick); 
		retcode= SQLBindParameter(hstmt, 10, SQL_PARAM_INPUT, SQL_C_BINARY,SQL_LONGVARBINARY, SIZE_OF_PARTY,		0, party,		0, &cbparty     ); 
		retcode= SQLBindParameter(hstmt, 11, SQL_PARAM_INPUT, SQL_C_BINARY,SQL_LONGVARBINARY, SIZE_OF_RELATION,		0, relation,	0, &cbrelation  ); 
		retcode= SQLBindParameter(hstmt, 12, SQL_PARAM_INPUT, SQL_C_BINARY,SQL_LONGVARBINARY, SIZE_OF_EMPLOYMENT,	0, employment,	0, &cbemployment); 
		retcode= SQLBindParameter(hstmt, 13, SQL_PARAM_INPUT, SQL_C_BINARY,SQL_LONGVARBINARY, SIZE_OF_ITEMINDEX,	0, itemindex,	0, &cbitemindex); 
		
		
		if(retcode != SQL_SUCCESS && retcode != SQL_SUCCESS_WITH_INFO)
		{
			SQLFreeStmt(hstmt, SQL_DROP);
			printf("\nBinding FAIL!!!") ;
			return -5 ;
		}
		
		cbequip			= SQL_LEN_DATA_AT_EXEC(0);
		cbquick			= SQL_LEN_DATA_AT_EXEC(0);
		cbpslen			= SQL_LEN_DATA_AT_EXEC(0);
		cbwslen			= 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);
		cbscriptvarlen	= SQL_LEN_DATA_AT_EXEC(0);
		cbinvlen		= SQL_LEN_DATA_AT_EXEC(0);
		
		cbparty			= SQL_LEN_DATA_AT_EXEC(0);
		cbrelation		= SQL_LEN_DATA_AT_EXEC(0);
		cbemployment	= SQL_LEN_DATA_AT_EXEC(0);
		cbitemindex		= 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 == ws) 				SQLPutData(hstmt, ws, SIZE_OF_WS);
				else if(pParamData == ps) 			SQLPutData(hstmt, ps, SIZE_OF_PS);      
				else if(pParamData == skill) 		SQLPutData(hstmt, skill, SIZE_OF_SKILL);      
				else if(pParamData == skill_exp) 	SQLPutData(hstmt, skill_exp, SIZE_OF_SKILL_EXP );      
				else if(pParamData == tac_skillEXP)	SQLPutData(hstmt, tac_skillEXP, SIZE_OF_TAC_SKILL_EXP );      
				else if(pParamData == script_var ) 	SQLPutData(hstmt, script_var, SIZE_OF_SCRIPT_VAR );
				else if(pParamData == inv) 			SQLPutData(hstmt, inv, SIZE_OF_INV);
				else if(pParamData == equip) 		SQLPutData(hstmt, equip, SIZE_OF_EQUIP);
				else if(pParamData == quick) 		SQLPutData(hstmt, quick, SIZE_OF_QUICK );
				
				else if(pParamData == party ) 		SQLPutData(hstmt, party,		SIZE_OF_PARTY );
				else if(pParamData == relation) 	SQLPutData(hstmt, relation,		SIZE_OF_RELATION);
				else if(pParamData == employment ) 	SQLPutData(hstmt, employment,	SIZE_OF_EMPLOYMENT );
				else if(pParamData == itemindex ) 	SQLPutData(hstmt, itemindex,	SIZE_OF_ITEMINDEX );
				
			}
			else break ;
		}
		
		retcode = SQLExecute(hstmt) ;
		
		if(retcode == SQL_NEED_DATA)
		{
			retcode= SQLCancel(hstmt) ;// 020620 YGI
			//retcode= SQLTransact(SQL_NULL_HENV, hDBC, SQL_COMMIT);
			retcode= SQLFreeStmt(hstmt, SQL_DROP );
			if(retcode != SQL_SUCCESS && retcode != SQL_SUCCESS_WITH_INFO) {
				MyLog(LOG_NORMAL, "Transact commit Error") ;
			}
			//printf("\nTransact & free") ;
			return(1); // succeed
		}
		else
		{
			displaySQLError(hstmt) ;
			//SQLTransact(SQL_NULL_HENV, hDBC, SQL_ROLLBACK);
			SQLFreeStmt(hstmt, SQL_DROP);
			return(-3); 
		}
	}
	
	SQLFreeStmt(hstmt, SQL_DROP);
	return 1;
}



int update_BinaryData_to_Chr_Info2(	 UCHAR *bankitem, char *login_id, char *name) // 1225
{
	SQLINTEGER  cbdata = 200, cbvalue = SQL_DATA_AT_EXEC ;
	SQLINTEGER	cbbankitemlen;
	SQLRETURN	retcode;
	SQLHSTMT	hstmt;
	SQLPOINTER	pParamData;
	int			n=0;
	char		aaa=20;
	char		query[256]={0,};
	
	sprintf(query, "UPDATE chr_info2 SET bankitem=? WHERE name='%s'", name) ;
	
	SQLAllocStmt(hDBC, &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_BANKITEM,			0, bankitem,			0, &cbbankitemlen );
		
		if(retcode != SQL_SUCCESS && retcode != SQL_SUCCESS_WITH_INFO)
		{
			SQLFreeStmt(hstmt, SQL_DROP);
			printf("\nBinding FAIL!!!") ;
			return -5 ;
		}
		
		cbbankitemlen	= 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 == bankitem ) 				SQLPutData(hstmt, bankitem , SIZE_OF_BANKITEM );
			}
			else break ;
		}
		
		retcode = SQLExecute(hstmt) ;
		
		if(retcode == SQL_NEED_DATA)
		{
			retcode= SQLCancel(hstmt) ;// 020620 YGI
			//retcode= SQLTransact(SQL_NULL_HENV, hDBC, SQL_COMMIT);
			retcode= SQLFreeStmt(hstmt, SQL_DROP );

⌨️ 快捷键说明

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