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

📄 processdbmsg.cpp

📁 真正的传奇源代码
💻 CPP
📖 第 1 页 / 共 2 页
字号:
#include "stdafx.h"
#include "processdbmsg.h"
#include <stdio.h>
#include "../def/dbmgr.h"

extern CWHQueue					g_DBMsgQ;

extern BOOL						g_fTerminated;

extern CWHList< GAMESERVERINFO * >	g_xGameServerList;

void SendSocket(SOCKET s, int nCertification, char *pszData1, char *pszData2, int nData2Len)
{
	int		nLen = nData2Len + DEFBLOCKSIZE + 6;
	LONG	lCert = MAKELONG(nCertification ^ 0xAA, nLen);
	char	szCert[24];
	char	szEncodeMsg[8096];

	int nCertLen = fnEncode6BitBufA((unsigned char *)&lCert, szCert, sizeof(LONG), sizeof(szCert));

	szEncodeMsg[0] = '#';
	char *pszPos = ValToAnsiStr(nCertification, &szEncodeMsg[1]);

	*pszPos++ = '/';

	memmove(pszPos, pszData1, DEFBLOCKSIZE);
	pszPos += DEFBLOCKSIZE;
	memmove(pszPos, pszData2, nData2Len);
	pszPos += nData2Len;
	memmove(pszPos, szCert, nCertLen);

	pszPos		+= nCertLen;

	*pszPos++	= '!';
	*pszPos		= '\0';

	int nSendLen = memlen(szEncodeMsg) - 1;

	send(s, szEncodeMsg, nSendLen, 0);
}

int GetHorseRcd(char *szName, _LPTHORSERCD lpTHorseRcd)
{
	char szQuery[1024];
	sprintf( szQuery, "SELECT * FROM TBL_CHARACTER_HORSE WHERE FLD_CHARNAME='%s'", szName );

	CRecordset *pRec = GetDBManager()->CreateRecordset();
	if ( pRec->Execute( szQuery ) && pRec->Fetch() )
	{
		strcpy( lpTHorseRcd->szHorseIndex, pRec->Get( "FLD_HORSEINDEX" ) );
		lpTHorseRcd->btHorseType = atoi( pRec->Get( "FLD_HORSETYPE" ) );
	}
	else
	{
		GetDBManager()->DestroyRecordset( pRec );
		return 0;
	}
	GetDBManager()->DestroyRecordset( pRec );

	return 1;
}

void GetHumanGenItemRcd(char *szName, CWHList<_LPTGENITEMRCD>	*pxUserGenItemRcdList)
{
	char szQuery[128];

	sprintf( szQuery, "SELECT * FROM TBL_CHARACTER_GENITEM WHERE FLD_CHARNAME='%s'", szName );

	CRecordset *pRec = GetDBManager()->CreateRecordset();
	
	if ( pRec->Execute( szQuery ) )
	{		
		while ( pRec->Fetch() )
		{
			_LPTGENITEMRCD pItemRcd = new _TGENITEMRCD;

			if ( pItemRcd )
			{
				strcpy( pItemRcd->szItem, pRec->Get( "FLD_ITEMINDEX" ) );
				pxUserGenItemRcdList->AddNewNode( pItemRcd );
			}
		}
	}

	GetDBManager()->DestroyRecordset( pRec );
}

void GetHumanMagicRcd(char *szName, CWHList<_LPTHUMANMAGICRCD>	*pxUserMagicRcdList)
{
	char szQuery[1024];

	sprintf( szQuery, "SELECT * FROM TBL_CHARACTER_MAGIC WHERE FLD_CHARNAME='%s'", szName );

	CRecordset *pRec = GetDBManager()->CreateRecordset();
	
	if (pRec->Execute( szQuery ))
	{
		while (pRec->Fetch())
		{
			_LPTHUMANMAGICRCD	lptUserMagicRcd = new _THUMANMAGICRCD;
			
			if (lptUserMagicRcd)
			{
				lptUserMagicRcd->btMagicID	= atoi( pRec->Get( "FLD_MAGICID" ) );
				lptUserMagicRcd->btLevel	= atoi( pRec->Get( "FLD_LEVEL" ) );
				lptUserMagicRcd->btUseKey	= atoi( pRec->Get( "FLD_USEKEY" ) );
				lptUserMagicRcd->nCurrTrain	= atoi( pRec->Get( "FLD_CURRTRAIN" ) );
				
				pxUserMagicRcdList->AddNewNode(lptUserMagicRcd);
			}
		}
	}

	GetDBManager()->DestroyRecordset( pRec );
}

void GetHumanItemRcd(char *szName, CWHList<_LPTUSERITEMRCD>	*pxUserItemRcdList)
{
	char szQuery[128];

	sprintf( szQuery, "SELECT * FROM TBL_CHARACTER_ITEM WHERE FLD_CHARNAME='%s'", szName );

	CRecordset *pRec = GetDBManager()->CreateRecordset();
	
	if ( pRec->Execute( szQuery ) )
	{
		while ( pRec->Fetch() )
		{
			_LPTUSERITEMRCD	pItem = new _TUSERITEMRCD;
			
			pItem->szMakeIndex[0] = *(pRec->Get( "FLD_STDTYPE" ));
			memmove( &pItem->szMakeIndex[1], pRec->Get( "FLD_MAKEDATE" ), 6 );
			memmove( &pItem->szMakeIndex[7], pRec->Get( "FLD_MAKEINDEX" ), 5 );
			
			pItem->nStdIndex	= atoi( pRec->Get( "FLD_STDINDEX" ) );
			pItem->nDura		= atoi( pRec->Get( "FLD_DURA" ) );
			pItem->nDuraMax		= atoi( pRec->Get( "FLD_DURAMAX" ) );
			pItem->btValue[0]	= atoi( pRec->Get( "FLD_VALUE1" ) );
			pItem->btValue[1]	= atoi( pRec->Get( "FLD_VALUE2" ) );
			pItem->btValue[2]	= atoi( pRec->Get( "FLD_VALUE3" ) );
			pItem->btValue[3]	= atoi( pRec->Get( "FLD_VALUE4" ) );
			pItem->btValue[4]	= atoi( pRec->Get( "FLD_VALUE5" ) );
			pItem->btValue[5]	= atoi( pRec->Get( "FLD_VALUE6" ) );
			pItem->btValue[6]	= atoi( pRec->Get( "FLD_VALUE7" ) );
			pItem->btValue[7]	= atoi( pRec->Get( "FLD_VALUE8" ) );
			pItem->btValue[8]	= atoi( pRec->Get( "FLD_VALUE9" ) );
			pItem->btValue[9]	= atoi( pRec->Get( "FLD_VALUE10" ) );
			pItem->btValue[10]	= atoi( pRec->Get( "FLD_VALUE11" ) );
			pItem->btValue[11]	= atoi( pRec->Get( "FLD_VALUE12" ) );
			pItem->btValue[12]	= atoi( pRec->Get( "FLD_VALUE13" ) );

			ZeroMemory(pItem->szPrefixName, sizeof(pItem->szPrefixName));
			strcpy( pItem->szPrefixName, pRec->Get( "FLD_PREFIXNAME") );

			pxUserItemRcdList->AddNewNode(pItem);
		}
	}
	GetDBManager()->DestroyRecordset( pRec );
}

BOOL GetHumanRcd(char	*szName, _LPTHUMANRCD lptHumanRcd, _LPTLOADHUMAN lpLoadHuman)
{
	char szQuery[1024];

	sprintf( szQuery, "SELECT * FROM TBL_CHARACTER WHERE FLD_CHARNAME='%s'", szName );

	CRecordset *pRec = GetDBManager()->CreateRecordset();

	if ( pRec->Execute( szQuery ) && pRec->Fetch() )
	{
		strcpy(lptHumanRcd->szUserID, pRec->Get( "FLD_LOGINID" ) );
		ChangeSpaceToNull(lptHumanRcd->szUserID);
		strcpy(lptHumanRcd->szCharName, pRec->Get( "FLD_CHARNAME" ) );
		ChangeSpaceToNull(lptHumanRcd->szCharName);

		lptHumanRcd->btJob		= (BYTE)atoi( pRec->Get( "FLD_JOB" ) );
		lptHumanRcd->btGender	= (BYTE)atoi( pRec->Get( "FLD_GENDER" ) );
		lptHumanRcd->szLevel	= (BYTE)atoi( pRec->Get( "FLD_LEVEL" ) );
		lptHumanRcd->nDirection	= (BYTE)atoi( pRec->Get( "FLD_DIRECTION" ) );
		lptHumanRcd->nCX		= atoi( pRec->Get( "FLD_CX" ) );
		lptHumanRcd->nCY		= atoi( pRec->Get( "FLD_CY" ) );

		lptHumanRcd->btAttackMode	= atoi( pRec->Get( "FLD_ATTACKMODE" ) );
		lptHumanRcd->nExp			= atoi( pRec->Get( "FLD_EXP" ) );

		strcpy( lptHumanRcd->szMapName, pRec->Get( "FLD_MAPNAME" ) );
		ChangeSpaceToNull( lptHumanRcd->szMapName );

		lptHumanRcd->dwGold		= atoi( pRec->Get( "FLD_GOLD" ) );
		lptHumanRcd->szHair		= atoi( pRec->Get( "FLD_HAIR" ) );

		memmove( lptHumanRcd->szTakeItem[0], pRec->Get( "FLD_DRESS_ID" ), 12 );
		memmove( lptHumanRcd->szTakeItem[1], pRec->Get( "FLD_WEAPON_ID" ), 12 );
		memmove( lptHumanRcd->szTakeItem[2], pRec->Get( "FLD_LEFTHAND_ID" ), 12 );
		memmove( lptHumanRcd->szTakeItem[3], pRec->Get( "FLD_RIGHTHAND_ID" ), 12 );
		memmove( lptHumanRcd->szTakeItem[4], pRec->Get( "FLD_HELMET_ID" ), 12 );
		memmove( lptHumanRcd->szTakeItem[5], pRec->Get( "FLD_NECKLACE_ID" ), 12 );
		memmove( lptHumanRcd->szTakeItem[6], pRec->Get( "FLD_ARMRINGL_ID" ), 12 );
		memmove( lptHumanRcd->szTakeItem[7], pRec->Get( "FLD_ARMRINGR_ID" ), 12 );
		memmove( lptHumanRcd->szTakeItem[8], pRec->Get( "FLD_RINGL_ID" ), 12 );
		memmove( lptHumanRcd->szTakeItem[9], pRec->Get( "FLD_RINGR_ID" ), 12 );

		lptHumanRcd->fIsAdmin	= (BYTE)*pRec->Get( "FLD_ISADMIN" );
	}
	else
	{
		GetDBManager()->DestroyRecordset( pRec );
		return FALSE;
	}
	
	GetDBManager()->DestroyRecordset( pRec );

	return TRUE;
}

void GetLoadHumanRcd(CServerInfo* pServerInfo, _LPTLOADHUMAN lpLoadHuman, int nRecog)
{
	if (!pServerInfo) return;

	_TDEFAULTMESSAGE	DefMsg;

	char				szEncodeMsg1[24];

	_THUMANRCD					tHumanRcd;
	CWHList<_LPTUSERITEMRCD>	xUserItemRcdList;
	CWHList<_LPTHUMANMAGICRCD>	xUserMagicRcdList;
	CWHList<_LPTGENITEMRCD>		xUserGenItemRcdList;
	
	_THORSERCD					tHorseRcd;
	int							nHorse = 0;
	
	char						szEncodeMsg2[8096];
	
	if (GetHumanRcd(lpLoadHuman->szCharName, &tHumanRcd, lpLoadHuman))		// Fetch Character Data
	{
		GetHumanItemRcd(lpLoadHuman->szCharName, &xUserItemRcdList);		// Fetch Item Data
		GetHumanMagicRcd(lpLoadHuman->szCharName, &xUserMagicRcdList);		// Fetch Magic Data
		GetHumanGenItemRcd(lpLoadHuman->szCharName, &xUserGenItemRcdList);	// Fetch General Item Data
		
		int nCount		= xUserItemRcdList.GetCount();
		int nMagicCount = xUserMagicRcdList.GetCount();
		int nItemCount	= xUserGenItemRcdList.GetCount();
		
		if (nCount)
			nHorse = GetHorseRcd(lpLoadHuman->szCharName, &tHorseRcd);	// Fetch Horse Data

		if (nRecog)
			fnMakeDefMessageA(&DefMsg, DBR_LOADHUMANRCD, nRecog, MAKEWORD(nCount, nItemCount), nHorse, nMagicCount);
		else
			fnMakeDefMessageA(&DefMsg, DBR_LOADHUMANRCD2, nRecog, MAKEWORD(nCount, nItemCount), nHorse, nMagicCount);

		fnEncodeMessageA(&DefMsg, szEncodeMsg1, sizeof(szEncodeMsg1));
		
		int nPos = fnEncode6BitBufA((unsigned char *)&tHumanRcd, szEncodeMsg2, sizeof(_THUMANRCD), sizeof(szEncodeMsg2));
		
		if (nItemCount)
		{
			PLISTNODE pListNode = xUserGenItemRcdList.GetHead();
			
			while (pListNode)
			{
				_LPTGENITEMRCD	lptItemRcd = xUserGenItemRcdList.GetData(pListNode);
				
				if (lptItemRcd)
				{
					nPos += fnEncode6BitBufA((unsigned char *)lptItemRcd, &szEncodeMsg2[nPos], sizeof(_TGENITEMRCD), sizeof(szEncodeMsg2) - nPos);
					
					pListNode = xUserGenItemRcdList.RemoveNode(pListNode);
					delete lptItemRcd;
				}
				else 
					pListNode = xUserGenItemRcdList.GetNext(pListNode);
			}
		}
		
		if (nMagicCount)
		{
			PLISTNODE pListNode = xUserMagicRcdList.GetHead();
			
			while (pListNode)
			{
				_LPTHUMANMAGICRCD	lptUserMagicRcd = xUserMagicRcdList.GetData(pListNode);
				
				if (lptUserMagicRcd)
				{
					nPos += fnEncode6BitBufA((unsigned char *)lptUserMagicRcd, &szEncodeMsg2[nPos], sizeof(_THUMANMAGICRCD), sizeof(szEncodeMsg2) - nPos);
					
					pListNode = xUserMagicRcdList.RemoveNode(pListNode);
					delete lptUserMagicRcd;
				}
				else 
					pListNode = xUserMagicRcdList.GetNext(pListNode);
			}
		}
		
		if (nCount)

⌨️ 快捷键说明

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