📄 processdbmsg.cpp
字号:
#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 + -