📄 dbagent.cpp
字号:
}
SQLFreeHandle((SQLSMALLINT)SQL_HANDLE_STMT,hstmt);
return retval;
}
int CDBAgent::CreateKnights(int knightsindex, int nation, char *name, char *chief, int iFlag)
{
SQLHSTMT hstmt = NULL;
SQLRETURN retcode;
TCHAR szSQL[1024];
memset( szSQL, 0x00, 1024 );
SQLSMALLINT sParmRet=0, sKnightIndex=0;
SQLINTEGER cbParmRet=SQL_NTS;
wsprintf( szSQL, TEXT( "{call CREATE_KNIGHTS ( ?, %d, %d, %d, \'%s\', \'%s\' )}" ), knightsindex, nation, iFlag, name, chief );
//wsprintf( szSQL, TEXT( "{call CREATE_KNIGHTS ( ?, ?, %d, %d, \'%s\', \'%s\' )}" ), nation, iFlag, name, chief );
DBProcessNumber( 10 );
retcode = SQLAllocHandle( (SQLSMALLINT)SQL_HANDLE_STMT, m_GameDB.m_hdbc, &hstmt );
if (retcode == SQL_SUCCESS)
{
retcode = SQLBindParameter(hstmt, 1, SQL_PARAM_OUTPUT, SQL_C_SSHORT, SQL_INTEGER, 0,0, &sParmRet,0, &cbParmRet );
//retcode = SQLBindParameter(hstmt, 2, SQL_PARAM_OUTPUT, SQL_C_SSHORT, SQL_INTEGER, 0,0, &sKnightIndex,0, &cbParmRet );
if(retcode == SQL_SUCCESS)
{
retcode = SQLExecDirect (hstmt, (unsigned char *)szSQL, 1024);
if (retcode==SQL_ERROR)
{
if( DisplayErrorMsg(hstmt) == -1 ) {
m_GameDB.Close();
if( !m_GameDB.IsOpen() ) {
ReConnectODBC( &m_GameDB, m_pMain->m_strGameDSN, m_pMain->m_strGameUID, m_pMain->m_strGamePWD );
return FALSE;
}
}
SQLFreeHandle((SQLSMALLINT)SQL_HANDLE_STMT,hstmt);
return sParmRet;
}
SQLFreeHandle((SQLSMALLINT)SQL_HANDLE_STMT,hstmt);
return sParmRet;
}
SQLFreeHandle((SQLSMALLINT)SQL_HANDLE_STMT,hstmt);
}
return -1;
}
int CDBAgent::UpdateKnights(int type, char *userid, int knightsindex, int domination)
{
SQLHSTMT hstmt = NULL;
SQLRETURN retcode;
TCHAR szSQL[1024];
memset( szSQL, 0x00, 1024 );
SQLSMALLINT sParmRet;
SQLINTEGER cbParmRet=SQL_NTS;
wsprintf( szSQL, TEXT( "{call UPDATE_KNIGHTS ( ?, %d, \'%s\', %d, %d)}" ), (BYTE)type, userid, knightsindex, (BYTE)domination );
//wsprintf( szSQL, TEXT( "{call UPDATE_KNIGHTS2 ( ?, %d, \'%s\', %d, %d)}" ), type, userid, knightsindex, domination );
DBProcessNumber( 11 );
retcode = SQLAllocHandle( (SQLSMALLINT)SQL_HANDLE_STMT, m_GameDB.m_hdbc, &hstmt );
if (retcode == SQL_SUCCESS)
{
retcode = SQLBindParameter(hstmt, 1, SQL_PARAM_OUTPUT, SQL_C_SSHORT, SQL_INTEGER, 0,0, &sParmRet,0, &cbParmRet );
if(retcode == SQL_SUCCESS)
{
retcode = SQLExecDirect (hstmt, (unsigned char *)szSQL, 1024);
if (retcode==SQL_ERROR)
{
if( DisplayErrorMsg(hstmt) == -1 ) {
m_GameDB.Close();
if( !m_GameDB.IsOpen() ) {
ReConnectODBC( &m_GameDB, m_pMain->m_strGameDSN, m_pMain->m_strGameUID, m_pMain->m_strGamePWD );
return FALSE;
}
}
SQLFreeHandle((SQLSMALLINT)SQL_HANDLE_STMT,hstmt);
return sParmRet;
}
TRACE("DB - UpdateKnights - command=%d, name=%s, index=%d, result=%d \n", type, userid, knightsindex, domination);
SQLFreeHandle((SQLSMALLINT)SQL_HANDLE_STMT,hstmt);
return sParmRet;
}
SQLFreeHandle((SQLSMALLINT)SQL_HANDLE_STMT,hstmt);
}
return -1;
}
int CDBAgent::DeleteKnights(int knightsindex)
{
SQLHSTMT hstmt = NULL;
SQLRETURN retcode;
TCHAR szSQL[1024];
memset( szSQL, 0x00, 1024 );
SQLSMALLINT sParmRet;
SQLINTEGER cbParmRet=SQL_NTS;
wsprintf( szSQL, TEXT( "{call DELETE_KNIGHTS ( ?, %d )}" ), knightsindex );
//wsprintf( szSQL, TEXT( "{call DELETE_KNIGHTS2 ( ?, %d )}" ), knightsindex );
DBProcessNumber( 12 );
retcode = SQLAllocHandle( (SQLSMALLINT)SQL_HANDLE_STMT, m_GameDB.m_hdbc, &hstmt );
if (retcode == SQL_SUCCESS)
{
retcode = SQLBindParameter(hstmt, 1, SQL_PARAM_OUTPUT, SQL_C_SSHORT, SQL_INTEGER, 0,0, &sParmRet,0, &cbParmRet );
if(retcode == SQL_SUCCESS)
{
retcode = SQLExecDirect (hstmt, (unsigned char *)szSQL, 1024);
if (retcode==SQL_ERROR)
{
if( DisplayErrorMsg(hstmt) == -1 ) {
m_GameDB.Close();
if( !m_GameDB.IsOpen() ) {
ReConnectODBC( &m_GameDB, m_pMain->m_strGameDSN, m_pMain->m_strGameUID, m_pMain->m_strGamePWD );
return -1;
}
}
SQLFreeHandle((SQLSMALLINT)SQL_HANDLE_STMT,hstmt);
return sParmRet;
}
SQLFreeHandle((SQLSMALLINT)SQL_HANDLE_STMT,hstmt);
return sParmRet;
}
SQLFreeHandle((SQLSMALLINT)SQL_HANDLE_STMT,hstmt);
}
return -1;
}
int CDBAgent::LoadKnightsAllMembers(int knightsindex, int start, char *temp_buff, int& buff_index )
{
SQLHSTMT hstmt = NULL;
SQLRETURN retcode;
BOOL bData = TRUE;
int count = 0, temp_index = 0, sid = 0;
CString tempid;
TCHAR szSQL[1024];
memset( szSQL, 0x00, 1024 );
SQLCHAR userid[MAX_ID_SIZE+1];
SQLCHAR Fame, Level;
SQLSMALLINT Class;
SQLINTEGER Indexind = SQL_NTS;
_USER_DATA* pUser = NULL;
//wsprintf( szSQL, TEXT( "SELECT strUserId, Fame, [Level], Class FROM USERDATA WHERE Knights = %d" ), knightsindex );
wsprintf( szSQL, TEXT( "{call LOAD_KNIGHTS_MEMBERS ( %d )}" ), knightsindex );
DBProcessNumber( 13 );
retcode = SQLAllocHandle( (SQLSMALLINT)SQL_HANDLE_STMT, m_GameDB.m_hdbc, &hstmt );
if (retcode == SQL_SUCCESS)
{
retcode = SQLExecDirect (hstmt, (unsigned char *)szSQL, 1024);
if (retcode == SQL_SUCCESS|| retcode == SQL_SUCCESS_WITH_INFO) {
while (bData) {
retcode = SQLFetch(hstmt);
if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO) {
SQLGetData(hstmt,1 ,SQL_C_CHAR ,userid, MAX_ID_SIZE+1,&Indexind);
SQLGetData(hstmt,2 ,SQL_C_TINYINT,&Fame, 0,&Indexind);
SQLGetData(hstmt,3 ,SQL_C_TINYINT,&Level,0,&Indexind);
SQLGetData(hstmt,4 ,SQL_C_SSHORT,&Class, 0,&Indexind);
// if( count < start ) {
// count++;
// continue;
// }
strcpy( (char*)(LPCTSTR)tempid, (char*)userid);
tempid.TrimRight();
SetShort( temp_buff, strlen((char*)(LPCTSTR)tempid), temp_index);
SetString( temp_buff, (char*)(LPCTSTR)tempid, strlen((char*)(LPCTSTR)tempid), temp_index);
SetByte( temp_buff, Fame, temp_index);
SetByte( temp_buff, Level, temp_index);
SetShort( temp_buff, Class, temp_index);
sid = -1;
//(_USER_DATA*)m_UserDataArray[uid];
pUser = m_pMain->GetUserPtr( (const char*)(LPCTSTR)tempid, sid );
//pUser = (_USER_DATA*)m_UserDataArray[sid];
if( pUser ) SetByte( temp_buff, 1, temp_index);
else SetByte( temp_buff, 0, temp_index);
count++;
//if( count >= start + 10 )
// break;
bData = TRUE;
}
else
bData = FALSE;
}
}
else {
if( DisplayErrorMsg(hstmt) == -1 ) {
m_GameDB.Close();
if( !m_GameDB.IsOpen() ) {
ReConnectODBC( &m_GameDB, m_pMain->m_strGameDSN, m_pMain->m_strGameUID, m_pMain->m_strGamePWD );
return 0;
}
}
}
SQLFreeHandle((SQLSMALLINT)SQL_HANDLE_STMT,hstmt);
}
buff_index = temp_index;
return (count - start);
}
BOOL CDBAgent::UpdateConCurrentUserCount(int serverno, int zoneno, int t_count)
{
SQLHSTMT hstmt = NULL;
SQLRETURN retcode;
TCHAR szSQL[1024];
memset( szSQL, 0x00, 1024 );
switch( zoneno ) {
case 1:
wsprintf( szSQL, TEXT( "UPDATE CONCURRENT SET zone1_count = %d WHERE serverid = %d" ), t_count, serverno );
break;
case 2:
wsprintf( szSQL, TEXT( "UPDATE CONCURRENT SET zone2_count = %d WHERE serverid = %d" ), t_count, serverno );
break;
case 3:
wsprintf( szSQL, TEXT( "UPDATE CONCURRENT SET zone3_count = %d WHERE serverid = %d" ), t_count, serverno );
break;
}
DBProcessNumber( 14 );
retcode = SQLAllocHandle( (SQLSMALLINT)SQL_HANDLE_STMT, m_AccountDB1.m_hdbc, &hstmt );
if (retcode == SQL_SUCCESS)
{
retcode = SQLExecDirect (hstmt, (unsigned char *)szSQL, 1024);
if (retcode==SQL_ERROR)
{
if( DisplayErrorMsg(hstmt) == -1 ) {
m_AccountDB1.Close();
if( !m_AccountDB1.IsOpen() ) {
ReConnectODBC( &m_AccountDB1, m_pMain->m_strAccountDSN, m_pMain->m_strAccountUID, m_pMain->m_strAccountPWD );
return FALSE;
}
}
SQLFreeHandle((SQLSMALLINT)SQL_HANDLE_STMT,hstmt);
return FALSE;
}
SQLFreeHandle((SQLSMALLINT)SQL_HANDLE_STMT,hstmt);
}
return TRUE;
}
BOOL CDBAgent::LoadWarehouseData(const char *accountid, int uid)
{
SQLHSTMT hstmt = NULL;
SQLRETURN retcode;
BOOL retval;
TCHAR szSQL[1024];
memset( szSQL, 0x00, 1024 );
_USER_DATA* pUser = NULL;
_ITEM_TABLE* pTable = NULL;
SQLINTEGER Money = 0, dwTime = 0;
TCHAR strItem[1600], strSerial[1600];
memset( strItem, 0x00, 1600 );
memset( strSerial, 0x00, 1600 );
SQLINTEGER Indexind = SQL_NTS;
wsprintf( szSQL, TEXT( "SELECT nMoney, dwTime, WarehouseData, strSerial FROM WAREHOUSE WHERE strAccountID = \'%s\'" ), accountid );
DBProcessNumber( 15 );
retcode = SQLAllocHandle( (SQLSMALLINT)SQL_HANDLE_STMT, m_GameDB.m_hdbc, &hstmt );
if (retcode != SQL_SUCCESS) return FALSE;
retcode = SQLExecDirect (hstmt, (unsigned char *)szSQL, 1024);
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_LONG, &Money, 0, &Indexind);
SQLGetData(hstmt,2 ,SQL_C_LONG, &dwTime, 0, &Indexind);
SQLGetData(hstmt,3 ,SQL_C_CHAR, strItem, 1600, &Indexind);
SQLGetData(hstmt,4 ,SQL_C_CHAR, strSerial, 1600, &Indexind);
retval = TRUE;
}
else
retval = FALSE;
}
else {
if( DisplayErrorMsg(hstmt) == -1 ) {
m_GameDB.Close();
if( !m_GameDB.IsOpen() ) {
ReConnectODBC( &m_GameDB, m_pMain->m_strGameDSN, m_pMain->m_strGameUID, m_pMain->m_strGamePWD );
return FALSE;
}
}
retval = FALSE;
}
SQLFreeHandle((SQLSMALLINT)SQL_HANDLE_STMT,hstmt);
if( !retval )
return FALSE;
pUser = (_USER_DATA*)m_UserDataArray[uid];
if( !pUser )
return FALSE;
if( strlen( pUser->m_id ) == 0 )
return FALSE;
pUser->m_iBank = Money;
int index = 0, serial_index = 0;
DWORD itemid = 0;
short count = 0, duration = 0;
__int64 serial = 0;
for(int i = 0; i < WAREHOUSE_MAX; i++) {
itemid = GetDWORD(strItem, index);
duration = GetShort(strItem, index );
count = GetShort(strItem, index);
serial = GetInt64( strSerial, serial_index );
pTable = m_pMain->m_ItemtableArray.GetData(itemid);
if( pTable ) {
pUser->m_sWarehouseArray[i].nNum = itemid;
pUser->m_sWarehouseArray[i].sDuration = duration;
if( count > ITEMCOUNT_MAX )
pUser->m_sWarehouseArray[i].sCount = ITEMCOUNT_MAX;
else if( count <= 0 )
count = 1;
pUser->m_sWarehouseArray[i].sCount = count;
pUser->m_sWarehouseArray[i].nSerialNum = serial;
TRACE("%s : %d ware slot (%d : %I64d)\n", pUser->m_id, i, pUser->m_sWarehouseArray[i].nNum, pUser->m_sWarehouseArray[i].nSerialNum);
}
else {
pUser->m_sWarehouseArray[i].nNum = 0;
pUser->m_sWarehouseArray[i].sDuration = 0;
pUser->m_sWarehouseArray[i].sCount = 0;
if( itemid > 0 ) {
char logstr[256];
memset( logstr, 0x00, 256);
sprintf( logstr, "Warehouse Item Drop(%d) : %d (%s)\r\n", i, itemid, accountid );
//m_pMain->WriteLogFile( logstr );
//m_pMain->m_LogFile.Write(logstr, strlen(logstr));
}
}
}
return retval;
}
int CDBAgent::UpdateWarehouseData(const char *accountid, int uid, int type )
{
SQLHSTMT hstmt;
SQLRETURN retcode;
TCHAR szSQL[1024];
SDWORD sStrItem, sStrSerial;
_USER_DATA* pUser = NULL;
memset( szSQL, 0x00, 1024 );
pUser = (_USER_DATA*)m_UserDataArray[uid];
if( !pUser )
return -1;
if( strlen( accountid ) == 0 )
return -1;
if( _strnicmp( pUser->m_Accountid, accountid, MAX_ID_SIZE ) != 0 )
return -1;
else if( type == UPDATE_LOGOUT || type == UPDATE_ALL_SAVE )
pUser->m_dwTime = 0;
TCHAR strItem[1600], strSerial[1600];
memset( strItem, 0x00, 1600 );
memset( strSerial, 0x00, 1600 );
sStrItem = sizeof(strItem);
sStrSerial = sizeof(strSerial);
int index = 0, serial_index = 0;
for(int i = 0; i < WAREHOUSE_MAX; i++) {
SetDWORD(strItem, pUser->m_sWarehouseArray[i].nNum, index);
SetShort(strItem, pUser->m_sWarehouseArray[i].sDuration, index );
SetShort(strItem, pUser->m_sWarehouseArray[i].sCount, index);
SetInt64(strSerial, pUser->m_sWarehouseArray[i].nSerialNum, serial_index );
}
wsprintf( szSQL, TEXT( "{call UPDATE_WAREHOUSE ( \'%s\', %d,%d,?,?)}" ), accountid, pUser->m_iBank, pUser->m_dwTime);
DBProcessNumber( 16 );
hstmt = NULL;
retcode = SQLAllocHandle( (SQLSMALLINT)SQL_HANDLE_STMT, m_GameDB.m_hdbc, &hstmt );
if (retcode == SQL_SUCCESS)
{
retcode = SQLBindParameter(hstmt, 1, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_CHAR, sizeof(strItem),0, strItem,0, &sStrItem );
retcode = SQLBindParameter(hstmt, 2, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_CHAR, sizeof(strSerial),0, strSerial,0, &sStrSerial );
if(retcode == SQL_SUCCESS)
{
retcode = SQLExecDirect (hstmt, (unsigned char *)szSQL, 1024);
if (retcode==SQL_ERROR)
{
if( DisplayErrorMsg(hstmt) == -1 ) {
m_GameDB.Close();
if( !m_GameDB.IsOpen() ) {
ReConnectODBC( &m_GameDB, m_pMain->m_strGameDSN, m_pMain->m_strGameUID, m_pMain->m_strGamePWD );
return 0;
}
}
SQLFreeHandle((SQLSMALLINT)SQL_HANDLE_STMT,hstmt);
char logstr[2048]; memset( logstr, 0x00, 2048 );
sprintf( logstr, "%s, Item[%s] \r\n", szSQL, strItem );
m_pMain->WriteLogFile( logstr );
//m_pMain->m_LogFile.Write(logstr, strlen(logstr));
return FALSE;
}
SQLFreeHandle((SQLSMALLINT)SQL_HANDLE_STMT,hstmt);
return 1;
}
else
SQLFreeHandle((SQLSMALLINT)SQL_HANDLE_STMT,hstmt);
}
return 0;
}
BOOL CDBAgent::LoadKnightsInfo( int index, char* buff, int &buff_index)
{
SQLHSTMT hstmt = NULL;
SQLRETURN retcode;
BOOL bData = TRUE, retval = FALSE;
CString tempid;
TCHAR szSQL[1024];
memset( szSQL, 0x00, 1024 );
SQLCHAR IDName[MAX_ID_SIZE+1], Nation;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -