DragonNest/Server/ServerCommon/DNSQLMembership.cpp
Cussrro 47f7895977 Revert "修复编码问题"
This reverts commit 9e69c01767.
2024-12-21 10:04:04 +08:00

3939 lines
No EOL
150 KiB
C++
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include "StdAfx.h"
#include "DNSQLMembership.h"
#include "DNExtManager.h"
#include "Log.h"
#include "Util.h"
#if defined(PRE_ADD_LIMITED_CASHITEM) && defined(_CASHSERVER)
#include "DNLimitedCashItemRepository.h"
#endif //#if defined(PRE_ADD_LIMITED_CASHITEM) && defined(_CASHSERVER)
CDNSQLMembership::CDNSQLMembership(void): CSQLConnection()
{
}
CDNSQLMembership::~CDNSQLMembership(void)
{
}
int CDNSQLMembership::QueryGetDatabaseVersion( TDatabaseVersion* pA )
{
CQueryTimeLog QueryTimeLog( "[Membership]P_GetDatabaseVersion" );
if (CheckConnect() < ERROR_NONE){
g_Log.Log( LogType::_ERROR, L"[QueryGetDatabaseVersion] CheckConnect Fail\r\n");
return ERROR_DB;
}
SQLRETURN RetCode;
SQLLEN cblen;
int nResult = ERROR_DB;
memset(&m_wszQuery, 0, sizeof(m_wszQuery));
swprintf(m_wszQuery, L"{?=CALL dbo.P_GetDatabaseVersion}" );
RetCode = SQLPrepare(m_hstmt, m_wszQuery, SQL_NTSL);
if (CheckRetCode(RetCode, L"SQLPrepare") == ERROR_NONE)
{
SQLBindParameter( m_hstmt, 1, SQL_PARAM_OUTPUT, SQL_INTEGER, SQL_INTEGER, sizeof(int), 0, &nResult, sizeof(int), &cblen );
RetCode = SQLExecute(m_hstmt);
if (CheckRetCode(RetCode, L"SQLExecute") == ERROR_NONE)
{
int nNo = 1;
SQLBindCol( m_hstmt, nNo++, SQL_WCHAR, pA->wszName, sizeof(pA->wszName), &cblen );
SQLBindCol( m_hstmt, nNo++, SQL_INTEGER, &pA->iVersion, sizeof(int), &cblen );
CheckColumnCount(nNo, "[Membership]P_GetDatabaseVersion");
RetCode = SQLFetch(m_hstmt);
}
}
SQLCloseCursor(m_hstmt);
return nResult;
}
#if defined(_LOGINSERVER)
int CDNSQLMembership::QueryLogin(CDNUserConnection *pUserCon, WCHAR *pPassword, BYTE cStep, OUT Login::TQueryLoginOutput &LoginOutput)
{
if (CheckConnect() < ERROR_NONE){
g_Log.Log(LogType::_ERROR, pUserCon, L"[QueryLogin] CheckConnect Fail\r\n");
return ERROR_DB;
}
int nPublisher = DBDNWorldDef::PublisherCode::Studio;
#if defined(_KR) || defined(_KRAZ)
nPublisher = DBDNWorldDef::PublisherCode::KR;
#elif defined(_CH)
nPublisher = DBDNWorldDef::PublisherCode::CH;
#elif defined(_JP)
nPublisher = DBDNWorldDef::PublisherCode::JP;
#elif defined(_TW)
nPublisher = DBDNWorldDef::PublisherCode::TW;
#elif defined(_US)
nPublisher = DBDNWorldDef::PublisherCode::US;
#elif defined(_SG)
nPublisher = DBDNWorldDef::PublisherCode::SG;
#elif defined(_TH)
nPublisher = DBDNWorldDef::PublisherCode::TH;
#elif defined(_ID)
nPublisher = DBDNWorldDef::PublisherCode::ID;
#elif defined(_RU)
nPublisher = DBDNWorldDef::PublisherCode::RU;
#elif defined(_KAMO) //[debug] Cash <20><><EFBFBD><EFBFBD>Ҫ <20><><EFBFBD><EFBFBD>ΪTW<54><57>
nPublisher = DBDNWorldDef::PublisherCode::TW;
#elif defined(_EU)
nPublisher = DBDNWorldDef::PublisherCode::EU;
#endif
int nSize = (int)sizeof(TGameOptions);
BYTE cNewAccount = 0;
__time64_t BirthTime;
time(&BirthTime);
tm *tm_ptr = localtime(&BirthTime);
BYTE szMID[MACHINEIDMAX] = {0,};
if (pUserCon->m_szMID[0] > 0)
memcpy_s(szMID, sizeof(szMID), pUserCon->m_szMID, MACHINEIDMAX);
int nMachineIDSize = sizeof(szMID);
char cCreateCharMax = 0;
#if defined(PRE_MOD_SELECT_CHAR)
cCreateCharMax = pUserCon->GetAvailableCharacterSlotCount();
#else // #if defined(PRE_MOD_SELECT_CHAR)
cCreateCharMax = pUserCon->GetCharacterCountMax();
#endif // #if defined(PRE_MOD_SELECT_CHAR)
int nResult = ERROR_DB;
SQLRETURN RetCode;
SQLLEN cblen;
CDNSqlLen SqlLen;
CDNSqlLen SqlLenTime;
memset(&m_wszQuery, 0, sizeof(m_wszQuery));
#if defined(PRE_ADD_LOGINLOGOUT_LOG)
#ifdef PRE_MOD_RESTRICT_IDENTITY_IP
swprintf(m_wszQuery, L"{?=CALL dbo.P_Login(N'%s',N'%s',%d,%d,%d,%d,%d,'%d',N'%s',?,?,?,?,?,?,?,%d,?,%d,?,1,?,?,?,?,?,?)}",
pUserCon->GetAccountName(), pUserCon->GetwszIp(), pUserCon->GetSessionID(), nPublisher, DailyCreateCharacterMax, cCreateCharMax, pUserCon->m_cGender, (1900 + tm_ptr->tm_year) - pUserCon->GetAge(), pPassword, pUserCon->m_cRegion, cStep);
#else //#ifdef PRE_MOD_RESTRICT_IDENTITY_IP
swprintf(m_wszQuery, L"{?=CALL dbo.P_Login(N'%s',N'%s',%d,%d,%d,%d,%d,'%d',N'%s',?,?,?,?,?,?,?,%d,?,%d,?,0,?,?,?,?,?,?)}",
pUserCon->GetAccountName(), pUserCon->GetwszIp(), pUserCon->GetSessionID(), nPublisher, DailyCreateCharacterMax, cCreateCharMax, pUserCon->m_cGender, (1900 + tm_ptr->tm_year) - pUserCon->GetAge(), pPassword, pUserCon->m_cRegion, cStep);
#endif //#ifdef PRE_MOD_RESTRICT_IDENTITY_IP
#else
#ifdef PRE_MOD_RESTRICT_IDENTITY_IP
swprintf(m_wszQuery, L"{?=CALL dbo.P_Login(N'%s',N'%s',%d,%d,%d,%d,%d,'%d',N'%s',?,?,?,?,?,?,?,%d,?,%d,?,1,?,?,?,?,?,?)}",
pUserCon->GetAccountName(), pUserCon->GetwszIp(), pUserCon->GetSessionID(), nPublisher, DailyCreateCharacterMax, cCreateCharMax, pUserCon->m_cGender, (1900 + tm_ptr->tm_year) - pUserCon->GetAge(), pPassword, pUserCon->m_cRegion, 2);
#else //#ifdef PRE_MOD_RESTRICT_IDENTITY_IP
swprintf(m_wszQuery, L"{?=CALL dbo.P_Login(N'%s',N'%s',%d,%d,%d,%d,%d,'%d',N'%s',?,?,?,?,?,?,?,%d,?,%d,?,0,?,?,?,?,?,?)}",
pUserCon->GetAccountName(), pUserCon->GetwszIp(), pUserCon->GetSessionID(), nPublisher, DailyCreateCharacterMax, cCreateCharMax, pUserCon->m_cGender, (1900 + tm_ptr->tm_year) - pUserCon->GetAge(), pPassword, pUserCon->m_cRegion, 2);
#endif //#ifdef PRE_MOD_RESTRICT_IDENTITY_IP
#endif // #if defined(PRE_ADD_LOGINLOGOUT_LOG)
RetCode = SQLPrepare(m_hstmt, m_wszQuery, SQL_NTSL);
if (CheckRetCode(RetCode, L"SQLPrepare") == ERROR_NONE)
{
int nNo = 1;
UINT nUserNo = 0;
BYTE cCharCountMax = 0;
SQLBindParameter(m_hstmt, nNo++, SQL_PARAM_OUTPUT, SQL_INTEGER, SQL_INTEGER, sizeof(int), 0, &nResult, sizeof(int), &cblen);
SQLBindParameter(m_hstmt, nNo++, SQL_PARAM_OUTPUT, SQL_TINYINT, SQL_TINYINT, sizeof(BYTE), 0, &cNewAccount, sizeof(BYTE), &cblen);
SQLBindParameter(m_hstmt, nNo++, SQL_PARAM_OUTPUT, SQL_INTEGER, SQL_INTEGER, sizeof(UINT), 0, &LoginOutput.nAccountDBID, sizeof(UINT), &cblen);
SQLBindParameter(m_hstmt, nNo++, SQL_PARAM_OUTPUT, SQL_TINYINT, SQL_TINYINT, sizeof(char), 0, &pUserCon->m_cAccountLevel, sizeof(char), &cblen);
cblen = SQL_LEN_DATA_AT_EXEC(nSize);
SQLBindParameter(m_hstmt, nNo++, SQL_PARAM_OUTPUT, SQL_BINARY, SQL_BINARY, sizeof(TGameOptions), 0, &pUserCon->m_GameOptions, sizeof(TGameOptions), &cblen);
SQLBindParameter(m_hstmt, nNo++, SQL_PARAM_OUTPUT, SQL_TINYINT, SQL_TINYINT, sizeof(BYTE), 0, &pUserCon->m_cDailyCreateCount, sizeof(BYTE), &cblen);
SQLBindParameter(m_hstmt, nNo++, SQL_PARAM_OUTPUT, SQL_TINYINT, SQL_TINYINT, sizeof(BYTE), 0, &cCharCountMax, sizeof(BYTE), &cblen);
SQLBindParameter(m_hstmt, nNo++, SQL_PARAM_INPUT, SQL_BINARY, SQL_BINARY, sizeof(szMID), 0, szMID, sizeof(szMID), SqlLen.Get(nMachineIDSize));
CDNSqlLen PartnerCodeLen;
BYTE cPartnerID = 0;
cPartnerID = static_cast<BYTE>(pUserCon->GetPartnerType());
SQLBindParameter(m_hstmt, nNo++, SQL_PARAM_INPUT, SQL_TINYINT, SQL_TINYINT, sizeof(char), 0, &cPartnerID, sizeof(char), PartnerCodeLen.GetNull(cPartnerID<=0,sizeof(char)));
SQLBindParameter(m_hstmt, nNo++, SQL_PARAM_OUTPUT, SQL_INTEGER, SQL_INTEGER, sizeof(UINT), 0, &nUserNo, sizeof(UINT), &cblen);
SQLBindParameter(m_hstmt, nNo++, SQL_PARAM_OUTPUT, SQL_C_TIMESTAMP, SQL_TIMESTAMP, SQL_TIMESTAMP_LEN, 0, &LoginOutput.LogOutDate, sizeof(TIMESTAMP_STRUCT), SqlLenTime.Get(SQL_TIMESTAMP_LEN));
bool bAuthMobile;
SQLBindParameter(m_hstmt, nNo++, SQL_PARAM_OUTPUT, SQL_C_BIT, SQL_BIT, sizeof(bool), 0, &bAuthMobile, sizeof(bool), &cblen);
SQLBindParameter(m_hstmt, nNo++, SQL_PARAM_OUTPUT, SQL_TINYINT, SQL_TINYINT, sizeof(BYTE), 0, &pUserCon->m_cCharacterSortCode, sizeof(BYTE), &cblen);
bool bReConnectReward = false;
TIMESTAMP_STRUCT RegistDate;
SQLBindParameter(m_hstmt, nNo++, SQL_PARAM_OUTPUT, SQL_C_BIT, SQL_BIT, sizeof(bool), 0, &bReConnectReward, sizeof(bool), &cblen);
SQLBindParameter(m_hstmt, nNo++, SQL_PARAM_OUTPUT, SQL_C_TIMESTAMP, SQL_TIMESTAMP, SQL_TIMESTAMP_LEN, 0, &RegistDate, sizeof(TIMESTAMP_STRUCT), &cblen);
bool bComebakcUser = false;
SQLBindParameter(m_hstmt, nNo++, SQL_PARAM_OUTPUT, SQL_C_BIT, SQL_BIT, sizeof(bool), 0, &bComebakcUser, sizeof(bool), &cblen);
RetCode = SQLExecute(m_hstmt);
if (CheckRetCode(RetCode, L"SQLExecute") == ERROR_NONE){
#if !defined(PRE_MOD_SELECT_CHAR)
pUserCon->SetCharacterCountMax(cCharCountMax);
#endif // #if defined(PRE_MOD_SELECT_CHAR)
LoginOutput.IsNewAccount = cNewAccount == 0 ? false : true;
pUserCon->SetNexonUserNo(nUserNo);
#ifdef PRE_ADD_DOORS
pUserCon->m_bMobileAuthentication = bAuthMobile;
#endif //#ifdef PRE_ADD_DOORS
#if defined(PRE_ADD_GAMEQUIT_REWARD)
pUserCon->m_bReConnectNewbieReward = !bReConnectReward; // DB<44><42><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 1(true), <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 0(false), <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> NULL<4C><4C> <20><><EFBFBD><EFBFBD>(=<3D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)<29><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ó<><C3B3>
LoginOutput.RegistDate = RegistDate;
#endif // #if defined(PRE_ADD_GAMEQUIT_REWARD)
#if defined( PRE_ADD_NEWCOMEBACK )
pUserCon->m_bComebackUser = bComebakcUser;
#endif
}
}
return nResult;
}
#endif // #if defined(_LOGINSERVER)
int CDNSQLMembership::QueryGetCharacterCount( WCHAR *pAccountName, std::map<int,int>& mWorldCharCount )
{
if (CheckConnect() < ERROR_NONE)
{
g_Log.Log(LogType::_ERROR, L"[QueryGetCharacterCount] CheckConnect Fail\r\n");
return ERROR_DB;
}
SQLRETURN RetCode;
SQLLEN cblen;
int nResult = ERROR_DB;
memset( m_wszQuery, 0, sizeof(m_wszQuery) );
swprintf( m_wszQuery, L"{?=CALL dbo.P_GetCharacterCount(N'%s',%d)}", pAccountName, DELETECHAR_WAITTIME_MINUTE );
RetCode = SQLPrepare(m_hstmt, m_wszQuery, SQL_NTSL);
if (CheckRetCode(RetCode, L"SQLPrepare") == ERROR_NONE)
{
SQLBindParameter( m_hstmt, 1, SQL_PARAM_OUTPUT, SQL_INTEGER, SQL_INTEGER, sizeof(int), 0, &nResult, sizeof(int), &cblen );
RetCode = SQLExecute(m_hstmt);
if (CheckRetCode(RetCode, L"SQLExecute") == ERROR_NONE)
{
int iWorldID = 0;
int iCharCount = 0;
int nNo = 1;
SQLBindCol( m_hstmt, nNo++, SQL_INTEGER, &iWorldID, sizeof(int), &cblen );
SQLBindCol( m_hstmt, nNo++, SQL_INTEGER, &iCharCount, sizeof(int), &cblen );
CheckColumnCount(nNo, "P_GetCharacterCount");
while(1)
{
iWorldID = 0;
iCharCount = 0;
RetCode = SQLFetch(m_hstmt);
if (RetCode == SQL_NO_DATA)
{
nResult = ERROR_NONE;
break;
}
if ((CheckRetCode(RetCode, L"SQLFetch") < ERROR_NONE) &&(RetCode != SQL_SUCCESS_WITH_INFO) )
break;
mWorldCharCount.insert( std::make_pair(iWorldID,iCharCount) );
}
}
}
SQLCloseCursor(m_hstmt);
return nResult;
}
int CDNSQLMembership::QueryGetAccountID(const char* uname)
{
CQueryTimeLog QueryTimeLog( "[Membership]GetAccID" );
if (CheckConnect() < ERROR_NONE)
{
g_Log.Log(LogType::_ERROR, 0, 0, 0, 0, L"[GetAccID] CheckConnect Fail\r\n");
return ERROR_DB;
}
SQLRETURN RetCode;
SQLLEN cblen;
int nResult = ERROR_DB, sqlparam = 0;
CDNSqlLen SqlLen;
wchar_t username[IDLENMAX];
MultiByteToWideChar(CP_ACP, 0, uname, -1, username, IDLENMAX);
memset(&m_wszQuery, 0, sizeof(m_wszQuery));
swprintf(m_wszQuery, L"{?=CALL dbo.__RLKT__GetAccountID(N'%s')}", username);
int AccountID=0;
RetCode = SQLPrepare(m_hstmt, m_wszQuery, SQL_NTSL);
if (CheckRetCode(RetCode, L"SQLPrepare") == ERROR_NONE)
{
int nNo = 1;
SQLBindParameter(m_hstmt, nNo++, SQL_PARAM_OUTPUT, SQL_INTEGER, SQL_INTEGER, sizeof(int), 0, &nResult, sizeof(int), &cblen );
//SQLBindCol( m_hstmt, nNo++, SQL_INTEGER, &AccountID, sizeof(int), &cblen );
// printf("Account ID = %d\n",AccountID);
// SQLBindParameter(m_hstmt, nNo++, SQL_PARAM_INPUT, SQL_CHAR, SQL_VARCHAR, IDLENMAX, 0, username, IDLENMAX, SqlLen.GetNull(!username,IDLENMAX));
RetCode = SQLExecute(m_hstmt);
if (CheckRetCode(RetCode, L"SQLExecute") != ERROR_NONE)
return ERROR_DB;
}
return nResult;
}
int CDNSQLMembership::QueryCheckLogin(CSCheckLoginTW *pLogin)
{
CQueryTimeLog QueryTimeLog( "[Membership]CHECKLOGIN" );
if (CheckConnect() < ERROR_NONE)
{
g_Log.Log(LogType::_ERROR, 0, 0, 0, 0, L"[QueryCHECKLOGIN] CheckConnect Fail\r\n");
return ERROR_DB;
}
SQLRETURN RetCode;
SQLLEN cblen;
int nResult = ERROR_DB, sqlparam = 0;
CDNSqlLen SqlLen;
#ifdef _SKY
int Version = 2;
#else
int Version = 1;
#endif
wchar_t username[IDLENMAX];
wchar_t password[PASSWORDLENMAX];
MultiByteToWideChar(CP_ACP, 0, pLogin->szAccountName, -1, username, IDLENMAX);
MultiByteToWideChar(CP_ACP, 0, pLogin->szPassword, -1, password, PASSWORDLENMAX);
memset(&m_wszQuery, 0, sizeof(m_wszQuery));
swprintf(m_wszQuery, L"{?=CALL dbo.__RLKT__CheckLogin(N'%s',N'%s',%d)}", username,password, Version);
RetCode = SQLPrepare(m_hstmt, m_wszQuery, SQL_NTSL);
if (CheckRetCode(RetCode, L"SQLPrepare") == ERROR_NONE)
{
int nNo = 1;
//SQLBindParameter(m_hstmt, nNo++, SQL_PARAM_INPUT, SQL_CHAR, SQL_VARCHAR, PUBLISHERORDERKEYMAX, 0, szContextKey, PUBLISHERORDERKEYMAX, SqlLen.GetNull(!pContextKey, PUBLISHERORDERKEYMAX));
//SQLBindParameter(m_hstmt, nNo++, SQL_PARAM_INPUT, SQL_INTEGER, SQL_INTEGER, sizeof(int), 0, &nPaidCashAmount, sizeof(int), SqlPaidLen.GetNull(nPaidCashAmount <= 0, sizeof(int)));
SQLBindParameter(m_hstmt, nNo++, SQL_PARAM_OUTPUT, SQL_INTEGER, SQL_INTEGER, sizeof(int), 0, &nResult, sizeof(int), &cblen );
// SQLBindParameter(m_hstmt, nNo++, SQL_PARAM_INPUT, SQL_CHAR, SQL_VARCHAR, strlen(pLogin->szAccountName), 0, pLogin->szAccountName, strlen(pLogin->szAccountName), SqlLen.GetNull(!pLogin->szAccountName,IDLENMAX));
// SQLBindParameter(m_hstmt, nNo++, SQL_PARAM_INPUT, SQL_CHAR, SQL_VARCHAR, strlen(pLogin->szPassword), 0, pLogin->szPassword, strlen(pLogin->szPassword), SqlLen.GetNull(!pLogin->szPassword,PASSWORDLENMAX));
// SQLBindParameter(m_hstmt, nNo++, SQL_PARAM_INPUT, SQL_INTEGER, SQL_INTEGER, sizeof(int), 0, &Version, sizeof(int), SqlLen.GetNull(Version <= 0, sizeof(int)));
RetCode = SQLExecute(m_hstmt);
if (CheckRetCode(RetCode, L"SQLExecute") != ERROR_NONE)
return ERROR_DB;
}
return nResult;
}
int CDNSQLMembership::QueryLogout(UINT nAccountDBID, UINT nSessionID, const BYTE * pMachineID/* = NULL*/)
{
CQueryTimeLog QueryTimeLog( "[Membership]P_Logout" );
if (CheckConnect() < ERROR_NONE)
{
g_Log.Log(LogType::_ERROR, 0, nAccountDBID, 0, nSessionID, L"[QueryLogout] CheckConnect Fail\r\n");
return ERROR_DB;
}
SQLRETURN RetCode;
SQLLEN cblen;
int nResult = ERROR_DB, sqlparam = 0;
CDNSqlLen SqlLen;
BYTE szMID[MACHINEIDMAX] = {0,};
if (pMachineID) memcpy_s(szMID, sizeof(szMID), pMachineID, MACHINEIDMAX);
int nMachineIDSize = sizeof(szMID);
memset(&m_wszQuery, 0, sizeof(m_wszQuery));
swprintf(m_wszQuery, L"{?=CALL dbo.P_Logout(%d,%d,?)}", nAccountDBID, nSessionID);
RetCode = SQLPrepare(m_hstmt, m_wszQuery, SQL_NTSL);
if (CheckRetCode(RetCode, L"SQLPrepare") == ERROR_NONE)
{
int nNo = 1;
SQLBindParameter(m_hstmt, nNo++, SQL_PARAM_OUTPUT, SQL_INTEGER, SQL_INTEGER, sizeof(int), 0, &nResult, sizeof(int), &cblen );
SQLBindParameter(m_hstmt, nNo++, SQL_PARAM_INPUT, SQL_BINARY, SQL_BINARY, sizeof(szMID), 0, szMID, sizeof(szMID), SqlLen.Get(nMachineIDSize));
RetCode = SQLExecute(m_hstmt);
if (CheckRetCode(RetCode, L"SQLExecute") != ERROR_NONE)
return ERROR_DB;
}
return nResult;
}
int CDNSQLMembership::QueryModLastConnectDate(UINT nAccountDBID)
{
CQueryTimeLog QueryTimeLog( "[Membership]P_ModLastConnectDate" );
memset(&m_wszQuery, 0, sizeof(m_wszQuery));
swprintf(m_wszQuery, L"{?=CALL dbo.P_ModLastConnectDate(%d)}", nAccountDBID);
return CommonReturnValueQuery(m_wszQuery);
}
int CDNSQLMembership::QueryAddAccountKey(UINT nAccountDBID, UINT nUserNo)
{
CQueryTimeLog QueryTimeLog( "[Membership]P_AddAccountKey" );
memset(&m_wszQuery, 0, sizeof(m_wszQuery));
swprintf(m_wszQuery, L"{?=CALL dbo.P_AddAccountKey(%d,%d)}", nAccountDBID, nUserNo);
return CommonReturnValueQuery(m_wszQuery);
}
int CDNSQLMembership::QueryAddRestraint( DBDNWorldDef::RestraintTargetCode::eCode TargetCode, UINT uiAccountDBID, INT64 biCharacterDBID, int iReasonID, DBDNWorldDef::RestraintTypeCode::eCode TypeCode, WCHAR* pwszMemo, WCHAR* pwszRestraintMsg, TIMESTAMP_STRUCT StartDate, TIMESTAMP_STRUCT EndDate )
{
CQueryTimeLog QueryTimeLog( "[Membership]P_AddRestraint" );
if (CheckConnect() < ERROR_NONE)
{
g_Log.Log(LogType::_ERROR, 0, uiAccountDBID, biCharacterDBID, 0, L"[QueryAddRestraint] CheckConnect Fail\r\n");
return ERROR_DB;
}
SQLRETURN RetCode;
SQLLEN cblen;
CDNSqlLen SqlLen[2];
int nResult = ERROR_DB, sqlparam = 0, nRestraintID = 0;
swprintf(m_wszQuery, L"{?=CALL dbo.P_AddRestraint(%d,%d,%I64d,%d,%d,%d,N'%s',N'%s',?,?,?)}", TargetCode, uiAccountDBID, biCharacterDBID, iReasonID, TypeCode, 0, pwszMemo ? pwszMemo : L"", pwszRestraintMsg ? pwszRestraintMsg : L"" );
RetCode = SQLPrepare(m_hstmt, m_wszQuery, SQL_NTSL);
if (CheckRetCode(RetCode, L"SQLPrepare") == ERROR_NONE)
{
int nNo = 1;
SQLBindParameter(m_hstmt, nNo++, SQL_PARAM_OUTPUT, SQL_INTEGER, SQL_INTEGER, sizeof(int), 0, &nResult, sizeof(int), &cblen );
SQLBindParameter(m_hstmt, nNo++, SQL_PARAM_INPUT, SQL_C_TIMESTAMP, SQL_TIMESTAMP, SQL_TIMESTAMP_LEN, 0, &StartDate, sizeof(TIMESTAMP_STRUCT), SqlLen[0].Get(SQL_TIMESTAMP_LEN) );
SQLBindParameter(m_hstmt, nNo++, SQL_PARAM_INPUT, SQL_C_TIMESTAMP, SQL_TIMESTAMP, SQL_TIMESTAMP_LEN, 0, &EndDate, sizeof(TIMESTAMP_STRUCT), SqlLen[1].Get(SQL_TIMESTAMP_LEN) );
SQLBindParameter(m_hstmt, nNo++, SQL_PARAM_OUTPUT, SQL_INTEGER, SQL_INTEGER, sizeof(int), 0, &nRestraintID, sizeof(int), &cblen );
RetCode = SQLExecute(m_hstmt);
if (CheckRetCode(RetCode, L"SQLExecute") != ERROR_NONE)
return ERROR_DB;
}
return nResult;
}
#ifdef PRE_MOD_RESTRICT_IDENTITY_IP
int CDNSQLMembership::QueryAddBlockedIP(int nWorldID, UINT nAccountDBID, const char * pszIP)
{
CQueryTimeLog QueryTimeLog("P_AddBlockedIP");
if(CheckConnect() < 0) {
g_Log.Log(LogType::_ERROR, nWorldID, nAccountDBID, 0, 0, L"[QueryAddBlockedIP] Check Connect Fail\r\n");
return ERROR_DB;
}
SQLRETURN RetCode; // ODBC API ȣ<><C8A3><EFBFBD><EFBFBD>ȯ<EFBFBD><C8AF>
SQLLEN cbLen;
SQLLEN cbNull;
cbNull = SQL_NULL_DATA;
memset(&m_wszQuery, 0, sizeof(m_wszQuery));
swprintf(m_wszQuery, L"{?=CALL dbo.P_AddBlockedIP(N'%S',N'%S',255,N'',0,?,?)}", pszIP, pszIP);
int nResult = ERROR_DB;
RetCode = SQLPrepare(m_hstmt, m_wszQuery, SQL_NTSL);
if(CheckRetCode(RetCode, L"SQLPrepare") == ERROR_NONE)
{
SQL_TIMESTAMP_STRUCT JoinDate;
int nNo = 1;
SQLBindParameter(m_hstmt, nNo++, SQL_PARAM_OUTPUT, SQL_INTEGER, SQL_INTEGER, sizeof(int), 0, &nResult, sizeof(int), &cbLen);
SQLBindParameter(m_hstmt, nNo++, SQL_PARAM_INPUT, SQL_C_TIMESTAMP, SQL_TIMESTAMP, sizeof(SQL_TIMESTAMP_STRUCT), 0, &JoinDate, sizeof(SQL_TIMESTAMP_STRUCT), &cbNull);
SQLBindParameter(m_hstmt, nNo++, SQL_PARAM_INPUT, SQL_C_TIMESTAMP, SQL_TIMESTAMP, sizeof(SQL_TIMESTAMP_STRUCT), 0, &JoinDate, sizeof(SQL_TIMESTAMP_STRUCT), &cbNull);
RetCode = SQLExecute(m_hstmt);
CheckRetCode(RetCode, L"SQLExecute");
}
return nResult;
}
int CDNSQLMembership::QueryGetSimpleConfigValue(TASimpleConfig * pSimpleConfig)
{
if (pSimpleConfig == NULL)
return ERROR_DB;
CQueryTimeLog QueryTimeLog( "[Membership]P_GetListSimpleConfigValue" );
if (CheckConnect() < ERROR_NONE){
g_Log.Log(LogType::_ERROR, 0, 0, 0, 0, L"[QueryGetSimpleConfigValue] CheckConnect Fail\r\n");
return ERROR_DB;
}
SQLRETURN RetCode;
SQLLEN cblen;
int nResult = ERROR_DB;
memset(&m_wszQuery, 0, sizeof(m_wszQuery));
swprintf(m_wszQuery, L"{?=CALL dbo.P_GetListSimpleConfigValue}");
RetCode = SQLPrepare(m_hstmt, m_wszQuery, SQL_NTSL);
if (CheckRetCode(RetCode, L"SQLPrepare") == ERROR_NONE)
{
SQLBindParameter( m_hstmt, 1, SQL_PARAM_OUTPUT, SQL_INTEGER, SQL_INTEGER, sizeof(int), 0, &nResult, sizeof(int), &cblen );
RetCode = SQLExecute(m_hstmt);
if (CheckRetCode(RetCode, L"SQLExecute") == ERROR_NONE)
{
SimpleConfig::ConfigData ConfigData;
int nNo = 1;
SQLBindCol(m_hstmt, nNo++, SQL_TINYINT, &ConfigData.cCode, sizeof(char), &cblen);
SQLBindCol(m_hstmt, nNo++, SQL_INTEGER, &ConfigData.nValue, sizeof(int), &cblen);
CheckColumnCount(nNo, "[Membership]P_GetListSimpleConfigValue");
while(1)
{
memset(&ConfigData, 0, sizeof(SimpleConfig::ConfigData));
RetCode = SQLFetch(m_hstmt);
if (RetCode == SQL_NO_DATA){
nResult = ERROR_NONE;
break;
}
if ((CheckRetCode(RetCode, L"SQLFetch") < ERROR_NONE) &&(RetCode != SQL_SUCCESS_WITH_INFO)) break;
pSimpleConfig->Configs[pSimpleConfig->cCount] = ConfigData;
pSimpleConfig->cCount++;
if (pSimpleConfig->cCount >= SimpleConfig::ConfigDataCountMax)
{
nResult = ERROR_NONE;
break;
}
}
}
}
SQLCloseCursor(m_hstmt);
return nResult;
}
#endif //#ifdef PRE_MOD_RESTRICT_IDENTITY_IP
#ifdef PRE_ADD_SEETMAINTENANCEFLAG
int CDNSQLMembership::QuerySetMaintenanceFlag(int nFlag)
{
CQueryTimeLog QueryTimeLog( "[Membership]P_DRS_ModMaintenanceFlag" );
memset(&m_wszQuery, 0, sizeof(m_wszQuery));
swprintf(m_wszQuery, L"{?=CALL dbo.P_DRS_ModMaintenanceFlag(%d)}", nFlag);
return CommonResultQuery(m_wszQuery);
}
#endif //#ifdef PRE_ADD_SEETMAINTENANCEFLAG
int CDNSQLMembership::QueryGetListRestraintForAccount(UINT nAccountDBID, OUT std::vector<TRestraintForAccountAndCharacter> &VecRestraint)
{
CQueryTimeLog QueryTimeLog( "[Membership]P_GetListRestraintForAccount" );
if (CheckConnect() < ERROR_NONE){
g_Log.Log(LogType::_ERROR, 0, nAccountDBID, 0, 0, L"[QueryLogin] CheckConnect Fail\r\n");
return ERROR_DB;
}
SQLRETURN RetCode;
SQLLEN cblen;
int nResult = ERROR_DB;
VecRestraint.clear();
memset(&m_wszQuery, 0, sizeof(m_wszQuery));
swprintf(m_wszQuery, L"{?=CALL dbo.P_GetListRestraintForAccount(%d)}", nAccountDBID);
RetCode = SQLPrepare(m_hstmt, m_wszQuery, SQL_NTSL);
if (CheckRetCode(RetCode, L"SQLPrepare") == ERROR_NONE)
{
SQLBindParameter( m_hstmt, 1, SQL_PARAM_OUTPUT, SQL_INTEGER, SQL_INTEGER, sizeof(int), 0, &nResult, sizeof(int), &cblen );
RetCode = SQLExecute(m_hstmt);
if (CheckRetCode(RetCode, L"SQLExecute") == ERROR_NONE)
{
TRestraintForAccountAndCharacter Restraint = { 0, };
TIMESTAMP_STRUCT StartDate, EndDate;
int nNo = 1;
SQLBindCol(m_hstmt, nNo++, SQL_TINYINT, &Restraint.cLevelCode, sizeof(char), &cblen);
SQLBindCol(m_hstmt, nNo++, SQL_INTEGER, &Restraint.iReasonID, sizeof(int), &cblen);
SQLBindCol(m_hstmt, nNo++, SQL_WCHAR, Restraint.wszRestraintReason, sizeof(WCHAR) * RESTRAINTREASONMAX, &cblen);
SQLBindCol(m_hstmt, nNo++, SQL_TIMESTAMP, &StartDate, sizeof(TIMESTAMP_STRUCT), &cblen);
SQLBindCol(m_hstmt, nNo++, SQL_TIMESTAMP, &EndDate, sizeof(TIMESTAMP_STRUCT), &cblen);
CheckColumnCount(nNo, "[Membership]P_GetListRestraintForAccount");
while(1)
{
memset(&Restraint, 0, sizeof(Restraint));
memset(&StartDate, 0, sizeof(StartDate));
memset(&EndDate, 0, sizeof(EndDate));
RetCode = SQLFetch(m_hstmt);
if (RetCode == SQL_NO_DATA){
nResult = ERROR_NONE;
break;
}
if ((CheckRetCode(RetCode, L"SQLFetch") < ERROR_NONE) &&(RetCode != SQL_SUCCESS_WITH_INFO)) break;
CTimeParamSet StartTime(&QueryTimeLog, Restraint._tStartDate, StartDate, 0, nAccountDBID);
CTimeParamSet EndTime(&QueryTimeLog, Restraint._tEndDate, EndDate, 0, nAccountDBID);
if (!StartTime.IsValid())
{
nResult = ERROR_DB;
break;
}
if (!EndTime.IsValid())
{
nResult = ERROR_DB;
break;
}
VecRestraint.push_back(Restraint);
}
}
}
SQLCloseCursor(m_hstmt);
return nResult;
}
int CDNSQLMembership::QueryGetListRestraintForCharacter(INT64 biCharacterDBID, OUT std::vector<TRestraintForAccountAndCharacter> &VecRestraint)
{
CQueryTimeLog QueryTimeLog( "[Membership]QueryGetListRestraintFotCharacter" );
if (CheckConnect() < ERROR_NONE){
g_Log.Log(LogType::_ERROR, 0, 0, biCharacterDBID, 0, L"[QueryLogin] CheckConnect Fail\r\n");
return ERROR_DB;
}
SQLRETURN RetCode;
SQLLEN cblen;
int nResult = ERROR_DB;
VecRestraint.clear();
memset(&m_wszQuery, 0, sizeof(m_wszQuery));
swprintf(m_wszQuery, L"{?=CALL dbo.P_GetListRestraintForCharacter(%I64d)}", biCharacterDBID);
RetCode = SQLPrepare(m_hstmt, m_wszQuery, SQL_NTSL);
if (CheckRetCode(RetCode, L"SQLPrepare") == ERROR_NONE)
{
SQLBindParameter( m_hstmt, 1, SQL_PARAM_OUTPUT, SQL_INTEGER, SQL_INTEGER, sizeof(int), 0, &nResult, sizeof(int), &cblen );
RetCode = SQLExecute(m_hstmt);
if (CheckRetCode(RetCode, L"SQLExecute") == ERROR_NONE)
{
TRestraintForAccountAndCharacter Restraint = { 0, };
TIMESTAMP_STRUCT StartDate, EndDate;
int nNo = 1;
SQLBindCol(m_hstmt, nNo++, SQL_TINYINT, &Restraint.cLevelCode, sizeof(char), &cblen);
SQLBindCol(m_hstmt, nNo++, SQL_INTEGER, &Restraint.iReasonID, sizeof(int), &cblen);
SQLBindCol(m_hstmt, nNo++, SQL_WCHAR, Restraint.wszRestraintReason, sizeof(WCHAR) * RESTRAINTREASONMAX, &cblen);
SQLBindCol(m_hstmt, nNo++, SQL_TIMESTAMP, &StartDate, sizeof(TIMESTAMP_STRUCT), &cblen);
SQLBindCol(m_hstmt, nNo++, SQL_TIMESTAMP, &EndDate, sizeof(TIMESTAMP_STRUCT), &cblen);
CheckColumnCount(nNo, "[Membership]P_GetListRestraintForCharacter");
while(1)
{
memset(&Restraint, 0, sizeof(Restraint));
memset(&StartDate, 0, sizeof(StartDate));
memset(&EndDate, 0, sizeof(EndDate));
RetCode = SQLFetch(m_hstmt);
if (RetCode == SQL_NO_DATA){
nResult = ERROR_NONE;
break;
}
if ((CheckRetCode(RetCode, L"SQLFetch") < ERROR_NONE) &&(RetCode != SQL_SUCCESS_WITH_INFO)) break;
CTimeParamSet StartTime(&QueryTimeLog, Restraint._tStartDate, StartDate, 0, 0, biCharacterDBID);
CTimeParamSet EndTime(&QueryTimeLog, Restraint._tEndDate, EndDate, 0, 0, biCharacterDBID);
if (!StartTime.IsValid())
{
nResult = ERROR_DB;
break;
}
if (!EndTime.IsValid())
{
nResult = ERROR_DB;
break;
}
VecRestraint.push_back(Restraint);
}
}
}
SQLCloseCursor(m_hstmt);
return nResult;
}
int CDNSQLMembership::QueryGetGameOption(UINT nAccountDBID, OUT TGameOptions &Options)
{
CQueryTimeLog QueryTimeLog( "[Membership]P_GetGameOption" );
if (CheckConnect() < ERROR_NONE){
g_Log.Log(LogType::_ERROR, 0, nAccountDBID, 0, 0, L"[QueryGetGameOption] CheckConnect Fail\r\n");
return ERROR_DB;
}
SQLRETURN RetCode;
SQLLEN cblen;
int nResult = ERROR_DB;
int nSize = (int)sizeof(TGameOptions);
memset(&m_wszQuery, 0, sizeof(m_wszQuery));
swprintf(m_wszQuery, L"{?=CALL dbo.P_GetGameOption(%d,?)}", nAccountDBID);
RetCode = SQLPrepare(m_hstmt, m_wszQuery, SQL_NTSL);
if (CheckRetCode(RetCode, L"SQLPrepare") == ERROR_NONE)
{
int nNo = 1;
SQLBindParameter(m_hstmt, nNo++, SQL_PARAM_OUTPUT, SQL_INTEGER, SQL_INTEGER, sizeof(int), 0, &nResult, sizeof(int), &cblen);
cblen = SQL_LEN_DATA_AT_EXEC(nSize);
SQLBindParameter(m_hstmt, nNo++, SQL_PARAM_OUTPUT, SQL_BINARY, SQL_BINARY, sizeof(TGameOptions), 0, &Options, sizeof(TGameOptions), &cblen);
RetCode = SQLExecute(m_hstmt);
CheckRetCode(RetCode, L"SQLExecute");
}
return nResult;
}
int CDNSQLMembership::QueryModGameOption(UINT nAccountDBID, TGameOptions &Options)
{
CQueryTimeLog QueryTimeLog( "[Membership]P_ModGameOption" );
if (CheckConnect() < ERROR_NONE){
g_Log.Log(LogType::_ERROR, 0, nAccountDBID, 0, 0, L"[QueryModGameOption] CheckConnect Fail\r\n");
return ERROR_DB;
}
SQLRETURN RetCode;
SQLLEN cblen;
int nResult = ERROR_DB;
int nSize = sizeof(TGameOptions);
memset(&m_wszQuery, 0, sizeof(m_wszQuery));
swprintf(m_wszQuery, L"{?=CALL dbo.P_ModGameOption(%d,?)}", nAccountDBID);
RetCode = SQLPrepare(m_hstmt, m_wszQuery, SQL_NTSL);
if (CheckRetCode(RetCode, L"SQLPrepare") == ERROR_NONE)
{
int nNo = 1;
SQLBindParameter(m_hstmt, nNo++, SQL_PARAM_OUTPUT, SQL_INTEGER, SQL_INTEGER, sizeof(int), 0, &nResult, sizeof(int), &cblen);
cblen = SQL_LEN_DATA_AT_EXEC(nSize);
SQLBindParameter(m_hstmt, nNo++, SQL_PARAM_INPUT, SQL_BINARY, SQL_BINARY, nSize, 0, &Options, nSize, &cblen);
RetCode = SQLExecute(m_hstmt);
if (CheckRetCode(RetCode, L"SQLExecute") == ERROR_NONE)
{
SQLPOINTER pParam;
while(RetCode == SQL_NEED_DATA)
{
RetCode = SQLParamData(m_hstmt, &pParam);
if (RetCode == SQL_NEED_DATA)
{
if (pParam == &Options)
SQLPutData(m_hstmt, pParam, nSize);
}
}
}
}
return nResult;
}
int CDNSQLMembership::QueryAddCharacter(UINT nAccountDBID, WCHAR *pCharName, int nWorldID, int nDefaultMaxCharacterCountPerAccount, OUT INT64 &biCharacterDBID, OUT TIMESTAMP_STRUCT &CreateDate)
{
CQueryTimeLog QueryTimeLog( "[Membership]P_AddCharacter" );
if (CheckConnect() < ERROR_NONE){
g_Log.Log(LogType::_ERROR, 0, nAccountDBID, 0, 0, L"[QueryAddCharacter] CheckConnect Fail\r\n");
return ERROR_DB;
}
SQLRETURN RetCode;
SQLLEN cblen;
int nResult = ERROR_DB;
memset(&m_wszQuery, 0, sizeof(m_wszQuery));
#if defined(PRE_MOD_SELECT_CHAR)
swprintf(m_wszQuery, L"{?=CALL dbo.P_AddCharacter(%d,N'%s',%d,%d,?,%d,%d,?)}", nAccountDBID, pCharName, nWorldID, DELETECHAR_WAITTIME_MINUTE, 1, nDefaultMaxCharacterCountPerAccount);
#else // #if defined(PRE_MOD_SELECT_CHAR)
#if defined( PRE_ADD_DWC )
swprintf(m_wszQuery, L"{?=CALL dbo.P_AddCharacter(%d,N'%s',%d,%d,?,%d,%d)}", nAccountDBID, pCharName, nWorldID, DELETECHAR_WAITTIME_MINUTE, 0, nDefaultMaxCharacterCountPerAccount);
#else // #if defined( PRE_ADD_DWC )
swprintf(m_wszQuery, L"{?=CALL dbo.P_AddCharacter(%d,N'%s',%d,%d,?)}", nAccountDBID, pCharName, nWorldID, DELETECHAR_WAITTIME_MINUTE );
#endif // #if defined( PRE_ADD_DWC )
#endif // #if defined(PRE_MOD_SELECT_CHAR)
RetCode = SQLPrepare(m_hstmt, m_wszQuery, SQL_NTSL);
if (CheckRetCode(RetCode, L"SQLPrepare") == ERROR_NONE)
{
int nNo = 1;
SQLBindParameter(m_hstmt, nNo++, SQL_PARAM_OUTPUT, SQL_INTEGER, SQL_INTEGER, sizeof(int), 0, &nResult, sizeof(int), &cblen);
SQLBindParameter(m_hstmt, nNo++, SQL_PARAM_OUTPUT, SQL_C_SBIGINT, SQL_BIGINT, sizeof(INT64), 0, &biCharacterDBID, sizeof(INT64), &cblen);
SQLBindParameter(m_hstmt, nNo++, SQL_PARAM_OUTPUT, SQL_C_TIMESTAMP, SQL_TIMESTAMP, sizeof(TIMESTAMP_STRUCT), 0, &CreateDate, sizeof(TIMESTAMP_STRUCT), &cblen);
RetCode = SQLExecute(m_hstmt);
CheckRetCode(RetCode, L"SQLExecute");
}
return nResult;
}
int CDNSQLMembership::QueryRollbackAddCharacter(INT64 biCharacterDBID)
{
CQueryTimeLog QueryTimeLog( "[Membership]P_RollbackAddCharacter" );
memset(&m_wszQuery, 0, sizeof(m_wszQuery));
swprintf(m_wszQuery, L"{?=CALL dbo.P_RollbackAddCharacter(%I64d)}", biCharacterDBID);
return CommonReturnValueQuery(m_wszQuery);
}
int CDNSQLMembership::QueryDelCharacter(INT64 biCharacterDBID, WCHAR *pPrivateIp, WCHAR *pPublicIp, bool bFirstVillage, TIMESTAMP_STRUCT& DeleteDate )
{
CQueryTimeLog QueryTimeLog( "[Membership]P_DelCharacter" );
if (CheckConnect() < ERROR_NONE){
g_Log.Log(LogType::_ERROR, 0, 0, biCharacterDBID, 0, L"[QueryDelCharacter] CheckConnect Fail\r\n");
return ERROR_DB;
}
SQLRETURN RetCode;
SQLLEN cblen;
CDNSqlLen SqlLen;
int nResult = ERROR_DB, sqlparam = 0;
swprintf(m_wszQuery, L"{?=CALL dbo.P_DelCharacter(%I64d,N'%s',N'%s',%d,?)}", biCharacterDBID, pPrivateIp, pPublicIp, bFirstVillage);
RetCode = SQLPrepare(m_hstmt, m_wszQuery, SQL_NTSL);
if (CheckRetCode(RetCode, L"SQLPrepare") == ERROR_NONE)
{
int nNo = 1;
SQLBindParameter(m_hstmt, nNo++, SQL_PARAM_OUTPUT, SQL_INTEGER, SQL_INTEGER, sizeof(int), 0, &nResult, sizeof(int), &cblen );
SQLBindParameter(m_hstmt, nNo++, SQL_PARAM_INPUT, SQL_C_TIMESTAMP, SQL_TIMESTAMP, SQL_TIMESTAMP_LEN, 0, &DeleteDate, sizeof(TIMESTAMP_STRUCT), SqlLen.Get(SQL_TIMESTAMP_LEN));
RetCode = SQLExecute(m_hstmt);
if (CheckRetCode(RetCode, L"SQLExecute") != ERROR_NONE)
return ERROR_DB;
}
return nResult;
}
int CDNSQLMembership::QueryReviveCharacter( INT64 biCharacterDBID, WCHAR* wszPrivateIP, WCHAR* wszPublicIP )
{
CQueryTimeLog QueryTimeLog( "[Membership]P_ReviveCharacter" );
memset(&m_wszQuery, 0, sizeof(m_wszQuery));
swprintf(m_wszQuery, L"{?=CALL dbo.P_ReviveCharacter(%I64d,N'%s',N'%s')}", biCharacterDBID, wszPrivateIP, wszPublicIP );
return CommonReturnValueQuery(m_wszQuery);
}
int CDNSQLMembership::QueryGetKeySettingOption( UINT uiAccountDBID, TKeySetting* pKeySetting )
{
CQueryTimeLog QueryTimeLog( "[Membership]P_GetKeySettingOption" );
if ( CheckConnect() < ERROR_NONE )
{
g_Log.Log(LogType::_ERROR, 0, uiAccountDBID, 0, 0, L"[QueryGetKeySettingOption] CheckConnect Fail\r\n");
return ERROR_DB;
}
int iRet = ERROR_DB;
memset(&m_wszQuery, 0, sizeof(m_wszQuery));
swprintf(m_wszQuery, L"{?=CALL dbo.P_GetKeySettingOption(%d,?)}", uiAccountDBID );
SQLRETURN RetCode = SQLPrepare( m_hstmt, m_wszQuery, SQL_NTSL );
if ( CheckRetCode( RetCode, L"SQLPrepare" ) == ERROR_NONE )
{
SQLLEN cblen;
int iSize = sizeof(TKeySetting);
int nNo = 1;
SQLBindParameter( m_hstmt, nNo++, SQL_PARAM_OUTPUT, SQL_INTEGER, SQL_INTEGER, sizeof(int), 0, &iRet, sizeof(int), &cblen );
cblen = SQL_LEN_DATA_AT_EXEC(iSize);
SQLBindParameter( m_hstmt, nNo++, SQL_PARAM_OUTPUT, SQL_BINARY, SQL_BINARY, iSize, 0, pKeySetting, iSize, &cblen );
RetCode = SQLExecute(m_hstmt);
CheckRetCode(RetCode, L"SQLExecute");
}
return iRet;
}
int CDNSQLMembership::QueryModKeySettingOption( TQModKeySettingOption* pQ, TAModKeySettingOption* pA )
{
CQueryTimeLog QueryTimeLog( "[Membership]P_ModKeySettingOption" );
if ( CheckConnect() < ERROR_NONE )
{
g_Log.Log(LogType::_ERROR, pQ->cWorldSetID, pQ->nAccountDBID, 0, 0, "[QueryModKeySettingOption] CheckConnect Fail\r\n");
return ERROR_DB;
}
int iRet = ERROR_DB;
memset( &m_wszQuery, 0, sizeof(m_wszQuery) );
swprintf( m_wszQuery, L"{?=CALL dbo.P_ModKeySettingOption(%d,?)}", pQ->nAccountDBID );
SQLRETURN RetCode = SQLPrepare( m_hstmt, m_wszQuery, SQL_NTSL );
if ( CheckRetCode( RetCode, L"SQLPrepare" ) == ERROR_NONE )
{
SQLLEN cblen;
int iSize = sizeof(TKeySetting);
int nNo = 1;
SQLBindParameter( m_hstmt, nNo++, SQL_PARAM_OUTPUT, SQL_INTEGER, SQL_INTEGER, sizeof(int), 0, &iRet, sizeof(int), &cblen );
cblen = SQL_LEN_DATA_AT_EXEC(iSize);
SQLBindParameter( m_hstmt, nNo++, SQL_PARAM_INPUT, SQL_BINARY, SQL_BINARY, iSize, 0, &pQ->sKeySetting, iSize, &cblen );
RetCode = SQLExecute(m_hstmt);
if ( CheckRetCode( RetCode, L"SQLExecute" ) == ERROR_NONE )
{
SQLPOINTER pParam;
while( RetCode == SQL_NEED_DATA )
{
RetCode = SQLParamData( m_hstmt, &pParam );
if ( RetCode == SQL_NEED_DATA )
{
if ( pParam == &pQ->sKeySetting )
{
if ( pQ->bUseDefault )
{
SQLPutData( m_hstmt, pParam, SQL_NULL_DATA );
}
else
{
SQLPutData( m_hstmt, pParam, iSize );
}
}
}
}
}
}
return iRet;
}
int CDNSQLMembership::QueryGetPadSettingOption( UINT uiAccountDBID, TPadSetting* pPadSetting )
{
CQueryTimeLog QueryTimeLog( "[Membership]P_GetGamePadOption" );
if ( CheckConnect() < ERROR_NONE )
{
g_Log.Log(LogType::_ERROR, 0, uiAccountDBID, 0, 0, L"[QueryGetPadSettingOption] CheckConnect Fail\r\n");
return ERROR_DB;
}
int iRet = ERROR_DB;
memset(&m_wszQuery, 0, sizeof(m_wszQuery));
swprintf(m_wszQuery, L"{?=CALL dbo.P_GetGamePadOption(%d,?)}", uiAccountDBID );
SQLRETURN RetCode = SQLPrepare( m_hstmt, m_wszQuery, SQL_NTSL );
if( CheckRetCode( RetCode, L"SQLPrepare" ) == ERROR_NONE )
{
SQLLEN cblen;
int iSize = sizeof(TPadSetting);
int nNo = 1;
SQLBindParameter( m_hstmt, nNo++, SQL_PARAM_OUTPUT, SQL_INTEGER, SQL_INTEGER, sizeof(int), 0, &iRet, sizeof(int), &cblen );
cblen = SQL_LEN_DATA_AT_EXEC(iSize);
SQLBindParameter( m_hstmt, nNo++, SQL_PARAM_OUTPUT, SQL_BINARY, SQL_BINARY, iSize, 0, pPadSetting, iSize, &cblen );
RetCode = SQLExecute(m_hstmt);
CheckRetCode(RetCode, L"SQLExecute");
}
return iRet;
}
int CDNSQLMembership::QueryModPadSettingOption( TQModPadSettingOption* pQ, TAModPadSettingOption* pA )
{
CQueryTimeLog QueryTimeLog( "[Membership]P_ModGamePadOption" );
if( CheckConnect() < ERROR_NONE )
{
g_Log.Log(LogType::_ERROR, pQ->cWorldSetID, pQ->nAccountDBID, 0, 0, "[QueryModPadSettingOption] CheckConnect Fail\r\n");
return ERROR_DB;
}
int iRet = ERROR_DB;
memset( &m_wszQuery, 0, sizeof(m_wszQuery) );
swprintf( m_wszQuery, L"{?=CALL dbo.P_ModGamePadOption(%d,?)}", pQ->nAccountDBID );
SQLRETURN RetCode = SQLPrepare( m_hstmt, m_wszQuery, SQL_NTSL );
if( CheckRetCode( RetCode, L"SQLPrepare" ) == ERROR_NONE )
{
SQLLEN cblen;
int iSize = sizeof(TPadSetting);
int nNo = 1;
SQLBindParameter( m_hstmt, nNo++, SQL_PARAM_OUTPUT, SQL_INTEGER, SQL_INTEGER, sizeof(int), 0, &iRet, sizeof(int), &cblen );
cblen = SQL_LEN_DATA_AT_EXEC(iSize);
SQLBindParameter( m_hstmt, nNo++, SQL_PARAM_INPUT, SQL_BINARY, SQL_BINARY, iSize, 0, &pQ->sPadSetting, iSize, &cblen );
RetCode = SQLExecute(m_hstmt);
if( CheckRetCode( RetCode, L"SQLExecute" ) == ERROR_NONE )
{
SQLPOINTER pParam;
while( RetCode == SQL_NEED_DATA )
{
RetCode = SQLParamData( m_hstmt, &pParam );
if( RetCode == SQL_NEED_DATA )
{
if( pParam == &pQ->sPadSetting )
{
if( pQ->bUseDefault )
{
SQLPutData( m_hstmt, pParam, SQL_NULL_DATA );
}
else
{
SQLPutData( m_hstmt, pParam, iSize );
}
}
}
}
}
}
return iRet;
}
int CDNSQLMembership::QueryCheckPCRoomIP(char *pIp, bool &bPCbang, char &cPCbangGrade)
{
CQueryTimeLog QueryTimeLog( "[Membership]P_CheckPCRoomIP" );
if (CheckConnect() < ERROR_NONE)
{
g_Log.Log(LogType::_ERROR, 0, 0, 0, 0, L"[QueryCheckPCRoomIP] CheckConnect Fail\r\n");
return ERROR_DB;
}
SQLRETURN RetCode;
SQLLEN cblen;
int nResult = ERROR_DB;
swprintf(m_wszQuery, L"{?=CALL dbo.P_CheckPCRoomIP('%S',?,?)}", pIp);
RetCode = SQLPrepare(m_hstmt, m_wszQuery, SQL_NTSL);
if (CheckRetCode(RetCode, L"SQLPrepare") == ERROR_NONE)
{
int nNo = 1;
SQLBindParameter(m_hstmt, nNo++, SQL_PARAM_OUTPUT, SQL_INTEGER, SQL_INTEGER, sizeof(int), 0, &nResult, sizeof(int), &cblen);
SQLBindParameter(m_hstmt, nNo++, SQL_PARAM_OUTPUT, SQL_BIT, SQL_BIT, sizeof(bool), 0, &bPCbang, sizeof(bool), &cblen);
SQLBindParameter(m_hstmt, nNo++, SQL_PARAM_OUTPUT, SQL_TINYINT, SQL_TINYINT, sizeof(char), 0, &cPCbangGrade, sizeof(char), &cblen);
RetCode = SQLExecute(m_hstmt);
if (CheckRetCode(RetCode, L"SQLExecute") != ERROR_NONE)
return ERROR_DB;
}
return nResult;
}
int CDNSQLMembership::QueryGetNationalityCode(UINT nAccountDBID, OUT BYTE &cRegion)
{
CQueryTimeLog QueryTimeLog( "[Membership]P_GetNationalityCode" );
if (CheckConnect() < ERROR_NONE)
{
g_Log.Log(LogType::_ERROR, 0, nAccountDBID, 0, 0, L"[QueryGetNationalityCode] CheckConnect Fail\r\n");
return ERROR_DB;
}
SQLRETURN RetCode;
SQLLEN cblen;
int nResult = ERROR_DB;
swprintf(m_wszQuery, L"{?=CALL dbo.P_GetNationalityCode(%d,?)}", nAccountDBID);
RetCode = SQLPrepare(m_hstmt, m_wszQuery, SQL_NTSL);
if (CheckRetCode(RetCode, L"SQLPrepare") == ERROR_NONE)
{
int nNo = 1;
SQLBindParameter(m_hstmt, nNo++, SQL_PARAM_OUTPUT, SQL_INTEGER, SQL_INTEGER, sizeof(int), 0, &nResult, sizeof(int), &cblen);
SQLBindParameter(m_hstmt, nNo++, SQL_PARAM_OUTPUT, SQL_TINYINT, SQL_TINYINT, sizeof(char), 0, &cRegion, sizeof(char), &cblen);
RetCode = SQLExecute(m_hstmt);
if (CheckRetCode(RetCode, L"SQLExecute") != ERROR_NONE)
return ERROR_DB;
}
return nResult;
}
// Auth
int CDNSQLMembership::QueryBeginAuth(UINT uiAccountDBID, char& cCertifyingStep, int& nServerID, char& cWorldSetID, UINT& nSessionID, INT64& biCharacterDBID, LPCWSTR wszAccountName, LPCWSTR wszCharacterName, char cAccountLevel, BYTE bIsAdult, char nAge, BYTE nDailyCreateCount, int nPrmInt1)
{
CQueryTimeLog QueryTimeLog( "[Membership]Auth_BeginAuth" );
if (CheckConnect() < 0) {
g_Log.Log(LogType::_ERROR, 0, uiAccountDBID, 0, 0, L"[QueryBeginAuth] Check Connect Fail\r\n");
return ERROR_DB;
}
SQLRETURN RetCode;
SQLLEN cblen;
int nResult = 1; // SQL <20><><EFBFBD><EFBFBD> <20>߻<EFBFBD>
memset(&m_wszQuery, 0, sizeof(m_wszQuery));
swprintf(m_wszQuery, L"{?=CALL dbo.Auth_BeginAuth(%d,?,%d,?,?,%d,?,%I64d,?,N'%s',N'%s',%d,%d,%d,%d,%d,11)}",
uiAccountDBID, nServerID, nSessionID, biCharacterDBID, wszAccountName, wszCharacterName, cAccountLevel, bIsAdult, nAge, nDailyCreateCount, nPrmInt1);
RetCode = SQLPrepare(m_hstmt, m_wszQuery, SQL_NTSL);
if (CheckRetCode(RetCode, L"SQLPrepare") == ERROR_NONE){
SQLBindParameter(m_hstmt, 1, SQL_PARAM_OUTPUT, SQL_INTEGER, SQL_INTEGER, sizeof(int), 0, &nResult, sizeof(int), &cblen);
SQLBindParameter(m_hstmt, 2, SQL_PARAM_OUTPUT, SQL_TINYINT, SQL_TINYINT, sizeof(BYTE), 0, &cCertifyingStep, sizeof(BYTE), &cblen);
SQLBindParameter(m_hstmt, 3, SQL_PARAM_OUTPUT, SQL_INTEGER, SQL_INTEGER, sizeof(int), 0, &nServerID, sizeof(int), &cblen);
SQLBindParameter(m_hstmt, 4, SQL_PARAM_OUTPUT, SQL_TINYINT, SQL_TINYINT, sizeof(BYTE), 0, &cWorldSetID, sizeof(BYTE), &cblen);
SQLBindParameter(m_hstmt, 5, SQL_PARAM_OUTPUT, SQL_INTEGER, SQL_INTEGER, sizeof(int), 0, &nSessionID, sizeof(int), &cblen);
SQLBindParameter(m_hstmt, 6, SQL_PARAM_OUTPUT, SQL_C_SBIGINT, SQL_BIGINT, sizeof(INT64), 0, &biCharacterDBID, sizeof(INT64), &cblen);
RetCode = SQLExecute(m_hstmt);
if (CheckRetCode(RetCode, L"SQLExecute") == ERROR_NONE){
return nResult;
}
}
return nResult;
}
int CDNSQLMembership::QueryStoreAuth(UINT uiAccountDBID, INT64 biCertifyingKey, int nCurServerID, char cWorldSetID, UINT nSessionID, INT64 biCharacterDBID, LPCWSTR wszAccountName, LPCWSTR wszCharacterName, BYTE bIsAdult, char nAge, BYTE nDailyCreateCount, int nPrmInt1, char cLastServerType)
{
CQueryTimeLog QueryTimeLog( "[Membership]Auth_StoreAuth" );
if (CheckConnect() < 0) {
g_Log.Log(LogType::_ERROR, cWorldSetID, uiAccountDBID, biCharacterDBID, nSessionID, L"[QueryStoreAuth] Check Connect Fail\r\n");
return ERROR_DB;
}
SQLRETURN RetCode;
SQLLEN cblen;
int nResult = 1; // SQL <20><><EFBFBD><EFBFBD> <20>߻<EFBFBD>
memset(&m_wszQuery, 0, sizeof(m_wszQuery));
swprintf(m_wszQuery, L"{?=CALL dbo.Auth_StoreAuth(%d,%I64d,%d,%d,%d,%I64d,N'%s',N'%s',%d,%d,%d,%d,%d)}",
uiAccountDBID, biCertifyingKey, nCurServerID, cWorldSetID, nSessionID, biCharacterDBID, wszAccountName, wszCharacterName, bIsAdult, nAge, nDailyCreateCount, nPrmInt1, cLastServerType);
RetCode = SQLPrepare(m_hstmt, m_wszQuery, SQL_NTSL);
if (CheckRetCode(RetCode, L"SQLPrepare") == ERROR_NONE){
SQLBindParameter(m_hstmt, 1, SQL_PARAM_OUTPUT, SQL_INTEGER, SQL_INTEGER, sizeof(int), 0, &nResult, sizeof(int), &cblen);
RetCode = SQLExecute(m_hstmt);
if (CheckRetCode(RetCode, L"SQLExecute") == ERROR_NONE){
return nResult;
}
}
return ERROR_NONE;
}
int CDNSQLMembership::QueryCheckAuth(UINT uiAccountDBID, INT64 biCertifyingKey, int nCurServerID, OUT char& cWorldSetID, OUT UINT& nSessionID, OUT INT64& biCharacterDBID, OUT LPWSTR* wszAccountName, OUT LPWSTR* wszCharacterName, OUT char& cAccountLevel, OUT BYTE& bIsAdult, OUT char& nAge, OUT BYTE& nDailyCreateCount, OUT int& nPrmInt1, OUT char& cLastServerType)
{
CQueryTimeLog QueryTimeLog( "[Membership]Auth_CheckAuth" );
if (CheckConnect() < 0) {
g_Log.Log(LogType::_ERROR, 0, uiAccountDBID, 0, 0, L"[QueryCheckAuth] Check Connect Fail\r\n");
return ERROR_DB;
}
SQLRETURN RetCode;
SQLLEN cblen;
int nResult = 1; // SQL <20><><EFBFBD><EFBFBD> <20>߻<EFBFBD>
memset(&m_wszQuery, 0, sizeof(m_wszQuery));
swprintf(m_wszQuery, L"{?=CALL dbo.Auth_CheckAuth(%d,%I64d,%d,%d,?,?,?,?,?,?,?,?,?,?,?)}", uiAccountDBID, biCertifyingKey, nCurServerID, CHECKAUTHLIMITSEC);
RetCode = SQLPrepare(m_hstmt, m_wszQuery, SQL_NTSL);
if (CheckRetCode(RetCode, L"SQLPrepare") == ERROR_NONE){
SQLBindParameter(m_hstmt, 1, SQL_PARAM_OUTPUT, SQL_INTEGER, SQL_INTEGER, sizeof(int), 0, &nResult, sizeof(int), &cblen);
SQLBindParameter(m_hstmt, 2, SQL_PARAM_OUTPUT, SQL_TINYINT, SQL_TINYINT, sizeof(BYTE), 0, &cWorldSetID, sizeof(BYTE), &cblen);
SQLBindParameter(m_hstmt, 3, SQL_PARAM_OUTPUT, SQL_INTEGER, SQL_INTEGER, sizeof(int), 0, &nSessionID, sizeof(int), &cblen);
SQLBindParameter(m_hstmt, 4, SQL_PARAM_OUTPUT, SQL_C_SBIGINT, SQL_BIGINT, sizeof(INT64), 0, &biCharacterDBID, sizeof(INT64), &cblen);
SQLBindParameter(m_hstmt, 5, SQL_PARAM_OUTPUT, SQL_WCHAR, SQL_WVARCHAR, sizeof(WCHAR) * IDLENMAX, 0, wszAccountName, sizeof(WCHAR) * IDLENMAX, &cblen);
SQLBindParameter(m_hstmt, 6, SQL_PARAM_OUTPUT, SQL_WCHAR, SQL_WVARCHAR, sizeof(WCHAR) * NAMELENMAX, 0, wszCharacterName, sizeof(WCHAR) * NAMELENMAX, &cblen);
SQLBindParameter(m_hstmt, 7, SQL_PARAM_OUTPUT, SQL_TINYINT, SQL_TINYINT, sizeof(char), 0, &cAccountLevel, sizeof(char), &cblen);
SQLBindParameter(m_hstmt, 8, SQL_PARAM_OUTPUT, SQL_BIT, SQL_BIT, sizeof(BYTE), 0, &bIsAdult, sizeof(BYTE), &cblen);
SQLBindParameter(m_hstmt, 9, SQL_PARAM_OUTPUT, SQL_TINYINT, SQL_TINYINT, sizeof(char), 0, &nAge, sizeof(char), &cblen);
SQLBindParameter(m_hstmt, 10, SQL_PARAM_OUTPUT, SQL_TINYINT, SQL_TINYINT, sizeof(char), 0, &nDailyCreateCount, sizeof(char), &cblen);
SQLBindParameter(m_hstmt, 11, SQL_PARAM_OUTPUT, SQL_INTEGER, SQL_INTEGER, sizeof(int), 0, &nPrmInt1, sizeof(int), &cblen);
SQLBindParameter(m_hstmt, 12, SQL_PARAM_OUTPUT, SQL_TINYINT, SQL_TINYINT, sizeof(char), 0, &cLastServerType, sizeof(char), &cblen);
RetCode = SQLExecute(m_hstmt);
if (CheckRetCode(RetCode, L"SQLExecute") == ERROR_NONE){
return nResult;
}
}
return ERROR_NONE;
}
int CDNSQLMembership::QueryResetAuth(UINT uiAccountDBID, UINT nSessionID)
{
CQueryTimeLog QueryTimeLog( "[Membership]Auth_ResetAuth" );
int nResult = 1; // SQL <20><><EFBFBD><EFBFBD> <20>߻<EFBFBD>
memset(&m_wszQuery, 0, sizeof(m_wszQuery));
swprintf(m_wszQuery, L"{?=CALL dbo.Auth_ResetAuth(%d,%d)}", uiAccountDBID, nSessionID);
nResult = CommonResultQuery(m_wszQuery);
if (nResult != ERROR_NONE){
g_Log.Log(LogType::_ERROR, 0, uiAccountDBID, 0, nSessionID, L"[ADBID:%d] [Q:%s]\r\n", uiAccountDBID, m_wszQuery);
}
return nResult;
}
int CDNSQLMembership::QueryResetAuthServer(int nServerID)
{
CQueryTimeLog QueryTimeLog( "[Membership]Auth_ResetAuthServer" );
int nResult = 1; // SQL <20><><EFBFBD><EFBFBD> <20>߻<EFBFBD>
memset(&m_wszQuery, 0, sizeof(m_wszQuery));
swprintf(m_wszQuery, L"{?=CALL dbo.Auth_ResetAuthServer(%d)}", nServerID);
nResult = CommonResultQuery(m_wszQuery);
if (nResult != ERROR_NONE){
g_Log.Log(LogType::_ERROR, L"[Q:%s] W:%d\r\n", m_wszQuery, nServerID);
}
return nResult;
}
int CDNSQLMembership::QueryResetAuthByAccountWorld(UINT uiAccountDBID, char cWorldSetID, UINT nSessionID)
{
CQueryTimeLog QueryTimeLog( "[Membership]Auth_ResetAuthByAccountWorld" );
int nResult = 1; // SQL <20><><EFBFBD><EFBFBD> <20>߻<EFBFBD>
memset(&m_wszQuery, 0, sizeof(m_wszQuery));
swprintf(m_wszQuery, L"{?=CALL dbo.Auth_ResetAuthByAccountWorld(%d,%d,%d)}", uiAccountDBID, cWorldSetID, nSessionID);
nResult = CommonResultQuery(m_wszQuery);
if (nResult != ERROR_NONE){
g_Log.Log(LogType::_ERROR, cWorldSetID, uiAccountDBID, 0, nSessionID, L"[ADBID:%d] [Q:%s]\r\n", uiAccountDBID, m_wszQuery);
}
return nResult;
}
int CDNSQLMembership::QuerySetWorldIDAuth(char cWorldSetID, UINT nAccountDBID)
{
CQueryTimeLog QueryTimeLog( "[Membership]Auth_SetWorldID" );
int nResult = 1; // SQL <20><><EFBFBD><EFBFBD> <20>߻<EFBFBD>
memset(&m_wszQuery, 0, sizeof(m_wszQuery));
swprintf(m_wszQuery, L"{?=CALL dbo.Auth_SetWorldID(%d,%d)}", nAccountDBID, cWorldSetID);
nResult = CommonResultQuery(m_wszQuery);
if (nResult != ERROR_NONE){
g_Log.Log(LogType::_ERROR, cWorldSetID, nAccountDBID, 0, 0, L"[ADBID:%d] [Q:%s]\r\n", nAccountDBID, m_wszQuery);
}
return nResult;
}
// 2<><32> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
int CDNSQLMembership::QueryValidataSecondAuthPassphrase( UINT uiAccountDBID, const WCHAR* pwszPW, BYTE& cFailCount )
{
CQueryTimeLog QueryTimeLog( "[Membership]P_ValidateSecondAuthPassphrase" );
if( CheckConnect() < 0 )
{
g_Log.Log(LogType::_ERROR, 0, uiAccountDBID, 0, 0, L"[QueryValidataSecondAuthPassphrase] Check Connect Fail\r\n");
return ERROR_DB;
}
int nResult = ERROR_DB; // SQL <20><><EFBFBD><EFBFBD> <20>߻<EFBFBD>
memset( &m_wszQuery, 0, sizeof(m_wszQuery) );
swprintf(m_wszQuery, L"{?=CALL dbo.P_ValidateSecondAuthPassphrase(%d,N'%s',%d,?)}", uiAccountDBID, pwszPW, SecondAuth::Common::LimitCount );
SQLRETURN RetCode = SQLPrepare( m_hstmt, m_wszQuery, SQL_NTSL );
if( CheckRetCode(RetCode, L"SQLPrepare") == ERROR_NONE )
{
int nNo = 1;
SQLLEN cblen;
SQLBindParameter( m_hstmt, nNo++, SQL_PARAM_OUTPUT, SQL_INTEGER, SQL_INTEGER, sizeof(int), 0, &nResult, sizeof(int), &cblen );
SQLBindParameter( m_hstmt, nNo++, SQL_PARAM_OUTPUT, SQL_TINYINT, SQL_TINYINT, sizeof(char), 0, &cFailCount, sizeof(char), &cblen );
RetCode = SQLExecute(m_hstmt);
CheckRetCode( RetCode, L"SQLExecute" );
}
return nResult;
}
int CDNSQLMembership::QueryModSecondAuthPassphrase( UINT uiAccountDBID, const WCHAR* pwszOldPW, const WCHAR* pwszNewPW, BYTE& cFailCount )
{
CQueryTimeLog QueryTimeLog( "[Membership]P_ModSecondAuthPassphrase" );
if( CheckConnect() < 0 )
{
g_Log.Log(LogType::_ERROR, 0, uiAccountDBID, 0, 0, L"[QueryModSecondAuthPassphrase] Check Connect Fail\r\n");
return ERROR_DB;
}
int nResult = ERROR_DB; // SQL <20><><EFBFBD><EFBFBD> <20>߻<EFBFBD>
memset( &m_wszQuery, 0, sizeof(m_wszQuery) );
swprintf( m_wszQuery, L"{?=CALL dbo.P_ModSecondAuthPassphrase(%d,N'%s',N'%s',%d,?)}", uiAccountDBID, pwszOldPW, pwszNewPW, SecondAuth::Common::LimitCount );
SQLRETURN RetCode = SQLPrepare( m_hstmt, m_wszQuery, SQL_NTSL );
if( CheckRetCode(RetCode, L"SQLPrepare") == ERROR_NONE )
{
int nNo = 1;
SQLLEN cblen;
SQLBindParameter( m_hstmt, nNo++, SQL_PARAM_OUTPUT, SQL_INTEGER, SQL_INTEGER, sizeof(int), 0, &nResult, sizeof(int), &cblen );
SQLBindParameter( m_hstmt, nNo++, SQL_PARAM_OUTPUT, SQL_TINYINT, SQL_TINYINT, sizeof(char), 0, &cFailCount, sizeof(char), &cblen );
RetCode = SQLExecute(m_hstmt);
CheckRetCode( RetCode, L"SQLExecute" );
}
return nResult;
}
int CDNSQLMembership::QueryModSecondAuthLockFlag( UINT uiAccountDBID, bool bLock )
{
CQueryTimeLog QueryTimeLog( "[Membership]P_ModSecondAuthLockFlag" );
if( CheckConnect() < 0 )
{
g_Log.Log(LogType::_ERROR, 0, uiAccountDBID, 0, 0, L"[QueryModSecondAuthLockFlag] Check Connect Fail\r\n");
return ERROR_DB;
}
int nResult = ERROR_DB; // SQL <20><><EFBFBD><EFBFBD> <20>߻<EFBFBD>
memset( &m_wszQuery, 0, sizeof(m_wszQuery) );
swprintf( m_wszQuery, L"{?=CALL dbo.P_ModSecondAuthLockFlag(%d,%d)}", uiAccountDBID, bLock ? 1 : 0 );
SQLRETURN RetCode = SQLPrepare( m_hstmt, m_wszQuery, SQL_NTSL );
if( CheckRetCode(RetCode, L"SQLPrepare") == ERROR_NONE )
{
int nNo = 1;
SQLLEN cblen;
SQLBindParameter( m_hstmt, nNo++, SQL_PARAM_OUTPUT, SQL_INTEGER, SQL_INTEGER, sizeof(int), 0, &nResult, sizeof(int), &cblen );
RetCode = SQLExecute(m_hstmt);
CheckRetCode( RetCode, L"SQLExecute" );
}
return nResult;
}
int CDNSQLMembership::QueryGetSecondAuthStatus( UINT uiAccountDBID, bool& bSetPW, bool& bLock, __time64_t& tResetDate )
{
CQueryTimeLog QueryTimeLog( "[Membership]P_GetSecondAuthStatus" );
if( CheckConnect() < 0 )
{
g_Log.Log(LogType::_ERROR, 0, uiAccountDBID, 0, 0, L"[QueryGetSecondAuthStatus] Check Connect Fail\r\n");
return ERROR_DB;
}
int nResult = ERROR_DB; // SQL <20><><EFBFBD><EFBFBD> <20>߻<EFBFBD>
BYTE cSetPW, cLock;
TIMESTAMP_STRUCT ResetDate = {0,};
memset( &m_wszQuery, 0, sizeof(m_wszQuery) );
swprintf( m_wszQuery, L"{?=CALL dbo.P_GetSecondAuthStatus(%d,?,?)}", uiAccountDBID );
SQLRETURN RetCode = SQLPrepare( m_hstmt, m_wszQuery, SQL_NTSL );
if( CheckRetCode(RetCode, L"SQLPrepare") == ERROR_NONE )
{
int nNo = 1;
SQLLEN cblen;
SQLBindParameter( m_hstmt, nNo++, SQL_PARAM_OUTPUT, SQL_INTEGER, SQL_INTEGER, sizeof(int), 0, &nResult, sizeof(int), &cblen );
SQLBindParameter( m_hstmt, nNo++, SQL_PARAM_OUTPUT, SQL_TINYINT, SQL_TINYINT, sizeof(char), 0, &cSetPW, sizeof(char), &cblen );
SQLBindParameter( m_hstmt, nNo++, SQL_PARAM_OUTPUT, SQL_BIT, SQL_BIT, sizeof(BYTE), 0, &cLock, sizeof(BYTE), &cblen );
SQLBindParameter( m_hstmt, nNo++, SQL_PARAM_OUTPUT, SQL_C_TIMESTAMP, SQL_TIMESTAMP, sizeof(TIMESTAMP_STRUCT), 0, &ResetDate, sizeof(TIMESTAMP_STRUCT), &cblen);
RetCode = SQLExecute(m_hstmt);
CheckRetCode( RetCode, L"SQLExecute" );
}
if( nResult == ERROR_NONE )
{
bSetPW = (cSetPW == 3);
bLock = (cLock == 1);
CTimeParamSet ResetTime(&QueryTimeLog, tResetDate, ResetDate, 0, uiAccountDBID);
if (!ResetTime.IsValid()) return ERROR_DB;
}
return nResult;
}
int CDNSQLMembership::QueryInitSecondAuth( UINT uiAccountDBID )
{
CQueryTimeLog QueryTimeLog( "[Membership]P_InitSecondAuth" );
if( CheckConnect() < 0 )
{
g_Log.Log(LogType::_ERROR, 0, uiAccountDBID, 0, 0, L"[QueryInitSecondAuth] Check Connect Fail\r\n");
return ERROR_DB;
}
int nResult = ERROR_DB; // SQL <20><><EFBFBD><EFBFBD> <20>߻<EFBFBD>
memset( &m_wszQuery, 0, sizeof(m_wszQuery) );
swprintf( m_wszQuery, L"{?=CALL dbo.P_InitSecondAuth(%d)}", uiAccountDBID );
SQLRETURN RetCode = SQLPrepare( m_hstmt, m_wszQuery, SQL_NTSL );
if( CheckRetCode(RetCode, L"SQLPrepare") == ERROR_NONE )
{
int nNo = 1;
SQLLEN cblen;
SQLBindParameter( m_hstmt, nNo++, SQL_PARAM_OUTPUT, SQL_INTEGER, SQL_INTEGER, sizeof(int), 0, &nResult, sizeof(int), &cblen );
RetCode = SQLExecute(m_hstmt);
CheckRetCode( RetCode, L"SQLExecute" );
}
return nResult;
}
#if defined(PRE_ADD_SHA256)
int CDNSQLMembership::QueryValidataSecondAuthPassphraseByServer( UINT uiAccountDBID, const WCHAR* pszPW, BYTE& cFailCount )
{
CQueryTimeLog QueryTimeLog( "[Membership]P_ValidateSecondAuthPassphrase" );
if( CheckConnect() < 0 )
{
g_Log.Log(LogType::_ERROR, 0, uiAccountDBID, 0, 0, L"[QueryValidataSecondAuthPassphrase] Check Connect Fail\r\n");
return ERROR_DB;
}
int nResult = ERROR_DB; // SQL <20><><EFBFBD><EFBFBD> <20>߻<EFBFBD>
memset( &m_wszQuery, 0, sizeof(m_wszQuery) );
swprintf(m_wszQuery, L"{?=CALL dbo.P_ValidateSecondAuthPassphraseByServer(%d,?,%d,?)}", uiAccountDBID, SecondAuth::Common::LimitCount );
BYTE digest[SHA256_DIGEST_SIZE] = {0,};
char szKey[64] = {0,};
sprintf_s(szKey, "%u%SDRNEST", uiAccountDBID, pszPW);
SHA256Hash(szKey, (int)strlen(szKey), digest);
SQLRETURN RetCode = SQLPrepare( m_hstmt, m_wszQuery, SQL_NTSL );
if( CheckRetCode(RetCode, L"SQLPrepare") == ERROR_NONE )
{
int nNo = 1;
int iSize = sizeof(digest);
SQLLEN cblen;
CDNSqlLen SqlLen;
SQLBindParameter( m_hstmt, nNo++, SQL_PARAM_OUTPUT, SQL_INTEGER, SQL_INTEGER, sizeof(int), 0, &nResult, sizeof(int), &cblen );
SQLBindParameter(m_hstmt, nNo++, SQL_PARAM_INPUT, SQL_BINARY, SQL_BINARY, iSize, 0, digest, iSize, SqlLen.Get(iSize));
SQLBindParameter( m_hstmt, nNo++, SQL_PARAM_OUTPUT, SQL_TINYINT, SQL_TINYINT, sizeof(char), 0, &cFailCount, sizeof(char), &cblen );
RetCode = SQLExecute(m_hstmt);
CheckRetCode( RetCode, L"SQLExecute" );
}
return nResult;
}
int CDNSQLMembership::QueryModSecondAuthPassphraseByServer(UINT uiAccountDBID, const WCHAR* pszOldPW, const WCHAR* pszNewPW, BYTE& cFailCount )
{
CQueryTimeLog QueryTimeLog( "[Membership]P_ModSecondAuthPassphraseByServer" );
if( CheckConnect() < 0 )
{
g_Log.Log(LogType::_ERROR, 0, uiAccountDBID, 0, 0, L"[QueryModSecondAuthPassphraseByServer] Check Connect Fail\r\n");
return ERROR_DB;
}
int nResult = ERROR_DB; // SQL <20><><EFBFBD><EFBFBD> <20>߻<EFBFBD>
memset( &m_wszQuery, 0, sizeof(m_wszQuery) );
swprintf( m_wszQuery, L"{?=CALL dbo.P_ModSecondAuthPassphraseByServer(%d,?,?,%d,?)}", uiAccountDBID, SecondAuth::Common::LimitCount );
BYTE olddigest[SHA256_DIGEST_SIZE] = {0,};
BYTE newdigest[SHA256_DIGEST_SIZE] = {0,};
char szKey[64] = {0,};
sprintf_s(szKey, "%u%SDRNEST", uiAccountDBID, pszNewPW);
SHA256Hash(szKey, (int)strlen(szKey), newdigest);
if( wcslen(pszOldPW) > 0)
{
memset(szKey, 0, sizeof(szKey));
sprintf(szKey, "%u%SDRNEST", uiAccountDBID, pszOldPW);
SHA256Hash(szKey, (int)strlen(szKey), olddigest);
}
SQLRETURN RetCode = SQLPrepare( m_hstmt, m_wszQuery, SQL_NTSL );
if( CheckRetCode(RetCode, L"SQLPrepare") == ERROR_NONE )
{
int nNo = 1;
int iSize = sizeof(newdigest);
SQLLEN cblen;
CDNSqlLen SqlLen1, SqlLen2;
SQLBindParameter( m_hstmt, nNo++, SQL_PARAM_OUTPUT, SQL_INTEGER, SQL_INTEGER, sizeof(int), 0, &nResult, sizeof(int), &cblen );
SQLBindParameter(m_hstmt, nNo++, SQL_PARAM_INPUT, SQL_BINARY, SQL_BINARY, iSize, 0, olddigest, iSize, SqlLen1.Get(iSize));
SQLBindParameter(m_hstmt, nNo++, SQL_PARAM_INPUT, SQL_BINARY, SQL_BINARY, iSize, 0, newdigest, iSize, SqlLen2.Get(iSize));
SQLBindParameter( m_hstmt, nNo++, SQL_PARAM_OUTPUT, SQL_TINYINT, SQL_TINYINT, sizeof(char), 0, &cFailCount, sizeof(char), &cblen );
RetCode = SQLExecute(m_hstmt);
CheckRetCode( RetCode, L"SQLExecute" );
}
return nResult;
}
#endif // #if defined(PRE_ADD_SHA256)
#ifdef PRE_ADD_23829
int CDNSQLMembership::QueryCheckLastSecondAuthNotifyDate(UINT nAccountDBID, int nCheckPeriod)
{
CQueryTimeLog QueryTimeLog( "[Membership]P_CheckLastSecondAuthNotifyDate" );
if( CheckConnect() < 0 )
{
g_Log.Log(LogType::_ERROR, 0, nAccountDBID, 0, 0, L"[QueryCheckLastSecondAuthNotifyDate] Check Connect Fail\r\n");
return ERROR_DB;
}
int nResult = ERROR_DB; // SQL <20><><EFBFBD><EFBFBD> <20>߻<EFBFBD>
memset( &m_wszQuery, 0, sizeof(m_wszQuery) );
swprintf( m_wszQuery, L"{?=CALL dbo.P_CheckLastSecondAuthNotifyDate(%d, %d)}", nAccountDBID, nCheckPeriod );
SQLRETURN RetCode = SQLPrepare( m_hstmt, m_wszQuery, SQL_NTSL );
if( CheckRetCode(RetCode, L"SQLPrepare") == ERROR_NONE )
{
int nNo = 1;
SQLLEN cblen;
SQLBindParameter( m_hstmt, nNo++, SQL_PARAM_OUTPUT, SQL_INTEGER, SQL_INTEGER, sizeof(int), 0, &nResult, sizeof(int), &cblen );
RetCode = SQLExecute(m_hstmt);
CheckRetCode( RetCode, L"SQLExecute" );
}
return nResult;
}
int CDNSQLMembership::QueryModLastSecondAuthNotifyDate(UINT nAccountDBID)
{
CQueryTimeLog QueryTimeLog( "[Membership]P_ModLastSecondAuthNotifyDate" );
if( CheckConnect() < 0 )
{
g_Log.Log(LogType::_ERROR, 0, nAccountDBID, 0, 0, L"[QueryModLastSecondAuthNotifyDate] Check Connect Fail\r\n");
return ERROR_DB;
}
int nResult = ERROR_DB; // SQL <20><><EFBFBD><EFBFBD> <20>߻<EFBFBD>
memset( &m_wszQuery, 0, sizeof(m_wszQuery) );
swprintf( m_wszQuery, L"{?=CALL dbo.P_ModLastSecondAuthNotifyDate(%d)}", nAccountDBID );
SQLRETURN RetCode = SQLPrepare( m_hstmt, m_wszQuery, SQL_NTSL );
if( CheckRetCode(RetCode, L"SQLPrepare") == ERROR_NONE )
{
int nNo = 1;
SQLLEN cblen;
SQLBindParameter( m_hstmt, nNo++, SQL_PARAM_OUTPUT, SQL_INTEGER, SQL_INTEGER, sizeof(int), 0, &nResult, sizeof(int), &cblen );
RetCode = SQLExecute(m_hstmt);
CheckRetCode( RetCode, L"SQLExecute" );
}
return nResult;
}
#endif
int CDNSQLMembership::QueryCheckIntroducedAccount(UINT nAccountDBID, OUT bool &bCheckResult)
{
CQueryTimeLog QueryTimeLog( "[Membership]P_CheckIntroducedAccount" );
if (CheckConnect() < ERROR_NONE)
{
g_Log.Log(LogType::_ERROR, 0, nAccountDBID, 0, 0, L"[QueryCheckIntroducedAccount:%d] CheckConnect Fail\r\n", nAccountDBID);
return ERROR_DB;
}
SQLRETURN RetCode;
SQLLEN cblen;
int nResult = ERROR_DB;
memset(&m_wszQuery, 0, sizeof(m_wszQuery));
swprintf(m_wszQuery, L"{?=CALL dbo.P_CheckIntroducedAccount(%d,?)}", nAccountDBID);
RetCode = SQLPrepare(m_hstmt, m_wszQuery, SQL_NTSL);
if (CheckRetCode(RetCode, L"SQLPrepare") == ERROR_NONE)
{
int nNo = 1;
SQLBindParameter(m_hstmt, nNo++, SQL_PARAM_OUTPUT, SQL_INTEGER, SQL_INTEGER, sizeof(int), 0, &nResult, sizeof(int), &cblen );
SQLBindParameter(m_hstmt, nNo++, SQL_PARAM_OUTPUT, SQL_BIT, SQL_BIT, sizeof(bool), 0, &bCheckResult, sizeof(bool), &cblen );
RetCode = SQLExecute(m_hstmt);
if (CheckRetCode(RetCode, L"SQLExecute") != ERROR_NONE)
return ERROR_DB;
}
return nResult;
}
int CDNSQLMembership::QueryGetProduct(int nProductID, TCashCommodityData *Product)
{
CQueryTimeLog QueryTimeLog( "[Membership]P_GetProduct" );
if (CheckConnect() < ERROR_NONE){
g_Log.Log(LogType::_ERROR, L"[QueryGetProduct] CheckConnect Fail\r\n");
return ERROR_DB;
}
SQLRETURN RetCode;
SQLLEN cblen;
int nResult = ERROR_DB;
memset(&m_wszQuery, 0, sizeof(m_wszQuery));
swprintf(m_wszQuery, L"{?=CALL dbo.P_GetProduct(%d)}", nProductID);
RetCode = SQLPrepare(m_hstmt, m_wszQuery, SQL_NTSL);
if (CheckRetCode(RetCode, L"SQLPrepare") == ERROR_NONE){
SQLBindParameter( m_hstmt, 1, SQL_PARAM_OUTPUT, SQL_INTEGER, SQL_INTEGER, sizeof(int), 0, &nResult, sizeof(int), &cblen );
RetCode = SQLExecute(m_hstmt);
if (CheckRetCode(RetCode, L"SQLExecute") == ERROR_NONE){
//TCashCommodityData Product = { 0, };
//2010.10.7 haling STL <20><>ȣ <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ڷ<EFBFBD> <20><>ȯ
TCashCommodityData Product;
int nCategory = 0, nPeriod = 0, nPriority = 0;
WCHAR wszProductName[NAMELENMAX] = { 0, };
int nNo = 1;
SQLBindCol(m_hstmt, nNo++, SQL_INTEGER, &nCategory, sizeof(int), &cblen);
SQLBindCol(m_hstmt, nNo++, SQL_INTEGER, &Product.nSubCategory, sizeof(int), &cblen);
SQLBindCol(m_hstmt, nNo++, SQL_WCHAR, wszProductName, sizeof(WCHAR) * NAMELENMAX, &cblen);
SQLBindCol(m_hstmt, nNo++, SQL_INTEGER, &Product.nItemID[0], sizeof(int), &cblen);
SQLBindCol(m_hstmt, nNo++, SQL_INTEGER, &Product.nItemID[1], sizeof(int), &cblen);
SQLBindCol(m_hstmt, nNo++, SQL_INTEGER, &Product.nItemID[2], sizeof(int), &cblen);
SQLBindCol(m_hstmt, nNo++, SQL_INTEGER, &Product.nItemID[3], sizeof(int), &cblen);
SQLBindCol(m_hstmt, nNo++, SQL_INTEGER, &Product.nItemID[4], sizeof(int), &cblen);
SQLBindCol(m_hstmt, nNo++, SQL_INTEGER, &Product.nLinkSN[0], sizeof(int), &cblen);
SQLBindCol(m_hstmt, nNo++, SQL_INTEGER, &Product.nLinkSN[1], sizeof(int), &cblen);
SQLBindCol(m_hstmt, nNo++, SQL_INTEGER, &Product.nLinkSN[2], sizeof(int), &cblen);
SQLBindCol(m_hstmt, nNo++, SQL_INTEGER, &Product.nLinkSN[3], sizeof(int), &cblen);
SQLBindCol(m_hstmt, nNo++, SQL_INTEGER, &Product.nLinkSN[4], sizeof(int), &cblen);
SQLBindCol(m_hstmt, nNo++, SQL_INTEGER, &nPeriod, sizeof(int), &cblen);
SQLBindCol(m_hstmt, nNo++, SQL_INTEGER, &Product.nPrice, sizeof(int), &cblen);
SQLBindCol(m_hstmt, nNo++, SQL_INTEGER, &Product.nPriceFix, sizeof(int), &cblen);
SQLBindCol(m_hstmt, nNo++, SQL_INTEGER, &Product.nCount, sizeof(int), &cblen);
SQLBindCol(m_hstmt, nNo++, SQL_INTEGER, &nPriority, sizeof(int), &cblen);
SQLBindCol(m_hstmt, nNo++, SQL_BIT, &Product.bOnSale, sizeof(bool), &cblen);
SQLBindCol(m_hstmt, nNo++, SQL_BIT, &Product.bLimit, sizeof(bool), &cblen);
SQLBindCol(m_hstmt, nNo++, SQL_BIT, &Product.bReserveGive, sizeof(bool), &cblen);
SQLBindCol(m_hstmt, nNo++, SQL_INTEGER, &Product.nReserve, sizeof(int), &cblen);
SQLBindCol(m_hstmt, nNo++, SQL_INTEGER, &Product.nValidity, sizeof(int), &cblen);
SQLBindCol(m_hstmt, nNo++, SQL_BIT, &Product.bReserveAble, sizeof(bool), &cblen);
SQLBindCol(m_hstmt, nNo++, SQL_BIT, &Product.bPresentAble, sizeof(bool), &cblen);
SQLBindCol(m_hstmt, nNo++, SQL_BIT, &Product.bCartAble, sizeof(bool), &cblen);
CheckColumnCount(nNo, "[Membership]P_GetProduct");
RetCode = SQLFetch(m_hstmt);
if(RetCode == SQL_NO_DATA )
{
SQLCloseCursor(m_hstmt);
return nResult;
}
if (CheckRetCode(RetCode, L"SQLFetch") == ERROR_NONE){
Product.cCategory = nCategory;
Product.wPeriod = nPeriod;
Product.nPriority = nPriority;
}
}
}
SQLCloseCursor(m_hstmt);
return nResult;
}
#ifdef PRE_ADD_LIMITED_CASHITEM
int CDNSQLMembership::QueryAddPurchaseOrderByCash(INT64 biCharacterDBID, bool bPCBang, int nItemSN, int nPrice, int nLimitCount, int nSelectItemID, BYTE cSelectItemOption, int nLimitedItemMax, int nTotalPrice, char *pIp,
bool bGift, WCHAR *pReceiveCharacterName, WCHAR *pMemo, OUT INT64 &biPurchaseOrderID, OUT char* pPurchaseOrderDetailID, const char *pszRefundAbles, bool bCheatFlag )
#else //#ifdef PRE_ADD_LIMITED_CASHITEM
int CDNSQLMembership::QueryAddPurchaseOrderByCash(INT64 biCharacterDBID, bool bPCBang, int nItemSN, int nPrice, int nLimitCount, int nSelectItemID, BYTE cSelectItemOption, int nTotalPrice, char *pIp,
bool bGift, WCHAR *pReceiveCharacterName, WCHAR *pMemo, OUT INT64 &biPurchaseOrderID, OUT char* pPurchaseOrderDetailID, const char *pszRefundAbles, bool bCheatFlag )
#endif //#ifdef PRE_ADD_LIMITED_CASHITEM
{
CQueryTimeLog QueryTimeLog( "[Membership]P_AddPurchaseOrderByCash" );
if (CheckConnect() < ERROR_NONE){
g_Log.Log(LogType::_ERROR, 0, 0, biCharacterDBID, 0, L"[QueryAddPurchaseOrderByCash] CheckConnect Fail\r\n");
return ERROR_DB;
}
SQLRETURN RetCode;
SQLLEN cblen;
int nResult = ERROR_DB;
WCHAR wszReceiveName[NAMELENMAX * 2 + 1] = {0,}, wszMemo[GIFTMESSAGEMAX * 2 + 1] = {0,};
if (pReceiveCharacterName)
ConvertQuery(pReceiveCharacterName, NAMELENMAX, wszReceiveName, _countof(wszReceiveName));
if (pMemo)
ConvertQuery(pMemo, GIFTMESSAGEMAX, wszMemo, _countof(wszMemo));
memset(&m_wszQuery, 0, sizeof(m_wszQuery));
if( pszRefundAbles && pPurchaseOrderDetailID )
{
#ifdef PRE_ADD_LIMITED_CASHITEM
swprintf(m_wszQuery, L"{?=CALL dbo.P_AddPurchaseOrderByCash(%I64d,%d,'%d','%d','%d','%d',%d,'%S',%d,N'%s',N'%s',?,?,'%S',%d,'%d','%d')}",
biCharacterDBID, bPCBang, nItemSN, nPrice, nLimitCount, nSelectItemID, nTotalPrice, pIp, bGift, wszReceiveName, wszMemo, pszRefundAbles, bCheatFlag, cSelectItemOption, nLimitedItemMax);
#else //#ifdef PRE_ADD_LIMITED_CASHITEM
swprintf(m_wszQuery, L"{?=CALL dbo.P_AddPurchaseOrderByCash(%I64d,%d,'%d','%d','%d','%d',%d,'%S',%d,N'%s',N'%s',?,?,'%S',%d,'%d')}",
biCharacterDBID, bPCBang, nItemSN, nPrice, nLimitCount, nSelectItemID, nTotalPrice, pIp, bGift, wszReceiveName, wszMemo, pszRefundAbles, bCheatFlag, cSelectItemOption);
#endif //#ifdef PRE_ADD_LIMITED_CASHITEM
}
else if( !pszRefundAbles && !pPurchaseOrderDetailID )
{
#ifdef PRE_ADD_LIMITED_CASHITEM
swprintf(m_wszQuery, L"{?=CALL dbo.P_AddPurchaseOrderByCash(%I64d,%d,'%d','%d','%d','%d',%d,'%S',%d,N'%s',N'%s',?,NULL,NULL,%d,'%d','%d')}",
biCharacterDBID, bPCBang, nItemSN, nPrice, nLimitCount, nSelectItemID, nTotalPrice, pIp, bGift, wszReceiveName, wszMemo, bCheatFlag, cSelectItemOption, nLimitedItemMax);
#else //#ifdef PRE_ADD_LIMITED_CASHITEM
swprintf(m_wszQuery, L"{?=CALL dbo.P_AddPurchaseOrderByCash(%I64d,%d,'%d','%d','%d','%d',%d,'%S',%d,N'%s',N'%s',?,NULL,NULL,%d,'%d')}",
biCharacterDBID, bPCBang, nItemSN, nPrice, nLimitCount, nSelectItemID, nTotalPrice, pIp, bGift, wszReceiveName, wszMemo, bCheatFlag, cSelectItemOption);
#endif //#ifdef PRE_ADD_LIMITED_CASHITEM
}
else if( pszRefundAbles && !pPurchaseOrderDetailID )
{
#ifdef PRE_ADD_LIMITED_CASHITEM
swprintf(m_wszQuery, L"{?=CALL dbo.P_AddPurchaseOrderByCash(%I64d,%d,'%d','%d','%d','%d',%d,'%S',%d,N'%s',N'%s',?,NULL,'%S',%d,'%d','%d')}",
biCharacterDBID, bPCBang, nItemSN, nPrice, nLimitCount, nSelectItemID, nTotalPrice, pIp, bGift, wszReceiveName, wszMemo, pszRefundAbles, bCheatFlag, cSelectItemOption, nLimitedItemMax);
#else //#ifdef PRE_ADD_LIMITED_CASHITEM
swprintf(m_wszQuery, L"{?=CALL dbo.P_AddPurchaseOrderByCash(%I64d,%d,'%d','%d','%d','%d',%d,'%S',%d,N'%s',N'%s',?,NULL,'%S',%d,'%d')}",
biCharacterDBID, bPCBang, nItemSN, nPrice, nLimitCount, nSelectItemID, nTotalPrice, pIp, bGift, wszReceiveName, wszMemo, pszRefundAbles, bCheatFlag, cSelectItemOption);
#endif //#ifdef PRE_ADD_LIMITED_CASHITEM
}
else if( !pszRefundAbles && pPurchaseOrderDetailID )
{
#ifdef PRE_ADD_LIMITED_CASHITEM
swprintf(m_wszQuery, L"{?=CALL dbo.P_AddPurchaseOrderByCash(%I64d,%d,'%d','%d','%d','%d',%d,'%S',%d,N'%s',N'%s',?,?,NULL,%d,'%d','%d')}",
biCharacterDBID, bPCBang, nItemSN, nPrice, nLimitCount, nSelectItemID, nTotalPrice, pIp, bGift, wszReceiveName, wszMemo, bCheatFlag, cSelectItemOption, nLimitedItemMax);
#else //#ifdef PRE_ADD_LIMITED_CASHITEM
swprintf(m_wszQuery, L"{?=CALL dbo.P_AddPurchaseOrderByCash(%I64d,%d,'%d','%d','%d','%d',%d,'%S',%d,N'%s',N'%s',?,?,NULL,%d,'%d')}",
biCharacterDBID, bPCBang, nItemSN, nPrice, nLimitCount, nSelectItemID, nTotalPrice, pIp, bGift, wszReceiveName, wszMemo, bCheatFlag, cSelectItemOption);
#endif //#ifdef PRE_ADD_LIMITED_CASHITEM
}
CDNSqlLen SqlLen1;
RetCode = SQLPrepare(m_hstmt, m_wszQuery, SQL_NTSL);
if (CheckRetCode(RetCode, L"SQLPrepare") == ERROR_NONE)
{
int nNo = 1;
SQLBindParameter(m_hstmt, nNo++, SQL_PARAM_OUTPUT, SQL_INTEGER, SQL_INTEGER, sizeof(int), 0, &nResult, sizeof(int), &cblen);
SQLBindParameter(m_hstmt, nNo++, SQL_PARAM_OUTPUT, SQL_C_SBIGINT, SQL_BIGINT, sizeof(INT64), 0, &biPurchaseOrderID, sizeof(INT64), &cblen);
if( pPurchaseOrderDetailID )
SQLBindParameter(m_hstmt, nNo++, SQL_PARAM_OUTPUT, SQL_CHAR, SQL_VARCHAR, 64, 0, pPurchaseOrderDetailID, 64, SqlLen1.GetNull(!pPurchaseOrderDetailID, 64)); //<2F><><EFBFBD><EFBFBD> <20><>ǰ<EFBFBD>̿<EFBFBD>..<2E>׷<EFBFBD><D7B7><EFBFBD> 64
RetCode = SQLExecute(m_hstmt);
CheckRetCode(RetCode, L"SQLExecute");
}
#if defined(PRE_ADD_LIMITED_CASHITEM) && defined(_CASHSERVER)
if (nResult == ERROR_NONE && nLimitedItemMax > 0)
QueryGetLimitedItem();
#endif //#if defined(PRE_ADD_LIMITED_CASHITEM) && defined(_CASHSERVER)
return nResult;
}
int CDNSQLMembership::QueryAddPurchaseOrderByCash(INT64 biCharacterDBID, bool bPCBang, std::vector<string> &VecItemString, int nTotalPrice, char *pIp, bool bGift, WCHAR *pReceiveCharacterName, WCHAR *pMemo,
OUT INT64 &biPurchaseOrderID, OUT char* pPurchaseOrderDetailIDs/*=NULL*/, bool bCheatFlag/*=false*/)
{
CQueryTimeLog QueryTimeLog( "[Membership]P_AddPurchaseOrderByCash" );
if (CheckConnect() < ERROR_NONE){
g_Log.Log(LogType::_ERROR, 0, 0, biCharacterDBID, 0, L"[QueryAddPurchaseOrderByCash] CheckConnect Fail\r\n");
return ERROR_DB;
}
SQLRETURN RetCode;
SQLLEN cblen;
int nResult = ERROR_DB;
WCHAR wszReceiveName[NAMELENMAX * 2 + 1] = {0,}, wszMemo[GIFTMESSAGEMAX * 2 + 1] = {0,};
if (pReceiveCharacterName)
ConvertQuery(pReceiveCharacterName, NAMELENMAX, wszReceiveName, _countof(wszReceiveName));
if (pMemo)
ConvertQuery(pMemo, GIFTMESSAGEMAX, wszMemo, _countof(wszMemo));
memset(&m_wszQuery, 0, sizeof(m_wszQuery));
if( !(VecItemString[Append_Refundable].empty()) && pPurchaseOrderDetailIDs)
{
#ifdef PRE_ADD_LIMITED_CASHITEM
swprintf(m_wszQuery, L"{?=CALL dbo.P_AddPurchaseOrderByCash(%I64d,%d,'%S','%S','%S','%S',%d,'%S',%d,N'%s',N'%s',?,?,'%S',%d,'%S','%S')}",
biCharacterDBID, bPCBang, VecItemString[Append_ItemSN].c_str(), VecItemString[Append_Price].c_str(), VecItemString[Append_Limit].c_str(), VecItemString[Append_ItemID].c_str(),
nTotalPrice, pIp, bGift, wszReceiveName, wszMemo, VecItemString[Append_Refundable].c_str(), bCheatFlag, VecItemString[Append_Option].c_str(), VecItemString[Append_QuantityLimited].c_str());
#else //#ifdef PRE_ADD_LIMITED_CASHITEM
swprintf(m_wszQuery, L"{?=CALL dbo.P_AddPurchaseOrderByCash(%I64d,%d,'%S','%S','%S','%S',%d,'%S',%d,N'%s',N'%s',?,?,'%S',%d,'%S')}",
biCharacterDBID, bPCBang, VecItemString[Append_ItemSN].c_str(), VecItemString[Append_Price].c_str(), VecItemString[Append_Limit].c_str(), VecItemString[Append_ItemID].c_str(),
nTotalPrice, pIp, bGift, wszReceiveName, wszMemo, VecItemString[Append_Refundable].c_str(), bCheatFlag, VecItemString[Append_Option].c_str());
#endif //#ifdef PRE_ADD_LIMITED_CASHITEM
}
else if( VecItemString[Append_Refundable].empty() && !pPurchaseOrderDetailIDs )
{
#ifdef PRE_ADD_LIMITED_CASHITEM
swprintf(m_wszQuery, L"{?=CALL dbo.P_AddPurchaseOrderByCash(%I64d,%d,'%S','%S','%S','%S',%d,'%S',%d,N'%s',N'%s',?,NULL,NULL,%d,'%S','%S')}",
biCharacterDBID, bPCBang, VecItemString[Append_ItemSN].c_str(), VecItemString[Append_Price].c_str(), VecItemString[Append_Limit].c_str(), VecItemString[Append_ItemID].c_str(),
nTotalPrice, pIp, bGift, wszReceiveName, wszMemo, bCheatFlag, VecItemString[Append_Option].c_str(), VecItemString[Append_QuantityLimited].c_str());
#else //#ifdef PRE_ADD_LIMITED_CASHITEM
swprintf(m_wszQuery, L"{?=CALL dbo.P_AddPurchaseOrderByCash(%I64d,%d,'%S','%S','%S','%S',%d,'%S',%d,N'%s',N'%s',?,NULL,NULL,%d,'%S')}",
biCharacterDBID, bPCBang, VecItemString[Append_ItemSN].c_str(), VecItemString[Append_Price].c_str(), VecItemString[Append_Limit].c_str(), VecItemString[Append_ItemID].c_str(),
nTotalPrice, pIp, bGift, wszReceiveName, wszMemo, bCheatFlag, VecItemString[Append_Option].c_str());
#endif //#ifdef PRE_ADD_LIMITED_CASHITEM
}
else if( !(VecItemString[Append_Refundable].empty()) && !pPurchaseOrderDetailIDs )
{
#ifdef PRE_ADD_LIMITED_CASHITEM
swprintf(m_wszQuery, L"{?=CALL dbo.P_AddPurchaseOrderByCash(%I64d,%d,'%S','%S','%S','%S',%d,'%S',%d,N'%s',N'%s',?,NULL,'%S',%d,'%S','%S')}",
biCharacterDBID, bPCBang, VecItemString[Append_ItemSN].c_str(), VecItemString[Append_Price].c_str(), VecItemString[Append_Limit].c_str(), VecItemString[Append_ItemID].c_str(),
nTotalPrice, pIp, bGift, wszReceiveName, wszMemo, VecItemString[Append_Refundable].c_str(), bCheatFlag, VecItemString[Append_Option].c_str(), VecItemString[Append_QuantityLimited].c_str());
#else //#ifdef PRE_ADD_LIMITED_CASHITEM
swprintf(m_wszQuery, L"{?=CALL dbo.P_AddPurchaseOrderByCash(%I64d,%d,'%S','%S','%S','%S',%d,'%S',%d,N'%s',N'%s',?,NULL,'%S',%d,'%S')}",
biCharacterDBID, bPCBang, VecItemString[Append_ItemSN].c_str(), VecItemString[Append_Price].c_str(), VecItemString[Append_Limit].c_str(), VecItemString[Append_ItemID].c_str(),
nTotalPrice, pIp, bGift, wszReceiveName, wszMemo, VecItemString[Append_Refundable].c_str(), bCheatFlag, VecItemString[Append_Option].c_str());
#endif //#ifdef PRE_ADD_LIMITED_CASHITEM
}
else if( VecItemString[Append_Refundable].empty() && pPurchaseOrderDetailIDs )
{
#ifdef PRE_ADD_LIMITED_CASHITEM
swprintf(m_wszQuery, L"{?=CALL dbo.P_AddPurchaseOrderByCash(%I64d,%d,'%S','%S','%S','%S',%d,'%S',%d,N'%s',N'%s',?,?,NULL,%d,'%S','%S')}",
biCharacterDBID, bPCBang, VecItemString[Append_ItemSN].c_str(), VecItemString[Append_Price].c_str(), VecItemString[Append_Limit].c_str(), VecItemString[Append_ItemID].c_str(),
nTotalPrice, pIp, bGift, wszReceiveName, wszMemo, bCheatFlag, VecItemString[Append_Option].c_str(), VecItemString[Append_QuantityLimited].c_str());
#else //#ifdef PRE_ADD_LIMITED_CASHITEM
swprintf(m_wszQuery, L"{?=CALL dbo.P_AddPurchaseOrderByCash(%I64d,%d,'%S','%S','%S','%S',%d,'%S',%d,N'%s',N'%s',?,?,NULL,%d,'%S')}",
biCharacterDBID, bPCBang, VecItemString[Append_ItemSN].c_str(), VecItemString[Append_Price].c_str(), VecItemString[Append_Limit].c_str(), VecItemString[Append_ItemID].c_str(),
nTotalPrice, pIp, bGift, wszReceiveName, wszMemo, bCheatFlag, VecItemString[Append_Option].c_str());
#endif //#ifdef PRE_ADD_LIMITED_CASHITEM
}
CDNSqlLen SqlLen1;
RetCode = SQLPrepare(m_hstmt, m_wszQuery, SQL_NTSL);
if (CheckRetCode(RetCode, L"SQLPrepare") == ERROR_NONE)
{
int nNo = 1;
SQLBindParameter(m_hstmt, nNo++, SQL_PARAM_OUTPUT, SQL_INTEGER, SQL_INTEGER, sizeof(int), 0, &nResult, sizeof(int), &cblen);
SQLBindParameter(m_hstmt, nNo++, SQL_PARAM_OUTPUT, SQL_C_SBIGINT, SQL_BIGINT, sizeof(INT64), 0, &biPurchaseOrderID, sizeof(INT64), &cblen);
if( pPurchaseOrderDetailIDs )
SQLBindParameter(m_hstmt, nNo++, SQL_PARAM_OUTPUT, SQL_CHAR, SQL_VARCHAR, 1024, 0, pPurchaseOrderDetailIDs, 1024, SqlLen1.GetNull(!pPurchaseOrderDetailIDs, 1024));
RetCode = SQLExecute(m_hstmt);
CheckRetCode(RetCode, L"SQLExecute");
}
#if defined(PRE_ADD_LIMITED_CASHITEM) && defined(_CASHSERVER)
if (nResult == ERROR_NONE && atoi(VecItemString[Append_QuantityLimited].c_str()) > 0)
QueryGetLimitedItem();
#endif //#if defined(PRE_ADD_LIMITED_CASHITEM) && defined(_CASHSERVER)
return nResult;
}
int CDNSQLMembership::QuerySetPurchaseOrderResult(INT64 biPurchaseOrderID, char cOrderStatusCode, char *pOrderKey, int nOrderResult, int nPetalAmount, int nPaidCashAmount, char *pContextKey)
{
CQueryTimeLog QueryTimeLog( "[Membership]P_SetPurchaseOrderResult" );
if (CheckConnect() < ERROR_NONE){
g_Log.Log(LogType::_ERROR, L"[QuerySetPurchaseOrderResult] CheckConnect Fail\r\n");
return ERROR_DB;
}
SQLRETURN RetCode;
SQLLEN cblen;
CDNSqlLen SqlLen, SqlPaidLen;
char szContextKey[PUBLISHERORDERKEYMAX] = { 0, };
if (pContextKey)
_strcpy(szContextKey, _countof(szContextKey), pContextKey, (int)strlen(pContextKey));
int nResult = ERROR_DB;
memset(&m_wszQuery, 0, sizeof(m_wszQuery));
swprintf(m_wszQuery, L"{?=CALL dbo.P_SetPurchaseOrderResult(%I64d,%d,'%S',%d,%d,?,?)}", biPurchaseOrderID, cOrderStatusCode, pOrderKey, nOrderResult, nPetalAmount);
RetCode = SQLPrepare(m_hstmt, m_wszQuery, SQL_NTSL);
if (CheckRetCode(RetCode, L"SQLPrepare") == ERROR_NONE)
{
int nNo = 1;
SQLBindParameter(m_hstmt, nNo++, SQL_PARAM_OUTPUT, SQL_INTEGER, SQL_INTEGER, sizeof(int), 0, &nResult, sizeof(int), &cblen);
SQLBindParameter(m_hstmt, nNo++, SQL_PARAM_INPUT, SQL_CHAR, SQL_VARCHAR, PUBLISHERORDERKEYMAX, 0, szContextKey, PUBLISHERORDERKEYMAX, SqlLen.GetNull(!pContextKey, PUBLISHERORDERKEYMAX));
SQLBindParameter(m_hstmt, nNo++, SQL_PARAM_INPUT, SQL_INTEGER, SQL_INTEGER, sizeof(int), 0, &nPaidCashAmount, sizeof(int), SqlPaidLen.GetNull(nPaidCashAmount <= 0, sizeof(int)));
RetCode = SQLExecute(m_hstmt);
CheckRetCode(RetCode, L"SQLExecute");
}
return nResult;
}
int CDNSQLMembership::QueryRollbackPurchaseOrderByCash(INT64 biPurchaseOrderID, OUT char *pOrderKey, OUT int &nProductID)
{
CQueryTimeLog QueryTimeLog( "[Membership]P_RollbackPurchaseOrderByCash" );
if (CheckConnect() < ERROR_NONE){
g_Log.Log(LogType::_ERROR, L"[QueryRollbackPurchaseOrderByCash] CheckConnect Fail\r\n");
return ERROR_DB;
}
SQLRETURN RetCode;
SQLLEN cblen;
int nResult = ERROR_DB;
memset(&m_wszQuery, 0, sizeof(m_wszQuery));
swprintf(m_wszQuery, L"{?=CALL dbo.P_RollbackPurchaseOrderByCash(%I64d,?,?)}", biPurchaseOrderID);
RetCode = SQLPrepare(m_hstmt, m_wszQuery, SQL_NTSL);
if (CheckRetCode(RetCode, L"SQLPrepare") == ERROR_NONE)
{
int nNo = 1;
SQLBindParameter(m_hstmt, nNo++, SQL_PARAM_OUTPUT, SQL_INTEGER, SQL_INTEGER, sizeof(int), 0, &nResult, sizeof(int), &cblen);
SQLBindParameter(m_hstmt, nNo++, SQL_PARAM_OUTPUT, SQL_CHAR, SQL_VARCHAR, sizeof(char) * 32, 0, pOrderKey, sizeof(*pOrderKey), &cblen);
SQLBindParameter(m_hstmt, nNo++, SQL_PARAM_OUTPUT, SQL_INTEGER, SQL_INTEGER, sizeof(int), 0, &nProductID, sizeof(int), &cblen);
RetCode = SQLExecute(m_hstmt);
CheckRetCode(RetCode, L"SQLExecute");
}
return nResult;
}
int CDNSQLMembership::QuerySetRollbackPurchaseOrderResult(INT64 biOrderID, char cStatusCode, int nRollbackResult)
{
CQueryTimeLog QueryTimeLog( "[Membership]P_SetRollbackPurchaseOrderResult" );
memset(&m_wszQuery, 0, sizeof(m_wszQuery));
swprintf(m_wszQuery, L"{?=CALL dbo.P_SetRollbackPurchaseOrderResult(%I64d,%d,%d)}", biOrderID, cStatusCode, nRollbackResult);
return CommonReturnValueQuery(m_wszQuery);
}
#if defined(PRE_ADD_LIMITED_CASHITEM) && defined(_CASHSERVER)
int CDNSQLMembership::QueryGetLimitedItem()
{
CQueryTimeLog QueryTimeLog( "[Membership]QueryGetLimitedItem" );
if (CheckConnect() < ERROR_NONE){
g_Log.Log(LogType::_ERROR, L"[QueryGetLimitedItem] CheckConnect Fail\r\n");
return ERROR_DB;
}
SQLRETURN RetCode;
SQLLEN cblen;
int nResult = ERROR_DB;
memset(&m_wszQuery, 0, sizeof(m_wszQuery));
swprintf(m_wszQuery, L"{?=CALL dbo.P_GetListLimitedProduct}");
RetCode = SQLPrepare(m_hstmt, m_wszQuery, SQL_NTSL);
if (CheckRetCode(RetCode, L"SQLPrepare") == ERROR_NONE){
SQLBindParameter(m_hstmt, 1, SQL_PARAM_OUTPUT, SQL_INTEGER, SQL_INTEGER, sizeof(int), 0, &nResult, sizeof(int), &cblen);
RetCode = SQLExecute(m_hstmt);
if (CheckRetCode(RetCode, L"SQLExecute") == ERROR_NONE)
{
int nNo = 1;
std::vector<LimitedCashItem::TLimitedQuantityCashItem> vList;
LimitedCashItem::TLimitedQuantityCashItem LimitedItem;
memset(&LimitedItem, 0, sizeof(LimitedCashItem::TLimitedQuantityCashItem));
SQLBindCol(m_hstmt, nNo++, SQL_INTEGER, &LimitedItem.nProductID, sizeof(int), &cblen);
SQLBindCol(m_hstmt, nNo++, SQL_INTEGER, &LimitedItem.nSaleCount, sizeof(int), &cblen);
CheckColumnCount(nNo, "[Membership]QueryGetLimitedItem");
while(1)
{
memset(&LimitedItem, 0, sizeof(LimitedCashItem::TLimitedQuantityCashItem));
RetCode = SQLFetch(m_hstmt);
if (RetCode == SQL_NO_DATA){
nResult = ERROR_NONE;
break;
}
if ((CheckRetCode(RetCode, L"SQLFetch") < ERROR_NONE) &&(RetCode != SQL_SUCCESS_WITH_INFO)) break;
vList.push_back(LimitedItem);
}
if (g_pLimitedCashItemRepository)
g_pLimitedCashItemRepository->UpdateLimitedItemList(vList);
}
}
SQLCloseCursor(m_hstmt);
return nResult;
}
#endif //#if defined(PRE_ADD_LIMITED_CASHITEM) && defined(_CASHSERVER)
#if defined(PRE_ADD_CASH_REFUND)
int CDNSQLMembership::QueryGetListRefundableProducts(INT64 biCharacterDBID, TAPaymentItemList* pPaymentItemList, TAPaymentPackageItemList* pPaymentPackageItemList, int nRefundLimitPeriod )
{
CQueryTimeLog QueryTimeLog( "[Membership]P_GetListRefundableProducts" );
if (CheckConnect() < ERROR_NONE){
g_Log.Log(LogType::_ERROR, L"[QueryGetListRefundableProducts] CheckConnect Fail\r\n");
return ERROR_DB;
}
SQLRETURN RetCode;
SQLLEN cblen;
int nResult = ERROR_DB;
int nVersion = 2;
memset(&m_wszQuery, 0, sizeof(m_wszQuery));
swprintf(m_wszQuery, L"{?=CALL dbo.P_GetListRefundableProducts(%I64d, %d, %d)}", biCharacterDBID, nRefundLimitPeriod, nVersion);
RetCode = SQLPrepare(m_hstmt, m_wszQuery, SQL_NTSL);
if (CheckRetCode(RetCode, L"SQLPrepare") == ERROR_NONE){
SQLBindParameter(m_hstmt, 1, SQL_PARAM_OUTPUT, SQL_INTEGER, SQL_INTEGER, sizeof(int), 0, &nResult, sizeof(int), &cblen);
RetCode = SQLExecute(m_hstmt);
if (CheckRetCode(RetCode, L"SQLExecute") == ERROR_NONE)
{
int nNo = 1;
INT64 biPurchaseOrderDetailID = 0;
char szOrderNum[64] = {0, };
int nProductID = 0;
int nPrice = 0;
char szSelectedItemIDs[2048] = {0, }, szSelectedItemOptions[2048] = {0,};
TIMESTAMP_STRUCT OrderDate = {0,};
bool bflag = false; //
SQLBindCol(m_hstmt, nNo++, SQL_C_SBIGINT, &biPurchaseOrderDetailID, sizeof(INT64), &cblen);
SQLBindCol(m_hstmt, nNo++, SQL_CHAR, szOrderNum, sizeof(CHAR) * 64, &cblen);
SQLBindCol(m_hstmt, nNo++, SQL_INTEGER, &nProductID, sizeof(int), &cblen);
SQLBindCol(m_hstmt, nNo++, SQL_INTEGER, &nPrice, sizeof(int), &cblen);
SQLBindCol(m_hstmt, nNo++, SQL_CHAR, szSelectedItemIDs, sizeof(CHAR)*2048, &cblen);
SQLBindCol(m_hstmt, nNo++, SQL_CHAR, szSelectedItemOptions, sizeof(CHAR)*2048, &cblen);
SQLBindCol(m_hstmt, nNo++, SQL_BIT, &bflag, sizeof(bool), &cblen);
SQLBindCol(m_hstmt, nNo++, SQL_TIMESTAMP, &OrderDate, sizeof(TIMESTAMP_STRUCT), &cblen);
CheckColumnCount(nNo, "[Membership]P_GetListRefundableProducts");
while(1)
{
memset(&szOrderNum, 0, sizeof(szOrderNum));
memset(&OrderDate, 0, sizeof(OrderDate));
memset(&szSelectedItemIDs, 0, sizeof(szSelectedItemIDs));
memset(&szSelectedItemOptions, 0, sizeof(szSelectedItemOptions));
biPurchaseOrderDetailID = 0;
nProductID = 0;
nPrice = 0;
bflag = false;
RetCode = SQLFetch(m_hstmt);
if (RetCode == SQL_NO_DATA){
nResult = ERROR_NONE;
break;
}
if ((CheckRetCode(RetCode, L"SQLFetch") < ERROR_NONE) &&(RetCode != SQL_SUCCESS_WITH_INFO)) break;
// <20><> <20><><EFBFBD><EFBFBD> <20><>Ű<EFBFBD><C5B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Ǵ<EFBFBD>
string strSelectedItemIDs = szSelectedItemIDs;
string strSelectedItemOptions = szSelectedItemOptions;
std::vector<std::string> tokens, Optiontokens;
TokenizeA(strSelectedItemIDs.c_str(), tokens, ",");
TokenizeA(strSelectedItemOptions.c_str(), Optiontokens, ",");
if( tokens.size() == 1 ) // ID<49><44> <20>Ѱ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ǰ<EFBFBD>̴<EFBFBD>.
{
// <20><>ǰ..
int nTempCount = pPaymentItemList->nPaymentCount; // <20>ڵ<EFBFBD> <20><><EFBFBD>̰<EFBFBD> <20><> <20><><EFBFBD>..
pPaymentItemList->PaymentItemList[nTempCount].uiOrderNo = strtoul(szOrderNum, NULL, 10);
pPaymentItemList->PaymentItemList[nTempCount].nPrice = nPrice;
pPaymentItemList->PaymentItemList[nTempCount].PaymentItemInfo.biDBID = biPurchaseOrderDetailID;
CTimeParamSet OrderTime(&QueryTimeLog, pPaymentItemList->PaymentItemList[nTempCount].PaymentItemInfo.tPaymentDate, OrderDate, 0, 0, biCharacterDBID);
if (!OrderTime.IsValid())
{
nResult = ERROR_DB;
break;
}
pPaymentItemList->PaymentItemList[nTempCount].PaymentItemInfo.ItemInfo.nItemSN = nProductID;
pPaymentItemList->PaymentItemList[nTempCount].PaymentItemInfo.ItemInfo.nItemID = atoi(szSelectedItemIDs);
pPaymentItemList->PaymentItemList[nTempCount].PaymentItemInfo.ItemInfo.cItemOption = atoi(szSelectedItemOptions);
++pPaymentItemList->nPaymentCount;
}
else
{
// <20><>Ű<EFBFBD><C5B0>..
int nTempCount = pPaymentPackageItemList->nPaymentPackegeCount; // <20>ڵ<EFBFBD> <20><><EFBFBD>̰<EFBFBD> <20><> <20><><EFBFBD>..
pPaymentPackageItemList->PaymentPackageItemList[nTempCount].uiOrderNo = strtoul(szOrderNum, NULL, 10);
pPaymentPackageItemList->PaymentPackageItemList[nTempCount].nPrice = nPrice;
pPaymentPackageItemList->PaymentPackageItemList[nTempCount].PaymentPackageItemInfo.biDBID = biPurchaseOrderDetailID;
pPaymentPackageItemList->PaymentPackageItemList[nTempCount].PaymentPackageItemInfo.nPackageSN = nProductID;
CTimeParamSet OrderTime(&QueryTimeLog, pPaymentPackageItemList->PaymentPackageItemList[nTempCount].PaymentPackageItemInfo.tPaymentDate, OrderDate, 0, 0, biCharacterDBID);
if (!OrderTime.IsValid())
{
nResult = ERROR_DB;
break;
}
std::vector<std::string>::iterator ii;
int nCount = 0;
for(ii = tokens.begin(); ii != tokens.end(); ii++)
{
// nItemSN<53><4E> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>޾Ƽ<DEBE> <20><><EFBFBD><EFBFBD><EFBFBD>ؾ<EFBFBD> <20>ҵ<EFBFBD>..DB<44><42> <20><><EFBFBD><EFBFBD>..
pPaymentPackageItemList->PaymentPackageItemList[nTempCount].PaymentPackageItemInfo.ItemInfoList[nCount].nItemID = atoi((*ii).c_str());
pPaymentPackageItemList->PaymentPackageItemList[nTempCount].PaymentPackageItemInfo.ItemInfoList[nCount].cItemOption = -1;
++nCount;
}
nCount = 0;
for(ii = Optiontokens.begin(); ii != Optiontokens.end(); ii++)
{
pPaymentPackageItemList->PaymentPackageItemList[nTempCount].PaymentPackageItemInfo.ItemInfoList[nCount].cItemOption = atoi((*ii).c_str());
++nCount;
}
++pPaymentPackageItemList->nPaymentPackegeCount;
}
// <20>ϴ<EFBFBD><CFB4><EFBFBD> 150<35><30><EFBFBD><EFBFBD> <20>ڸ<EFBFBD><DAB8><EFBFBD>..
if(pPaymentItemList->nPaymentCount >= CASHINVENTORYMAX || pPaymentPackageItemList->nPaymentPackegeCount >= CASHINVENTORYMAX ){
nResult = ERROR_NONE;
break;
}
}
}
}
SQLCloseCursor(m_hstmt);
return nResult;
}
int CDNSQLMembership::QueryModPurchaseOrderDetail(INT64 biPurchaseOrderDetailID)
{
CQueryTimeLog QueryTimeLog( "[Membership]P_ModPurchaseOrderDetail" );
memset(&m_wszQuery, 0, sizeof(m_wszQuery));
swprintf(m_wszQuery, L"{?=CALL dbo.P_ModPurchaseOrderDetail(%I64d)}", biPurchaseOrderDetailID);
return CommonReturnValueQuery(m_wszQuery);
}
int CDNSQLMembership::QueryCashRefund(INT64 biPurchaseOrderDetailID, int nRefundLimitPeriod )
{
CQueryTimeLog QueryTimeLog( "[Membership]P_Refund" );
memset(&m_wszQuery, 0, sizeof(m_wszQuery));
swprintf(m_wszQuery, L"{?=CALL dbo.P_Refund(%I64d, %d)}", biPurchaseOrderDetailID, nRefundLimitPeriod);
return CommonReturnValueQuery(m_wszQuery);
}
#endif // #if defined(PRE_ADD_CASH_REFUND)
int CDNSQLMembership::QueryCheatGiftClear(INT64 biCharacterDBID)
{
CQueryTimeLog QueryTimeLog( "[Membership]P_CheatGiftClear" );
memset(&m_wszQuery, 0, sizeof(m_wszQuery));
swprintf(m_wszQuery, L"{?=CALL dbo.P_CheatGiftClear(%I64d)}", biCharacterDBID);
return CommonReturnValueQuery(m_wszQuery);
}
int CDNSQLMembership::QueryIncreaseVIPBasicPoint(INT64 biCharacterDBID, int nBasicPoint, INT64 biPurchaseOrderID, short wVIPPeriod, bool bAutoPay, OUT int &nVIPTotalPoint, OUT __time64_t &tVIPEndDate)
{
CQueryTimeLog QueryTimeLog( "[Membership]P_IncreaseVIPBasicPoint" );
if (CheckConnect() < ERROR_NONE){
g_Log.Log(LogType::_ERROR, L"[QueryIncreaseVIPBasicPoint] CheckConnect Fail\r\n");
return ERROR_DB;
}
SQLRETURN RetCode;
SQLLEN cblen;
int nResult = ERROR_DB;
memset(&m_wszQuery, 0, sizeof(m_wszQuery));
swprintf(m_wszQuery, L"{?=CALL dbo.P_IncreaseVIPBasicPoint(%I64d,%d,%I64d,%d,%d,?,?,?)}", biCharacterDBID, nBasicPoint, biPurchaseOrderID, wVIPPeriod, bAutoPay);
RetCode = SQLPrepare(m_hstmt, m_wszQuery, SQL_NTSL);
if (CheckRetCode(RetCode, L"SQLPrepare") == ERROR_NONE)
{
TIMESTAMP_STRUCT StartDate = {0,}, EndDate = {0,};
int nNo = 1;
SQLBindParameter(m_hstmt, nNo++, SQL_PARAM_OUTPUT, SQL_INTEGER, SQL_INTEGER, sizeof(int), 0, &nResult, sizeof(int), &cblen);
SQLBindParameter(m_hstmt, nNo++, SQL_PARAM_OUTPUT, SQL_INTEGER, SQL_INTEGER, sizeof(int), 0, &nVIPTotalPoint, sizeof(int), &cblen);
SQLBindParameter(m_hstmt, nNo++, SQL_PARAM_OUTPUT, SQL_C_TIMESTAMP, SQL_TIMESTAMP, sizeof(TIMESTAMP_STRUCT), 0, &StartDate, sizeof(TIMESTAMP_STRUCT), &cblen);
SQLBindParameter(m_hstmt, nNo++, SQL_PARAM_OUTPUT, SQL_C_TIMESTAMP, SQL_TIMESTAMP, sizeof(TIMESTAMP_STRUCT), 0, &EndDate, sizeof(TIMESTAMP_STRUCT), &cblen);
RetCode = SQLExecute(m_hstmt);
if (CheckRetCode(RetCode, L"SQLExecute") == ERROR_NONE){
CTimeParamSet EndTime(&QueryTimeLog, tVIPEndDate, EndDate, 0, 0, biCharacterDBID);
if (!EndTime.IsValid()) return ERROR_DB;
}
}
return nResult;
}
int CDNSQLMembership::QueryGetVIPPoint(INT64 biCharacterDBID, OUT int &nVIPTotalPoint, OUT __time64_t &tVIPEndDate, OUT bool &bAutoPay)
{
CQueryTimeLog QueryTimeLog( "[Membership]P_GetVIPPoint" );
if (CheckConnect() < ERROR_NONE){
g_Log.Log(LogType::_ERROR, L"[QueryGetVIPPoint] CheckConnect Fail\r\n");
return ERROR_DB;
}
SQLRETURN RetCode;
SQLLEN cblen;
int nResult = ERROR_DB;
memset(&m_wszQuery, 0, sizeof(m_wszQuery));
swprintf(m_wszQuery, L"{?=CALL dbo.P_GetVIPPoint(%I64d,?,?,?,?)}", biCharacterDBID);
RetCode = SQLPrepare(m_hstmt, m_wszQuery, SQL_NTSL);
if (CheckRetCode(RetCode, L"SQLPrepare") == ERROR_NONE)
{
TIMESTAMP_STRUCT StartDate = {0,}, EndDate = {0,};
int nNo = 1;
SQLBindParameter(m_hstmt, nNo++, SQL_PARAM_OUTPUT, SQL_INTEGER, SQL_INTEGER, sizeof(int), 0, &nResult, sizeof(int), &cblen);
SQLBindParameter(m_hstmt, nNo++, SQL_PARAM_OUTPUT, SQL_INTEGER, SQL_INTEGER, sizeof(int), 0, &nVIPTotalPoint, sizeof(int), &cblen);
SQLBindParameter(m_hstmt, nNo++, SQL_PARAM_OUTPUT, SQL_C_TIMESTAMP, SQL_TIMESTAMP, sizeof(TIMESTAMP_STRUCT), 0, &StartDate, sizeof(TIMESTAMP_STRUCT), &cblen);
SQLBindParameter(m_hstmt, nNo++, SQL_PARAM_OUTPUT, SQL_C_TIMESTAMP, SQL_TIMESTAMP, sizeof(TIMESTAMP_STRUCT), 0, &EndDate, sizeof(TIMESTAMP_STRUCT), &cblen);
SQLBindParameter(m_hstmt, nNo++, SQL_PARAM_OUTPUT, SQL_BIT, SQL_BIT, sizeof(bool), 0, &bAutoPay, sizeof(bool), &cblen);
RetCode = SQLExecute(m_hstmt);
if (CheckRetCode(RetCode, L"SQLExecute") == ERROR_NONE){
CTimeParamSet EndTime(&QueryTimeLog, tVIPEndDate, EndDate, 0, 0, biCharacterDBID);
if (!EndTime.IsValid()) return ERROR_DB;
}
}
return nResult;
}
int CDNSQLMembership::QueryModVIPAutoPayFlag(INT64 biCharacterDBID, bool bAutoPay)
{
CQueryTimeLog QueryTimeLog( "[Membership]P_ModVIPAutoPayFlag" );
memset(&m_wszQuery, 0, sizeof(m_wszQuery));
swprintf(m_wszQuery, L"{?=CALL dbo.P_ModVIPAutoPayFlag(%I64d,%d)}", biCharacterDBID, bAutoPay);
return CommonReturnValueQuery(m_wszQuery);
}
int CDNSQLMembership::QueryAddBanOfSale(int nItemSN)
{
CQueryTimeLog QueryTimeLog( "[Membership]P_AddBanOfSale" );
memset(&m_wszQuery, 0, sizeof(m_wszQuery));
swprintf(m_wszQuery, L"{?=CALL dbo.P_AddBanOfSale(%d)}", nItemSN);
return CommonReturnValueQuery(m_wszQuery);
}
int CDNSQLMembership::QueryGetListBanOfSale(std::vector<int> &VecProhibitList)
{
CQueryTimeLog QueryTimeLog( "[Membership]P_GetListBanOfSale" );
if (CheckConnect() < ERROR_NONE){
g_Log.Log(LogType::_ERROR, L"[QueryGetListBanOfSale] Check Connect Fail\r\n");
return ERROR_DB;
}
SQLRETURN RetCode;
SQLLEN cblen;
int nResult = ERROR_DB;
memset(&m_wszQuery, 0, sizeof(m_wszQuery));
swprintf(m_wszQuery, L"{?=CALL dbo.P_GetListBanOfSale}");
RetCode = SQLPrepare(m_hstmt, m_wszQuery, SQL_NTSL);
if (CheckRetCode(RetCode, L"SQLPrepare") == ERROR_NONE){
SQLBindParameter(m_hstmt, 1, SQL_PARAM_OUTPUT, SQL_INTEGER, SQL_INTEGER, sizeof(int), 0, &nResult, sizeof(int), &cblen);
RetCode = SQLExecute(m_hstmt);
if (CheckRetCode(RetCode, L"SQLExecute") == ERROR_NONE){
int nItemSN = 0;
int nNo = 1;
SQLBindCol(m_hstmt, nNo++, SQL_INTEGER, &nItemSN, sizeof(int), &cblen);
CheckColumnCount(nNo, "[Membership]P_GetListBanOfSale");
while(1)
{
nItemSN = 0;
RetCode = SQLFetch(m_hstmt);
if (RetCode == SQL_NO_DATA){
nResult = ERROR_NONE;
break;
}
if ((CheckRetCode(RetCode, L"SQLFetch") < ERROR_NONE) &&(RetCode != SQL_SUCCESS_WITH_INFO)) break;
VecProhibitList.push_back(nItemSN);
}
}
}
SQLCloseCursor(m_hstmt);
return nResult;
}
int CDNSQLMembership::QueryGetPetalBalance(int nAccountDBID, OUT int &nPetalBalance)
{
CQueryTimeLog QueryTimeLog( "[Membership]P_GetPetalBalance" );
if (CheckConnect() < ERROR_NONE){
g_Log.Log(LogType::_ERROR, 0, nAccountDBID, 0, 0, L"[QueryGetPetalBalance] CheckConnect Fail\r\n");
return ERROR_DB;
}
SQLRETURN RetCode;
SQLLEN cblen;
int nResult = ERROR_DB;
memset(&m_wszQuery, 0, sizeof(m_wszQuery));
swprintf(m_wszQuery, L"{?=CALL dbo.P_GetPetalBalance(%d,?)}", nAccountDBID);
RetCode = SQLPrepare(m_hstmt, m_wszQuery, SQL_NTSL);
if (CheckRetCode(RetCode, L"SQLPrepare") == ERROR_NONE)
{
int nNo = 1;
SQLBindParameter(m_hstmt, nNo++, SQL_PARAM_OUTPUT, SQL_INTEGER, SQL_INTEGER, sizeof(int), 0, &nResult, sizeof(int), &cblen);
SQLBindParameter(m_hstmt, nNo++, SQL_PARAM_OUTPUT, SQL_INTEGER, SQL_INTEGER, sizeof(int), 0, &nPetalBalance, sizeof(int), &cblen);
RetCode = SQLExecute(m_hstmt);
CheckRetCode(RetCode, L"SQLExecute");
}
return nResult;
}
int CDNSQLMembership::QueryPurchaseItemByPetal(INT64 biCharacterDBID, bool bPCBang, std::vector<string> &VecItemString, int nTotalPrice, char *pIp, OUT INT64 &biPurchaseOrderID)
{
CQueryTimeLog QueryTimeLog( "[Membership]P_PurchaseItemByPetal" );
if (CheckConnect() < ERROR_NONE){
g_Log.Log(LogType::_ERROR, 0, 0, biCharacterDBID, 0, L"[QueryPurchaseItemByPetal] CheckConnect Fail\r\n");
return ERROR_DB;
}
SQLRETURN RetCode;
SQLLEN cblen;
int nResult = ERROR_DB;
memset(&m_wszQuery, 0, sizeof(m_wszQuery));
#ifdef PRE_ADD_LIMITED_CASHITEM
swprintf(m_wszQuery, L"{?=CALL dbo.P_PurchaseItemByPetal(%I64d,%d,'%S','%S','%S','%S',%d,'%S',?,'%S','%S')}",
biCharacterDBID, bPCBang, VecItemString[Append_ItemSN].c_str(), VecItemString[Append_Price].c_str(), VecItemString[Append_Limit].c_str(), VecItemString[Append_ItemID].c_str(), nTotalPrice, pIp, VecItemString[Append_Option].c_str(), VecItemString[Append_QuantityLimited].c_str());
#else //#ifdef PRE_ADD_LIMITED_CASHITEM
swprintf(m_wszQuery, L"{?=CALL dbo.P_PurchaseItemByPetal(%I64d,%d,'%S','%S','%S','%S',%d,'%S',?,'%S')}",
biCharacterDBID, bPCBang, VecItemString[Append_ItemSN].c_str(), VecItemString[Append_Price].c_str(), VecItemString[Append_Limit].c_str(), VecItemString[Append_ItemID].c_str(), nTotalPrice, pIp, VecItemString[Append_Option].c_str());
#endif //#ifdef PRE_ADD_LIMITED_CASHITEM
RetCode = SQLPrepare(m_hstmt, m_wszQuery, SQL_NTSL);
if (CheckRetCode(RetCode, L"SQLPrepare") == ERROR_NONE)
{
int nNo = 1;
SQLBindParameter(m_hstmt, nNo++, SQL_PARAM_OUTPUT, SQL_INTEGER, SQL_INTEGER, sizeof(int), 0, &nResult, sizeof(int), &cblen);
SQLBindParameter(m_hstmt, nNo++, SQL_PARAM_OUTPUT, SQL_C_SBIGINT, SQL_BIGINT, sizeof(INT64), 0, &biPurchaseOrderID, sizeof(INT64), &cblen);
RetCode = SQLExecute(m_hstmt);
CheckRetCode(RetCode, L"SQLExecute");
}
#if defined(PRE_ADD_LIMITED_CASHITEM) && defined(_CASHSERVER)
if (nResult == ERROR_NONE && atoi(VecItemString[Append_QuantityLimited].c_str()) > 0)
QueryGetLimitedItem();
#endif //#if defined(PRE_ADD_LIMITED_CASHITEM) && defined(_CASHSERVER)
return nResult;
}
int CDNSQLMembership::QueryRollbackPurchaseItemByPetal(INT64 biOrderID)
{
CQueryTimeLog QueryTimeLog( "[Membership]P_RollbackPurchaseItemByPetal" );
memset(&m_wszQuery, 0, sizeof(m_wszQuery));
swprintf(m_wszQuery, L"{?=CALL dbo.P_RollbackPurchaseItemByPetal(%I64d)}", biOrderID);
return CommonReturnValueQuery(m_wszQuery);
}
int CDNSQLMembership::QueryAddPetalIncome(INT64 biCharacterDBID, INT64 biPurchaseOrderID, int nPetal, OUT int &nTotalPetal, bool bTrade)
{
CQueryTimeLog QueryTimeLog( "[Membership]P_AddPetalIncome" );
if (CheckConnect() < ERROR_NONE){
g_Log.Log(LogType::_ERROR, 0, 0, biCharacterDBID, 0, L"[QueryAddPetalIncome] CheckConnect Fail\r\n");
return ERROR_DB;
}
SQLRETURN RetCode;
SQLLEN cblen;
int nResult = ERROR_DB;
memset(&m_wszQuery, 0, sizeof(m_wszQuery));
if( bTrade )
swprintf(m_wszQuery, L"{?=CALL dbo.P_AddPetalIncome(%I64d,%I64d,%d,?, 7)}", biCharacterDBID, biPurchaseOrderID, nPetal); //<2F>ŷ<EFBFBD><C5B7><EFBFBD> <20>Ǹ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> 7
else
swprintf(m_wszQuery, L"{?=CALL dbo.P_AddPetalIncome(%I64d,%I64d,%d,?)}", biCharacterDBID, biPurchaseOrderID, nPetal);
RetCode = SQLPrepare(m_hstmt, m_wszQuery, SQL_NTSL);
if (CheckRetCode(RetCode, L"SQLPrepare") == ERROR_NONE)
{
int nNo = 1;
SQLBindParameter(m_hstmt, nNo++, SQL_PARAM_OUTPUT, SQL_INTEGER, SQL_INTEGER, sizeof(int), 0, &nResult, sizeof(int), &cblen);
SQLBindParameter(m_hstmt, nNo++, SQL_PARAM_OUTPUT, SQL_INTEGER, SQL_INTEGER, sizeof(int), 0, &nTotalPetal, sizeof(int), &cblen);
RetCode = SQLExecute(m_hstmt);
CheckRetCode(RetCode, L"SQLExecute");
}
return nResult;
}
#if defined( PRE_PVP_GAMBLEROOM )
int CDNSQLMembership::QueryAddPetalIncome(INT64 biCharacterDBID, INT64 biPurchaseOrderID, int nPetal, OUT int &nTotalPetal, BYTE cPetalChangeCode, INT64 nGambleDBID)
{
CQueryTimeLog QueryTimeLog( "[Membership]P_AddPetalIncome" );
if (CheckConnect() < ERROR_NONE){
g_Log.Log(LogType::_ERROR, 0, 0, biCharacterDBID, 0, L"[QueryAddPetalIncome] CheckConnect Fail\r\n");
return ERROR_DB;
}
SQLRETURN RetCode;
SQLLEN cblen;
CDNSqlLen SqlLen;
int nResult = ERROR_DB;
memset(&m_wszQuery, 0, sizeof(m_wszQuery));
swprintf(m_wszQuery, L"{?=CALL dbo.P_AddPetalIncome(%I64d,?,%d,?,%d,%I64d)}", biCharacterDBID, nPetal, cPetalChangeCode, nGambleDBID);
RetCode = SQLPrepare(m_hstmt, m_wszQuery, SQL_NTSL);
if (CheckRetCode(RetCode, L"SQLPrepare") == ERROR_NONE)
{
int nNo = 1;
SQLBindParameter(m_hstmt, nNo++, SQL_PARAM_OUTPUT, SQL_INTEGER, SQL_INTEGER, sizeof(int), 0, &nResult, sizeof(int), &cblen);
SQLBindParameter(m_hstmt, nNo++, SQL_PARAM_INPUT, SQL_C_SBIGINT, SQL_BIGINT, sizeof(INT64), 0, &biPurchaseOrderID, sizeof(INT64), SqlLen.GetNull(biPurchaseOrderID <= 0, sizeof(INT64)));
SQLBindParameter(m_hstmt, nNo++, SQL_PARAM_OUTPUT, SQL_INTEGER, SQL_INTEGER, sizeof(int), 0, &nTotalPetal, sizeof(int), &cblen);
RetCode = SQLExecute(m_hstmt);
CheckRetCode(RetCode, L"SQLExecute");
}
return nResult;
}
int CDNSQLMembership::QueryUsePetal(INT64 biCharacterDBID, int nPetal, BYTE cPetalChangeCode, INT64 nGambleDBID)
{
CQueryTimeLog QueryTimeLog( "[Membership]P_UsePetal" );
if (CheckConnect() < ERROR_NONE){
g_Log.Log(LogType::_ERROR, 0, 0, biCharacterDBID, 0, L"[QueryAddPetalIncome] CheckConnect Fail\r\n");
return ERROR_DB;
}
SQLRETURN RetCode;
SQLLEN cblen;
int nResult = ERROR_DB;
memset(&m_wszQuery, 0, sizeof(m_wszQuery));
swprintf(m_wszQuery, L"{?=CALL dbo.P_UsePetal(%I64d,%d,%d,%I64d)}", biCharacterDBID, nPetal, cPetalChangeCode, nGambleDBID);
RetCode = SQLPrepare(m_hstmt, m_wszQuery, SQL_NTSL);
if (CheckRetCode(RetCode, L"SQLPrepare") == ERROR_NONE)
{
int nNo = 1;
SQLBindParameter(m_hstmt, nNo++, SQL_PARAM_OUTPUT, SQL_INTEGER, SQL_INTEGER, sizeof(int), 0, &nResult, sizeof(int), &cblen);
RetCode = SQLExecute(m_hstmt);
CheckRetCode(RetCode, L"SQLExecute");
}
return nResult;
}
#endif
#if defined(PRE_ADD_CASH_REFUND)
int CDNSQLMembership::QueryAddPetalIncomeCashRefund(INT64 biCharacterDBID, INT64 biPurchaseOrderDetailID, int nPetal, OUT int &nTotalPetal)
{
CQueryTimeLog QueryTimeLog( "[Membership]P_AddPetalIncomeForReward" );
if (CheckConnect() < ERROR_NONE){
g_Log.Log(LogType::_ERROR, 0, 0, biCharacterDBID, 0, L"[QueryAddPetalIncomeCashRefund] CheckConnect Fail\r\n");
return ERROR_DB;
}
SQLRETURN RetCode;
SQLLEN cblen;
int nResult = ERROR_DB;
memset(&m_wszQuery, 0, sizeof(m_wszQuery));
swprintf(m_wszQuery, L"{?=CALL dbo.P_AddPetalIncomeForReward(%I64d,%I64d,%d,?)}", biCharacterDBID, biPurchaseOrderDetailID, nPetal);
RetCode = SQLPrepare(m_hstmt, m_wszQuery, SQL_NTSL);
if (CheckRetCode(RetCode, L"SQLPrepare") == ERROR_NONE)
{
int nNo = 1;
SQLBindParameter(m_hstmt, nNo++, SQL_PARAM_OUTPUT, SQL_INTEGER, SQL_INTEGER, sizeof(int), 0, &nResult, sizeof(int), &cblen);
SQLBindParameter(m_hstmt, nNo++, SQL_PARAM_OUTPUT, SQL_INTEGER, SQL_INTEGER, sizeof(int), 0, &nTotalPetal, sizeof(int), &cblen);
RetCode = SQLExecute(m_hstmt);
CheckRetCode(RetCode, L"SQLExecute");
}
return nResult;
}
#endif // #if defined(PRE_ADD_CASH_REFUND)
int CDNSQLMembership::QueryGetCashBalance(int nAccountDBID, WCHAR *pAccountName, int &nCashBalance)
{
CQueryTimeLog QueryTimeLog( "[Membership]P_GetCashBalance" );
if (CheckConnect() < ERROR_NONE){
g_Log.Log(LogType::_ERROR, L"[QueryGetCashBalance] CheckConnect Fail\r\n");
return ERROR_DB;
}
SQLRETURN RetCode;
SQLLEN cblen;
CDNSqlLen SqlLen;
int nResult = ERROR_DB;
memset(&m_wszQuery, 0, sizeof(m_wszQuery));
swprintf(m_wszQuery, L"{?=CALL dbo.P_GetCashBalance(%d,?,?)}", nAccountDBID);
RetCode = SQLPrepare(m_hstmt, m_wszQuery, SQL_NTSL);
if (CheckRetCode(RetCode, L"SQLPrepare") == ERROR_NONE)
{
int nNo = 1;
SQLBindParameter(m_hstmt, nNo++, SQL_PARAM_OUTPUT, SQL_INTEGER, SQL_INTEGER, sizeof(int), 0, &nResult, sizeof(int), &cblen);
SQLBindParameter(m_hstmt, nNo++, SQL_PARAM_INPUT, SQL_WCHAR, SQL_WVARCHAR, sizeof(WCHAR) * IDLENMAX, 0, pAccountName, sizeof(WCHAR) * IDLENMAX, SqlLen.GetNull(!pAccountName, sizeof(WCHAR) * IDLENMAX));
SQLBindParameter(m_hstmt, nNo++, SQL_PARAM_OUTPUT, SQL_INTEGER, SQL_INTEGER, sizeof(int), 0, &nCashBalance, sizeof(int), &cblen);
RetCode = SQLExecute(m_hstmt);
CheckRetCode(RetCode, L"SQLExecute");
}
return nResult;
}
int CDNSQLMembership::QueryDeductCash(int nAccountDBID, INT64 biPurchaseOrderID, int nDelCash, int &nCashOutgoID, int &nCashBalance)
{
CQueryTimeLog QueryTimeLog( "[Membership]P_DeductCash" );
if (CheckConnect() < ERROR_NONE){
g_Log.Log(LogType::_ERROR, L"[QueryDeductCash] CheckConnect Fail\r\n");
return ERROR_DB;
}
SQLRETURN RetCode;
SQLLEN cblen;
CDNSqlLen SqlLen;
int nResult = ERROR_DB;
memset(&m_wszQuery, 0, sizeof(m_wszQuery));
swprintf(m_wszQuery, L"{?=CALL dbo.P_DeductCash(%d,%I64d,%d,?,?)}", nAccountDBID, biPurchaseOrderID, nDelCash);
RetCode = SQLPrepare(m_hstmt, m_wszQuery, SQL_NTSL);
if (CheckRetCode(RetCode, L"SQLPrepare") == ERROR_NONE)
{
int nNo = 1;
SQLBindParameter(m_hstmt, nNo++, SQL_PARAM_OUTPUT, SQL_INTEGER, SQL_INTEGER, sizeof(int), 0, &nResult, sizeof(int), &cblen);
SQLBindParameter(m_hstmt, nNo++, SQL_PARAM_OUTPUT, SQL_INTEGER, SQL_INTEGER, sizeof(int), 0, &nCashOutgoID, sizeof(int), &cblen);
SQLBindParameter(m_hstmt, nNo++, SQL_PARAM_OUTPUT, SQL_INTEGER, SQL_INTEGER, sizeof(int), 0, &nCashBalance, sizeof(int), &cblen);
RetCode = SQLExecute(m_hstmt);
CheckRetCode(RetCode, L"SQLExecute");
}
return nResult;
}
#if defined( PRE_ADD_NEW_MONEY_SEED )
int CDNSQLMembership::QueryPurchaseItemBySeed(INT64 biCharacterDBID, bool bPCBang, std::vector<string> &VecItemString, int nTotalPrice, char *pIp, OUT INT64 &biPurchaseOrderID)
{
CQueryTimeLog QueryTimeLog( "[Membership]P_PurchaseItemBySeed" );
if (CheckConnect() < ERROR_NONE){
g_Log.Log(LogType::_ERROR, 0, 0, biCharacterDBID, 0, L"[QueryPurchaseItemBySeed] CheckConnect Fail\r\n");
return ERROR_DB;
}
SQLRETURN RetCode;
SQLLEN cblen;
int nResult = ERROR_DB;
memset(&m_wszQuery, 0, sizeof(m_wszQuery));
#ifdef PRE_ADD_LIMITED_CASHITEM
swprintf(m_wszQuery, L"{?=CALL dbo.P_PurchaseItemBySeed(%I64d,%d,'%S','%S','%S','%S',%d,'%S',?,'%S','%S')}",
biCharacterDBID, bPCBang, VecItemString[Append_ItemSN].c_str(), VecItemString[Append_Price].c_str(), VecItemString[Append_Limit].c_str(), VecItemString[Append_ItemID].c_str(), nTotalPrice, pIp, VecItemString[Append_Option].c_str(), VecItemString[Append_QuantityLimited].c_str());
#else //#ifdef PRE_ADD_LIMITED_CASHITEM
swprintf(m_wszQuery, L"{?=CALL dbo.P_PurchaseItemBySeed(%I64d,%d,'%S','%S','%S','%S',%d,'%S',?,'%S')}",
biCharacterDBID, bPCBang, VecItemString[Append_ItemSN].c_str(), VecItemString[Append_Price].c_str(), VecItemString[Append_Limit].c_str(), VecItemString[Append_ItemID].c_str(), nTotalPrice, pIp, VecItemString[Append_Option].c_str());
#endif //#ifdef PRE_ADD_LIMITED_CASHITEM
RetCode = SQLPrepare(m_hstmt, m_wszQuery, SQL_NTSL);
if (CheckRetCode(RetCode, L"SQLPrepare") == ERROR_NONE)
{
int nNo = 1;
SQLBindParameter(m_hstmt, nNo++, SQL_PARAM_OUTPUT, SQL_INTEGER, SQL_INTEGER, sizeof(int), 0, &nResult, sizeof(int), &cblen);
SQLBindParameter(m_hstmt, nNo++, SQL_PARAM_OUTPUT, SQL_C_SBIGINT, SQL_BIGINT, sizeof(INT64), 0, &biPurchaseOrderID, sizeof(INT64), &cblen);
RetCode = SQLExecute(m_hstmt);
CheckRetCode(RetCode, L"SQLExecute");
}
#if defined(PRE_ADD_LIMITED_CASHITEM) && defined(_CASHSERVER)
if (nResult == ERROR_NONE && atoi(VecItemString[Append_QuantityLimited].c_str()) > 0)
QueryGetLimitedItem();
#endif //#if defined(PRE_ADD_LIMITED_CASHITEM) && defined(_CASHSERVER)
return nResult;
}
#endif
int CDNSQLMembership::QueryMakeGiftByCoupon(INT64 biCharacterDBID, bool bPCBang, const char *pszItemSNs, const char *pszSelectItemIDs, const char *pszSelectItemOptions, WCHAR *pCoupon, const char *pOrderKey, char *pIp, OUT INT64 &biPurchaseOrderID)
{
CQueryTimeLog QueryTimeLog( "[Membership]P_MakeGiftByCoupon" );
if (CheckConnect() < ERROR_NONE){
g_Log.Log(LogType::_ERROR, 0, 0, biCharacterDBID, 0, L"[QueryMakeGiftByCoupon] CheckConnect Fail\r\n");
return ERROR_DB;
}
SQLRETURN RetCode;
SQLLEN cblen;
int nResult = ERROR_DB;
memset(&m_wszQuery, 0, sizeof(m_wszQuery));
swprintf(m_wszQuery, L"{?=CALL dbo.P_MakeGiftByCoupon(%I64d,%d,'%S','%S',N'%s','%S','%S',?,%d,'%S')}", biCharacterDBID, bPCBang, pszItemSNs, pszSelectItemIDs, pCoupon, pOrderKey, pIp, false, pszSelectItemOptions);
RetCode = SQLPrepare(m_hstmt, m_wszQuery, SQL_NTSL);
if (CheckRetCode(RetCode, L"SQLPrepare") == ERROR_NONE)
{
int nNo = 1;
SQLBindParameter(m_hstmt, nNo++, SQL_PARAM_OUTPUT, SQL_INTEGER, SQL_INTEGER, sizeof(int), 0, &nResult, sizeof(int), &cblen);
SQLBindParameter(m_hstmt, nNo++, SQL_PARAM_OUTPUT, SQL_C_SBIGINT, SQL_BIGINT, sizeof(INT64), 0, &biPurchaseOrderID, sizeof(INT64), &cblen);
RetCode = SQLExecute(m_hstmt);
CheckRetCode(RetCode, L"SQLExecute");
}
return nResult;
}
int CDNSQLMembership::QueryMakeGiftByQuest(INT64 biCharacterDBID, bool bPCBang, int nItemSN, const char *pszSelectItemIDs, const char *pszSelectItemOptions, int nQuestID, WCHAR *pMemo, int nLifeSpan, char *pIp, bool bNewFlag, OUT INT64 &biPurchaseOrderID)
{
CQueryTimeLog QueryTimeLog( "[Membership]P_MakeGiftByQuest" );
if (CheckConnect() < ERROR_NONE){
g_Log.Log(LogType::_ERROR, 0, 0, biCharacterDBID, 0, L"[QueryMakeGiftByQuest] CheckConnect Fail\r\n");
return ERROR_DB;
}
SQLRETURN RetCode;
SQLLEN cblen;
int nResult = ERROR_DB;
memset(&m_wszQuery, 0, sizeof(m_wszQuery));
swprintf(m_wszQuery, L"{?=CALL dbo.P_MakeGiftByQuest(%I64d,%d,%d,'%S',%d,N'%s',%d,'%S',?,%d,'%S')}", biCharacterDBID, bPCBang, nItemSN, pszSelectItemIDs, nQuestID, pMemo, nLifeSpan, pIp, bNewFlag, pszSelectItemOptions);
RetCode = SQLPrepare(m_hstmt, m_wszQuery, SQL_NTSL);
if (CheckRetCode(RetCode, L"SQLPrepare") == ERROR_NONE)
{
int nNo = 1;
SQLBindParameter(m_hstmt, nNo++, SQL_PARAM_OUTPUT, SQL_INTEGER, SQL_INTEGER, sizeof(int), 0, &nResult, sizeof(int), &cblen);
SQLBindParameter(m_hstmt, nNo++, SQL_PARAM_OUTPUT, SQL_C_SBIGINT, SQL_BIGINT, sizeof(INT64), 0, &biPurchaseOrderID, sizeof(INT64), &cblen);
RetCode = SQLExecute(m_hstmt);
CheckRetCode(RetCode, L"SQLExecute");
}
return nResult;
}
int CDNSQLMembership::QueryMakeGiftByMission(INT64 biCharacterDBID, bool bPCBang, int nItemSN, const char *pszSelectItemIDs, const char *pszSelectItemOptions, int nMissionID, WCHAR *pMemo, int nLifeSpan, char *pIp, bool bNewFlag, OUT INT64 &biPurchaseOrderID)
{
CQueryTimeLog QueryTimeLog( "[Membership]P_MakeGiftByMission" );
if (CheckConnect() < ERROR_NONE){
g_Log.Log(LogType::_ERROR, 0, 0, biCharacterDBID, 0, L"[QueryMakeGiftByMission] CheckConnect Fail\r\n");
return ERROR_DB;
}
SQLRETURN RetCode;
SQLLEN cblen;
int nResult = ERROR_DB;
memset(&m_wszQuery, 0, sizeof(m_wszQuery));
swprintf(m_wszQuery, L"{?=CALL dbo.P_MakeGiftByMission(%I64d,%d,%d,'%S',%d,N'%s',%d,'%S',?,%d,'%S')}", biCharacterDBID, bPCBang, nItemSN, pszSelectItemIDs, nMissionID, pMemo, nLifeSpan, pIp, bNewFlag, pszSelectItemOptions);
RetCode = SQLPrepare(m_hstmt, m_wszQuery, SQL_NTSL);
if (CheckRetCode(RetCode, L"SQLPrepare") == ERROR_NONE)
{
int nNo = 1;
SQLBindParameter(m_hstmt, nNo++, SQL_PARAM_OUTPUT, SQL_INTEGER, SQL_INTEGER, sizeof(int), 0, &nResult, sizeof(int), &cblen);
SQLBindParameter(m_hstmt, nNo++, SQL_PARAM_OUTPUT, SQL_C_SBIGINT, SQL_BIGINT, sizeof(INT64), 0, &biPurchaseOrderID, sizeof(INT64), &cblen);
RetCode = SQLExecute(m_hstmt);
CheckRetCode(RetCode, L"SQLExecute");
}
return nResult;
}
#ifdef PRE_ADD_LIMITED_CASHITEM
int CDNSQLMembership::QueryMakeGift(INT64 biCharacterDBID, bool bPCBang, int nItemSN, const char *pszSelectItemIDs, const char *pszSelectItemOptions, const char * pszLimitedQuantityMax, WCHAR *pMemo, int nLifeSpan, int nPayMethodCode, int iOrderKey, char *pIp, bool bNewFlag, OUT INT64 &biPurchaseOrderID)
#else //#ifdef PRE_ADD_LIMITED_CASHITEM
int CDNSQLMembership::QueryMakeGift(INT64 biCharacterDBID, bool bPCBang, int nItemSN, const char *pszSelectItemIDs, const char *pszSelectItemOptions, WCHAR *pMemo, int nLifeSpan, int nPayMethodCode, int iOrderKey, char *pIp, bool bNewFlag, OUT INT64 &biPurchaseOrderID)
#endif //#ifdef PRE_ADD_LIMITED_CASHITEM
{
CQueryTimeLog QueryTimeLog( "[Membership]P_MakeGift" );
if (CheckConnect() < ERROR_NONE){
g_Log.Log(LogType::_ERROR, 0, 0, biCharacterDBID, 0, L"[QueryMakeGift] CheckConnect Fail\r\n");
return ERROR_DB;
}
SQLRETURN RetCode;
SQLLEN cblen;
int nResult = ERROR_DB;
memset(&m_wszQuery, 0, sizeof(m_wszQuery));
#ifdef PRE_ADD_LIMITED_CASHITEM
swprintf(m_wszQuery, L"{?=CALL dbo.P_MakeGift(%I64d,%d,%d,'%S',N'%s',%d,%d,%d,'%S',?,%d,'%S','%S')}", biCharacterDBID, bPCBang, nItemSN, pszSelectItemIDs, pMemo, nLifeSpan, nPayMethodCode, iOrderKey, pIp, bNewFlag, pszSelectItemOptions, pszLimitedQuantityMax);
#else //#ifdef PRE_ADD_LIMITED_CASHITEM
swprintf(m_wszQuery, L"{?=CALL dbo.P_MakeGift(%I64d,%d,%d,'%S',N'%s',%d,%d,%d,'%S',?,%d,'%S')}", biCharacterDBID, bPCBang, nItemSN, pszSelectItemIDs, pMemo, nLifeSpan, nPayMethodCode, iOrderKey, pIp, bNewFlag, pszSelectItemOptions);
#endif //#ifdef PRE_ADD_LIMITED_CASHITEM
RetCode = SQLPrepare(m_hstmt, m_wszQuery, SQL_NTSL);
if (CheckRetCode(RetCode, L"SQLPrepare") == ERROR_NONE)
{
int nNo = 1;
SQLBindParameter(m_hstmt, nNo++, SQL_PARAM_OUTPUT, SQL_INTEGER, SQL_INTEGER, sizeof(int), 0, &nResult, sizeof(int), &cblen);
SQLBindParameter(m_hstmt, nNo++, SQL_PARAM_OUTPUT, SQL_C_SBIGINT, SQL_BIGINT, sizeof(INT64), 0, &biPurchaseOrderID, sizeof(INT64), &cblen);
RetCode = SQLExecute(m_hstmt);
CheckRetCode(RetCode, L"SQLExecute");
}
return nResult;
}
int CDNSQLMembership::QueryAddGuildWarMakeGiftQueue(INT64 biCharacterDBID, int nItemSN, const char *pszSelectItemIDs, WCHAR *pMemo, int nLifeSpan, int nPayMethodCode, int nMatchTypeCode , char *pIp, bool bNewFlag)
{
CQueryTimeLog QueryTimeLog( "[Membership]P_AddGuildWarMakeGiftQueue" );
if (CheckConnect() < ERROR_NONE){
g_Log.Log(LogType::_ERROR, 0, 0, biCharacterDBID, 0, L"[QueryAddGuildWarMakeGiftQueue] CheckConnect Fail\r\n");
return ERROR_DB;
}
SQLRETURN RetCode;
SQLLEN cblen;
int nResult = ERROR_DB;
memset(&m_wszQuery, 0, sizeof(m_wszQuery));
swprintf(m_wszQuery, L"{?=CALL dbo.P_AddGuildWarMakeGiftQueue(%I64d,'0',%d,'%S',N'%s',%d,%d,%d,'%S','0',%d)}", biCharacterDBID, nItemSN, pszSelectItemIDs, pMemo, nLifeSpan, nPayMethodCode, nMatchTypeCode, pIp, bNewFlag);
RetCode = SQLPrepare(m_hstmt, m_wszQuery, SQL_NTSL);
if (CheckRetCode(RetCode, L"SQLPrepare") == ERROR_NONE)
{
int nNo = 1;
SQLBindParameter(m_hstmt, nNo++, SQL_PARAM_OUTPUT, SQL_INTEGER, SQL_INTEGER, sizeof(int), 0, &nResult, sizeof(int), &cblen);
RetCode = SQLExecute(m_hstmt);
CheckRetCode(RetCode, L"SQLExecute");
}
return nResult;
}
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>..<2E><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>..
int CDNSQLMembership::QueryAddGiftSendSchedule(const char *pszCharacterDBIDs, int nItemSN, const char *pszSelectItemIDs, WCHAR *pMemo, int nLifeSpan, int nPayMethodCode, char *pIp, bool bNewFlag)
{
CQueryTimeLog QueryTimeLog( "[Membership]P_AddGiftSendSchedule" );
if (CheckConnect() < ERROR_NONE){
g_Log.Log(LogType::_ERROR, L"[QueryAddGiftSendSchedule] CheckConnect Fail\r\n");
return ERROR_DB;
}
SQLRETURN RetCode;
SQLLEN cblen;
int nResult = ERROR_DB;
memset(&m_wszQuery, 0, sizeof(m_wszQuery));
swprintf(m_wszQuery, L"{?=CALL dbo.P_AddGiftSendSchedule('1','%S','',%d,'%S',%d,'%S',N'%s',%d,%d)}", pszCharacterDBIDs, nLifeSpan, pIp, nItemSN, pszSelectItemIDs, pMemo, nPayMethodCode, bNewFlag);
RetCode = SQLPrepare(m_hstmt, m_wszQuery, SQL_NTSL);
if (CheckRetCode(RetCode, L"SQLPrepare") == ERROR_NONE)
{
int nNo = 1;
SQLBindParameter(m_hstmt, nNo++, SQL_PARAM_OUTPUT, SQL_INTEGER, SQL_INTEGER, sizeof(int), 0, &nResult, sizeof(int), &cblen);
RetCode = SQLExecute(m_hstmt);
CheckRetCode(RetCode, L"SQLExecute");
}
return nResult;
}
int CDNSQLMembership::QueryModGiveFailFlag(INT64 biPurchaseOrderID, int nProductSN, int nItemID, bool bItemGiveFail)
{
CQueryTimeLog QueryTimeLog( "[Membership]P_ModGiveFailFlag" );
memset(&m_wszQuery, 0, sizeof(m_wszQuery));
swprintf(m_wszQuery, L"{?=CALL dbo.P_ModGiveFailFlag(%I64d,%d,%d,%d)}", biPurchaseOrderID, nProductSN, nItemID, bItemGiveFail);
return CommonReturnValueQuery(m_wszQuery);
}
int CDNSQLMembership::QueryModGiveFailFlag2(INT64 biPurchaseOrderDetailID, bool bItemGiveFail)
{
CQueryTimeLog QueryTimeLog( "[Membership]P_ModGiveFailFlag2" );
memset(&m_wszQuery, 0, sizeof(m_wszQuery));
swprintf(m_wszQuery, L"{?=CALL dbo.P_ModGiveFailFlag2(%I64d,%d)}", biPurchaseOrderDetailID, bItemGiveFail);
return CommonReturnValueQuery(m_wszQuery);
}
int CDNSQLMembership::QueryGetListGiveFailItem(INT64 biCharacterDBID, TAGetListGiveFailItem *pA)
{
CQueryTimeLog QueryTimeLog( "[Membership]P_GetListGiveFailItem" );
if (CheckConnect() < ERROR_NONE){
g_Log.Log(LogType::_ERROR, 0, 0, biCharacterDBID, 0, L"[QueryGetListGiveFailItem] Check Connect Fail\r\n");
return ERROR_DB;
}
int nVersion = 14;
SQLRETURN RetCode;
SQLLEN cblen;
int nResult = ERROR_DB;
memset(&m_wszQuery, 0, sizeof(m_wszQuery));
swprintf(m_wszQuery, L"{?=CALL dbo.P_GetListGiveFailItem(%I64d, %d)}", biCharacterDBID, nVersion);
pA->nCount = 0;
RetCode = SQLPrepare(m_hstmt, m_wszQuery, SQL_NTSL);
if (CheckRetCode(RetCode, L"SQLPrepare") == ERROR_NONE){
SQLBindParameter(m_hstmt, 1, SQL_PARAM_OUTPUT, SQL_INTEGER, SQL_INTEGER, sizeof(int), 0, &nResult, sizeof(int), &cblen);
RetCode = SQLExecute(m_hstmt);
if (CheckRetCode(RetCode, L"SQLExecute") == ERROR_NONE){
DBPacket::TCashFailItem FailItem = { 0, };
int nNo = 1;
SQLBindCol(m_hstmt, nNo++, SQL_C_SBIGINT, &FailItem.biPurchaseOrderID, sizeof(INT64), &cblen);
SQLBindCol(m_hstmt, nNo++, SQL_C_SBIGINT, &FailItem.biSenderCharacterDBID, sizeof(INT64), &cblen);
SQLBindCol(m_hstmt, nNo++, SQL_BIT, &FailItem.bGift, sizeof(bool), &cblen);
SQLBindCol(m_hstmt, nNo++, SQL_INTEGER, &FailItem.nItemSN, sizeof(int), &cblen);
SQLBindCol(m_hstmt, nNo++, SQL_INTEGER, &FailItem.nItemID, sizeof(int), &cblen);
SQLBindCol(m_hstmt, nNo++, SQL_TINYINT, &FailItem.cItemOption, sizeof(BYTE), &cblen);
SQLBindCol(m_hstmt, nNo++, SQL_INTEGER, &FailItem.nPaidCashAmount, sizeof(int), &cblen);
CheckColumnCount(nNo, "[Membership]P_GetListGiveFailItem");
while(1)
{
memset(&FailItem, 0, sizeof(FailItem));
RetCode = SQLFetch(m_hstmt);
if (RetCode == SQL_NO_DATA){
nResult = ERROR_NONE;
break;
}
if ((CheckRetCode(RetCode, L"SQLFetch") < ERROR_NONE) &&(RetCode != SQL_SUCCESS_WITH_INFO)) break;
pA->CashFailItem[pA->nCount] = FailItem;
pA->nCount++;
if (pA->nCount >= CASHINVENTORYDBMAX){
nResult = ERROR_NONE;
break;
}
}
}
}
SQLCloseCursor(m_hstmt);
return nResult;
}
int CDNSQLMembership::QueryGetCountNotReceivedGift(INT64 biCharacterDBID, OUT int &nGiftCount)
{
CQueryTimeLog QueryTimeLog( "[Membership]P_GetCountNotReceivedGift" );
if (CheckConnect() < ERROR_NONE){
g_Log.Log(LogType::_ERROR, 0, 0, biCharacterDBID, 0, L"[QueryGetCountNotReceivedGift] CheckConnect Fail\r\n");
return ERROR_DB;
}
SQLRETURN RetCode;
SQLLEN cblen;
int nResult = ERROR_DB;
memset(&m_wszQuery, 0, sizeof(m_wszQuery));
#if defined(PRE_ADD_GIFT_RETURN)
swprintf(m_wszQuery, L"{?=CALL dbo.P_GetCountNotReceivedGift(%I64d,?,6)}", biCharacterDBID);
#else
swprintf(m_wszQuery, L"{?=CALL dbo.P_GetCountNotReceivedGift(%I64d,?)}", biCharacterDBID);
#endif
RetCode = SQLPrepare(m_hstmt, m_wszQuery, SQL_NTSL);
if (CheckRetCode(RetCode, L"SQLPrepare") == ERROR_NONE)
{
int nNo = 1;
SQLBindParameter(m_hstmt, nNo++, SQL_PARAM_OUTPUT, SQL_INTEGER, SQL_INTEGER, sizeof(int), 0, &nResult, sizeof(int), &cblen);
SQLBindParameter(m_hstmt, nNo++, SQL_PARAM_OUTPUT, SQL_INTEGER, SQL_INTEGER, sizeof(int), 0, &nGiftCount, sizeof(int), &cblen);
RetCode = SQLExecute(m_hstmt);
CheckRetCode(RetCode, L"SQLExecute");
}
return nResult;
}
int CDNSQLMembership::QueryGetListGiftBox(INT64 biCharacterDBID, OUT char &cCount, OUT TGiftInfo *GiftBoxList)
{
CQueryTimeLog QueryTimeLog( "[Membership]P_GetListGiftBox" );
if (CheckConnect() < ERROR_NONE){
g_Log.Log(LogType::_ERROR, 0, 0, biCharacterDBID, 0, L"[QueryGetListGiftBox] Check Connect Fail\r\n");
return ERROR_DB;
}
SQLRETURN RetCode;
SQLLEN cblen;
int nResult = ERROR_DB;
memset(&m_wszQuery, 0, sizeof(m_wszQuery));
int nVersion = 9;
swprintf(m_wszQuery, L"{?=CALL dbo.P_GetListGiftBox(%I64d,%d)}", biCharacterDBID, nVersion);
cCount = 0;
RetCode = SQLPrepare(m_hstmt, m_wszQuery, SQL_NTSL);
if (CheckRetCode(RetCode, L"SQLPrepare") == ERROR_NONE){
SQLBindParameter(m_hstmt, 1, SQL_PARAM_OUTPUT, SQL_INTEGER, SQL_INTEGER, sizeof(int), 0, &nResult, sizeof(int), &cblen);
RetCode = SQLExecute(m_hstmt);
if (CheckRetCode(RetCode, L"SQLExecute") == ERROR_NONE){
TGiftInfo Gift = { 0, };
INT64 biSenderCharacterDBID = 0;
TIMESTAMP_STRUCT OrderDate = {0,}, GiftExpireDate = {0,};
WCHAR wszItemID[512] = {0, }, wszItemOptions[512] = {0,};
bool bGiftReturn;
int nNo = 1;
SQLBindCol(m_hstmt, nNo++, SQL_TINYINT, &Gift.cPayMethodCode, sizeof(char), &cblen);
SQLBindCol(m_hstmt, nNo++, SQL_C_SBIGINT, &Gift.nGiftDBID, sizeof(INT64), &cblen);
SQLBindCol(m_hstmt, nNo++, SQL_C_SBIGINT, &biSenderCharacterDBID, sizeof(INT64), &cblen);
SQLBindCol(m_hstmt, nNo++, SQL_WCHAR, Gift.wszSenderName, sizeof(WCHAR) * MAILNAMELENMAX, &cblen);
SQLBindCol(m_hstmt, nNo++, SQL_INTEGER, &Gift.nItemSN, sizeof(int), &cblen);
SQLBindCol(m_hstmt, nNo++, SQL_WCHAR, wszItemID, sizeof(WCHAR) * 512, &cblen);
SQLBindCol(m_hstmt, nNo++, SQL_WCHAR, wszItemOptions, sizeof(WCHAR) * 512, &cblen);
SQLBindCol(m_hstmt, nNo++, SQL_TIMESTAMP, &OrderDate, sizeof(TIMESTAMP_STRUCT), &cblen);
SQLBindCol(m_hstmt, nNo++, SQL_WCHAR, Gift.wszMessage, sizeof(WCHAR) * GIFTMESSAGEMAX, &cblen);
SQLBindCol(m_hstmt, nNo++, SQL_TIMESTAMP, &GiftExpireDate, sizeof(TIMESTAMP_STRUCT), &cblen);
SQLBindCol(m_hstmt, nNo++, SQL_BIT, &bGiftReturn, sizeof(bool), &cblen);
SQLBindCol(m_hstmt, nNo++, SQL_BIT, &Gift.bNewFlag, sizeof(bool), &cblen);
CheckColumnCount(nNo, "[Membership]P_GetListGiftBox");
while(1)
{
memset(&Gift, 0, sizeof(Gift));
memset(&OrderDate, 0, sizeof(OrderDate));
memset(&GiftExpireDate, 0, sizeof(GiftExpireDate));
memset(&wszItemID, 0, sizeof(wszItemID));
memset(&wszItemOptions, 0, sizeof(wszItemOptions));
biSenderCharacterDBID = 0;
bGiftReturn = false;
RetCode = SQLFetch(m_hstmt);
if (RetCode == SQL_NO_DATA){
nResult = ERROR_NONE;
break;
}
if ((CheckRetCode(RetCode, L"SQLFetch") < ERROR_NONE) &&(RetCode != SQL_SUCCESS_WITH_INFO)) break;
CTimeParamSet OrderTime(&QueryTimeLog, Gift.tOrderDate, OrderDate, 0, 0, biCharacterDBID);
if (!OrderTime.IsValid())
{
nResult = ERROR_DB;
break;
}
CTimeParamSet ExpireTime(&QueryTimeLog, Gift.tGiftExpireDate, GiftExpireDate, 0, 0, biCharacterDBID);
if (!ExpireTime.IsValid())
{
nResult = ERROR_DB;
break;
}
std::vector<std::wstring> IDTokens, OptionTokens;
TokenizeW(wszItemID, IDTokens, L",");
int nItemID = 0;
if (!IDTokens.empty())
nItemID = _wtoi(IDTokens[0].c_str());
TokenizeW(wszItemOptions, OptionTokens, L",");
int nItemOptions = 0;
if (!OptionTokens.empty())
nItemOptions = _wtoi(OptionTokens[0].c_str());
Gift.nItemID = nItemID;
Gift.cItemOption = nItemOptions;
#if defined(PRE_ADD_GIFT_RETURN)
Gift.bGiftReturn = bGiftReturn;
#endif
GiftBoxList[cCount] = Gift;
cCount++;
if (cCount >= GIFTBOXLISTMAX){
nResult = ERROR_NONE;
break;
}
}
}
}
SQLCloseCursor(m_hstmt);
return nResult;
}
int CDNSQLMembership::QueryGetListItemOfGift(INT64 biPurchaseOrderID, OUT int &nItemSN, OUT int &nItemPrice, OUT std::vector<DBPacket::TItemIDOption> &VecItemList)
{
CQueryTimeLog QueryTimeLog( "[Membership]P_GetListItemOfGift" );
if (CheckConnect() < ERROR_NONE){
g_Log.Log(LogType::_ERROR, L"[QueryGetListItemOfGift] Check Connect Fail\r\n");
return ERROR_DB;
}
SQLRETURN RetCode;
SQLLEN cblen;
int nResult = ERROR_DB;
memset(&m_wszQuery, 0, sizeof(m_wszQuery));
int nVersion = 2;
swprintf(m_wszQuery, L"{?=CALL dbo.P_GetListItemOfGift(%I64d,%d)}", biPurchaseOrderID, nVersion);
RetCode = SQLPrepare(m_hstmt, m_wszQuery, SQL_NTSL);
if (CheckRetCode(RetCode, L"SQLPrepare") == ERROR_NONE){
SQLBindParameter(m_hstmt, 1, SQL_PARAM_OUTPUT, SQL_INTEGER, SQL_INTEGER, sizeof(int), 0, &nResult, sizeof(int), &cblen);
RetCode = SQLExecute(m_hstmt);
if (CheckRetCode(RetCode, L"SQLExecute") == ERROR_NONE){
int nNo = 1;
int nItemID = 0;
char cOption = -1;
SQLBindCol(m_hstmt, nNo++, SQL_INTEGER, &nItemSN, sizeof(int), &cblen);
SQLBindCol(m_hstmt, nNo++, SQL_INTEGER, &nItemPrice, sizeof(int), &cblen);
SQLBindCol(m_hstmt, nNo++, SQL_INTEGER, &nItemID, sizeof(int), &cblen);
SQLBindCol(m_hstmt, nNo++, SQL_TINYINT, &cOption, sizeof(BYTE), &cblen);
CheckColumnCount(nNo, "[Membership]P_GetListItemOfGift");
while(1)
{
RetCode = SQLFetch(m_hstmt);
if (RetCode == SQL_NO_DATA)
{
nResult = ERROR_NONE;
break;
}
if ((CheckRetCode(RetCode, L"SQLFetch") < ERROR_NONE) &&(RetCode != SQL_SUCCESS_WITH_INFO) )
break;
if (nItemID > 0){
DBPacket::TItemIDOption IDOption = {0,};
IDOption.nItemID = nItemID;
IDOption.cOption = cOption;
VecItemList.push_back(IDOption);
}
}
}
}
SQLCloseCursor(m_hstmt);
return nResult;
}
int CDNSQLMembership::QueryModGiftReceiveFlag(INT64 biPurchaseOrderID, OUT INT64 &biReplySenderCharacterDBID, OUT WCHAR *pReplyReceiverCharName, OUT INT64 &biGiftSenderCharacterDBID, OUT int &nPaidCashAmount)
{
CQueryTimeLog QueryTimeLog( "[Membership]P_ModGiftReceiveFlag" );
if (CheckConnect() < ERROR_NONE){
g_Log.Log(LogType::_ERROR, L"[QueryModGiftReceiveFlag] Check Connect Fail\r\n");
return ERROR_DB;
}
SQLRETURN RetCode;
SQLLEN cblen;
int nResult = ERROR_DB;
memset(&m_wszQuery, 0, sizeof(m_wszQuery));
swprintf(m_wszQuery, L"{?=CALL dbo.P_ModGiftReceiveFlag(%I64d,?,?,?,?)}", biPurchaseOrderID);
RetCode = SQLPrepare(m_hstmt, m_wszQuery, SQL_NTSL);
if (CheckRetCode(RetCode, L"SQLPrepare") == ERROR_NONE){
int nNo = 1;
SQLBindParameter(m_hstmt, nNo++, SQL_PARAM_OUTPUT, SQL_INTEGER, SQL_INTEGER, sizeof(int), 0, &nResult, sizeof(int), &cblen);
SQLBindParameter(m_hstmt, nNo++, SQL_PARAM_OUTPUT, SQL_C_SBIGINT, SQL_BIGINT, sizeof(INT64), 0, &biReplySenderCharacterDBID, sizeof(INT64), &cblen);
SQLBindParameter(m_hstmt, nNo++, SQL_PARAM_OUTPUT, SQL_WCHAR, SQL_WVARCHAR, sizeof(WCHAR) * NAMELENMAX, 0, pReplyReceiverCharName, sizeof(WCHAR) * NAMELENMAX, &cblen);
SQLBindParameter(m_hstmt, nNo++, SQL_PARAM_OUTPUT, SQL_C_SBIGINT, SQL_BIGINT, sizeof(INT64), 0, &biGiftSenderCharacterDBID, sizeof(INT64), &cblen);
SQLBindParameter(m_hstmt, nNo++, SQL_PARAM_OUTPUT, SQL_INTEGER, SQL_INTEGER, sizeof(int), 0, &nPaidCashAmount, sizeof(int), &cblen);
RetCode = SQLExecute(m_hstmt);
CheckRetCode(RetCode, L"SQLExecute");
}
return nResult;
}
#if defined(PRE_ADD_GIFT_RETURN)
int CDNSQLMembership::QueryModGiftRejectFlag(INT64 biPurchaseOrderID, TAGiftReturn* pGiftReturn)
{
CQueryTimeLog QueryTimeLog( "[Membership]P_ModGiftRejectFlag" );
if (CheckConnect() < ERROR_NONE){
g_Log.Log(LogType::_ERROR, L"[QueryModGiftRejectFlag] Check Connect Fail\r\n");
return ERROR_DB;
}
SQLRETURN RetCode;
SQLLEN cblen;
int nResult = ERROR_DB;
memset(&m_wszQuery, 0, sizeof(m_wszQuery));
swprintf(m_wszQuery, L"{?=CALL dbo.P_ModGiftRejectFlag(%I64d,1,?,?,?)}", biPurchaseOrderID);
RetCode = SQLPrepare(m_hstmt, m_wszQuery, SQL_NTSL);
if (CheckRetCode(RetCode, L"SQLPrepare") == ERROR_NONE)
{
SQLBindParameter(m_hstmt, 1, SQL_PARAM_OUTPUT, SQL_INTEGER, SQL_INTEGER, sizeof(int), 0, &nResult, sizeof(int), &cblen);
SQLBindParameter(m_hstmt, 2, SQL_PARAM_OUTPUT, SQL_INTEGER, SQL_INTEGER, sizeof(int), 0, &pGiftReturn->nReceiverAccountDBID, sizeof(int), &cblen);
SQLBindParameter(m_hstmt, 3, SQL_PARAM_OUTPUT, SQL_C_SBIGINT, SQL_BIGINT, sizeof(INT64), 0, &pGiftReturn->biReceiverCharacterDBID, sizeof(INT64), &cblen);
SQLBindParameter(m_hstmt, 4, SQL_PARAM_OUTPUT, SQL_INTEGER, SQL_INTEGER, sizeof(int), 0, &pGiftReturn->nReceiverTotalMailCount, sizeof(int), &cblen);
RetCode = SQLExecute(m_hstmt);
CheckRetCode(RetCode, L"SQLExecute");
}
return nResult;
}
#endif //#if defined(PRE_ADD_GIFT_RETURN)
int CDNSQLMembership::QueryModCharacterName(TQChangeCharacterName* pQ, TAChangeCharacterName* pA)
{
CQueryTimeLog QueryTimeLog( "[Membership]P_ModCharacterName" );
if (CheckConnect() < ERROR_NONE){
g_Log.Log(LogType::_ERROR, pQ->cWorldSetID, pQ->nAccountDBID, pQ->nCharacterDBID, 0, L"[QueryModCharacterName] Check Connect Fail\r\n");
return ERROR_DB;
}
SQLRETURN RetCode;
SQLLEN cblen;
int nResult = ERROR_DB;
memset( m_wszQuery, 0, sizeof(m_wszQuery) );
swprintf( m_wszQuery, L"{?=CALL dbo.P_ModCharacterName(%I64d,N'%s',%d,%d,%d,%d,?)}",
pQ->nCharacterDBID,
pQ->wszCharacterName,
pQ->btChangeCode,
10080, // 7<>ϰ<EFBFBD>
pQ->nReservedPeriodDay,
pQ->nNextPeriodDay);
TIMESTAMP_STRUCT NextDate = {0,};
RetCode = SQLPrepare(m_hstmt, m_wszQuery, SQL_NTSL);
if (CheckRetCode(RetCode, L"SQLPrepare") == ERROR_NONE)
{
SQLBindParameter(m_hstmt, 1, SQL_PARAM_OUTPUT, SQL_INTEGER, SQL_INTEGER, sizeof(int), 0, &nResult, sizeof(int), &cblen);
SQLBindParameter(m_hstmt, 2, SQL_PARAM_OUTPUT, SQL_C_TIMESTAMP, SQL_TIMESTAMP, SQL_TIMESTAMP_LEN, 0, &NextDate, sizeof(TIMESTAMP_STRUCT), &cblen);
RetCode = SQLExecute(m_hstmt);
CheckRetCode( RetCode, L"SQLExecute" );
CTimeParamSet NextTime(&QueryTimeLog, pA->tNextChangeDate, NextDate, pQ->cWorldSetID, pQ->nAccountDBID, pQ->nCharacterDBID);
if (!NextTime.IsValid()) return ERROR_DB;
}
return nResult;
}
int CDNSQLMembership::QueryIncreaseCharacterMaxCount(UINT nAccountDBID, char cAddCount, char cLimitCount, char &cCharMaxCount)
{
CQueryTimeLog QueryTimeLog( "[Membership]P_IncreaseCharacterMaxCount" );
if (CheckConnect() < ERROR_NONE){
g_Log.Log(LogType::_ERROR, 0, nAccountDBID, 0, 0, L"[QueryIncreaseCharacterMaxCount] Check Connect Fail\r\n");
return ERROR_DB;
}
SQLRETURN RetCode;
SQLLEN cblen;
int nResult = ERROR_DB;
memset(&m_wszQuery, 0, sizeof(m_wszQuery));
swprintf(m_wszQuery, L"{?=CALL dbo.P_IncreaseCharacterMaxCount(%d,%d,%d,?)}", nAccountDBID, cAddCount, cLimitCount);
RetCode = SQLPrepare(m_hstmt, m_wszQuery, SQL_NTSL);
if (CheckRetCode(RetCode, L"SQLPrepare") == ERROR_NONE){
SQLBindParameter(m_hstmt, 1, SQL_PARAM_OUTPUT, SQL_INTEGER, SQL_INTEGER, sizeof(int), 0, &nResult, sizeof(int), &cblen);
SQLBindParameter(m_hstmt, 2, SQL_PARAM_OUTPUT, SQL_TINYINT, SQL_TINYINT, sizeof(char), 0, &cCharMaxCount, sizeof(char), &cblen);
RetCode = SQLExecute(m_hstmt);
CheckRetCode(RetCode, L"SQLExecute");
}
return nResult;
}
int CDNSQLMembership::QueryGetCharacterMaxCount(UINT nAccountDBID, char &cCharMaxCount)
{
CQueryTimeLog QueryTimeLog( "[Membership]P_GetCharacterMaxCount" );
if (CheckConnect() < ERROR_NONE){
g_Log.Log(LogType::_ERROR, 0, nAccountDBID, 0, 0, L"[QueryGetCharacterMaxCount] Check Connect Fail\r\n");
return ERROR_DB;
}
SQLRETURN RetCode;
SQLLEN cblen;
int nResult = ERROR_DB;
memset(&m_wszQuery, 0, sizeof(m_wszQuery));
swprintf(m_wszQuery, L"{?=CALL dbo.P_GetCharacterMaxCount(%d,?)}", nAccountDBID);
RetCode = SQLPrepare(m_hstmt, m_wszQuery, SQL_NTSL);
if (CheckRetCode(RetCode, L"SQLPrepare") == ERROR_NONE){
SQLBindParameter(m_hstmt, 1, SQL_PARAM_OUTPUT, SQL_INTEGER, SQL_INTEGER, sizeof(int), 0, &nResult, sizeof(int), &cblen);
SQLBindParameter(m_hstmt, 2, SQL_PARAM_OUTPUT, SQL_TINYINT, SQL_TINYINT, sizeof(char), 0, &cCharMaxCount, sizeof(char), &cblen);
RetCode = SQLExecute(m_hstmt);
CheckRetCode(RetCode, L"SQLExecute");
}
return nResult;
}
int CDNSQLMembership::QueryModCharacterSlotCount(INT64 biCharacterDBID, char cAddCount, char &cCharMaxCount)
{
CQueryTimeLog QueryTimeLog( "[Membership]P_ModCharacterSlotCount" );
if (CheckConnect() < ERROR_NONE){
g_Log.Log(LogType::_ERROR, 0, 0, biCharacterDBID, 0, L"[QueryModCharacterSlotCount] Check Connect Fail\r\n");
return ERROR_DB;
}
SQLRETURN RetCode;
SQLLEN cblen;
int nResult = ERROR_DB;
memset(&m_wszQuery, 0, sizeof(m_wszQuery));
swprintf(m_wszQuery, L"{?=CALL dbo.P_ModCharacterSlotCount(%I64d,%d,?)}", biCharacterDBID, cAddCount);
RetCode = SQLPrepare(m_hstmt, m_wszQuery, SQL_NTSL);
if (CheckRetCode(RetCode, L"SQLPrepare") == ERROR_NONE){
SQLBindParameter(m_hstmt, 1, SQL_PARAM_OUTPUT, SQL_INTEGER, SQL_INTEGER, sizeof(int), 0, &nResult, sizeof(int), &cblen);
SQLBindParameter(m_hstmt, 2, SQL_PARAM_OUTPUT, SQL_TINYINT, SQL_TINYINT, sizeof(char), 0, &cCharMaxCount, sizeof(char), &cblen);
RetCode = SQLExecute(m_hstmt);
CheckRetCode(RetCode, L"SQLExecute");
}
return nResult;
}
int CDNSQLMembership::QueryGetCharacterSlotCount(UINT nAccountDBID, int nWorldID, INT64 biCharacterDBID, char &cCharMaxCount)
{
CQueryTimeLog QueryTimeLog( "[Membership]P_GetCharacterSlotCount" );
if (CheckConnect() < ERROR_NONE){
g_Log.Log(LogType::_ERROR, nWorldID, nAccountDBID, biCharacterDBID, 0, L"[QueryGetCharacterSlotCount] Check Connect Fail\r\n");
return ERROR_DB;
}
SQLRETURN RetCode;
SQLLEN cblen;
CDNSqlLen SqlLen[2];
int nResult = ERROR_DB;
memset(&m_wszQuery, 0, sizeof(m_wszQuery));
swprintf(m_wszQuery, L"{?=CALL dbo.P_GetCharacterSlotCount(%I64d,?,?,?)}", biCharacterDBID);
RetCode = SQLPrepare(m_hstmt, m_wszQuery, SQL_NTSL);
if (CheckRetCode(RetCode, L"SQLPrepare") == ERROR_NONE){
SQLBindParameter(m_hstmt, 1, SQL_PARAM_OUTPUT, SQL_INTEGER, SQL_INTEGER, sizeof(int), 0, &nResult, sizeof(int), &cblen);
SQLBindParameter(m_hstmt, 2, SQL_PARAM_OUTPUT, SQL_TINYINT, SQL_TINYINT, sizeof(char), 0, &cCharMaxCount, sizeof(char), &cblen);
SQLBindParameter(m_hstmt, 3, SQL_PARAM_INPUT, SQL_INTEGER, SQL_INTEGER, sizeof(UINT), 0, &nAccountDBID, sizeof(UINT), SqlLen[0].GetNull(nAccountDBID <= 0, sizeof(UINT)));
SQLBindParameter(m_hstmt, 4, SQL_PARAM_INPUT, SQL_INTEGER, SQL_INTEGER, sizeof(int), 0, &nWorldID, sizeof(int), SqlLen[1].GetNull(nWorldID <= 0, sizeof(int)));
RetCode = SQLExecute(m_hstmt);
CheckRetCode(RetCode, L"SQLExecute");
}
return nResult;
}
#if defined(PRE_ADD_PETALTRADE)
int CDNSQLMembership::QueryPurchaseTradeItemByPetal(INT64 biCharacterDBID, int nPetalPrice)
{
CQueryTimeLog QueryTimeLog( "[Membership]P_PurchaseTradeItemByPetal" );
memset( m_wszQuery, 0, sizeof(m_wszQuery) );
swprintf( m_wszQuery, L"{?=CALL dbo.P_PurchaseTradeItemByPetal(%I64d,%d)}", biCharacterDBID, nPetalPrice);
return CommonReturnValueQuery(m_wszQuery);
}
#endif
#if defined(PRE_SPECIALBOX)
int CDNSQLMembership::QueryAddEventReward(TQAddEventReward *pQ, TAAddEventReward *pA)
{
CQueryTimeLog QueryTimeLog("[Membership]P_AddEventReward");
if (CheckConnect() < ERROR_NONE){
g_Log.Log(LogType::_ERROR, pQ->cWorldSetID, pQ->nAccountDBID, pQ->biCharacterDBID, 0, L"[QueryAddEventReward] CheckConnect Fail\r\n");
return ERROR_DB;
}
SQLRETURN RetCode;
SQLLEN cblen;
CDNSqlLen SqlLen[2];
int nResult = ERROR_DB;
memset(&m_wszQuery, 0, sizeof(m_wszQuery));
std::wstring wstrAccountDBID, wstrAccountName, wstrCharacterDBID, wstrCharacterName, wstrItems;
g_pExtManager->GetXMLAccountDBID(pQ->nAccountDBID, wstrAccountDBID);
g_pExtManager->GetXMLAccountName(pQ->wszAccountName, wstrAccountName);
g_pExtManager->GetXMLCharacterDBID(pQ->biCharacterDBID, wstrCharacterDBID);
g_pExtManager->GetXMLCharacterName(pQ->wszCharacterName, wstrCharacterName);
g_pExtManager->GetXMLItems(pQ->cCount, pQ->EventRewardItems, wstrItems);
int nExpirationPeriod = g_pExtManager->GetGlobalWeightIntValue(SpecialBoxKeepPeriod);
std::wstring wstrEventName = FormatW(L"%d", pQ->nEventNameUIString);
std::wstring wstrSenderName = FormatW(L"%d", pQ->nSenderNameUIString);
std::wstring wstrContent = FormatW(L"%d", pQ->nContentUIString);
swprintf(m_wszQuery, L"{?=CALL dbo.P_AddEventReward(%d,%d,N'%s',N'%s',N'%s',N'%s',%d,%d,%d,%d,%d,N'%s',N'%s',N'%s',%d,N'%s',%d,?)}",
pQ->cReceiveTypeCode, pQ->cTargetTypeCode, wstrAccountDBID.c_str(), wstrAccountName.c_str(), wstrCharacterDBID.c_str(), wstrCharacterName.c_str(), pQ->cWorldSetID, pQ->cTargetClassCode,
pQ->cTargetMinLevel, pQ->cTargetMaxLevel, nExpirationPeriod, wstrEventName.c_str(), wstrSenderName.c_str(), wstrContent.c_str(), pQ->nRewardCoin, wstrItems.c_str(), pQ->cEventRewardTypeCode);
RetCode = SQLPrepare(m_hstmt, m_wszQuery, SQL_NTSL);
if (CheckRetCode(RetCode, L"SQLPrepare") == ERROR_NONE)
{
int nNo = 1;
SQLBindParameter(m_hstmt, nNo++, SQL_PARAM_OUTPUT, SQL_INTEGER, SQL_INTEGER, sizeof(int), 0, &nResult, sizeof(int), &cblen);
SQLBindParameter(m_hstmt, nNo++, SQL_PARAM_OUTPUT, SQL_INTEGER, SQL_INTEGER, sizeof(int), 0, &pA->nEventRewardID, sizeof(int), &cblen);
RetCode = SQLExecute(m_hstmt);
CheckRetCode(RetCode, L"SQLExecute");
}
return nResult;
}
int CDNSQLMembership::QueryGetCountEventReward(int nAccountDBID, INT64 biCharacterDBID, int &nEventTotalCount)
{
CQueryTimeLog QueryTimeLog("[Membership]P_GetCountEventReward");
if (CheckConnect() < ERROR_NONE){
g_Log.Log(LogType::_ERROR, 0, nAccountDBID, biCharacterDBID, 0, L"[QueryGetCountEventReward] Check Connect Fail\r\n");
return ERROR_DB;
}
SQLRETURN RetCode;
SQLLEN cblen;
nEventTotalCount = 0;
int nResult = ERROR_DB;
memset(&m_wszQuery, 0, sizeof(m_wszQuery));
swprintf(m_wszQuery, L"{?=CALL dbo.P_GetCountEventReward(%d,%I64d)}", nAccountDBID, biCharacterDBID);
RetCode = SQLPrepare(m_hstmt, m_wszQuery, SQL_NTSL);
if (CheckRetCode(RetCode, L"SQLPrepare") == ERROR_NONE){
SQLBindParameter(m_hstmt, 1, SQL_PARAM_OUTPUT, SQL_INTEGER, SQL_INTEGER, sizeof(int), 0, &nResult, sizeof(int), &cblen);
RetCode = SQLExecute(m_hstmt);
if (CheckRetCode(RetCode, L"SQLExecute") == ERROR_NONE){
int nNo = 1;
SQLBindCol(m_hstmt, nNo++, SQL_INTEGER, &nEventTotalCount, sizeof(int), &cblen);
CheckColumnCount(nNo, "[Membership]P_GetCountEventReward");
while(1)
{
RetCode = SQLFetch(m_hstmt);
if (RetCode == SQL_NO_DATA)
{
nResult = ERROR_NONE;
break;
}
if ((CheckRetCode(RetCode, L"SQLFetch") < ERROR_NONE) &&(RetCode != SQL_SUCCESS_WITH_INFO) )
break;
}
}
}
SQLCloseCursor(m_hstmt);
return nResult;
}
int CDNSQLMembership::QueryGetListEventReward(TQGetListEventReward *pQ, TAGetListEventReward *pA)
{
CQueryTimeLog QueryTimeLog("[Membership]P_GetListEventReward");
if (CheckConnect() < ERROR_NONE){
g_Log.Log(LogType::_ERROR, pQ->cWorldSetID, pQ->nAccountDBID, pQ->biCharacterDBID, 0, L"[QueryGetListEventReward] Check Connect Fail\r\n");
return ERROR_DB;
}
SQLRETURN RetCode;
SQLLEN cblen;
int nResult = ERROR_DB;
memset(&m_wszQuery, 0, sizeof(m_wszQuery));
swprintf(m_wszQuery, L"{?=CALL dbo.P_GetListEventReward(%d,%I64d,%d,%d,%d)}", pQ->nAccountDBID, pQ->biCharacterDBID, pQ->cWorldSetID, pQ->cClassCode, pQ->nLevel);
RetCode = SQLPrepare(m_hstmt, m_wszQuery, SQL_NTSL);
if (CheckRetCode(RetCode, L"SQLPrepare") == ERROR_NONE){
SQLBindParameter(m_hstmt, 1, SQL_PARAM_OUTPUT, SQL_INTEGER, SQL_INTEGER, sizeof(int), 0, &nResult, sizeof(int), &cblen);
RetCode = SQLExecute(m_hstmt);
if (CheckRetCode(RetCode, L"SQLExecute") == ERROR_NONE){
int nNo = 1;
TSpecialBoxInfo BoxInfo = {0,};
TIMESTAMP_STRUCT ReserveDate, ExpirationDate;
WCHAR wszEventName[MAILTITLELENMAX];
SQLBindCol(m_hstmt, nNo++, SQL_INTEGER, &BoxInfo.nEventRewardID, sizeof(int), &cblen);
SQLBindCol(m_hstmt, nNo++, SQL_TINYINT, &BoxInfo.cReceiveTypeCode, sizeof(BYTE), &cblen);
SQLBindCol(m_hstmt, nNo++, SQL_TINYINT, &BoxInfo.cTargetTypeCode, sizeof(BYTE), &cblen);
SQLBindCol(m_hstmt, nNo++, SQL_TINYINT, &BoxInfo.cWorldID, sizeof(BYTE), &cblen);
SQLBindCol(m_hstmt, nNo++, SQL_TINYINT, &BoxInfo.cTargetClassCode, sizeof(BYTE), &cblen);
SQLBindCol(m_hstmt, nNo++, SQL_TINYINT, &BoxInfo.cTargetMinLevel, sizeof(BYTE), &cblen);
SQLBindCol(m_hstmt, nNo++, SQL_TINYINT, &BoxInfo.cTargetMaxLevel, sizeof(BYTE), &cblen);
SQLBindCol(m_hstmt, nNo++, SQL_TIMESTAMP, &ReserveDate, sizeof(TIMESTAMP_STRUCT), &cblen);
SQLBindCol(m_hstmt, nNo++, SQL_TIMESTAMP, &ExpirationDate, sizeof(TIMESTAMP_STRUCT), &cblen);
SQLBindCol(m_hstmt, nNo++, SQL_WCHAR, wszEventName, sizeof(WCHAR) * MAILTITLELENMAX, &cblen);
SQLBindCol(m_hstmt, nNo++, SQL_WCHAR, BoxInfo.wszSenderName, sizeof(WCHAR) * NAMELENMAX, &cblen);
SQLBindCol(m_hstmt, nNo++, SQL_WCHAR, BoxInfo.wszContent, sizeof(WCHAR) * MAILTEXTLENMAX, &cblen);
SQLBindCol(m_hstmt, nNo++, SQL_C_SBIGINT, &BoxInfo.biRewardCoin, sizeof(INT64), &cblen);
SQLBindCol(m_hstmt, nNo++, SQL_TINYINT, &BoxInfo.bSystemSendFlag, sizeof(bool), &cblen);
SQLBindCol(m_hstmt, nNo++, SQL_TINYINT, &BoxInfo.cEventRewardTypeCode, sizeof(char), &cblen);
CheckColumnCount(nNo, "[Membership]P_GetListEventReward");
while(1)
{
memset(&BoxInfo, 0, sizeof(BoxInfo));
memset(&ReserveDate, 0, sizeof(ReserveDate));
memset(&ExpirationDate, 0, sizeof(ExpirationDate));
memset(&wszEventName, 0, sizeof(wszEventName));
RetCode = SQLFetch(m_hstmt);
if (RetCode == SQL_NO_DATA)
{
nResult = ERROR_NONE;
break;
}
if ((CheckRetCode(RetCode, L"SQLFetch") < ERROR_NONE) &&(RetCode != SQL_SUCCESS_WITH_INFO) )
break;
CTimeParamSet ReserveTime(&QueryTimeLog, BoxInfo.tReserveSendDate, ReserveDate, pQ->cWorldSetID, pQ->nAccountDBID, pQ->biCharacterDBID);
CTimeParamSet ExpirationTime(&QueryTimeLog, BoxInfo.tExpirationDate, ExpirationDate, pQ->cWorldSetID, pQ->nAccountDBID, pQ->biCharacterDBID);
if (!ReserveTime.IsValid()){
nResult = ERROR_DB;
break;
}
if (!ExpirationTime.IsValid()){
nResult = ERROR_DB;
break;
}
pA->SpecialBoxInfo[pA->cCount] = BoxInfo;
pA->cCount++;
if (pA->cCount >= SpecialBox::Common::ListMax){
nResult = ERROR_NONE;
break;
}
}
}
}
SQLCloseCursor(m_hstmt);
return nResult;
}
int CDNSQLMembership::QueryGetListEventRewardItem(TQGetListEventRewardItem *pQ, TAGetListEventRewardItem *pA)
{
CQueryTimeLog QueryTimeLog("[Membership]P_GetListEventRewardItem");
if (CheckConnect() < ERROR_NONE){
g_Log.Log(LogType::_ERROR, pQ->cWorldSetID, pQ->nAccountDBID, 0, 0, L"[QueryGetListEventRewardItem] Check Connect Fail\r\n");
return ERROR_DB;
}
SQLRETURN RetCode;
SQLLEN cblen;
int nResult = ERROR_DB;
memset(&m_wszQuery, 0, sizeof(m_wszQuery));
swprintf(m_wszQuery, L"{?=CALL dbo.P_GetListEventRewardItem(%d)}", pQ->nEventRewardID);
RetCode = SQLPrepare(m_hstmt, m_wszQuery, SQL_NTSL);
if (CheckRetCode(RetCode, L"SQLPrepare") == ERROR_NONE){
SQLBindParameter(m_hstmt, 1, SQL_PARAM_OUTPUT, SQL_INTEGER, SQL_INTEGER, sizeof(int), 0, &nResult, sizeof(int), &cblen);
RetCode = SQLExecute(m_hstmt);
if (CheckRetCode(RetCode, L"SQLExecute") == ERROR_NONE){
int nNo = 1;
TSpecialBoxItemInfo BoxItemInfo = {0,};
TIMESTAMP_STRUCT ExpireDate;
INT64 biItemID = 0;
int nIndex = 0;
SQLBindCol(m_hstmt, nNo++, SQL_INTEGER, &nIndex, sizeof(int), &cblen);
SQLBindCol(m_hstmt, nNo++, SQL_BIT, &BoxItemInfo.bCashItem, sizeof(bool), &cblen);
SQLBindCol(m_hstmt, nNo++, SQL_C_SBIGINT, &biItemID, sizeof(INT64), &cblen);
SQLBindCol(m_hstmt, nNo++, SQL_SMALLINT, &BoxItemInfo.RewardItem.wCount, sizeof(short), &cblen);
SQLBindCol(m_hstmt, nNo++, SQL_SMALLINT, &BoxItemInfo.RewardItem.wDur, sizeof(USHORT), &cblen);
SQLBindCol(m_hstmt, nNo++, SQL_INTEGER, &BoxItemInfo.RewardItem.nRandomSeed, sizeof(int), &cblen);
SQLBindCol(m_hstmt, nNo++, SQL_TINYINT, &BoxItemInfo.RewardItem.cLevel, sizeof(char), &cblen);
SQLBindCol(m_hstmt, nNo++, SQL_TINYINT, &BoxItemInfo.RewardItem.cPotential, sizeof(char), &cblen);
SQLBindCol(m_hstmt, nNo++, SQL_BIT, &BoxItemInfo.RewardItem.bSoulbound, sizeof(bool), &cblen);
SQLBindCol(m_hstmt, nNo++, SQL_TINYINT, &BoxItemInfo.RewardItem.cSealCount, sizeof(char), &cblen);
SQLBindCol(m_hstmt, nNo++, SQL_TINYINT, &BoxItemInfo.RewardItem.cOption, sizeof(char), &cblen);
SQLBindCol(m_hstmt, nNo++, SQL_INTEGER, &BoxItemInfo.RewardItem.nLifespan, sizeof(int), &cblen);
SQLBindCol(m_hstmt, nNo++, SQL_BIT, &BoxItemInfo.RewardItem.bEternity, sizeof(bool), &cblen);
SQLBindCol(m_hstmt, nNo++, SQL_TIMESTAMP, &ExpireDate, sizeof(TIMESTAMP_STRUCT), &cblen);
CheckColumnCount(nNo, "[Membership]P_GetListEventRewardItem");
while(1)
{
memset(&BoxItemInfo, 0, sizeof(BoxItemInfo));
memset(&ExpireDate, 0, sizeof(ExpireDate));
biItemID = 0;
RetCode = SQLFetch(m_hstmt);
if (RetCode == SQL_NO_DATA)
{
nResult = ERROR_NONE;
break;
}
if ((CheckRetCode(RetCode, L"SQLFetch") < ERROR_NONE) &&(RetCode != SQL_SUCCESS_WITH_INFO) )
break;
if(!BoxItemInfo.RewardItem.bEternity)
{
CTimeParamSet ExpireTime(&QueryTimeLog, BoxItemInfo.RewardItem.tExpireDate, ExpireDate, pQ->cWorldSetID, pQ->nAccountDBID, 0);
if (!ExpireTime.IsValid())
{
nResult = ERROR_DB;
break;
}
}
else
BoxItemInfo.RewardItem.tExpireDate = 0;
BoxItemInfo.RewardItem.nItemID = (int)biItemID;
pA->SpecialBoxItem[pA->cCount] = BoxItemInfo;
pA->cCount++;
if (pA->cCount >= SpecialBox::Common::RewardSelectMax){
nResult = ERROR_NONE;
break;
}
}
}
}
SQLCloseCursor(m_hstmt);
return nResult;
}
int CDNSQLMembership::QueryAddEventRewardReceiver(int nAccountDBID, INT64 biCharacterDBID, int nEventRewardID)
{
CQueryTimeLog QueryTimeLog("[Membership]P_AddEventRewardReceiver");
memset(m_wszQuery, 0, sizeof(m_wszQuery));
swprintf(m_wszQuery, L"{?=CALL dbo.P_AddEventRewardReceiver(%d,%d,%I64d)}", nEventRewardID, nAccountDBID, biCharacterDBID);
return CommonReturnValueQuery(m_wszQuery);
}
#endif // #if defined(PRE_SPECIALBOX)
#ifdef PRE_ADD_DOORS
int CDNSQLMembership::QueryGetAuthenticationFlag(UINT nAccountDBID, bool &bFlag)
{
CQueryTimeLog QueryTimeLog( "[Membership] P_DRS_GetMobileAuthenticationFlag" );
if (CheckConnect() < ERROR_NONE){
g_Log.Log(LogType::_ERROR, 0, nAccountDBID, 0, 0, L"[QueryGetAuthenticationFlag] Check Connect Fail\r\n");
return ERROR_DB;
}
SQLRETURN RetCode;
SQLLEN cblen;
char szAuthKey[Doors::Common::AuthenticationKey_LenMax];
memset(szAuthKey, 0, sizeof(szAuthKey));
int nResult = ERROR_DB;
memset(&m_wszQuery, 0, sizeof(m_wszQuery));
swprintf(m_wszQuery, L"{?=CALL dbo.P_DRS_GetMobileAuthenticationFlag(%d,?)}", nAccountDBID);
RetCode = SQLPrepare(m_hstmt, m_wszQuery, SQL_NTSL);
if (CheckRetCode(RetCode, L"SQLPrepare") == ERROR_NONE){
SQLBindParameter(m_hstmt, 1, SQL_PARAM_OUTPUT, SQL_INTEGER, SQL_INTEGER, sizeof(int), 0, &nResult, sizeof(int), &cblen);
SQLBindParameter(m_hstmt, 2, SQL_PARAM_OUTPUT, SQL_C_BIT, SQL_BIT, sizeof(bool), 0, &bFlag, sizeof(bool), &cblen);
RetCode = SQLExecute(m_hstmt);
CheckRetCode(RetCode, L"SQLExecute");
}
return nResult;
}
int CDNSQLMembership::QueryGetDoorsAuthentication(UINT nAccountDBID, char * pszAuthKey)
{
if (pszAuthKey == NULL)
return ERROR_DB;
CQueryTimeLog QueryTimeLog( "[Membership]P_DRS_IssueAccountAuthenticationKey" );
if (CheckConnect() < ERROR_NONE){
g_Log.Log(LogType::_ERROR, 0, nAccountDBID, 0, 0, L"[QueryGetDoorsAuthentication] Check Connect Fail\r\n");
return ERROR_DB;
}
SQLRETURN RetCode;
SQLLEN cblen;
char szAuthKey[Doors::Common::AuthenticationKey_LenMax];
memset(szAuthKey, 0, sizeof(szAuthKey));
int nResult = ERROR_DB;
memset(&m_wszQuery, 0, sizeof(m_wszQuery));
swprintf(m_wszQuery, L"{?=CALL dbo.P_DRS_IssueAccountAuthenticationKey(%d,?)}", nAccountDBID);
RetCode = SQLPrepare(m_hstmt, m_wszQuery, SQL_NTSL);
if (CheckRetCode(RetCode, L"SQLPrepare") == ERROR_NONE){
SQLBindParameter(m_hstmt, 1, SQL_PARAM_OUTPUT, SQL_INTEGER, SQL_INTEGER, sizeof(int), 0, &nResult, sizeof(int), &cblen);
SQLBindParameter(m_hstmt, 2, SQL_PARAM_OUTPUT, SQL_CHAR, SQL_VARCHAR, sizeof(szAuthKey), 0, szAuthKey, sizeof(szAuthKey), &cblen);
RetCode = SQLExecute(m_hstmt);
CheckRetCode(RetCode, L"SQLExecute");
}
_strcpy(pszAuthKey, Doors::Common::AuthenticationKey_LenMax, szAuthKey, Doors::Common::AuthenticationKey_LenMax);
return nResult;
}
int CDNSQLMembership::QueryCancelDoorsAuthentication(UINT nAccountDBID)
{
CQueryTimeLog QueryTimeLog( "[Membership]P_DRS_DelAccountAuthentication" );
memset( m_wszQuery, 0, sizeof(m_wszQuery) );
swprintf( m_wszQuery, L"{?=CALL dbo.P_DRS_DelAccountAuthentication(%d)}", nAccountDBID);
return CommonReturnValueQuery(m_wszQuery);
}
#endif //#ifdef PRE_ADD_DOORS
int CDNSQLMembership::QueryModCharacterSortCode(UINT nAccountDBID, BYTE cCharacterSortCode)
{
CQueryTimeLog QueryTimeLog( "[Membership]P_ModCharacterSortCode" );
memset(m_wszQuery, 0, sizeof(m_wszQuery));
swprintf( m_wszQuery, L"{?=CALL dbo.P_ModCharacterSortCode(%d,%d)}", nAccountDBID, cCharacterSortCode);
return CommonReturnValueQuery(m_wszQuery);
}
int CDNSQLMembership::QueryGetCharacterSortCode(UINT nAccountDBID, BYTE &cCharacterSortCode)
{
CQueryTimeLog QueryTimeLog( "[Membership]P_GetCharacterSortCode" );
if (CheckConnect() < ERROR_NONE){
g_Log.Log(LogType::_ERROR, 0, nAccountDBID, 0, 0, L"[QueryGetCharacterSortCode] Check Connect Fail\r\n");
return ERROR_DB;
}
SQLRETURN RetCode;
SQLLEN cblen;
int nResult = ERROR_DB;
memset(&m_wszQuery, 0, sizeof(m_wszQuery));
swprintf(m_wszQuery, L"{?=CALL dbo.P_GetCharacterSortCode(%d,?)}", nAccountDBID);
RetCode = SQLPrepare(m_hstmt, m_wszQuery, SQL_NTSL);
if (CheckRetCode(RetCode, L"SQLPrepare") == ERROR_NONE){
SQLBindParameter(m_hstmt, 1, SQL_PARAM_OUTPUT, SQL_INTEGER, SQL_INTEGER, sizeof(int), 0, &nResult, sizeof(int), &cblen);
SQLBindParameter(m_hstmt, 2, SQL_PARAM_OUTPUT, SQL_TINYINT, SQL_TINYINT, sizeof(BYTE), 0, &cCharacterSortCode, sizeof(BYTE), &cblen);
RetCode = SQLExecute(m_hstmt);
CheckRetCode(RetCode, L"SQLExecute");
}
return nResult;
}
#if defined(PRE_ADD_GAMEQUIT_REWARD)
int CDNSQLMembership::QueryModNewbieRewardFlag(UINT nAccountDBID, bool bRewardFlag)
{
CQueryTimeLog QueryTimeLog( "[Membership]P_ModNewbieRewardFlag" );
memset(&m_wszQuery, 0, sizeof(m_wszQuery));
swprintf(m_wszQuery, L"{?=CALL dbo.P_ModNewbieRewardFlag(%d,%d)}", nAccountDBID, bRewardFlag);
return CommonReturnValueQuery(m_wszQuery);
}
#endif // #if defined(PRE_ADD_GAMEQUIT_REWARD)
#if defined(PRE_ADD_HEARTBEAT_TO_SQL)
int CDNSQLMembership::QueryHeartbeat()
{
CQueryTimeLog QueryTimeLog( "[Membership]P_HeartBeat" );
memset( m_wszQuery, 0, sizeof(m_wszQuery) );
swprintf( m_wszQuery, L"{?=CALL dbo.P_HeartBeat}");
return CommonReturnValueQuery(m_wszQuery);
}
#endif //#if defined(PRE_ADD_HEARTBEAT_TO_SQL)
#if defined(PRE_ADD_WORLD_EVENT)
int CDNSQLMembership::QueryEventList(TQEventList * pQ, TAEventList * pA)
{
CQueryTimeLog QueryTimeLog( "P_GetListEventStatus" );
if(CheckConnect() < 0)
{
g_Log.Log(LogType::_ERROR, pQ->cWorldSetID, pQ->nAccountDBID, 0, 0, L"[QueryEventList] Check Connect Fail\r\n");
pA->nRetCode = ERROR_DB;
return ERROR_DB;
}
SQLRETURN RetCode;
SQLLEN cblen;
int nResult = ERROR_DB;
memset(&m_wszQuery, 0, sizeof(m_wszQuery));
swprintf(m_wszQuery, L"{CALL dbo.P_GetListDNEvent}");
RetCode = SQLPrepare(m_hstmt, m_wszQuery, SQL_NTSL);
if(CheckRetCode(RetCode, L"SQLPrepare") == ERROR_NONE)
{
RetCode = SQLExecute(m_hstmt);
if(CheckRetCode(RetCode, L"SQLExecute") == ERROR_NONE)
{
TEventInfo Info;
memset(&Info, 0, sizeof(Info));
TIMESTAMP_STRUCT beginTime = {0, }, endTime = {0, };
memset(&beginTime, 0, sizeof(TIMESTAMP_STRUCT));
memset(&endTime, 0, sizeof(TIMESTAMP_STRUCT));
int nNo = 1;
SQLBindCol(m_hstmt, nNo++, SQL_INTEGER, &Info.EventID, sizeof(UINT), &cblen);
SQLBindCol(m_hstmt, nNo++, SQL_INTEGER, &Info.WroldID, sizeof(UINT), &cblen);
SQLBindCol(m_hstmt, nNo++, SQL_TYPE_TIMESTAMP, &beginTime, sizeof(TIMESTAMP_STRUCT), &cblen);
SQLBindCol(m_hstmt, nNo++, SQL_TYPE_TIMESTAMP, &endTime, sizeof(TIMESTAMP_STRUCT), &cblen);
SQLBindCol(m_hstmt, nNo++, SQL_INTEGER, &Info.EventType[0], sizeof(UINT), &cblen);
SQLBindCol(m_hstmt, nNo++, SQL_INTEGER, &Info.EventType[1], sizeof(UINT), &cblen);
SQLBindCol(m_hstmt, nNo++, SQL_INTEGER, &Info.EventType[2], sizeof(UINT), &cblen);
SQLBindCol(m_hstmt, nNo++, SQL_INTEGER, &Info.Att[0], sizeof(UINT), &cblen);
SQLBindCol(m_hstmt, nNo++, SQL_INTEGER, &Info.Att[1], sizeof(UINT), &cblen);
SQLBindCol(m_hstmt, nNo++, SQL_INTEGER, &Info.Att[2], sizeof(UINT), &cblen);
SQLBindCol(m_hstmt, nNo++, SQL_INTEGER, &Info.Att[3], sizeof(UINT), &cblen);
SQLBindCol(m_hstmt, nNo++, SQL_INTEGER, &Info.Att[4], sizeof(UINT), &cblen);
CheckColumnCount(nNo, "P_GetListDNEvent");
while(1)
{
memset(&Info, 0, sizeof(Info));
memset(&beginTime, 0, sizeof(beginTime));
memset(&endTime, 0, sizeof(endTime));
RetCode = SQLFetch(m_hstmt);
if(RetCode == SQL_NO_DATA || pA->cCount >= EVENTLISTMAX)
{
nResult = ERROR_NONE;
break;
}
if((CheckRetCode(RetCode, L"SQLFetch") < ERROR_NONE) &&(RetCode != SQL_SUCCESS_WITH_INFO)) break;
CTimeParamSet BeginTime(&QueryTimeLog, Info._tBeginTime, beginTime, pQ->cWorldSetID, pQ->nAccountDBID);
if (!BeginTime.IsValid())
{
nResult = ERROR_DB;
break;
}
CTimeParamSet EndTime(&QueryTimeLog, Info._tEndTime, endTime, pQ->cWorldSetID, pQ->nAccountDBID);
if (!EndTime.IsValid())
{
nResult = ERROR_DB;
break;
}
if( pQ->cWorldSetID == 0 || Info.WroldID == 0 || pQ->cWorldSetID == Info.WroldID )
{
memcpy(&pA->EventList[pA->cCount], &Info, sizeof(Info));
pA->cCount++;
}
if(pA->cCount >= EVENTLISTMAX){
nResult = ERROR_NONE;
break;
}
}
SQLCloseCursor(m_hstmt);
return nResult;
}
}
return ERROR_NONE;
}
#endif //#if defined(PRE_ADD_WORLD_EVENT)
#if defined( PRE_ADD_NEWCOMEBACK )
int CDNSQLMembership::QueryModComebackFlag(UINT nAccountDBID, bool bRewardComeback)
{
CQueryTimeLog QueryTimeLog( "[Membership]P_ModReturnRewardFalg" );
memset(&m_wszQuery, 0, sizeof(m_wszQuery));
swprintf(m_wszQuery, L"{?=CALL dbo.P_ModReturnRewardFalg(%d,%d)}", nAccountDBID, bRewardComeback);
return CommonReturnValueQuery(m_wszQuery);
}
#endif
#if defined( PRE_WORLDCOMBINE_PVP )
int CDNSQLMembership::QueryUpdateWorldPvPRoom(TQUpdateWorldPvPRoom* pQ, TAUpdateWorldPvPRoom *pA)
{
CQueryTimeLog QueryTimeLog( "[Membership]P_GetListSimpleConfigValue" );
if (CheckConnect() < ERROR_NONE){
g_Log.Log(LogType::_ERROR, 0, 0, 0, 0, L"[QueryUpdateWorldPvPRoom] CheckConnect Fail\r\n");
return ERROR_DB;
}
SQLRETURN RetCode;
SQLLEN cblen;
int nResult = ERROR_DB;
memset(&m_wszQuery, 0, sizeof(m_wszQuery));
swprintf(m_wszQuery, L"{?=CALL dbo.P_GetListSimpleConfigValue(2)}");
RetCode = SQLPrepare(m_hstmt, m_wszQuery, SQL_NTSL);
if (CheckRetCode(RetCode, L"SQLPrepare") == ERROR_NONE)
{
SQLBindParameter( m_hstmt, 1, SQL_PARAM_OUTPUT, SQL_INTEGER, SQL_INTEGER, sizeof(int), 0, &nResult, sizeof(int), &cblen );
RetCode = SQLExecute(m_hstmt);
if (CheckRetCode(RetCode, L"SQLExecute") == ERROR_NONE)
{
char cCode = 0;
int nValue = 0;
int nNo = 1;
SQLBindCol(m_hstmt, nNo++, SQL_TINYINT, &cCode, sizeof(char), &cblen);
SQLBindCol(m_hstmt, nNo++, SQL_INTEGER, &nValue, sizeof(int), &cblen);
CheckColumnCount(nNo, "[Membership]P_GetListSimpleConfigValue");
while(1)
{
RetCode = SQLFetch(m_hstmt);
if (RetCode == SQL_NO_DATA){
nResult = ERROR_NONE;
break;
}
if ((CheckRetCode(RetCode, L"SQLFetch") < ERROR_NONE) &&(RetCode != SQL_SUCCESS_WITH_INFO)) break;
if( cCode == 2 )
{
pA->bFlag = nValue > 0 ? true : false;;
nResult = ERROR_NONE;
break;
}
}
}
}
SQLCloseCursor(m_hstmt);
return nResult;
};
#endif