📄 processdbmsg.cpp
字号:
{
PLISTNODE pListNode = xUserItemRcdList.GetHead();
while (pListNode)
{
_LPTUSERITEMRCD lptUserItemRcd = xUserItemRcdList.GetData(pListNode);
if (lptUserItemRcd)
{
nPos += fnEncode6BitBufA((unsigned char *)lptUserItemRcd, &szEncodeMsg2[nPos], sizeof(_TUSERITEMRCD), sizeof(szEncodeMsg2) - nPos);
pListNode = xUserItemRcdList.RemoveNode(pListNode);
delete lptUserItemRcd;
}
else
pListNode = xUserItemRcdList.GetNext(pListNode);
}
if (nHorse)
nPos += fnEncode6BitBufA((unsigned char *)&tHorseRcd, &szEncodeMsg2[nPos], sizeof(_THORSERCD), sizeof(szEncodeMsg2) - nPos);
}
szEncodeMsg2[nPos] = '\0';
SendSocket(pServerInfo->m_sock, lpLoadHuman->nCertification, szEncodeMsg1, szEncodeMsg2, nPos);
}
else
{
fnMakeDefMessageA(&DefMsg, DBR_FAIL, nRecog, 0, 0, 0);
fnEncodeMessageA(&DefMsg, szEncodeMsg1, sizeof(szEncodeMsg1));
SendSocket(pServerInfo->m_sock, lpLoadHuman->nCertification, szEncodeMsg1, "Test", 4);
}
}
char *SaveHumanMagicRcd(char *pszUserID, char *pszCharName, char *pszEncodeRcd, int nCount)
{
char szTmp[1024];
// Delete Magic Data
CRecordset *pRec = GetDBManager()->CreateRecordset();
sprintf(szTmp, "DELETE FROM TBL_CHARACTER_MAGIC WHERE FLD_CHARNAME = '%s'", pszCharName);
pRec->Execute(szTmp);
GetDBManager()->DestroyRecordset( pRec );
// Update Magic Data
char *pszEncode = pszEncodeRcd;
_THUMANMAGICRCD tUserMagicRcd;
for (int i = 0; i < nCount; i++)
{
if ( memlen( pszEncode ) >= MAGICRCDBLOCKSIZE )
{
pRec = GetDBManager()->CreateRecordset();
fnDecode6BitBufA( pszEncode, (char *) &tUserMagicRcd, sizeof( _THUMANMAGICRCD ) );
sprintf(szTmp, "INSERT TBL_CHARACTER_MAGIC(FLD_LOGINID, FLD_CHARNAME, FLD_MAGICID, FLD_LEVEL, FLD_USEKEY, FLD_CURRTRAIN) VALUES "
"( '%s', '%s', %d, %d, %d, %d )",
pszUserID, pszCharName, tUserMagicRcd.btMagicID, tUserMagicRcd.btLevel, tUserMagicRcd.btUseKey, tUserMagicRcd.nCurrTrain);
if ( !pRec->Execute( szTmp ) || pRec->GetRowCount() <= 0 )
InsertLogMsg(_T("Save Human Magic Record 盎脚 坷幅"));
GetDBManager()->DestroyRecordset( pRec );
pszEncode += MAGICRCDBLOCKSIZE + 1;
}
}
return pszEncode;
}
void SaveGenItemRcd(char *pszUserID, char *pszCharName, char *pszEncodeRcd, int nCount)
{
char szTmp[1024];
// Delete Magic Data
CRecordset *pRec = GetDBManager()->CreateRecordset();
sprintf(szTmp, "DELETE FROM TBL_CHARACTER_GENITEM WHERE FLD_CHARNAME = '%s'", pszCharName);
pRec->Execute(szTmp);
GetDBManager()->DestroyRecordset( pRec );
// Update General Item Data
sprintf( szTmp, "FLD_CHARNAME='%s'", pszCharName );
CQueryManager query;
char *pszEncode = pszEncodeRcd;
_TGENITEMRCD tItemRcd;
for (int i = 0; i < nCount; i++)
{
while ( memlen( pszEncode ) >= GENITEMRCDBLOCKSIZE )
{
pRec = GetDBManager()->CreateRecordset();
ZeroMemory(&tItemRcd, sizeof(_TGENITEMRCD));
fnDecode6BitBufA( pszEncode, (char *) &tItemRcd, sizeof( _TGENITEMRCD ) );
sprintf(szTmp, "INSERT TBL_CHARACTER_GENITEM (FLD_LOGINID, FLD_CHARNAME, FLD_ITEMINDEX) VALUES "
"( '%s', '%s', '%s' )", pszUserID, pszCharName, tItemRcd.szItem);
if ( !pRec->Execute( szTmp ) || pRec->GetRowCount() <= 0 )
InsertLogMsg(_T("Save General Item Record 盎脚 坷幅"));
GetDBManager()->DestroyRecordset( pRec );
pszEncode += (GENITEMRCDBLOCKSIZE + 1);
}
}
}
BOOL SaveHumanRcd(CServerInfo* pServerInfo, _LPTLOADHUMAN lpLoadHuman, _LPTHUMANRCD lptHumanRcd, int nRecog)
{
char szSQL[1024];
char szTakeItem[10][13];
ZeroMemory(szTakeItem, sizeof(szTakeItem));
for (int i = 0; i < 10; i++)
memmove(szTakeItem[i], lptHumanRcd->szTakeItem[i], 12);
sprintf(szSQL, "UPDATE TBL_CHARACTER SET FLD_JOB=%d, FLD_GENDER=%d, FLD_LEVEL=%d, FLD_DIRECTION=%d, FLD_CX=%d, FLD_CY=%d, "
"FLD_MAPNAME='%s', FLD_GOLD=%d, FLD_HAIR=%d, FLD_DRESS_ID='%s', FLD_WEAPON_ID='%s', "
"FLD_LEFTHAND_ID='%s', FLD_RIGHTHAND_ID='%s', FLD_HELMET_ID='%s', FLD_NECKLACE_ID='%s', "
"FLD_ARMRINGL_ID='%s', FLD_ARMRINGR_ID='%s', FLD_RINGL_ID='%s', FLD_RINGR_ID='%s', FLD_EXP=%d "
"WHERE FLD_CHARNAME='%s'",
lptHumanRcd->btJob, lptHumanRcd->btGender, lptHumanRcd->szLevel, lptHumanRcd->nDirection,
lptHumanRcd->nCX, lptHumanRcd->nCY, lptHumanRcd->szMapName, lptHumanRcd->dwGold,
lptHumanRcd->szHair, szTakeItem[0], szTakeItem[1], szTakeItem[2], szTakeItem[3], szTakeItem[4],
szTakeItem[5], szTakeItem[6], szTakeItem[7], szTakeItem[8], szTakeItem[9], lptHumanRcd->nExp,
lpLoadHuman->szCharName);
CRecordset *pRec = GetDBManager()->CreateRecordset();
if (!pRec->Execute( szSQL ) || pRec->GetRowCount() <= 0 )
{
InsertLogMsg(_T("Save Human Record 盎脚 坷幅"));
GetDBManager()->DestroyRecordset( pRec );
return FALSE;
}
GetDBManager()->DestroyRecordset( pRec );
return TRUE;
}
BOOL MakeNewItem(CServerInfo* pServerInfo, _LPTLOADHUMAN lpHumanLoad, _LPTMAKEITEMRCD lpMakeItemRcd, int nRecog)
{
static char g_szYesterDay[24];
static UINT g_nItemIndexCnt = 0;
CRecordset *pRec;
char szQuery[1024];
char szDate[24];
GetDate( szDate );
// if (strcmp(szDate, g_szYesterDay) != 0)
// {
sprintf( szQuery,
"SELECT * FROM TBL_CHARACTER_ITEM WHERE FLD_STDTYPE = '%c' AND "
"FLD_MAKEDATE = '%s' ORDER BY FLD_MAKEINDEX DESC",
lpMakeItemRcd->szStdType, szDate );
pRec = GetDBManager()->CreateRecordset();
if ( pRec->Execute( szQuery ) && pRec->Fetch() )
{
g_nItemIndexCnt = atoi( pRec->Get( "FLD_MAKEINDEX" ) ) + 1;
}
GetDBManager()->DestroyRecordset( pRec );
strcpy( g_szYesterDay, szDate );
// }
// else
// g_nItemIndexCnt++;
char szUserID[32];
char szCharName[32];
if (lpHumanLoad)
{
strcpy(szUserID, lpHumanLoad->szUserID);
strcpy(szCharName, lpHumanLoad->szCharName);
}
else
{
strcpy(szUserID, "0");
strcpy(szCharName, "LOMCN");
}
sprintf(szQuery, "INSERT TBL_CHARACTER_ITEM (FLD_LOGINID, FLD_CHARNAME, FLD_STDTYPE, FLD_MAKEDATE, FLD_MAKEINDEX, "
"FLD_STDINDEX, FLD_DURA, FLD_DURAMAX, FLD_VALUE1, FLD_VALUE2, FLD_VALUE3, FLD_VALUE4, FLD_VALUE5, "
"FLD_VALUE6, FLD_VALUE7, FLD_VALUE8, FLD_VALUE9, FLD_VALUE10, FLD_VALUE11, FLD_VALUE12, FLD_VALUE13, "
"FLD_VALUE14, FLD_LASTOWNER, FLD_LASTACTION, FLD_PREFIXNAME) "
"VALUES( '%s', '%s', '%c', '%s', '%05d', %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, '%s', %d, '%s' )",
szUserID, szCharName, lpMakeItemRcd->szStdType, g_szYesterDay, g_nItemIndexCnt,
lpMakeItemRcd->nStdIndex, lpMakeItemRcd->nDura, lpMakeItemRcd->nDuraMax,
lpMakeItemRcd->btValue[0], lpMakeItemRcd->btValue[1], lpMakeItemRcd->btValue[2], lpMakeItemRcd->btValue[3],
lpMakeItemRcd->btValue[5], lpMakeItemRcd->btValue[5], lpMakeItemRcd->btValue[6], lpMakeItemRcd->btValue[7],
lpMakeItemRcd->btValue[8], lpMakeItemRcd->btValue[9], lpMakeItemRcd->btValue[10], lpMakeItemRcd->btValue[11],
lpMakeItemRcd->btValue[12], lpMakeItemRcd->btValue[13], szCharName, 1, "");
pRec = GetDBManager()->CreateRecordset();
if ( !pRec->Execute( szQuery ) || pRec->GetRowCount() <= 0 )
{
GetDBManager()->DestroyRecordset( pRec );
return FALSE;
}
GetDBManager()->DestroyRecordset( pRec );
if ( pServerInfo )
{
// Send Packet to Game Server
_TDEFAULTMESSAGE DefMsg;
_TUSERITEMRCD UserItemRcd;
char szEncodeMsg1[24];
char szEncodeMsg2[128];
int nPos = 0;
if (lpHumanLoad)
fnMakeDefMessageA(&DefMsg, DBR_MAKEITEMRCD, nRecog, 0, 0, 0);
else
fnMakeDefMessageA(&DefMsg, DBR_MAKEITEMRCD2, nRecog, 0, 0, 0);
fnEncodeMessageA(&DefMsg, szEncodeMsg1, sizeof(szEncodeMsg1));
UserItemRcd.szMakeIndex[0] = lpMakeItemRcd->szStdType;
memcpy( &UserItemRcd.szMakeIndex[1], g_szYesterDay, 6 );
sprintf( &UserItemRcd.szMakeIndex[7], "%d", g_nItemIndexCnt );
memcpy(&UserItemRcd.nStdIndex, &lpMakeItemRcd->nStdIndex, sizeof(_TUSERITEMRCD) - sizeof(UserItemRcd.szMakeIndex));
nPos = fnEncode6BitBufA((unsigned char *)&UserItemRcd, szEncodeMsg2, sizeof(_TUSERITEMRCD), sizeof(szEncodeMsg2));
SendSocket(pServerInfo->m_sock, 2, szEncodeMsg1, szEncodeMsg2, nPos);
}
return TRUE;
}
UINT WINAPI ProcessDBMsg(LPVOID lpParameter)
{
while (TRUE)
{
if (g_fTerminated) return 0L;
_LPTSENDBUFF pSendBuff = (_LPTSENDBUFF)g_DBMsgQ.PopQ();
if (pSendBuff)
{
switch (pSendBuff->DefMsg.wIdent)
{
case DB_LOADHUMANRCD:
GetLoadHumanRcd(pSendBuff->pServerInfo, &pSendBuff->HumanLoad, pSendBuff->DefMsg.nRecog);
break;
case DB_SAVEHUMANRCD:
{
SaveHumanRcd(pSendBuff->pServerInfo, &pSendBuff->HumanLoad, (_LPTHUMANRCD)pSendBuff->lpbtAddData, pSendBuff->DefMsg.nRecog);
char *pszData = SaveHumanMagicRcd(pSendBuff->HumanLoad.szUserID, pSendBuff->HumanLoad.szCharName, (char *)pSendBuff->lpbtAddData2, pSendBuff->DefMsg.wParam);
SaveGenItemRcd(pSendBuff->HumanLoad.szUserID, pSendBuff->HumanLoad.szCharName, pszData, pSendBuff->DefMsg.wTag);
break;
}
case DB_MAKEITEMRCD:
MakeNewItem(pSendBuff->pServerInfo, &pSendBuff->HumanLoad, (_LPTMAKEITEMRCD)pSendBuff->lpbtAddData, pSendBuff->DefMsg.nRecog);
break;
case DB_MAKEITEMRCD2:
{
_LPTUSERITEMRCD lptUserItemRcd = (_LPTUSERITEMRCD)pSendBuff->lpbtAddData;
_TMAKEITEMRCD tMakeItemRcd;
tMakeItemRcd.szStdType = lptUserItemRcd->szMakeIndex[0];
tMakeItemRcd.nStdIndex = lptUserItemRcd->nStdIndex;
tMakeItemRcd.nDura = lptUserItemRcd->nDura;
tMakeItemRcd.nDuraMax = lptUserItemRcd->nDuraMax;
memcpy(tMakeItemRcd.btValue, lptUserItemRcd->btValue, sizeof(lptUserItemRcd->btValue));
MakeNewItem(pSendBuff->pServerInfo, NULL, &tMakeItemRcd, pSendBuff->DefMsg.nRecog);
break;
}
} // switch
delete pSendBuff;
} // if (pSendBuff)
SleepEx(1, TRUE);
}
return 0L;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -