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

📄 user.cpp

📁 决战帝王1.5武神降临对喜爱决战的玩家共享研究用
💻 CPP
📖 第 1 页 / 共 5 页
字号:
	
	SendCharData();						// 蜡历狼 惑技 沥焊甫 焊辰促.

	TempBuf.Add((short)m_curz);
	TempBuf.Add(m_uid + USER_BAND);
	TempBuf.Add((short)pt.x);
	TempBuf.Add((short)pt.y);

	TempBuf.Add(m_tDir);

	TempBuf.Add((BYTE)g_GameTime);
	TempBuf.Add((BYTE)g_GameMinute);

	Send(TempBuf, TempBuf.GetLength());

	SetGameStartInfo();	

	SendSystemMsg( IDS_USER_OPERATOR_MAIL1, SYSTEM_NORMAL, TO_ME);
//	SendSystemMsg( IDS_USER_OPERATOR_MAIL2, SYSTEM_NORMAL, TO_ME);
}

void USER::AccountLoginReqWithThread(TCHAR *pBuf)
{
	char id[MAX_ID+1];
	int index = 0;
	BYTE	result = FAIL, error_code = 0;

	int	nIDLength = GetVarString(sizeof(id), id, pBuf, index);

	if(nIDLength == 0 || nIDLength > ACCOUNT_LENGTH)	
	{
		error_code = 1;
		index = 0;
		SetByte(m_TempBuf, ACCOUNT_LOGIN_RESULT, index );
		SetByte(m_TempBuf, result, index );
		SetByte(m_TempBuf, error_code, index);
		Send( m_TempBuf, index );
		SoftClose();
		return;
	}

	LOGINOUTTHREADDATA *pLIOTD;
	pLIOTD = new LOGINOUTTHREADDATA;
	pLIOTD->CODE = ACCOUNT_LOGIN_REQ;
	pLIOTD->UID = m_uid;
	memset(pLIOTD->ID, NULL, CHAR_NAME_LENGTH+sizeof(int)+1);
	memcpy(pLIOTD->ID, pBuf, index );

	EnterCriticalSection( &m_CS_LoginData );
	RecvLoginData.AddTail(pLIOTD);
	nLoginDataCount = RecvLoginData.GetCount();
	LeaveCriticalSection( &m_CS_LoginData );
}

///////////////////////////////////////////////////////////////////////////////////
//	Character 沥焊甫 啊廉柯促.
//
BOOL USER::LoadCharData(TCHAR *id)
{
	SQLHSTMT		hstmt = NULL;
	SQLRETURN		retcode;
	TCHAR			szSQL[1024];	::ZeroMemory(szSQL, sizeof(szSQL));

	BOOL bFind = FALSE;
	
	_sntprintf(szSQL, sizeof(szSQL), TEXT("{call LOAD_CHAR_DATA (\'%s\')}")/*, m_iMyServer*/, id );
	
	SQLCHAR		strChar[3][CHAR_NAME_LENGTH+1];
	SQLINTEGER	strCharInd[3];

	int db_index = 0;
	CDatabase* pDB = g_DB[m_iModSid].GetDB( db_index );
	if( !pDB ) return FALSE;

	for( int i = 0; i < 3; i++)
	{
		::ZeroMemory(strChar[i], CHAR_NAME_LENGTH+1);
		strCharInd[i] = SQL_NTS;
	}

	retcode = SQLAllocHandle((SQLSMALLINT)SQL_HANDLE_STMT, pDB->m_hdbc, &hstmt);
	if( retcode != SQL_SUCCESS )
	{
//		g_DB[m_iModSid].ReleaseDB(db_index);
		return FALSE;
	}

	retcode = SQLExecDirect( hstmt, (unsigned char*)szSQL, SQL_NTS );
	if( retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO )
	{
		retcode = SQLFetch( hstmt );

		if( retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO )
		{
			SQLGetData( hstmt, 1, SQL_C_CHAR, strChar[0], CHAR_NAME_LENGTH, &strCharInd[0] );
			SQLGetData( hstmt, 2, SQL_C_CHAR, strChar[1], CHAR_NAME_LENGTH, &strCharInd[1] );
			SQLGetData( hstmt, 3, SQL_C_CHAR, strChar[2], CHAR_NAME_LENGTH, &strCharInd[2] );
		}
		else 
		{
			DisplayErrorMsg(hstmt);
			retcode = SQLFreeHandle((SQLSMALLINT)SQL_HANDLE_STMT, hstmt);
			g_DB[m_iModSid].ReleaseDB(db_index);
			return FALSE;
		}
	}
	else
	{
		DisplayErrorMsg(hstmt);
		retcode = SQLFreeHandle((SQLSMALLINT)SQL_HANDLE_STMT, hstmt);
		//BREAKPOINT();

		g_DB[m_iModSid].ReleaseDB(db_index);
		return FALSE;
	}

	retcode = SQLFreeHandle( (SQLSMALLINT)SQL_HANDLE_STMT, hstmt);
	g_DB[m_iModSid].ReleaseDB(db_index);

	m_nCharNum = 0;
	int nSize = sizeof(m_strChar);
	::ZeroMemory(m_strChar, sizeof(m_strChar));

	_tcscpy( m_strChar[0], (LPCTSTR)strChar[0]);		if( strlen( m_strChar[0] ) ) m_nCharNum++;
	_tcscpy( m_strChar[1], (LPCTSTR)strChar[1]);		if( strlen( m_strChar[1] ) ) m_nCharNum++;
	_tcscpy( m_strChar[2], (LPCTSTR)strChar[2]);		if( strlen( m_strChar[2] ) ) m_nCharNum++;

	return TRUE;
}

///////////////////////////////////////////////////////////////////////////////
//	Client俊 Character 扁夯 沥焊甫 焊辰促.
//
BOOL USER::SendCharInfo(TCHAR *strChar, TCHAR* pBuf, int& index)
{
	SQLHSTMT		hstmt = NULL;
	SQLRETURN		retcode;
	BOOL			bFind = FALSE;
	TCHAR			szSQL[1024];	::ZeroMemory(szSQL, sizeof(szSQL));

	_sntprintf(szSQL, sizeof(szSQL), TEXT("{call SEND_CHAR_DATA (\'%s\')}"), strChar );
	
	SQLCHAR		strCharID[CHAR_NAME_LENGTH + 1], strFace[10];
	SQLINTEGER	strCharInd = SQL_NTS;

	SQLSMALLINT	sSTR, sCON, sDEX, sVOL, sWIS, sGender;
	SQLINTEGER	sInd;

	SDWORD		dSkin, dHair;

	SQLSMALLINT	sLevel;
	SQLCHAR		byClass;

	SQLSMALLINT	sHP, sPP, sSP;

	SQLCHAR		strSkill[_SKILL_DB], strItem[_ITEM_DB];

	::ZeroMemory(strCharID, sizeof(strCharID));
	::ZeroMemory(strFace, sizeof(strFace));
	::ZeroMemory(strSkill, sizeof(strSkill));
	::ZeroMemory(strItem, sizeof(strItem));

	sSTR = sCON = sDEX = sVOL = sWIS = sGender = 0;
	dSkin = dHair = 0;

	byClass = 0;
	sLevel = 1;

	int db_index = 0;
	CDatabase* pDB = g_DB[m_iModSid].GetDB( db_index );
	if( !pDB ) return FALSE;

	retcode = SQLAllocHandle( (SQLSMALLINT)SQL_HANDLE_STMT, pDB->m_hdbc, &hstmt );
	if( retcode != SQL_SUCCESS )
	{
//		g_DB[m_iModSid].ReleaseDB(db_index);
		return FALSE;
	}

	retcode = SQLExecDirect( hstmt, (unsigned char*)szSQL, SQL_NTS );
	if( retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO )
	{
		retcode = SQLFetch( hstmt );

		if( retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO )
		{
			int i = 1;

			SQLGetData( hstmt, i++,	SQL_C_CHAR,		strCharID,	sizeof(strCharID),	&strCharInd);
			SQLGetData( hstmt, i++,	SQL_C_SSHORT,	&sSTR,		sizeof(sSTR),		&sInd);
			SQLGetData( hstmt, i++,	SQL_C_SSHORT,	&sCON,		sizeof(sCON),		&sInd);
			SQLGetData( hstmt, i++,	SQL_C_SSHORT,	&sDEX,		sizeof(sDEX),		&sInd);
			SQLGetData( hstmt, i++,	SQL_C_SSHORT,	&sVOL,		sizeof(sVOL),		&sInd);
			SQLGetData( hstmt, i++,	SQL_C_SSHORT,	&sWIS,		sizeof(sWIS),		&sInd);
			SQLGetData( hstmt, i++,	SQL_C_ULONG,	&dSkin,		sizeof(dSkin),		&sInd);
			SQLGetData( hstmt, i++,	SQL_C_ULONG,	&dHair,		sizeof(dHair),		&sInd);
			SQLGetData( hstmt, i++,	SQL_C_SSHORT,	&sGender,	sizeof(sGender),	&sInd);

			SQLGetData( hstmt, i++, SQL_C_BINARY,	strFace,	sizeof(strFace),	&sInd);

			SQLGetData( hstmt, i++,	SQL_C_TINYINT,	&byClass,	sizeof(byClass),	&sInd);

			SQLGetData( hstmt, i++,	SQL_C_SSHORT,	&sLevel,	sizeof(sLevel),		&sInd);

			SQLGetData( hstmt, i++,	SQL_C_SSHORT,	&sHP,		sizeof(sHP),		&sInd);
			SQLGetData( hstmt, i++,	SQL_C_SSHORT,	&sPP,		sizeof(sPP),		&sInd);
			SQLGetData( hstmt, i++,	SQL_C_SSHORT,	&sSP,		sizeof(sSP),		&sInd);

			SQLGetData( hstmt, i++,	SQL_C_BINARY,	strSkill,	sizeof(strSkill),	&sInd);
			SQLGetData( hstmt, i++,	SQL_C_BINARY,	strItem,	sizeof(strItem),	&sInd);
		}
		else
		{
			DisplayErrorMsg(hstmt);
			retcode = SQLFreeHandle((SQLSMALLINT)SQL_HANDLE_STMT, hstmt);			
			g_DB[m_iModSid].ReleaseDB(db_index);
			return FALSE;
		}
	}
	else
	{
		DisplayErrorMsg(hstmt);
		retcode = SQLFreeHandle((SQLSMALLINT)SQL_HANDLE_STMT, hstmt);

		g_DB[m_iModSid].ReleaseDB(db_index);
		return FALSE;
	}

	retcode = SQLFreeHandle( (SQLSMALLINT)SQL_HANDLE_STMT, hstmt);
	g_DB[m_iModSid].ReleaseDB(db_index);

	TCHAR strID[CHAR_NAME_LENGTH+1];
	_tcscpy(strID, (TCHAR*)strCharID);
	short nSTR = sSTR; 
	short nCON = sCON;
	short nDEX = sDEX;
	short nVOL = sVOL;
	short nWIS = sWIS;

	short	sMaxHP = 0;
	short	sMaxPP = 0;
	short	sMaxSP = 0;

	DWORD dwSkin = dSkin;
	DWORD dwHair = dHair;

	BYTE  cGender = (BYTE)sGender;

	CBufferEx TempBuf;
	TempBuf.AddString(strID);
	TempBuf.Add(nSTR);
	TempBuf.Add(nCON);
	TempBuf.Add(nDEX);
	TempBuf.Add(nVOL);
	TempBuf.Add(nWIS);
	TempBuf.Add(dwSkin);
	TempBuf.Add(dwHair);
	TempBuf.Add(cGender);

	TempBuf.AddData((LPTSTR)strFace, 10);

	TempBuf.Add(byClass);
	TempBuf.Add(sLevel);
	TempBuf.Add((short)sHP);
	TempBuf.Add((short)sPP);
	TempBuf.Add((short)sSP);

	sMaxHP	= g_sHPConst[byClass] * nCON + g_sHPLV[byClass] * (sLevel - 1) + g_sHPAdd[byClass];
	sMaxPP	= g_sPPConst[byClass] * nWIS + g_sPPLV[byClass] * (sLevel - 1) + g_sPPAdd[byClass];
	sMaxSP	= g_sSPConst[byClass] * nCON + g_sSPLV[byClass] * (sLevel - 1) + g_sSPAdd[byClass];

	TempBuf.Add((short)sMaxHP);
	TempBuf.Add((short)sMaxPP);
	TempBuf.Add((short)sMaxSP);

	// Parse Skill
	CHAR szSkillBuf[3 * TOTAL_SKILL_NUM];
	::ZeroMemory(szSkillBuf, sizeof(szSkillBuf));
	if(!GetSkillNameLevel(byClass, (LPTSTR)strSkill, szSkillBuf)) return FALSE;

	// Parse Item
	TCHAR szItemBuf[2 * EQUIP_ITEM_NUM];		// 2 = Item Pid, 10 = Totoal Equip Slot Count
	::ZeroMemory(szItemBuf, sizeof(szItemBuf));

	if(!GetEquipItemPid((LPTSTR)strItem, szItemBuf))
	{
		return FALSE;
	}

	TempBuf.AddData(szSkillBuf, 3 * TOTAL_SKILL_NUM);
	TempBuf.AddData(szItemBuf, 2* EQUIP_ITEM_NUM);

	::CopyMemory(pBuf + index, TempBuf, TempBuf.GetLength());
	index += TempBuf.GetLength();

	return TRUE;
}

/////////////////////////////////////////////////////////////////////////////////////
//	货肺款 某腐磐甫 父电促.
//
void USER::NewCharReq(TCHAR *pBuf)
{
	if ( pBuf == NULL ) return;

	SQLHSTMT		hstmt = NULL;
	SQLRETURN		retcode;
	TCHAR			szSQL[4096];
	
	SDWORD			sFaceLen = 10;
	SDWORD			sSkillLen	= _SKILL_DB;
	SDWORD			sPsiLen		= _PSI_DB;
	SDWORD			sItemLen	= _ITEM_DB;

	int db_index = 0;
	CDatabase* pDB;
	int				i;

	const	int	nInitMax = 25; 

	int		SumPoint = 0;
	int		index = 0;
	TCHAR	szAccount[ACCOUNT_LENGTH + 1], szName[CHAR_NAME_LENGTH + 1], szFace[10];
	BYTE	result = FAIL, error_code = 0;
	BYTE	nCharNum	= 0;
	int		nTempLength = 0;

	CString szTemp		= _T("");
	short	nSTR		= 0;
	short	nCON		= 0;
	short	nDEX		= 0;
	short	nVOL		= 0;
	short	nWIS		= 0;

	short	sHP = 0;
	short	sPP = 0;
	short	sSP = 0;

	DWORD	dwSkin		= 0;
	DWORD	dwHair		= 0;

	BYTE	cGender		= 0;
	BYTE	byClass		= 0;

	if(!GetVarString(sizeof(szAccount), szAccount, pBuf, index)) {error_code = 1; goto result_send; }
	nCharNum = GetByte(pBuf, index);
	if(!GetVarString(sizeof(szName), szName, pBuf, index)) {error_code = 2; goto result_send; }

	nTempLength = _tcslen(szAccount);
	if(!szAccount[0] ||  nTempLength > ACCOUNT_LENGTH)
	{
		error_code = 1;
		goto result_send;
	}

	if(m_nCharNum >= 3 || nCharNum > 2 || nCharNum < 0)
	{
		error_code = 2;
		goto result_send;
	}

	nTempLength = _tcslen(szName);
	if(nTempLength == 0 || nTempLength > CHAR_NAME_LENGTH) 
	{
		error_code = 8;
		goto result_send;
	}

	szTemp = szName;

	if(!UNI_CHAR::CheckString(szTemp))
	{
		result = FAIL;
		error_code = 8;
		index = 0;
		SetByte(m_TempBuf, NEW_CHAR_RESULT, index);
		SetByte(m_TempBuf, result, index);
		SetByte(m_TempBuf, error_code, index);
		Send(m_TempBuf, index);
		return;
	}
/*	if(szTemp.Find(' ') != -1 || szTemp.Find('\'') != -1 || szTemp.Find('"') != -1 || szTemp.Find('.') != -1 || szTemp.Find(',') != -1)
	{
		result = FAIL;
		error_code = 8;
		index = 0;
		SetByte(m_TempBuf, NEW_CHAR_RESULT, index);
		SetByte(m_TempBuf, result, index);
		SetByte(m_TempBuf, error_code, index);
		Send(m_TempBuf, index);
		return;
	}
*/
	if(IsReservedID(szName))
	{
		result = FAIL;
		error_code = 7;
		index = 0;
		SetByte(m_TempBuf, NEW_CHAR_RESULT, index);
		SetByte(m_TempBuf, result, index);
		SetByte(m_TempBuf, error_code, index);
		Send(m_TempBuf, index);
		return;
	}

	switch(m_iMyServer)
	{
	case	0:	// 抛胶飘
		break;
	case	1:	// 捞墨风胶
		strcat( szName, "[I]" );
		break;
	case	2:	// 郡颇档福
		strcat( szName, "[E]" );
		break;
	case	3:	// 啊匙瘤酒
		strcat( szName, "[K]" );
		break;
	case	4:	// 鞘赋器
		strcat( szName, "[F]" );
		break;
	case	5:	// 酒胶飘
		strcat( szName, "[A]" );
		break;
	case	6:	// 弊尔叼俊
		strcat( szName, "[G]" );
		break;
	case	7:	// 其技快胶
		strcat( szName, "[P]" );
		break;
	case	8:	// 剐扼叼
		strcat( szName, "[M]" );
		break;
	case	9:	// 风捞匙飘
		strcat( szName, "[R]" );
		break;
	case	10:	// 鸥福箕
		strcat( szName, "[T]" );
		break;
	default:
		result = FAIL;
		error_code = 255;
		index = 0;
		SetByte(m_TempBuf, NEW_CHAR_RESULT, index);
		SetByte(m_TempBuf, result, index);
		SetByte(m_TempBuf, error_code, index);
		Send(m_TempBuf, index);
		return;
	}

	// 粮犁窍绰 ID牢瘤 八荤
	if(IsExistCharId(szName))
	{
		error_code = 7;
		goto result_send;
	}

	nSTR		= (short)m_sTempSTR;
	nCON		= (short)m_sTempCON;
	nDEX		= (short)m_sTempDEX;
	nVOL		= (short)m_sTempVOL;
	nWIS		= (short)m_sTempWIS;

	sHP = 0;
	sPP = 0;
	sSP = 0;

	dwSkin		= GetDWORD(pBuf, index);
	dwHair		= GetDWORD(pBuf, index);

	cGender		= GetByte (pBuf, index);

	::ZeroMemory(szFace, sizeof(szFace));
	GetString(szFace, pBuf, 10, index);
	
	byClass		= GetByte(pBuf, index);
	if(byClass != m_tTempClass) 
	{
		error_code = 10;
		goto result_send;
	}

	if(byClass < 0 || byClass > 3)
	{
		error_code = 10;
		goto result_send;
	}

	//-------------[ 檬扁 瓷仿摹 八荤 ]-----------------------------//
	if(SumPoint > 65)		// 檬扁 瓷仿摹狼 钦篮 65
	{
		error_code = 9;
		goto result_send;
	}

	if(nSTR < 1 || nSTR > nInitMax ||
	   nCON < 1 || nCON > nInitMax ||
	   nDEX < 1 || nDEX > nInitMax ||
	   nVOL < 1 || nVOL > nInitMax ||
	   nWIS < 1 || nWIS > nInitMax)
	{
		error_code = 3;
		goto result_send;
	}

	//-----------[ 纳腐磐 Reroll 荐摹 檬扁拳 ] -------------------------------//
	m_sTempSTR = 0;					
	m_sTempCON = 0;					
	m_sTempDEX = 0;					
	m_sTempVOL = 0;					
	m_sTempWIS = 0;					

	m_tTempClass = 255;

	SumPoint = nSTR + nCON + nDEX + nVOL + nWIS;

	// 乔何祸, 赣府祸, 庆绢胶鸥老俊 措茄 八荤绰 眠饶俊... 

	pDB = g_DB[m_iModSid].GetDB( db_index );		// 困俊辑 葛电 俊矾蔼甫 眉农窍绊 唱辑 且寸
	if( !pDB ) return ;
	
	sHP = g_sHPConst[byClass] * nCON + g_sHPAdd[byClass];
	sPP = g_sPPConst[byClass] * nWIS + g_sPPAdd[byClass];
	sSP = g_sSPConst[byClass] * nCON + g_sSPAdd[byClass];
	
	// Skill, Item, Psionic
	TCHAR strSkill[_SKILL_DB], strItem[_ITEM_DB], strPsi[_PSI_DB];
	::ZeroMemory(strSkill, sizeof(strSkill));
	::ZeroMemory(strItem, sizeof(strItem));
	::ZeroMemory(strPsi, sizeof(strPsi));

	sFaceLen = sizeof(szFace);
	sSkillLen = sizeof(strSkill);
	sItemLen = size

⌨️ 快捷键说明

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