3410 lines
No EOL
114 KiB
C++
3410 lines
No EOL
114 KiB
C++
#include "StdAfx.h"
|
||
#include "DNUserRepository.h"
|
||
#include "DNConnection.h"
|
||
#include "DNExtManager.h"
|
||
#include "DNSQLMembership.h"
|
||
#include "DNSQLWorld.h"
|
||
#include "DNSQLManager.h"
|
||
#include "Log.h"
|
||
#include "Util.h"
|
||
#ifdef PRE_ADD_LIMITED_CASHITEM
|
||
#include "DNLimitedCashItemRepository.h"
|
||
#endif //#ifdef PRE_ADD_LIMITED_CASHITEM
|
||
|
||
#if defined(_WORK)
|
||
#include "DNBillingConnection.h"
|
||
#elif defined(_KR) || defined(_US)
|
||
#include "DNBillingConnectionKR.h"
|
||
#elif defined(_KRAZ)
|
||
#include "DNBillingConnectionKRAZ.h"
|
||
#elif defined(_JP)
|
||
#include "DNBillingConnectionJP.h"
|
||
#elif defined(_CH) || defined(_EU)
|
||
#include "DNBillingConnectionCH.h"
|
||
#elif defined(_TW)
|
||
#include "DNBillingConnectionTW.h"
|
||
#include "TimeSet.h"
|
||
#elif defined(_SG)
|
||
#include "DNBillingConnectionSG.h"
|
||
#elif defined(_TH)
|
||
#include "DNBillingConnectionTH.h"
|
||
#elif defined(_ID)
|
||
#include "DNBillingConnectionID.h"
|
||
#elif defined(_RU) || defined(_KAMO) //[OK_Cash]
|
||
#include "DNBillingConnectionRU.h"
|
||
#endif // _KR, _JP, _CH
|
||
|
||
#if defined (PRE_ADD_REJECT_DUPLICATED_CASH_REQUEST)
|
||
void ReleaseExchange(USER_REQUEST volatile* pDestination)
|
||
{
|
||
#if defined (_WIN64)
|
||
InterlockedExchange64(pDestination, CASH_NO_REQUESTING);
|
||
#else
|
||
InterlockedExchange(pDestination, CASH_NO_REQUESTING);
|
||
#endif // #if defined (_WIN64)
|
||
}
|
||
#endif // #if defined (PRE_ADD_REJECT_DUPLICATED_CASH_REQUEST)
|
||
|
||
CDNUserRepository::CDNUserRepository(void)
|
||
{
|
||
m_nNexonSN = 0;
|
||
m_cPaymentRules = 0;
|
||
|
||
m_nAccountDBID = 0;
|
||
memset(&m_szAccountName, 0, sizeof(m_szAccountName));
|
||
memset(&m_wszAccountName, 0, sizeof(m_wszAccountName));
|
||
memset(&m_szCharacterName, 0, sizeof(m_szCharacterName));
|
||
memset(&m_wszCharacterName, 0, sizeof(m_wszCharacterName));
|
||
m_biCharacterDBID = 0;
|
||
|
||
#if defined(_CH) || defined(_EU)
|
||
m_sess_id[0] = '\0';
|
||
#endif // #if defined(_CH) || defined(_EU)
|
||
memset(&m_szReceiverAccountName, 0, sizeof(m_szReceiverAccountName));
|
||
|
||
m_nIp = 0;
|
||
memset(&m_szIp, 0, sizeof(m_szIp));
|
||
memset(&m_wszIp, 0, sizeof(m_wszIp));
|
||
|
||
#if defined (PRE_ADD_REJECT_DUPLICATED_CASH_REQUEST)
|
||
m_Requesting = CASH_NO_REQUESTING;
|
||
#endif // #if defined (PRE_ADD_REJECT_DUPLICATED_CASH_REQUEST)
|
||
|
||
Clear();
|
||
}
|
||
|
||
CDNUserRepository::~CDNUserRepository(void)
|
||
{
|
||
Clear();
|
||
}
|
||
|
||
void CDNUserRepository::Clear()
|
||
{
|
||
m_pConnection = NULL;
|
||
m_nThreadID = 0;
|
||
|
||
m_cWorldSetID = 0;
|
||
m_nMapID = 0;
|
||
m_nChannelID = 0;
|
||
|
||
m_bOpen = false;
|
||
#if defined( PRE_ADD_NEW_MONEY_SEED )
|
||
m_nSeedPoint = 0;
|
||
#endif
|
||
m_cAge = 0;
|
||
m_bPCBang = false;
|
||
m_cBuyCartType = m_cGiftCartType = 0; // <20><><EFBFBD><EFBFBD> īƮ Ÿ<><C5B8>
|
||
m_nPackageSN = 0;
|
||
|
||
m_biPurchaseOrderID = 0;
|
||
m_nPickupCount = 0;
|
||
|
||
#if defined(_CH) || defined(_EU)
|
||
m_context_id[0] = '\0';
|
||
m_nOrderStep = SNDAORDERSTEP_NONE;
|
||
|
||
m_nPartCount = 0;
|
||
m_VecBuyItemPartList.clear(); // <20>߱<EFBFBD><DFB1><EFBFBD> 5<><35><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ؼ<EFBFBD> <20>ϳ<EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. (<28><> <20>̷<EFBFBD><CCB7><EFBFBD>..)
|
||
m_VecGiftItemPartList.clear();
|
||
#endif // #if defined(_CH) || defined(_EU)
|
||
|
||
m_nTotalPrice = 0;
|
||
m_nUsedPaidCash = 0;
|
||
|
||
m_nSubCommand = 0;
|
||
m_cProductCount = 0;
|
||
memset(&m_ProductPackageList, 0, sizeof(m_ProductPackageList));
|
||
|
||
m_VecBuyItemList.clear();
|
||
|
||
memset(&m_GiftPackageList, 0, sizeof(m_GiftPackageList));
|
||
m_VecGiftItemList.clear();
|
||
|
||
m_biCouponOrderID = 0;
|
||
m_nCouponSN = 0;
|
||
|
||
memset(&m_wszReceiverCharacterName, 0, sizeof(m_wszReceiverCharacterName));
|
||
memset(&m_wszMessage, 0, sizeof(m_wszMessage));
|
||
|
||
memset(&m_wszCoupon, 0, sizeof(m_wszCoupon));
|
||
memset(&m_szCoupon, 0, sizeof(m_szCoupon));
|
||
|
||
memset(&m_VIP, 0, sizeof(TVIPItem));
|
||
m_bAutoPay = false;
|
||
m_bServer = false;
|
||
|
||
#if defined(PRE_ADD_CASH_REFUND)
|
||
m_biPurchaseOrderDetailID = 0;
|
||
memset(&m_PaymentItem, 0, sizeof(m_PaymentItem));
|
||
memset(&m_PaymentPackageItem, 0, sizeof(TPaymentPackageItemInfoEx));
|
||
m_bCashMoveInven = false;
|
||
m_cRefundType = 0;
|
||
#endif
|
||
|
||
#if defined(PRE_ADD_SALE_COUPON)
|
||
m_biSaleCouponSerial = 0;
|
||
#endif
|
||
#if defined(PRE_ADD_CADGE_CASH)
|
||
m_nMailDBID = 0;
|
||
#endif // #if defined(PRE_ADD_CADGE_CASH)
|
||
|
||
m_cCurProductCount = 0;
|
||
}
|
||
|
||
void CDNUserRepository::SetReceiverAccountName()
|
||
{
|
||
CDNSQLWorld *pWorldDB = GetWorldDB();
|
||
if (!pWorldDB) return;
|
||
|
||
char szTempAccountName[IDLENMAX];
|
||
int nRet = pWorldDB->QueryGetCharacterPartialy10(m_wszReceiverCharacterName, szTempAccountName);
|
||
if (nRet != ERROR_NONE) return;
|
||
|
||
_strcpy(m_szReceiverAccountName, IDLENMAX, szTempAccountName, IDLENMAX);
|
||
}
|
||
|
||
#if defined(_CH) || defined(_EU)
|
||
CDNUserRepository::TBuyItemPart *CDNUserRepository::GetBuyItemPart()
|
||
{
|
||
if (m_VecBuyItemPartList.empty()) return NULL;
|
||
if (m_nPartCount >= (int)m_VecBuyItemPartList.size()) return NULL;
|
||
|
||
return &(m_VecBuyItemPartList[m_nPartCount]);
|
||
}
|
||
|
||
CDNUserRepository::TGiftItemPart *CDNUserRepository::GetGiftItemPart()
|
||
{
|
||
if (m_VecGiftItemPartList.empty()) return NULL;
|
||
if (m_nPartCount >= (int)m_VecGiftItemPartList.size()) return NULL;
|
||
|
||
return &(m_VecGiftItemPartList[m_nPartCount]);
|
||
}
|
||
|
||
int CDNUserRepository::CheckSessID()
|
||
{
|
||
if ('\0' == GetSessId()[0]) {
|
||
int nRetVal = GetNewId(SetSessId());
|
||
if (0 > nRetVal)
|
||
return ERROR_GENERIC_USER_NOT_FOUND;
|
||
}
|
||
|
||
return ERROR_NONE;
|
||
}
|
||
|
||
#endif // #if defined(_CH) || defined(_EU)
|
||
|
||
void CDNUserRepository::SetPurchaseOrderDetailID(const char* pPurchaseOrderDetailIDs)
|
||
{
|
||
switch (m_nSubCommand)
|
||
{
|
||
case CASH_BUY:
|
||
{
|
||
if (m_VecBuyItemList.empty())
|
||
return;
|
||
|
||
// <20>Ľ<EFBFBD>
|
||
string strOrderDetails = pPurchaseOrderDetailIDs;
|
||
|
||
std::vector<std::string> tokens;
|
||
TokenizeA(strOrderDetails.c_str(), tokens, ",");
|
||
|
||
std::vector<std::string>::iterator ii;
|
||
int nCount = 0;
|
||
for (ii = tokens.begin(); ii != tokens.end(); ii++)
|
||
{
|
||
m_VecBuyItemList[nCount].biPurchaseOrderDetailID = _atoi64((*ii).c_str());
|
||
++nCount;
|
||
}
|
||
}
|
||
break;
|
||
|
||
case CASH_PACKAGEBUY:
|
||
{
|
||
#if defined(PRE_ADD_CASH_REFUND)
|
||
m_biPurchaseOrderDetailID = _atoi64(pPurchaseOrderDetailIDs);
|
||
#endif
|
||
}
|
||
break;
|
||
}
|
||
}
|
||
|
||
int CDNUserRepository::GetPetalBalance()
|
||
{
|
||
CDNSQLMembership *pMembershipDB = GetMembershipDB();
|
||
if (!pMembershipDB) return 0;
|
||
|
||
int nPetalBalance = 0;
|
||
pMembershipDB->QueryGetPetalBalance(m_nAccountDBID, nPetalBalance);
|
||
|
||
return nPetalBalance;
|
||
}
|
||
|
||
CDNSQLMembership *CDNUserRepository::GetMembershipDB()
|
||
{
|
||
CDNSQLMembership *pMembershipDB = g_pSQLManager->FindMembershipDB(m_nThreadID);
|
||
if (!pMembershipDB)
|
||
g_Log.Log(LogType::_ERROR, this, L"[%d] pMembershipDB not found\r\n", m_nSubCommand);
|
||
|
||
return pMembershipDB;
|
||
}
|
||
|
||
CDNSQLWorld *CDNUserRepository::GetWorldDB()
|
||
{
|
||
CDNSQLWorld *pWorldDB = g_pSQLManager->FindWorldDB(m_nThreadID, m_cWorldSetID);
|
||
if (!pWorldDB)
|
||
g_Log.Log(LogType::_ERROR, this, L"[%d] pWorldDB not found\r\n", m_nSubCommand);
|
||
|
||
return pWorldDB;
|
||
}
|
||
|
||
bool CDNUserRepository::SetBuyItem(TCashBuyItem &Item)
|
||
{
|
||
TBuyItem BuyItem;
|
||
memset(&BuyItem, 0, sizeof(TBuyItem));
|
||
|
||
BuyItem.BuyItem = Item;
|
||
BuyItem.nReservePetal = g_pExtManager->GetCashCommodityReserve(Item.nItemSN);
|
||
BuyItem.nPrice = g_pExtManager->GetCashCommodityPrice(Item.nItemSN);
|
||
BuyItem.nLimitCount = g_pExtManager->GetCashBuyAbleCount(Item.nItemSN);
|
||
BuyItem.BuyItem.bFail = true; // default<6C><74> fail<69><6C> <20><><EFBFBD><EFBFBD>... <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> true<75><65> <20>Ѵ<EFBFBD>.
|
||
|
||
#if defined( PRE_ADD_NEW_MONEY_SEED )
|
||
BuyItem.nSeedPoint = g_pExtManager->GetCashCommoditySeed(Item.nItemSN);
|
||
#endif
|
||
|
||
#if defined(_KR) || defined(_US)
|
||
BuyItem.nProductNo = g_pBillingConnection->GetProductNoBySN(Item.nItemSN);
|
||
#endif // _KR _CH
|
||
#if defined(PRE_ADD_SALE_COUPON)
|
||
if( BuyItem.nPrice <= 0 && !g_pExtManager->GetCashCommodityUseCoupon(Item.nItemSN))
|
||
#else
|
||
if( BuyItem.nPrice <= 0 )
|
||
#endif
|
||
return false;
|
||
m_nTotalPrice += BuyItem.nPrice;
|
||
|
||
m_VecBuyItemList.push_back(BuyItem);
|
||
return true;
|
||
}
|
||
|
||
void CDNUserRepository::SetBuyItemPartByShanda(int nStartIndex, int nEndIndex, INT64 biOrderID, const char* pPurchaseOrderDetailIDs)
|
||
{
|
||
#if defined(_CH) || defined(_EU)
|
||
TBuyItemPart Part = {0,};
|
||
// <20>Ľ<EFBFBD>
|
||
string strOrderDetails = pPurchaseOrderDetailIDs;
|
||
|
||
std::vector<std::string> tokens;
|
||
TokenizeA(strOrderDetails.c_str(), tokens, ",");
|
||
|
||
std::vector<std::string>::iterator ii;
|
||
int nCount = nStartIndex;
|
||
for (ii = tokens.begin(); ii != tokens.end(); ii++)
|
||
{
|
||
if( nCount <= nEndIndex )
|
||
{
|
||
m_VecBuyItemList[nCount].biPurchaseOrderDetailID = _atoi64((*ii).c_str());
|
||
}
|
||
++nCount;
|
||
}
|
||
|
||
nCount = 0;
|
||
for (int i = nStartIndex; i < nEndIndex; i++)
|
||
{
|
||
Part.biPurchaseOrderID = biOrderID;
|
||
Part.pPartItem[nCount] = &m_VecBuyItemList[i];
|
||
Part.nOrderStep = SNDAORDERSTEP_NONE;
|
||
Part.context_id[0] = '\0';
|
||
nCount++;
|
||
}
|
||
|
||
m_VecBuyItemPartList.push_back(Part);
|
||
#endif // #if defined(_CH) || defined(_EU)
|
||
}
|
||
|
||
CDNUserRepository::TBuyItem *CDNUserRepository::GetBuyItem(int nIndex)
|
||
{
|
||
if (m_VecBuyItemList.empty()) return NULL;
|
||
if (m_cProductCount <= nIndex) return NULL;
|
||
return &(m_VecBuyItemList[nIndex]);
|
||
}
|
||
|
||
bool CDNUserRepository::SetGiftItem(TCashGiftItem &Item)
|
||
{
|
||
TGiftItem GiftItem;
|
||
memset(&GiftItem, 0, sizeof(TGiftItem));
|
||
|
||
GiftItem.GiftItem = Item;
|
||
GiftItem.nReservePetal = g_pExtManager->GetCashCommodityReserve(Item.nItemSN);
|
||
GiftItem.nPrice = g_pExtManager->GetCashCommodityPrice(Item.nItemSN);
|
||
GiftItem.nLimitCount = g_pExtManager->GetCashBuyAbleCount(Item.nItemSN);
|
||
GiftItem.GiftItem.bFail = true; // default<6C><74> fail<69><6C> <20><><EFBFBD><EFBFBD>... <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> true<75><65> <20>Ѵ<EFBFBD>.
|
||
#if defined(_KR) || defined(_US)
|
||
GiftItem.nProductNo = g_pBillingConnection->GetProductNoBySN(Item.nItemSN);
|
||
#elif defined(_CH) || defined(_EU)
|
||
GiftItem.nOrderStep = SNDAORDERSTEP_NONE;
|
||
#endif // _KR _CH _TW
|
||
#if defined( PRE_ADD_NEW_MONEY_SEED )
|
||
GiftItem.nSeedPoint = g_pExtManager->GetCashCommoditySeed(Item.nItemSN);
|
||
#endif
|
||
if( GiftItem.nPrice <= 0)
|
||
return false;
|
||
|
||
m_nTotalPrice += GiftItem.nPrice;
|
||
|
||
m_VecGiftItemList.push_back(GiftItem);
|
||
return true;
|
||
}
|
||
|
||
void CDNUserRepository::SetGiftItemPartByShanda()
|
||
{
|
||
#if defined(_CH) || defined(_EU)
|
||
int nTotalCount = (int)m_VecGiftItemList.size();
|
||
int nStx = 0, nEtx = std::min<int>(MAX_GOOD_LEN, nTotalCount);
|
||
while(true) {
|
||
TGiftItemPart Part = {0,};
|
||
int nCount = 0;
|
||
for (int i = nStx; i < nEtx; i++){
|
||
Part.pPartItem[nCount] = &m_VecGiftItemList[i];
|
||
Part.nOrderStep = SNDAORDERSTEP_NONE;
|
||
Part.context_id[0] = '\0';
|
||
nCount++;
|
||
}
|
||
|
||
m_VecGiftItemPartList.push_back(Part);
|
||
|
||
if (nTotalCount <= nEtx) {
|
||
break;
|
||
}
|
||
|
||
nStx = nEtx;
|
||
nEtx = std::min<int>(nEtx + MAX_GOOD_LEN, nTotalCount);
|
||
}
|
||
#endif // #if defined(_CH) || defined(_EU)
|
||
}
|
||
|
||
void CDNUserRepository::SetGiftItemPurchaseOrderID(int nIndex, INT64 biPurchaseOrderID)
|
||
{
|
||
if (m_VecGiftItemList.empty()) return;
|
||
if (m_cProductCount <= nIndex) return;
|
||
|
||
m_VecGiftItemList[nIndex].biPurchaseOrderID = biPurchaseOrderID;
|
||
}
|
||
|
||
CDNUserRepository::TGiftItem *CDNUserRepository::GetGiftItem(int nIndex)
|
||
{
|
||
if (m_VecGiftItemList.empty()) return NULL;
|
||
if (m_cProductCount <= nIndex) return NULL;
|
||
return &(m_VecGiftItemList[nIndex]);
|
||
}
|
||
|
||
void CDNUserRepository::SetBalanceInquiry(int nThreadID, CDNConnection *pConnection, TQCashBalanceInquiry *pCash)
|
||
{
|
||
Clear();
|
||
|
||
m_nSubCommand = CASH_BALANCEINQUIRY;
|
||
m_nThreadID = nThreadID;
|
||
m_pConnection = pConnection;
|
||
|
||
m_nAccountDBID = pCash->nAccountDBID;
|
||
_strcpy(m_szAccountName, _countof(m_szAccountName), pCash->szAccountName, (int)strlen(pCash->szAccountName));
|
||
MultiByteToWideChar(CP_ACP, 0, m_szAccountName, -1, m_wszAccountName, IDLENMAX);
|
||
|
||
m_bOpen = pCash->bOpen;
|
||
#if defined(_KR) || defined(_US)
|
||
m_nNexonSN = pCash->nNexonSN;
|
||
#endif // #if defined(_KR) || defined(_US)
|
||
|
||
m_nIp = pCash->nIp;
|
||
_inet_addr(pCash->nIp, m_szIp);
|
||
MultiByteToWideChar(CP_ACP, 0, m_szIp, -1, m_wszIp, IPLENMAX);
|
||
|
||
m_bServer = pCash->bServer;
|
||
}
|
||
|
||
bool CDNUserRepository::SetBuy(int nThreadID, CDNConnection *pConnection, TQCashBuy *pCash)
|
||
{
|
||
Clear();
|
||
|
||
m_nSubCommand = CASH_BUY;
|
||
m_nThreadID = nThreadID;
|
||
m_pConnection = pConnection;
|
||
m_nAccountDBID = pCash->nAccountDBID;
|
||
_strcpy(m_szCharacterName, _countof(m_szCharacterName), pCash->szCharacterName, (int)strlen(pCash->szCharacterName));
|
||
MultiByteToWideChar(CP_ACP, 0, m_szCharacterName, -1, m_wszCharacterName, NAMELENMAX);
|
||
m_biCharacterDBID = pCash->biCharacterDBID;
|
||
m_cWorldSetID = pCash->cWorldSetID;
|
||
m_nMapID = pCash->nMapID;
|
||
m_nChannelID = pCash->nChannelID;
|
||
m_cAge = pCash->cAge;
|
||
m_bPCBang = pCash->bPCBang;
|
||
m_cBuyCartType = pCash->cCartType;
|
||
m_cProductCount = pCash->cProductCount;
|
||
#if defined(PRE_ADD_CASH_REFUND)
|
||
m_bCashMoveInven = pCash->bMoveCashInven;
|
||
#endif
|
||
m_cPaymentRules = pCash->cPaymentRules;
|
||
#if defined(PRE_ADD_SALE_COUPON)
|
||
m_biSaleCouponSerial = pCash->biSaleCouponSerial;
|
||
#endif
|
||
|
||
for (int i = 0; i < m_cProductCount; i++)
|
||
{
|
||
if( !SetBuyItem(pCash->BuyList[i]) )
|
||
return false;
|
||
}
|
||
return true;
|
||
}
|
||
|
||
void CDNUserRepository::SetPackageBuy(int nThreadID, CDNConnection *pConnection, TQCashPackageBuy *pCash)
|
||
{
|
||
Clear();
|
||
|
||
m_nThreadID = nThreadID;
|
||
m_nSubCommand = CASH_PACKAGEBUY;
|
||
m_nAccountDBID = pCash->nAccountDBID;
|
||
_strcpy(m_szCharacterName, _countof(m_szCharacterName), pCash->szCharacterName, (int)strlen(pCash->szCharacterName));
|
||
MultiByteToWideChar(CP_ACP, 0, m_szCharacterName, -1, m_wszCharacterName, NAMELENMAX);
|
||
m_pConnection = pConnection;
|
||
m_biCharacterDBID = pCash->biCharacterDBID;
|
||
m_cWorldSetID = pCash->cWorldSetID;
|
||
m_nMapID = pCash->nMapID;
|
||
m_nChannelID = pCash->nChannelID;
|
||
m_cProductCount = pCash->cPackageCount;
|
||
memcpy(m_ProductPackageList, pCash->BuyList, sizeof(TCashItemBase) * pCash->cPackageCount);
|
||
m_nPackageSN = pCash->nPackageSN;
|
||
m_nTotalPrice = g_pExtManager->GetCashCommodityPrice(m_nPackageSN);
|
||
m_cPaymentRules = pCash->cPaymentRules;
|
||
#if defined(PRE_ADD_CASH_REFUND)
|
||
m_bCashMoveInven = pCash->bMoveCashInven;
|
||
#endif // #if defined(PRE_ADD_CASH_REFUND)
|
||
#if defined(PRE_ADD_SALE_COUPON)
|
||
m_biSaleCouponSerial = pCash->biSaleCouponSerial;
|
||
#endif
|
||
}
|
||
|
||
bool CDNUserRepository::SetGift(int nThreadID, CDNConnection *pConnection, TQCashGift *pCash)
|
||
{
|
||
Clear();
|
||
|
||
m_nSubCommand = CASH_GIFT;
|
||
m_nThreadID = nThreadID;
|
||
m_pConnection = pConnection;
|
||
|
||
m_nAccountDBID = pCash->nAccountDBID;
|
||
_strcpy(m_szCharacterName, _countof(m_szCharacterName), pCash->szCharacterName, (int)strlen(pCash->szCharacterName));
|
||
MultiByteToWideChar(CP_ACP, 0, m_szCharacterName, -1, m_wszCharacterName, NAMELENMAX);
|
||
m_biCharacterDBID = pCash->biCharacterDBID;
|
||
m_cWorldSetID = pCash->cWorldSetID;
|
||
m_nMapID = pCash->nMapID;
|
||
m_nChannelID = pCash->nChannelID;
|
||
|
||
_wcscpy(m_wszReceiverCharacterName, NAMELENMAX, pCash->wszReceiverCharacterName, NAMELENMAX);
|
||
_wcscpy(m_wszMessage, GIFTMESSAGEMAX, pCash->wszMessage, GIFTMESSAGEMAX);
|
||
|
||
m_cAge = pCash->cAge;
|
||
m_bPCBang = pCash->bPCBang;
|
||
m_cGiftCartType = pCash->cCartType;
|
||
#if defined(PRE_ADD_CADGE_CASH)
|
||
m_nMailDBID = pCash->nMailDBID;
|
||
#endif // #if defined(PRE_ADD_CADGE_CASH)
|
||
m_cProductCount = pCash->cProductCount;
|
||
|
||
for (int i = 0; i < m_cProductCount; i++)
|
||
{
|
||
if( !SetGiftItem(pCash->GiftList[i]) )
|
||
return false;
|
||
}
|
||
return true;
|
||
}
|
||
|
||
void CDNUserRepository::SetPackageGift(int nThreadID, CDNConnection *pConnection, TQCashPackageGift *pCash)
|
||
{
|
||
Clear();
|
||
|
||
m_nSubCommand = CASH_PACKAGEGIFT;
|
||
m_nThreadID = nThreadID;
|
||
m_pConnection = pConnection;
|
||
|
||
m_nAccountDBID = pCash->nAccountDBID;
|
||
_strcpy(m_szCharacterName, _countof(m_szCharacterName), pCash->szCharacterName, (int)strlen(pCash->szCharacterName));
|
||
MultiByteToWideChar(CP_ACP, 0, m_szCharacterName, -1, m_wszCharacterName, NAMELENMAX);
|
||
m_biCharacterDBID = pCash->biCharacterDBID;
|
||
m_cWorldSetID = pCash->cWorldSetID;
|
||
m_nMapID = pCash->nMapID;
|
||
m_nChannelID = pCash->nChannelID;
|
||
m_cProductCount = pCash->cPackageCount;
|
||
memcpy(m_GiftPackageList, pCash->GiftList, sizeof(TCashPackageGiftItem) * m_cProductCount);
|
||
m_nPackageSN = pCash->nPackageSN;
|
||
m_nTotalPrice = g_pExtManager->GetCashCommodityPrice(m_nPackageSN);
|
||
|
||
_wcscpy(m_wszReceiverCharacterName, NAMELENMAX, pCash->wszReceiverCharacterName, NAMELENMAX);
|
||
_wcscpy(m_wszMessage, GIFTMESSAGEMAX, pCash->wszMessage, GIFTMESSAGEMAX);
|
||
|
||
m_cAge = pCash->cAge;
|
||
m_bPCBang = pCash->bPCBang;
|
||
#if defined(PRE_ADD_CADGE_CASH)
|
||
m_nMailDBID = pCash->nMailDBID;
|
||
#endif // #if defined(PRE_ADD_CADGE_CASH)
|
||
}
|
||
|
||
void CDNUserRepository::SetCoupon(int nThreadID, CDNConnection *pConnection, TQCashCoupon *pCash)
|
||
{
|
||
Clear();
|
||
|
||
m_nSubCommand = CASH_COUPON;
|
||
m_nThreadID = nThreadID;
|
||
m_pConnection = pConnection;
|
||
m_biCharacterDBID = pCash->biCharacterDBID;
|
||
m_cWorldSetID = pCash->cWorldSetID;
|
||
m_bPCBang = pCash->bPCBang;
|
||
_strcpy(m_szCharacterName, NAMELENMAX, pCash->szCharacterName, NAMELENMAX);
|
||
MultiByteToWideChar(CP_ACP, 0, m_szCharacterName, -1, m_wszCharacterName, NAMELENMAX);
|
||
_wcscpy(m_wszCoupon, COUPONMAX, pCash->wszCoupon, COUPONMAX);
|
||
WideCharToMultiByte(CP_ACP, NULL, pCash->wszCoupon, -1, m_szCoupon, sizeof(m_szCoupon), NULL, NULL);
|
||
}
|
||
|
||
void CDNUserRepository::SetVIPBuy(int nThreadID, CDNConnection *pConnection, TQCashVIPBuy *pCash)
|
||
{
|
||
Clear();
|
||
|
||
m_nSubCommand = CASH_VIPBUY;
|
||
m_nThreadID = nThreadID;
|
||
m_pConnection = pConnection;
|
||
m_nAccountDBID = pCash->nAccountDBID;
|
||
m_biCharacterDBID = pCash->biCharacterDBID;
|
||
m_cWorldSetID = pCash->cWorldSetID;
|
||
m_nMapID = pCash->nMapID;
|
||
m_nChannelID = pCash->nChannelID;
|
||
m_bPCBang = pCash->bPCBang;
|
||
m_bAutoPay = pCash->bAutoPay;
|
||
m_bServer = pCash->bServer;
|
||
|
||
m_VIP.nItemSN = pCash->nItemSN;
|
||
m_VIP.nPrice = g_pExtManager->GetCashCommodityPrice(pCash->nItemSN);
|
||
if (m_bAutoPay) // <20>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ε<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
m_VIP.nPrice = g_pExtManager->GetCashCommodityVIPAutomaticPaySalePrice(pCash->nItemSN);
|
||
|
||
m_VIP.nLimitCount = g_pExtManager->GetCashBuyAbleCount(pCash->nItemSN);
|
||
#if defined(_CH) || defined(_EU)
|
||
m_VIP.nOrderStep = SNDAORDERSTEP_NONE;
|
||
#endif // #if defined(_CH) || defined(_EU)
|
||
}
|
||
|
||
void CDNUserRepository::SetVIPGift(int nThreadID, CDNConnection *pConnection, TQCashVIPGift *pCash)
|
||
{
|
||
Clear();
|
||
|
||
m_nSubCommand = CASH_VIPGIFT;
|
||
m_nThreadID = nThreadID;
|
||
m_pConnection = pConnection;
|
||
m_nAccountDBID = pCash->nAccountDBID;
|
||
m_biCharacterDBID = pCash->biCharacterDBID;
|
||
m_cWorldSetID = pCash->cWorldSetID;
|
||
m_nMapID = pCash->nMapID;
|
||
m_nChannelID = pCash->nChannelID;
|
||
m_bPCBang = pCash->bPCBang;
|
||
_wcscpy(m_wszReceiverCharacterName, NAMELENMAX, pCash->wszReceiverCharacterName, NAMELENMAX);
|
||
_wcscpy(m_wszMessage, GIFTMESSAGEMAX, pCash->wszMessage, GIFTMESSAGEMAX);
|
||
|
||
m_VIP.nItemSN = pCash->nItemSN;
|
||
m_VIP.nPrice = g_pExtManager->GetCashCommodityPrice(pCash->nItemSN);
|
||
m_VIP.nLimitCount = g_pExtManager->GetCashBuyAbleCount(pCash->nItemSN);
|
||
#if defined(_CH) || defined(_EU)
|
||
m_VIP.nOrderStep = SNDAORDERSTEP_NONE;
|
||
#endif // #if defined(_CH) || defined(_EU)
|
||
}
|
||
|
||
void CDNUserRepository::SetRefund(int nThreadID, CDNConnection *pConnection, TQCashRefund* pCash)
|
||
{
|
||
Clear();
|
||
m_nThreadID = nThreadID;
|
||
m_pConnection = pConnection;
|
||
m_nAccountDBID = pCash->nAccountDBID;
|
||
m_cWorldSetID = pCash->cWorldSetID;
|
||
#if defined(PRE_ADD_CASH_REFUND)
|
||
m_cRefundType = pCash->cItemType;
|
||
m_biPurchaseOrderDetailID = pCash->biPurchaseOrderDetailID;
|
||
#endif // #if defined(PRE_ADD_CASH_REFUND)
|
||
}
|
||
|
||
int CDNUserRepository::OnBalanceInquiry(int nThreadID, CDNConnection *pConnection, TQCashBalanceInquiry *pCash)
|
||
{
|
||
SetBalanceInquiry(nThreadID, pConnection, pCash);
|
||
/*
|
||
#if defined(_1TW) || defined(_1TH)
|
||
int nRet = g_pBillingPointConnection->OnBalanceInquiry(this);
|
||
#else // defined(_TW)
|
||
int nRet = g_pBillingConnection->OnBalanceInquiry(this);
|
||
#endif // defined(_TW)
|
||
*/
|
||
#pragma message("TEST CASH BALANCE!")
|
||
int nCashBalance = 0;
|
||
CDNSQLMembership *pMembershipDB = GetMembershipDB();
|
||
if (!pMembershipDB){
|
||
SendBalanceInquiry(ERROR_GENERIC_INVALIDREQUEST, 0, 0);
|
||
return ERROR_GENERIC_INVALIDREQUEST;
|
||
}
|
||
|
||
int nRet = pMembershipDB->QueryGetCashBalance(this->GetAccountDBID(), NULL, nCashBalance);
|
||
|
||
|
||
if (nRet != ERROR_NONE){
|
||
SendBalanceInquiry(nRet, 0, 0);
|
||
return nRet;
|
||
}else{
|
||
SendBalanceInquiry(nRet,nCashBalance, 0);
|
||
|
||
}
|
||
|
||
return ERROR_NONE;
|
||
}
|
||
|
||
int CDNUserRepository::OnBuy(int nThreadID, CDNConnection *pConnection, TQCashBuy *pCash)
|
||
{
|
||
if( !SetBuy(nThreadID, pConnection, pCash) )
|
||
{
|
||
SendBuyGift(ERROR_GENERIC_INVALIDREQUEST);
|
||
return ERROR_GENERIC_INVALIDREQUEST;
|
||
}
|
||
|
||
int nAdd = 0;
|
||
for (int i = 0; i < pCash->cProductCount; i++){
|
||
if (!CheckSaleItemSN(pCash->BuyList[i].nItemSN)){
|
||
g_Log.Log(LogType::_ERROR, this, L"[CASH_BUY] CheckSaleItemSN Error (ItemSN:%d)\r\n", pCash->BuyList[i].nItemSN);
|
||
SendBuyGift(ERROR_CASHSHOP_PROHIBITSALE);
|
||
return ERROR_CASHSHOP_PROHIBITSALE;
|
||
}
|
||
|
||
if (g_pExtManager->GetItemMainType(pCash->BuyList[i].CashItem.nItemID) == ITEMTYPE_CHARACTER_SLOT){
|
||
nAdd++;
|
||
}
|
||
}
|
||
|
||
#if defined(PRE_MOD_SELECT_CHAR)
|
||
int nRet = CheckCharacterSlotCount(pCash->nAccountDBID, nAdd);
|
||
#else // #if defined(PRE_MOD_SELECT_CHAR)
|
||
int nRet = CheckCharacterSlotCount(pCash->biCharacterDBID, nAdd);
|
||
#endif // #if defined(PRE_MOD_SELECT_CHAR)
|
||
if (nRet != ERROR_NONE){
|
||
SendBuyGift(nRet);
|
||
return nRet;
|
||
}
|
||
|
||
if (pCash->cPaymentRules == Cash::PaymentRules::Petal){ // <20><>Ż<EFBFBD><C5BB> <20><><EFBFBD>ǻ<EFBFBD><C7BB><EFBFBD>
|
||
nRet = PurchaseItemByPetal(); //$_$ <20><><EFBFBD>㹺<EFBFBD><E3B9BA>
|
||
}
|
||
#if defined( PRE_ADD_NEW_MONEY_SEED )
|
||
else if( pCash->cPaymentRules == Cash::PaymentRules::Seed )
|
||
{
|
||
//nRet = PurchaseItemBySeed(); //$_$ <20><><EFBFBD>ӹ<EFBFBD><D3B9><EFBFBD>
|
||
}
|
||
#endif
|
||
else { // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD>ǻ<EFBFBD><C7BB><EFBFBD>
|
||
|
||
int nCashBalance = 0;
|
||
|
||
CDNSQLMembership *pMembershipDB = GetMembershipDB();
|
||
if (!pMembershipDB){
|
||
SendBuyGift(ERROR_GENERIC_INVALIDREQUEST);
|
||
return ERROR_GENERIC_INVALIDREQUEST;
|
||
}
|
||
|
||
int nRet = pMembershipDB->QueryGetCashBalance(this->GetAccountDBID(), NULL, nCashBalance);
|
||
|
||
int nPetal = GetPetalBalance();
|
||
|
||
if (m_nTotalPrice <= nCashBalance)
|
||
{
|
||
nRet = PurchaseBuyItem(); //<2F><>ȯ<EFBFBD><C8AF><EFBFBD><EFBFBD>
|
||
}
|
||
else if (m_nTotalPrice <= nPetal)
|
||
{
|
||
pCash->cPaymentRules = Cash::PaymentRules::Petal;
|
||
nRet = PurchaseItemByPetal(); //$_$ <20><><EFBFBD>㹺<EFBFBD><E3B9BA>
|
||
}
|
||
else
|
||
{
|
||
printf("Not Enough Money!\n");
|
||
SendBuyGift(ERROR_GENERIC_INVALIDREQUEST); //@_@
|
||
return ERROR_GENERIC_INVALIDREQUEST;
|
||
}
|
||
}
|
||
|
||
return nRet;
|
||
}
|
||
|
||
int CDNUserRepository::OnPackageBuy(int nThreadID, CDNConnection *pConnection, TQCashPackageBuy *pCash)
|
||
{
|
||
SetPackageBuy(nThreadID, pConnection, pCash);
|
||
|
||
#if defined(PRE_ADD_SALE_COUPON)
|
||
if( m_nTotalPrice <= 0 && !g_pExtManager->GetCashCommodityUseCoupon(pCash->nPackageSN))
|
||
#else
|
||
if( m_nTotalPrice <=0 )
|
||
#endif
|
||
{
|
||
SendBuyGift(ERROR_ITEM_FAIL);
|
||
return ERROR_ITEM_FAIL;
|
||
}
|
||
|
||
if (!CheckSaleItemSN(pCash->nPackageSN)){
|
||
g_Log.Log(LogType::_ERROR, this, L"[CASH_PACKAGEBUY] CheckSaleItemSN Error (ItemSN:%d)\r\n", pCash->nPackageSN);
|
||
SendBuyGift(ERROR_CASHSHOP_PROHIBITSALE);
|
||
return ERROR_CASHSHOP_PROHIBITSALE;
|
||
}
|
||
|
||
int nRet = ERROR_DB;
|
||
int nAdd = 0;
|
||
for (int i = 0; i < pCash->cPackageCount; i++){
|
||
if (g_pExtManager->GetItemMainType(pCash->BuyList[i].CashItem.nItemID) == ITEMTYPE_CHARACTER_SLOT){
|
||
nAdd++;
|
||
}
|
||
}
|
||
#if defined(PRE_MOD_SELECT_CHAR)
|
||
nRet = CheckCharacterSlotCount(pCash->nAccountDBID, nAdd);
|
||
#else // #if defined(PRE_MOD_SELECT_CHAR)
|
||
nRet = CheckCharacterSlotCount(pCash->biCharacterDBID, nAdd);
|
||
#endif // #if defined(PRE_MOD_SELECT_CHAR)
|
||
if (nRet != ERROR_NONE){
|
||
SendBuyGift(nRet);
|
||
return nRet;
|
||
}
|
||
|
||
INT64 biOrderID = 0;
|
||
if (pCash->cPaymentRules == Cash::PaymentRules::Petal){ // <20><>Ż<EFBFBD><C5BB> <20><><EFBFBD>ǻ<EFBFBD><C7BB><EFBFBD>
|
||
PurchaseItemByPetal();
|
||
}
|
||
#if defined( PRE_ADD_NEW_MONEY_SEED )
|
||
else if( pCash->cPaymentRules == Cash::PaymentRules::Seed )
|
||
{
|
||
nRet = PurchaseItemBySeed();
|
||
}
|
||
#endif
|
||
else { // ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||
nRet = AddPurchaseOrderByCash(0);
|
||
if (nRet != ERROR_NONE){
|
||
SendBuyGift(nRet);
|
||
return nRet;
|
||
}
|
||
|
||
#if defined(PRE_ADD_SALE_COUPON)
|
||
if( m_nTotalPrice == 0 && g_pExtManager->GetCashCommodityUseCoupon(pCash->nPackageSN) )
|
||
{
|
||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 0<><30><EFBFBD>̰<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD≯<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ʰ<EFBFBD> <20>ٷ<EFBFBD> <20><><EFBFBD><EFBFBD>(<28>߱<EFBFBD><DFB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> 0<><30><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϱ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ġ<EFBFBD><C4A1> <20>ʰ<EFBFBD> ó<><C3B3>)
|
||
OnRecvBillingBuyItem(ERROR_NONE);
|
||
return ERROR_NONE;
|
||
}
|
||
#endif // #if defined(PRE_ADD_SALE_COUPON)
|
||
|
||
#if defined(_TW) || defined(_TH)
|
||
nRet = g_pBillingShopConnection->OnPackageBuy(this);
|
||
#else // defined(_TW)
|
||
nRet = g_pBillingConnection->OnPackageBuy(this);
|
||
#endif // defined(_TW)
|
||
if (nRet != ERROR_NONE){
|
||
SendBuyGift(nRet);
|
||
return nRet;
|
||
}
|
||
}
|
||
|
||
return ERROR_NONE;
|
||
}
|
||
|
||
int CDNUserRepository::OnGift(int nThreadID, CDNConnection *pConnection, TQCashGift *pCash)
|
||
{
|
||
if( !SetGift(nThreadID, pConnection, pCash) )
|
||
{
|
||
SendBuyGift(ERROR_ITEM_FAIL);
|
||
return ERROR_ITEM_FAIL;
|
||
}
|
||
|
||
// onsale<6C><65> <20>ְ<EFBFBD> <20>ƴѵ<C6B4> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
for (int i = 0; i < pCash->cProductCount; i++){
|
||
if (!CheckSaleItemSN(pCash->GiftList[i].nItemSN)){
|
||
g_Log.Log(LogType::_ERROR, this, L"[CASH_GIFT] CheckSaleItemSN Error (ItemSN:%d)\r\n", pCash->GiftList[i].nItemSN);
|
||
SendBuyGift(ERROR_CASHSHOP_PROHIBITSALE);
|
||
return ERROR_CASHSHOP_PROHIBITSALE;
|
||
}
|
||
}
|
||
|
||
#if defined(_SG) || defined(_TH) || defined(_ID)// <20>̰<EFBFBD><CCB0><EFBFBD>, <20>±<EFBFBD>, <20>ε<EFBFBD><CEB5>þ<D7BD><C3BE><EFBFBD> AccountName<6D>ʿ<EFBFBD><CABF><EFBFBD>
|
||
SetReceiverAccountName();
|
||
#endif // #if defined(_SG) || defined(_TH)
|
||
|
||
return PurchaseGiftItem();
|
||
}
|
||
|
||
int CDNUserRepository::OnPackageGift(int nThreadID, CDNConnection *pConnection, TQCashPackageGift *pCash)
|
||
{
|
||
SetPackageGift(nThreadID, pConnection, pCash);
|
||
|
||
if( m_nTotalPrice <=0 )
|
||
{
|
||
SendBuyGift(ERROR_ITEM_FAIL);
|
||
return ERROR_ITEM_FAIL;
|
||
}
|
||
|
||
if (!CheckSaleItemSN(pCash->nPackageSN)){
|
||
g_Log.Log(LogType::_ERROR, this, L"[CASH_PACKAGEGIFT] CheckSaleItemSN Error (ItemSN:%d)\r\n", pCash->nPackageSN);
|
||
SendBuyGift(ERROR_CASHSHOP_PROHIBITSALE);
|
||
return ERROR_CASHSHOP_PROHIBITSALE;
|
||
}
|
||
|
||
#if defined(_SG) || defined(_TH) || defined(_ID)// <20>̰<EFBFBD><CCB0><EFBFBD>, <20>±<EFBFBD>, <20>ε<EFBFBD><CEB5>þ<D7BD><C3BE><EFBFBD> AccountName<6D>ʿ<EFBFBD><CABF><EFBFBD>
|
||
SetReceiverAccountName();
|
||
#endif // #if defined(_SG) || defined(_TH)
|
||
|
||
int nRet = AddPurchaseOrderByCash(0);
|
||
if (nRet != ERROR_NONE){
|
||
SendBuyGift(nRet);
|
||
return nRet;
|
||
}
|
||
|
||
#if defined(_TW) || defined(_TH)
|
||
nRet = g_pBillingShopConnection->OnPackageGift(this);
|
||
#else //
|
||
nRet = g_pBillingConnection->OnPackageGift(this);
|
||
#endif //
|
||
if (nRet != ERROR_NONE){
|
||
SendBuyGift(nRet);
|
||
return nRet;
|
||
}
|
||
|
||
return ERROR_NONE;
|
||
}
|
||
|
||
int CDNUserRepository::OnCoupon(int nThreadID, CDNConnection *pConnection, TQCashCoupon *pCash)
|
||
{
|
||
//return ERROR_GENERIC_INVALIDREQUEST; //[debug] <20><><EFBFBD>Ŷһ<C5B6><D2BB><EFBFBD><EFBFBD>ܣ<EFBFBD>ֱ<EFBFBD>ӷ<EFBFBD><D3B7><EFBFBD>ʧ<EFBFBD><CAA7>
|
||
|
||
SetCoupon(nThreadID, pConnection, pCash);
|
||
|
||
int nRet = ERROR_GENERIC_INVALIDREQUEST;
|
||
#if defined(_TW)
|
||
nRet = g_pBillingCouponConnection->OnCoupon(this);
|
||
#elif defined(_TH)
|
||
nRet = g_pBillingShopConnection->OnCoupon(this);
|
||
#else
|
||
nRet = g_pBillingConnection->OnCoupon(this);
|
||
#endif
|
||
//if (nRet != ERROR_NONE)//RawCode
|
||
//SendCoupon(nRet);//RawCode
|
||
SendCoupon(ERROR_GENERIC_INVALIDREQUEST);
|
||
|
||
return ERROR_NONE;
|
||
}
|
||
|
||
int CDNUserRepository::OnVIPBuy(int nThreadID, CDNConnection *pConnection, TQCashVIPBuy *pCash)
|
||
{
|
||
SetVIPBuy(nThreadID, pConnection, pCash);
|
||
|
||
CDNSQLMembership *pMembershipDB = GetMembershipDB();
|
||
if (!pMembershipDB){
|
||
SendVIPBuyGift(ERROR_GENERIC_INVALIDREQUEST, 0);
|
||
return ERROR_GENERIC_INVALIDREQUEST;
|
||
}
|
||
|
||
if (!CheckSaleItemSN(pCash->nItemSN)){
|
||
SendVIPBuyGift(ERROR_CASHSHOP_PROHIBITSALE, 0);
|
||
return ERROR_CASHSHOP_PROHIBITSALE;
|
||
}
|
||
|
||
TCashCommodityData CashData;
|
||
bool bRet= g_pExtManager->GetCashCommodityData(pCash->nItemSN, CashData);
|
||
if (!bRet){
|
||
SendVIPBuyGift(ERROR_ITEM_FAIL, 0);
|
||
return ERROR_ITEM_FAIL;
|
||
}
|
||
|
||
INT64 biOrderID = 0;
|
||
|
||
int nVIPPrice = CashData.nPrice;
|
||
if (pCash->bAutoPay) // <20>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ε<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
nVIPPrice = (int)((CashData.nPrice * (100 - CashData.nAutomaticPaySale)) / 100);
|
||
|
||
#ifdef PRE_ADD_LIMITED_CASHITEM
|
||
int nRet = pMembershipDB->QueryAddPurchaseOrderByCash(pCash->biCharacterDBID, pCash->bPCBang, pCash->nItemSN, nVIPPrice, g_pExtManager->GetCashBuyAbleCount(pCash->nItemSN),
|
||
CashData.nItemID[0], -1, g_pExtManager->GetCashLimitedItemCount(pCash->nItemSN), nVIPPrice, m_szIp, false, NULL, NULL, biOrderID);
|
||
#else //#ifdef PRE_ADD_LIMITED_CASHITEM
|
||
int nRet = pMembershipDB->QueryAddPurchaseOrderByCash(pCash->biCharacterDBID, pCash->bPCBang, pCash->nItemSN, nVIPPrice, g_pExtManager->GetCashBuyAbleCount(pCash->nItemSN),
|
||
CashData.nItemID[0], -1, nVIPPrice, m_szIp, false, NULL, NULL, biOrderID);
|
||
#endif //#ifdef PRE_ADD_LIMITED_CASHITEM
|
||
if (nRet != ERROR_NONE){
|
||
SendVIPBuyGift(nRet, 0);
|
||
return nRet;
|
||
}
|
||
|
||
#ifdef PRE_ADD_LIMITED_CASHITEM
|
||
if (g_pLimitedCashItemRepository && g_pExtManager->GetCashLimitedItemCount(pCash->nItemSN) > 0)
|
||
{
|
||
std::vector<LimitedCashItem::TLimitedQuantityCashItem> vList;
|
||
if (g_pLimitedCashItemRepository->GetLimitedItemList(vList))
|
||
m_pConnection->SendLimiteItemInfoList(vList);
|
||
}
|
||
#endif //#ifdef PRE_ADD_LIMITED_CASHITEM
|
||
|
||
m_VIP.biPurchaseOrderID = biOrderID;
|
||
|
||
#if defined(_CH) || defined(_EU)
|
||
CDNBillingConnectionCH::TGoodsInfo Goods[MAX_GOOD_LEN] = { 0, };
|
||
|
||
Goods[0].nItemSN = m_VIP.nItemSN;
|
||
Goods[0].nPrice = g_pExtManager->GetCashCommodityPrice(m_VIP.nItemSN);
|
||
|
||
nRet = g_pBillingConnection->SendAccountLock(this, Goods, 1, false);
|
||
if (nRet < 0){
|
||
g_Log.Log(LogType::_ERROR, this, L"[SendBillingVIPBuy] Ret : %d\r\n", nRet);
|
||
SendVIPBuyGift(nRet, 0);
|
||
return nRet;
|
||
}
|
||
|
||
#elif defined(_TW)
|
||
// GASH<53><48> <20><><EFBFBD><EFBFBD><EFBFBD>۸<EFBFBD><DBB8><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ܼ<EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD>
|
||
g_pBillingShopConnection->SendPurchaseItem(m_szAccountName, m_szIp, m_VIP.nPrice, m_nAccountDBID, m_VIP.biPurchaseOrderID, m_VIP.nItemSN);
|
||
#endif // #if defined(_CH) || defined(_EU)
|
||
|
||
#if defined(_KAMO) //[OK_Cash]
|
||
if (nRet == ERROR_NONE){
|
||
|
||
int nCashOutgoID = 0, nCashBalance = 0;
|
||
int nRetDeductCash = pMembershipDB->QueryDeductCash(m_nAccountDBID, biOrderID, nVIPPrice, nCashOutgoID, nCashBalance); //VIP
|
||
|
||
if (ERROR_NONE == nRetDeductCash)
|
||
{
|
||
SendVIPBuyGift(nRetDeductCash, 0); //<2F>ֶ<EFBFBD><D6B6>㹺<EFBFBD><E3B9BA><EFBFBD>ɹ<EFBFBD>
|
||
}
|
||
else
|
||
{
|
||
printf("[Err]CDNUserRepository::OnVIPBuy AccountID=%d Ret=%d,TotalPrice=%d,CashBalance=%d",m_nAccountDBID,nRetDeductCash,nVIPPrice,nCashBalance);
|
||
//SendVIPBuyGift(ERROR_GENERIC_INVALIDREQUEST, 0); //<2F>ֶ<EFBFBD><D6B6>㹺<EFBFBD><E3B9BA>ʧ<EFBFBD>ܣ<EFBFBD><DCA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
}
|
||
|
||
return nRetDeductCash;
|
||
}
|
||
#endif
|
||
|
||
return ERROR_NONE;
|
||
}
|
||
|
||
int CDNUserRepository::OnVIPGift(int nThreadID, CDNConnection *pConnection, TQCashVIPGift *pCash)
|
||
{
|
||
SendVIPBuyGift(ERROR_GENERIC_INVALIDREQUEST, 0);
|
||
return ERROR_GENERIC_INVALIDREQUEST;
|
||
|
||
/*
|
||
SetVIPGift(nThreadID, pConnection, pCash);
|
||
|
||
CDNSQLMembership *pMembershipDB = GetMembershipDB();
|
||
if (!pMembershipDB){
|
||
SendVIPBuyGift(ERROR_GENERIC_INVALIDREQUEST, 0);
|
||
return ERROR_GENERIC_INVALIDREQUEST;
|
||
}
|
||
|
||
if (!CheckSaleItemSN(pCash->nItemSN)){
|
||
SendVIPBuyGift(ERROR_CASHSHOP_PROHIBITSALE, 0);
|
||
return ERROR_CASHSHOP_PROHIBITSALE;
|
||
}
|
||
|
||
TCashCommodityData CashData;
|
||
bool bRet = g_pExtManager->GetCashCommodityData(pCash->nItemSN, CashData);
|
||
if (!bRet){
|
||
SendVIPBuyGift(ERROR_ITEM_FAIL, 0);
|
||
return ERROR_ITEM_FAIL;
|
||
}
|
||
|
||
INT64 biOrderID = 0;
|
||
#ifdef PRE_ADD_LIMITED_CASHITEM
|
||
int nRet = pMembershipDB->QueryAddPurchaseOrderByCash(pCash->biCharacterDBID, pCash->bPCBang, pCash->nItemSN, CashData.nPrice, g_pExtManager->GetCashBuyAbleCount(pCash->nItemSN),
|
||
CashData.nItemID[0], -1, g_pExtManager->GetCashLimitedItemCount(pCash->nItemSN), CashData.nPrice, m_szIp, true, pCash->wszReceiverCharacterName, pCash->wszMessage, biOrderID);
|
||
#else //#ifdef PRE_ADD_LIMITED_CASHITEM
|
||
int nRet = pMembershipDB->QueryAddPurchaseOrderByCash(pCash->biCharacterDBID, pCash->bPCBang, pCash->nItemSN, CashData.nPrice, g_pExtManager->GetCashBuyAbleCount(pCash->nItemSN),
|
||
CashData.nItemID[0], -1, CashData.nPrice, m_szIp, true, pCash->wszReceiverCharacterName, pCash->wszMessage, biOrderID);
|
||
#endif //#ifdef PRE_ADD_LIMITED_CASHITEM
|
||
|
||
if (nRet != ERROR_NONE){
|
||
SendVIPBuyGift(nRet, 0);
|
||
return nRet;
|
||
}
|
||
|
||
#ifdef PRE_ADD_LIMITED_CASHITEM
|
||
if (g_pLimitedCashItemRepository && g_pExtManager->GetCashLimitedItemCount(pCash->nItemSN) > 0)
|
||
{
|
||
std::vector<LimitedCashItem::TLimitedQuantityCashItem> vList;
|
||
if (g_pLimitedCashItemRepository->GetLimitedItemList(vList))
|
||
m_pConnection->SendLimiteItemInfoList(vList);
|
||
}
|
||
#endif //#ifdef PRE_ADD_LIMITED_CASHITEM
|
||
|
||
m_VIP.biPurchaseOrderID = biOrderID;
|
||
|
||
#if defined(_CH) || defined(_EU)
|
||
CDNBillingConnectionCH::TGoodsInfo Goods[MAX_GOOD_LEN] = { 0, };
|
||
|
||
Goods[0].nItemSN = m_VIP.nItemSN;
|
||
Goods[0].nPrice = g_pExtManager->GetCashCommodityPrice(m_VIP.nItemSN);
|
||
|
||
nRet = g_pBillingConnection->SendAccountLock(this, Goods, 1, true);
|
||
if (nRet < 0){
|
||
g_Log.Log(LogType::_ERROR, this, L"[SendBillingVIPGift] Ret : %d\r\n", nRet);
|
||
SendVIPBuyGift(nRet, 0);
|
||
return nRet;
|
||
}
|
||
|
||
#elif defined(_TW)
|
||
// GASH<53><48> <20><><EFBFBD><EFBFBD><EFBFBD>۸<EFBFBD><DBB8><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ܼ<EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD>
|
||
g_pBillingShopConnection->SendPurchaseItem(m_szAccountName, m_szIp, m_VIP.nPrice, m_nAccountDBID, m_VIP.biPurchaseOrderID, m_VIP.nItemSN);
|
||
|
||
#endif // #if defined(_CH) || defined(_EU)
|
||
|
||
#if defined(_KAMO) //[OK_Cash]
|
||
if (nRet == ERROR_NONE){
|
||
SendVIPBuyGift(nRet, 0);
|
||
return nRet;
|
||
}
|
||
#endif
|
||
|
||
return ERROR_NONE;
|
||
*/
|
||
}
|
||
|
||
void CDNUserRepository::OnRefund(int nThreadID, CDNConnection *pConnection, TQCashRefund* pCash)
|
||
{
|
||
#if defined(PRE_ADD_CASH_REFUND)
|
||
/*
|
||
SetRefund(nThreadID, pConnection, pCash);
|
||
|
||
int nProductNo = g_pBillingConnection->GetProductNoBySN(pCash->nItemSN);
|
||
g_pBillingConnection->SendRefund(this, pCash->uiOrderNo, nProductNo, pCash->biPurchaseOrderDetailID);
|
||
*/
|
||
#endif // #if defined(PRE_ADD_CASH_REFUND)
|
||
}
|
||
|
||
void CDNUserRepository::OnMoveCashInven(int nThreadID, CDNConnection *pConnection, TQCashMoveCashInven* pCash)
|
||
{
|
||
#if defined(PRE_ADD_CASH_REFUND)
|
||
m_cWorldSetID = pCash->cWorldSetID;
|
||
|
||
CDNSQLMembership *pMembershipDB = GetMembershipDB();
|
||
if (!pMembershipDB){
|
||
m_pConnection->SendMoveCashInven(pCash->nAccountDBID, ERROR_GENERIC_INVALIDREQUEST, 0, 0, NULL, 0);
|
||
return;
|
||
}
|
||
|
||
// <20><><EFBFBD><EFBFBD><EFBFBD>κ<EFBFBD> <20>÷<EFBFBD><C3B7><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||
int nRet = pMembershipDB->QueryModPurchaseOrderDetail(pCash->PaymentItemInfo.PaymentItemInfo.biDBID);
|
||
if (nRet != ERROR_NONE)
|
||
{
|
||
m_pConnection->SendMoveCashInven(pCash->nAccountDBID, nRet, 0, 0, NULL, 0);
|
||
return;
|
||
}
|
||
// <20><>ǰ DB<44><42> <20>ְ<EFBFBD>
|
||
nRet = CashItemDBProcess(pCash->cWorldSetID, pCash->nAccountDBID, pCash->biCharacterDBID, pCash->nMapID, pCash->nChannelID, 0, pCash->CashItem,
|
||
g_pExtManager->GetCashCommodityPrice(pCash->PaymentItemInfo.PaymentItemInfo.ItemInfo.nItemSN), pCash->PaymentItemInfo.PaymentItemInfo.biDBID, DBDNWorldDef::AddMaterializedItem::CashBuy);
|
||
|
||
if (nRet != ERROR_NONE) // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϸ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>÷<EFBFBD><C3B7><EFBFBD> <20>Ѱ<EFBFBD>..
|
||
pMembershipDB->QueryModGiveFailFlag2(pCash->PaymentItemInfo.PaymentItemInfo.biDBID, true);
|
||
|
||
// Ȥ<><C8A4> <20><>Ż <20><><EFBFBD><EFBFBD><EFBFBD>ؾ<EFBFBD><D8BE>ϴ<EFBFBD><CFB4><EFBFBD> <20>˻<EFBFBD>
|
||
int nReservePetal = g_pExtManager->GetCashCommodityReserve(pCash->PaymentItemInfo.PaymentItemInfo.ItemInfo.nItemSN);
|
||
int nTotalPetal = 0;
|
||
if( nReservePetal > 0 )
|
||
{
|
||
nRet = pMembershipDB->QueryAddPetalIncomeCashRefund(pCash->biCharacterDBID, pCash->PaymentItemInfo.PaymentItemInfo.biDBID, nReservePetal, nTotalPetal);
|
||
if( nRet != ERROR_NONE ) // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ͼ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϳ<EFBFBD>..
|
||
{
|
||
m_pConnection->SendMoveCashInven(pCash->nAccountDBID, nRet, 0, 0, NULL, 0);
|
||
return;
|
||
}
|
||
}
|
||
else
|
||
{
|
||
nTotalPetal = GetPetalBalance();
|
||
}
|
||
/*
|
||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> SendPickUp <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
int nProductNo = g_pBillingConnection->GetProductNoBySN(pCash->PaymentItemInfo.PaymentItemInfo.ItemInfo.nItemSN);
|
||
g_pBillingConnection->SendInventoryPickup(pCash->nAccountDBID, pCash->PaymentItemInfo.uiOrderNo, nProductNo, 1); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 1<><31>.
|
||
*/
|
||
|
||
INT64 nSeedPoint = 0;
|
||
#if defined( PRE_ADD_NEW_MONEY_SEED )
|
||
int nSeed = g_pExtManager->GetCashCommoditySeed(pCash->PaymentItemInfo.PaymentItemInfo.ItemInfo.nItemSN);
|
||
if( nSeed > 0 )
|
||
{
|
||
nRet = AddSeedPoint( nSeed );
|
||
if( nRet != ERROR_NONE )
|
||
{
|
||
g_Log.Log(LogType::_ERROR, this, L"[OnMoveCashInven] AddSeedPoint Fail SeedPoint(%d)\r\n", nSeed);
|
||
}
|
||
}
|
||
nSeedPoint = GetSeedPoint();
|
||
#endif
|
||
|
||
m_pConnection->SendMoveCashInven(pCash->nAccountDBID, ERROR_NONE, nTotalPetal, pCash->PaymentItemInfo.PaymentItemInfo.biDBID, &pCash->CashItem, nSeedPoint);
|
||
#endif // #if defined(PRE_ADD_CASH_REFUND)
|
||
}
|
||
|
||
void CDNUserRepository::OnPackageMoveCashInven(int nThreadID, CDNConnection *pConnection, TQCashPackageMoveCashInven* pCash)
|
||
{
|
||
#if defined(PRE_ADD_CASH_REFUND)
|
||
m_cWorldSetID = pCash->cWorldSetID;
|
||
|
||
CDNSQLMembership *pMembershipDB = GetMembershipDB();
|
||
if (!pMembershipDB){
|
||
m_pConnection->SendPackageMoveCashInven(pCash->nAccountDBID, ERROR_GENERIC_INVALIDREQUEST, 0, 0, NULL, 0);
|
||
return;
|
||
}
|
||
|
||
// <20><><EFBFBD><EFBFBD><EFBFBD>κ<EFBFBD> <20>÷<EFBFBD><C3B7><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||
int nRet = pMembershipDB->QueryModPurchaseOrderDetail(pCash->PaymentPackageItemInfo.PaymentPackageItemInfo.biDBID);
|
||
if (nRet != ERROR_NONE)
|
||
{
|
||
m_pConnection->SendPackageMoveCashInven(pCash->nAccountDBID, nRet, 0, 0, NULL, 0);
|
||
return;
|
||
}
|
||
|
||
int nProductCount = 0;
|
||
for( int i=0; i<PACKAGEITEMMAX; ++i)
|
||
{
|
||
if( pCash->PaymentPackageItemInfo.PaymentPackageItemInfo.ItemInfoList[i].nItemID == 0)
|
||
break;
|
||
++nProductCount;
|
||
}
|
||
|
||
if (nProductCount == 0)
|
||
{
|
||
m_pConnection->SendPackageMoveCashInven(pCash->nAccountDBID, ERROR_GENERIC_UNKNOWNERROR, 0, 0, NULL, 0);
|
||
return;
|
||
}
|
||
|
||
int nTotalPrice = g_pExtManager->GetCashCommodityPrice(pCash->PaymentPackageItemInfo.PaymentPackageItemInfo.nPackageSN);
|
||
int nUnitPrice = nTotalPrice / nProductCount;
|
||
int nTempPrice = 0;
|
||
for (int i = 0; i < nProductCount; i++)
|
||
{
|
||
if (i == (nProductCount - 1)) nUnitPrice = nTotalPrice - nTempPrice;
|
||
// <20><>ǰ DB<44><42> <20>ְ<EFBFBD>
|
||
nRet = CashItemDBProcess(pCash->cWorldSetID, pCash->nAccountDBID, pCash->biCharacterDBID, pCash->nMapID, pCash->nChannelID, 0, pCash->CashItemList[i],
|
||
nUnitPrice, pCash->PaymentPackageItemInfo.PaymentPackageItemInfo.biDBID, DBDNWorldDef::AddMaterializedItem::CashBuy);
|
||
|
||
if (nRet != ERROR_NONE){
|
||
pMembershipDB->QueryModGiveFailFlag2(pCash->PaymentPackageItemInfo.PaymentPackageItemInfo.biDBID, true);
|
||
// <20>ϴ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD> return <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> ó<><C3B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||
}
|
||
nTempPrice += nUnitPrice;
|
||
}
|
||
|
||
// Ȥ<><C8A4> <20><>Ż <20><><EFBFBD><EFBFBD><EFBFBD>ؾ<EFBFBD><D8BE>ϴ<EFBFBD><CFB4><EFBFBD> <20>˻<EFBFBD>
|
||
int nReservePetal = g_pExtManager->GetCashCommodityReserve(pCash->PaymentPackageItemInfo.PaymentPackageItemInfo.nPackageSN);
|
||
int nTotalPetal = 0;
|
||
if( nReservePetal > 0 )
|
||
{
|
||
nRet = pMembershipDB->QueryAddPetalIncomeCashRefund(pCash->biCharacterDBID, pCash->PaymentPackageItemInfo.PaymentPackageItemInfo.biDBID, nReservePetal, nTotalPetal);
|
||
if( nRet != ERROR_NONE ) // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ͼ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϳ<EFBFBD>..
|
||
{
|
||
m_pConnection->SendPackageMoveCashInven(pCash->nAccountDBID, nRet, 0, 0, NULL, 0);
|
||
return;
|
||
}
|
||
}
|
||
else
|
||
{
|
||
nTotalPetal = GetPetalBalance();
|
||
}
|
||
|
||
|
||
|
||
INT64 nSeedPoint = 0;
|
||
#if defined( PRE_ADD_NEW_MONEY_SEED )
|
||
int nSeed = g_pExtManager->GetCashCommoditySeed(pCash->PaymentPackageItemInfo.PaymentPackageItemInfo.nPackageSN);
|
||
if( nSeed > 0 )
|
||
{
|
||
nRet = AddSeedPoint( nSeed );
|
||
if( nRet != ERROR_NONE )
|
||
{
|
||
g_Log.Log(LogType::_ERROR, this, L"[OnPackageMoveCashInven] AddSeedPoint Fail SeedPoint(%d)\r\n", nSeed);
|
||
}
|
||
}
|
||
nSeedPoint = GetSeedPoint();
|
||
#endif
|
||
/*
|
||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> SendPickUp <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
int nProductNo = g_pBillingConnection->GetProductNoBySN(pCash->PaymentPackageItemInfo.PaymentPackageItemInfo.nPackageSN);
|
||
g_pBillingConnection->SendInventoryPickup(pCash->nAccountDBID, pCash->PaymentPackageItemInfo.uiOrderNo, nProductNo, 1); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 1<><31>.
|
||
*/
|
||
m_pConnection->SendPackageMoveCashInven(pCash->nAccountDBID, ERROR_NONE, nTotalPetal, pCash->PaymentPackageItemInfo.PaymentPackageItemInfo.biDBID, pCash->CashItemList, nSeedPoint);
|
||
#endif // #if defined(PRE_ADD_CASH_REFUND)
|
||
}
|
||
|
||
int CDNUserRepository::CalcPackageProcess()
|
||
{
|
||
CDNSQLMembership *pMembershipDB = GetMembershipDB();
|
||
if (!pMembershipDB)
|
||
return ERROR_GENERIC_INVALIDREQUEST;
|
||
|
||
if (0 == m_cProductCount)
|
||
{
|
||
printf("[err] CDNUserRepository::CalcPackageProcess m_cProductCount=0\n"); //0<><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>
|
||
return ERROR_GENERIC_INVALIDREQUEST;
|
||
}
|
||
|
||
int nRet = 0;
|
||
|
||
#if defined(_KRAZ)
|
||
int nTotalPrice = m_nUsedPaidCash;
|
||
#else // #if defined(_KRAZ)
|
||
int nTotalPrice = g_pExtManager->GetCashCommodityPrice(m_nPackageSN);
|
||
#endif // #if defined(_KRAZ)
|
||
int nUnitPrice = nTotalPrice / m_cProductCount;
|
||
int nTempPrice = 0;
|
||
for (int i = 0; i < m_cProductCount; i++){
|
||
if (i == (m_cProductCount - 1)) nUnitPrice = nTotalPrice - nTempPrice;
|
||
|
||
int nCode = DBDNWorldDef::AddMaterializedItem::CashBuy;
|
||
|
||
nRet = CashItemDBProcess(m_cWorldSetID, m_nAccountDBID, m_biCharacterDBID, m_nMapID, m_nChannelID, m_cPaymentRules, m_ProductPackageList[i], nUnitPrice, m_biPurchaseOrderID, nCode);
|
||
|
||
if (nRet != ERROR_NONE){
|
||
pMembershipDB->QueryModGiveFailFlag(m_biPurchaseOrderID, m_nPackageSN, m_ProductPackageList[i].CashItem.nItemID, true);
|
||
g_Log.Log(LogType::_ERROR, this, L"[SetBillingNo(Package)] CashItemDBQuery Fail(%d) Order(%I64d)\r\n", nRet, m_biPurchaseOrderID);
|
||
// <20>ϴ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD> return <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> ó<><C3B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||
}
|
||
nTempPrice += nUnitPrice;
|
||
}
|
||
|
||
return nRet;
|
||
}
|
||
|
||
#if defined(PRE_ADD_CASH_REFUND)
|
||
void CDNUserRepository::OnRecvBillingRefund(int nResult)
|
||
{
|
||
if( nResult != ERROR_NONE)
|
||
{
|
||
SendCashRefund(nResult);
|
||
return;
|
||
}
|
||
|
||
CDNSQLMembership *pMembershipDB = GetMembershipDB();
|
||
if (!pMembershipDB){
|
||
SendCashRefund(ERROR_DB); // <20>̹<EFBFBD> ȯ<>ҵƴµ<C6B4> <20>̷<EFBFBD> <20>ȵ<EFBFBD>..
|
||
return;
|
||
}
|
||
|
||
// ȯ<><C8AF> ó<><C3B3>..
|
||
int nRet = pMembershipDB->QueryCashRefund(m_biPurchaseOrderDetailID);
|
||
if (nRet != ERROR_NONE){
|
||
SendCashRefund(nRet);
|
||
return;
|
||
}
|
||
|
||
SendCashRefund(ERROR_NONE);
|
||
}
|
||
#endif
|
||
|
||
bool CDNUserRepository::OnRecvBillingCoupon(int nBillingResult, int nResult, int nItemSN, UINT nOrderNo)
|
||
{
|
||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>Ű<EFBFBD><C5B0><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD><CFB4><EFBFBD> <20><><EFBFBD><EFBFBD>.
|
||
if (!g_pExtManager->IsOnSaleCommodity(nItemSN))
|
||
{
|
||
SendCoupon(ERROR_CASHSHOP_PROHIBITSALE);
|
||
return false;
|
||
}
|
||
|
||
CDNSQLMembership *pMembershipDB = GetMembershipDB();
|
||
if (!pMembershipDB){
|
||
SendCoupon(ERROR_GENERIC_INVALIDREQUEST);
|
||
return false;
|
||
}
|
||
|
||
string SNStr, ItemIDStr, ItemOptionStr;
|
||
BYTE cOption = -1;
|
||
|
||
TCashCommodityData CashData;
|
||
memset(&CashData, 0, sizeof(CashData));
|
||
|
||
TCashPackageData PackageData;
|
||
memset(&PackageData, 0, sizeof(PackageData));
|
||
bool bPackage = g_pExtManager->GetCashPackageData(nItemSN, PackageData);
|
||
|
||
if (bPackage){ // package
|
||
SNStr = FormatA("%d", nItemSN);
|
||
for (int i = 0; i < (int)PackageData.nVecCommoditySN.size(); i++){
|
||
if (PackageData.nVecCommoditySN[i] <= 0) continue;
|
||
|
||
if (!ItemIDStr.empty()){
|
||
ItemIDStr.append("|");
|
||
ItemOptionStr.append("|");
|
||
}
|
||
|
||
memset(&CashData, 0, sizeof(TCashCommodityData));
|
||
bool bCash = g_pExtManager->GetCashCommodityData(PackageData.nVecCommoditySN[i], CashData);
|
||
if (!bCash) continue;
|
||
|
||
ItemIDStr.append(boost::lexical_cast<std::string>(CashData.nItemID[0]));
|
||
ItemOptionStr.append(boost::lexical_cast<std::string>(static_cast<int>(cOption)));
|
||
}
|
||
}
|
||
else{
|
||
memset(&CashData, 0, sizeof(TCashCommodityData));
|
||
SNStr = FormatA("%d", nItemSN);
|
||
bool bCash = g_pExtManager->GetCashCommodityData(nItemSN, CashData);
|
||
if (bCash){
|
||
ItemIDStr.append(boost::lexical_cast<std::string>(CashData.nItemID[0]));
|
||
ItemOptionStr.append(boost::lexical_cast<std::string>(static_cast<int>(cOption)));
|
||
}
|
||
}
|
||
|
||
m_nCouponSN = nItemSN;
|
||
|
||
string OrderStr = FormatA("%d", nOrderNo);
|
||
int nRet = pMembershipDB->QueryMakeGiftByCoupon(m_biCharacterDBID, m_bPCBang, SNStr.c_str(), ItemIDStr.c_str(), ItemOptionStr.c_str(), m_wszCoupon, OrderStr.c_str(), m_szIp, m_biCouponOrderID);
|
||
if (nRet != ERROR_NONE){
|
||
SendCoupon(nRet);
|
||
return false;
|
||
}
|
||
|
||
char szOrderNo[PUBLISHERORDERKEYMAX] = {0, };
|
||
sprintf_s(szOrderNo, "%d", nOrderNo);
|
||
char cOrderCode = DBDNMembership::OrderStatusCode::FailPayment;
|
||
if (nResult == ERROR_NONE)
|
||
cOrderCode = DBDNMembership::OrderStatusCode::Success;
|
||
|
||
nRet = pMembershipDB->QuerySetPurchaseOrderResult(m_biCouponOrderID, cOrderCode, szOrderNo, nBillingResult, g_pExtManager->GetCashCommodityReserve(m_nCouponSN), m_nUsedPaidCash);
|
||
if (nRet != ERROR_NONE){
|
||
g_Log.Log(LogType::_ERROR, this, L"[SetCoupon] QuerySetPurchaseOrderResult Fail(%d) Order(Eye:%I64d Nexon:%u)\r\n",
|
||
nResult, m_biCouponOrderID, nOrderNo);
|
||
SendCoupon(nRet);
|
||
return false;
|
||
}
|
||
|
||
SendCoupon(nResult);
|
||
return true;
|
||
}
|
||
|
||
void CDNUserRepository::OnRecvBillingPurchase(int nResult, int nBillingResult, UINT nOrderNo, char *pNexonOrderID)
|
||
{
|
||
CDNSQLMembership *pMembershipDB = GetMembershipDB();
|
||
if (!pMembershipDB){
|
||
SendBuyGift(ERROR_GENERIC_INVALIDREQUEST);
|
||
return;
|
||
}
|
||
|
||
switch (m_nSubCommand)
|
||
{
|
||
case CASH_PACKAGEBUY:
|
||
{
|
||
char szOrderNo[PUBLISHERORDERKEYMAX] = {0, };
|
||
sprintf_s(szOrderNo, "%d", nOrderNo);
|
||
char cOrderCode = DBDNMembership::OrderStatusCode::FailPayment;
|
||
if (nResult == ERROR_NONE)
|
||
cOrderCode = DBDNMembership::OrderStatusCode::Success;
|
||
|
||
int nPetalAmount = 0;
|
||
#if defined( PRE_ADD_NEW_MONEY_SEED )
|
||
int nSeedAmount = 0;
|
||
#endif
|
||
#if defined(PRE_ADD_CASH_REFUND) // <20><>Ű<EFBFBD><C5B0><EFBFBD><EFBFBD> ij<><C4B3><EFBFBD>κ<EFBFBD> <20>ٷΰ<D9B7><CEB0><EFBFBD> <20>϶<EFBFBD><CFB6><EFBFBD> <20><>Ż <20><><EFBFBD><EFBFBD>..<2E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ij<><C4B3><EFBFBD>κ<EFBFBD><CEBA><EFBFBD><EFBFBD><EFBFBD> <20>ű涧.
|
||
if( GetCashMoveInven() )
|
||
#endif
|
||
{
|
||
nPetalAmount = g_pExtManager->GetCashCommodityReserve(m_nPackageSN);
|
||
#if defined( PRE_ADD_NEW_MONEY_SEED )
|
||
nSeedAmount = g_pExtManager->GetCashCommoditySeed(m_nPackageSN);
|
||
#endif
|
||
}
|
||
|
||
int nRet = pMembershipDB->QuerySetPurchaseOrderResult(m_biPurchaseOrderID, cOrderCode, szOrderNo, nBillingResult, nPetalAmount, m_nUsedPaidCash);
|
||
if (nRet != ERROR_NONE){
|
||
SendBuyGift(nRet);
|
||
g_Log.Log(LogType::_ERROR, this, L"[SetBillingNo(Package)] QuerySetPurchaseOrderResult Fail(%d) Order(Eye:%I64d Nexon:%u)\r\n",
|
||
nResult, m_biPurchaseOrderID, nOrderNo);
|
||
return;
|
||
}
|
||
|
||
#if defined( PRE_ADD_NEW_MONEY_SEED )
|
||
nRet = AddSeedPoint( nSeedAmount );
|
||
if( ERROR_NONE != nRet )
|
||
{
|
||
g_Log.Log(LogType::_ERROR, this, L"[SetBillingNo(Package)] AddSeedPoint Fail PackageSN(%d) SeedPoint(%d)\r\n", m_nPackageSN, nSeedAmount);
|
||
}
|
||
#endif
|
||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
if (nResult == ERROR_NONE)
|
||
{
|
||
#if defined(PRE_ADD_CASH_REFUND) // <20><>Ű<EFBFBD><C5B0><EFBFBD><EFBFBD> ij<><C4B3><EFBFBD>κ<EFBFBD> <20>ٷΰ<D9B7><CEB0><EFBFBD> <20>϶<EFBFBD><CFB6><EFBFBD> <20><><EFBFBD><EFBFBD> <20>־<EFBFBD><D6BE><EFBFBD><EFBFBD><EFBFBD>..<2E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ij<><C4B3><EFBFBD>κ<EFBFBD><CEBA><EFBFBD><EFBFBD><EFBFBD> <20>ű涧.
|
||
if( !GetCashMoveInven() )
|
||
{
|
||
__time64_t _tNow;
|
||
time(&_tNow);
|
||
m_PaymentPackageItem.uiOrderNo = nOrderNo;
|
||
m_PaymentPackageItem.nPrice = g_pExtManager->GetCashCommodityPrice(m_nPackageSN);
|
||
m_PaymentPackageItem.PaymentPackageItemInfo.nPackageSN = m_nPackageSN;
|
||
m_PaymentPackageItem.PaymentPackageItemInfo.tPaymentDate = _tNow;
|
||
m_PaymentPackageItem.PaymentPackageItemInfo.biDBID = m_biPurchaseOrderDetailID;
|
||
|
||
for (int i = 0; i < m_cProductCount; i++)
|
||
{
|
||
m_PaymentPackageItem.PaymentPackageItemInfo.ItemInfoList[i].nItemSN = m_ProductPackageList[i].nItemSN;
|
||
m_PaymentPackageItem.PaymentPackageItemInfo.ItemInfoList[i].nItemID = m_ProductPackageList[i].CashItem.nItemID;
|
||
m_PaymentPackageItem.PaymentPackageItemInfo.ItemInfoList[i].cItemOption = m_ProductPackageList[i].CashItem.cOption;
|
||
}
|
||
}
|
||
else
|
||
#endif
|
||
{
|
||
CalcPackageProcess();
|
||
}
|
||
}
|
||
|
||
SendBuyGift(nResult);
|
||
}
|
||
break;
|
||
|
||
case CASH_BUY:
|
||
{
|
||
if (m_VecBuyItemList.empty()) return;
|
||
|
||
char szData[64] = { 0, };
|
||
memcpy(szData, &pNexonOrderID[14], strlen(pNexonOrderID) - 14);
|
||
INT64 biOrderID = _atoi64(szData);
|
||
if (biOrderID != m_biPurchaseOrderID){
|
||
g_Log.Log(LogType::_ERROR, this, L"[SetBillingNo(Buy)] biOrderID != m_biPurchaseOrderID Order(Eye:%I64d Nexon:%u)\r\n", m_biPurchaseOrderID, biOrderID);
|
||
return;
|
||
}
|
||
|
||
// m_nBillingOrderNo = nOrderNo;
|
||
|
||
char szOrderNo[PUBLISHERORDERKEYMAX] = {0, };
|
||
sprintf_s(szOrderNo, "%d", nOrderNo);
|
||
char cOrderCode = DBDNMembership::OrderStatusCode::FailPayment;
|
||
if (nResult == ERROR_NONE)
|
||
cOrderCode = DBDNMembership::OrderStatusCode::Success;
|
||
|
||
int nTotalReservePetal = 0;
|
||
#if defined( PRE_ADD_NEW_MONEY_SEED )
|
||
int nTotalSeedPoint = 0;
|
||
#endif
|
||
for (int i = 0; i < (int)m_VecBuyItemList.size(); i++)
|
||
{
|
||
#if defined(PRE_ADD_CASH_REFUND) // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ǰ<EFBFBD>̳<EFBFBD> ȯ<>ҺҰ<D2BA><D2B0><EFBFBD><EFBFBD><EFBFBD> <20>ֵ鸸 <20>켱 Petal<61><6C><EFBFBD><EFBFBD>..<2E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ij<><C4B3><EFBFBD>κ<EFBFBD><CEBA><EFBFBD><EFBFBD><EFBFBD> <20>ű涧.
|
||
if( GetCashMoveInven() || g_pExtManager->GetCashCommodityNoRefund(m_VecBuyItemList[i].BuyItem.CashItem.nItemID, m_VecBuyItemList[i].BuyItem.nItemSN) )
|
||
#endif
|
||
{
|
||
|
||
nTotalReservePetal += m_VecBuyItemList[i].nReservePetal;
|
||
#if defined( PRE_ADD_NEW_MONEY_SEED )
|
||
nTotalSeedPoint += m_VecBuyItemList[i].nSeedPoint;
|
||
#endif
|
||
}
|
||
}
|
||
|
||
int nRet = pMembershipDB->QuerySetPurchaseOrderResult(m_biPurchaseOrderID, cOrderCode, szOrderNo, nBillingResult, nTotalReservePetal, m_nUsedPaidCash);
|
||
if (nRet != ERROR_NONE){
|
||
g_Log.Log(LogType::_ERROR, this, L"[SetBillingNo(Buy)] QuerySetPurchaseOrderResult Fail(%d) Order(Eye:%I64d Nexon:%u)\r\n", nResult, m_biPurchaseOrderID, nOrderNo);
|
||
SendBuyGift(nRet);
|
||
return;
|
||
}
|
||
#if defined( PRE_ADD_NEW_MONEY_SEED )
|
||
nRet = AddSeedPoint( nTotalSeedPoint );
|
||
if( ERROR_NONE != nRet )
|
||
{
|
||
g_Log.Log(LogType::_ERROR, this, L"[SetBillingNo(Buy)] AddSeedPoint Fail SeedPoint(%d)\r\n", nTotalSeedPoint);
|
||
}
|
||
#endif
|
||
|
||
if (nResult == ERROR_NONE)
|
||
{
|
||
#if defined(PRE_ADD_CASH_REFUND)
|
||
int nCount = 0;
|
||
#endif
|
||
for (int i = 0; i < (int)m_VecBuyItemList.size(); i++)
|
||
{
|
||
m_VecBuyItemList[i].BuyItem.bFail = false;
|
||
|
||
#if defined(PRE_ADD_CASH_REFUND) // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ǰ<EFBFBD>̳<EFBFBD> ȯ<>ҺҰ<D2BA><D2B0><EFBFBD><EFBFBD><EFBFBD> <20>ֵ鸸 <20>켱 ItemInsert..<2E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ij<><C4B3><EFBFBD>κ<EFBFBD><CEBA><EFBFBD><EFBFBD><EFBFBD> <20>ű涧...
|
||
if( GetCashMoveInven() || g_pExtManager->GetCashCommodityNoRefund(m_VecBuyItemList[i].BuyItem.CashItem.nItemID, m_VecBuyItemList[i].BuyItem.nItemSN) )
|
||
#endif
|
||
{
|
||
int nCode = DBDNWorldDef::AddMaterializedItem::CashBuy;
|
||
|
||
nRet = CashItemDBProcess(m_cWorldSetID, m_nAccountDBID, m_biCharacterDBID, m_nMapID, m_nChannelID, m_cPaymentRules, m_VecBuyItemList[i].BuyItem,
|
||
m_VecBuyItemList[i].nPrice, m_biPurchaseOrderID, nCode);
|
||
if (nRet != ERROR_NONE)
|
||
{
|
||
pMembershipDB->QueryModGiveFailFlag2(m_VecBuyItemList[i].biPurchaseOrderDetailID, true);
|
||
g_Log.Log(LogType::_ERROR, this, L"[SetBillingNo(Buy)] CashItemDBQuery Fail(%d) Order(%I64d) Item(SN:%d ID:%d)\r\n", nRet, m_biPurchaseOrderID, m_VecBuyItemList[i].BuyItem.nItemSN, m_VecBuyItemList[i].BuyItem.CashItem.nItemID);
|
||
// <20>ϴ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD> return <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> ó<><C3B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||
}
|
||
}
|
||
#if defined(PRE_ADD_CASH_REFUND)
|
||
else
|
||
{
|
||
__time64_t _tNow;
|
||
time(&_tNow);
|
||
// <20><><EFBFBD><EFBFBD><EFBFBD>κ<EFBFBD><CEBA><EFBFBD> <20>߰<EFBFBD><DFB0><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ..
|
||
m_PaymentItem[nCount].uiOrderNo = nOrderNo;
|
||
m_PaymentItem[nCount].nPrice = m_VecBuyItemList[i].nPrice;
|
||
m_PaymentItem[nCount].PaymentItemInfo.biDBID = m_VecBuyItemList[i].biPurchaseOrderDetailID;
|
||
m_PaymentItem[nCount].PaymentItemInfo.ItemInfo.nItemSN = m_VecBuyItemList[i].BuyItem.nItemSN;
|
||
m_PaymentItem[nCount].PaymentItemInfo.ItemInfo.nItemID = m_VecBuyItemList[i].BuyItem.CashItem.nItemID;
|
||
m_PaymentItem[nCount].PaymentItemInfo.tPaymentDate = _tNow; // <20>׳<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>ɷ<EFBFBD> <20><><EFBFBD><EFBFBD>.
|
||
nCount++;
|
||
}
|
||
#endif
|
||
}
|
||
}
|
||
|
||
SendBuyGift(nResult);
|
||
}
|
||
break;
|
||
|
||
case CASH_GIFT:
|
||
{
|
||
if (m_VecGiftItemList.empty()) return;
|
||
// m_nPickupCount++;
|
||
|
||
if (nOrderNo > 0){
|
||
char szData[64] = { 0, };
|
||
memcpy(szData, &pNexonOrderID[14], strlen(pNexonOrderID) - 14);
|
||
INT64 biOrderID = _atoi64(szData);
|
||
|
||
if (m_VecGiftItemList[0].biPurchaseOrderID == biOrderID){
|
||
for (int i = 0; i < (int)m_VecGiftItemList.size(); i++){
|
||
char szOrderNo[PUBLISHERORDERKEYMAX] = {0, };
|
||
sprintf_s(szOrderNo, "%d", nOrderNo);
|
||
char cOrderCode = DBDNMembership::OrderStatusCode::FailPayment;
|
||
if (nResult == ERROR_NONE){
|
||
m_VecGiftItemList[i].GiftItem.bFail = false;
|
||
cOrderCode = DBDNMembership::OrderStatusCode::Success;
|
||
}
|
||
|
||
int nRet = pMembershipDB->QuerySetPurchaseOrderResult(m_VecGiftItemList[i].biPurchaseOrderID, cOrderCode, szOrderNo, nBillingResult, m_VecGiftItemList[i].nReservePetal, m_nUsedPaidCash);
|
||
if (nRet != ERROR_NONE){
|
||
SendBuyGift(nRet);
|
||
g_Log.Log(LogType::_ERROR, this, L"[SetBillingNo(Gift)] QuerySetPurchaseOrderResult Fail(%d) Order(Eye:%I64d Nexon:%u)\r\n", nResult, m_VecGiftItemList[i].biPurchaseOrderID, nOrderNo);
|
||
return;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
SendBuyGift(nResult);
|
||
}
|
||
break;
|
||
|
||
case CASH_PACKAGEGIFT:
|
||
{
|
||
char szOrderNo[PUBLISHERORDERKEYMAX] = {0, };
|
||
sprintf_s(szOrderNo, "%d", nOrderNo);
|
||
char cOrderCode = DBDNMembership::OrderStatusCode::FailPayment;
|
||
if (nResult == ERROR_NONE)
|
||
cOrderCode = DBDNMembership::OrderStatusCode::Success;
|
||
|
||
int nRet = pMembershipDB->QuerySetPurchaseOrderResult(m_biPurchaseOrderID, cOrderCode, szOrderNo, nBillingResult, g_pExtManager->GetCashCommodityReserve(m_nPackageSN), m_nUsedPaidCash);
|
||
if (nRet != ERROR_NONE){
|
||
SendBuyGift(nRet);
|
||
g_Log.Log(LogType::_ERROR, this, L"[SetBillingNo(PackageGift)] QuerySetPurchaseOrderResult Fail(%d) Order(Eye:%I64d Nexon:%u)\r\n", nResult, m_biPurchaseOrderID, nOrderNo);
|
||
return;
|
||
}
|
||
|
||
SendBuyGift(nResult);
|
||
}
|
||
break;
|
||
}
|
||
}
|
||
|
||
#if defined(_CH) || defined(_EU)
|
||
int CDNUserRepository::GetTotalPetalBuyPartList()
|
||
{
|
||
int nTotal = 0;
|
||
|
||
if (GetBuyItemPart()){
|
||
for (int i = 0; i < MAX_GOOD_LEN; i++){
|
||
if (!GetBuyItemPart()->pPartItem[i]) continue;
|
||
nTotal += GetBuyItemPart()->pPartItem[i]->nReservePetal;
|
||
}
|
||
}
|
||
return nTotal;
|
||
}
|
||
|
||
void CDNUserRepository::SetSuccessBuyPartList()
|
||
{
|
||
if (GetBuyItemPart()){
|
||
for (int i = 0; i < MAX_GOOD_LEN; i++){
|
||
if (!GetBuyItemPart()->pPartItem[i]) continue;
|
||
GetBuyItemPart()->pPartItem[i]->BuyItem.bFail = false;
|
||
}
|
||
}
|
||
}
|
||
|
||
void CDNUserRepository::SetOrderStepBuyPartList(int nOrderStep)
|
||
{
|
||
if (GetBuyItemPart()){
|
||
GetBuyItemPart()->nOrderStep = nOrderStep;
|
||
}
|
||
}
|
||
|
||
void CDNUserRepository::SetSuccessGiftPartList()
|
||
{
|
||
if (GetGiftItemPart()){
|
||
for (int i = 0; i < MAX_GOOD_LEN; i++){
|
||
if (!GetGiftItemPart()->pPartItem[i]) continue;
|
||
GetGiftItemPart()->pPartItem[i]->GiftItem.bFail = false;
|
||
}
|
||
}
|
||
}
|
||
|
||
void CDNUserRepository::SetOrderStepGiftPartList(int nOrderStep)
|
||
{
|
||
if (GetGiftItemPart()){
|
||
GetGiftItemPart()->nOrderStep = nOrderStep;
|
||
}
|
||
}
|
||
|
||
void CDNUserRepository::OnRecvAccountLock(int nBillingResult, char *pBillingContextID)
|
||
{
|
||
#if defined (PRE_ADD_REJECT_DUPLICATED_CASH_REQUEST)
|
||
CRequestReleaser releaser(m_Requesting);
|
||
#endif // #if defined (PRE_ADD_REJECT_DUPLICATED_CASH_REQUEST)
|
||
|
||
int nResult = g_pBillingConnection->ConvertResult(nBillingResult);
|
||
|
||
switch(m_nSubCommand)
|
||
{
|
||
case CASH_BUY:
|
||
{
|
||
if (strncmp(GetContextId(), pBillingContextID, GetContextIdCnt())) // pBillingOrderID <20><> AccountLock / AccountUnlock <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>ϹǷ<CFB9> <20><><EFBFBD><EFBFBD> pBillingContextID <20><> <20><><EFBFBD><EFBFBD>
|
||
break;
|
||
|
||
if (SNDAORDERSTEP_WORK != GetOrderStep())
|
||
break;
|
||
|
||
CDNBillingConnectionCH::TGoodsInfo Goods[MAX_GOOD_LEN] = { 0, };
|
||
int nCount = 0;
|
||
|
||
int nRet = ERROR_DB;
|
||
if (nResult == ERROR_NONE){
|
||
g_pBillingConnection->GetBuyGoodsInfo(GetBuyItemPart(), Goods, nCount);
|
||
|
||
nRet = g_pBillingConnection->SendAccountUnlock(this, true, pBillingContextID, Goods, nCount, false);
|
||
if (nRet >= ERROR_NONE) break;
|
||
}
|
||
|
||
g_Log.Log(LogType::_ERROR, this, L"[OnRecvAccountLock:CASH_BUY] nRet:%d nResult:%d\r\n", nRet, nResult); // 20100621
|
||
|
||
SetOrderStepBuyPartList(SNDAORDERSTEP_FAIL);
|
||
m_nPartCount++;
|
||
|
||
int nPartListMax = (int)m_VecBuyItemPartList.size();
|
||
for (int i = m_nPartCount; i < nPartListMax; i++){
|
||
memset(&Goods, 0, sizeof(Goods));
|
||
nCount = 0;
|
||
g_pBillingConnection->GetBuyGoodsInfo(GetBuyItemPart(), Goods, nCount);
|
||
|
||
nRet = g_pBillingConnection->SendAccountLock(this, Goods, nCount, false);
|
||
if (nRet >= 0) break;
|
||
|
||
g_Log.Log(LogType::_ERROR, this, L"[OnRecvAccountLock:CASH_BUY] SendAccountLock() nRet : %d\r\n", nRet); // 20100621
|
||
|
||
SetOrderStepBuyPartList(SNDAORDERSTEP_FAIL);
|
||
m_nPartCount++;
|
||
}
|
||
|
||
if (m_nPartCount == nPartListMax) {
|
||
SendBuyGift(nResult);
|
||
}
|
||
#if defined (PRE_ADD_REJECT_DUPLICATED_CASH_REQUEST)
|
||
else
|
||
releaser.Lock();
|
||
#endif // #if defined (PRE_ADD_REJECT_DUPLICATED_CASH_REQUEST)
|
||
}
|
||
break;
|
||
|
||
case CASH_PACKAGEBUY:
|
||
{
|
||
if (strncmp(GetContextId(), pBillingContextID, GetContextIdCnt())) // pBillingOrderID <20><> AccountLock / AccountUnlock <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>ϹǷ<CFB9> <20><><EFBFBD><EFBFBD> pBillingContextID <20><> <20><><EFBFBD><EFBFBD>
|
||
break;
|
||
|
||
if (ERROR_NONE != nResult){
|
||
SendBuyGift(nResult);
|
||
break;
|
||
}
|
||
|
||
CDNBillingConnectionCH::TGoodsInfo Goods[MAX_GOOD_LEN] = { 0, };
|
||
|
||
Goods[0].nItemSN = m_nPackageSN;
|
||
Goods[0].nPrice = g_pExtManager->GetCashCommodityPrice(m_nPackageSN);
|
||
|
||
int nRet = g_pBillingConnection->SendAccountUnlock(this, true, pBillingContextID, Goods, 1, false);
|
||
if (0 > nRet) {
|
||
g_Log.Log(LogType::_ERROR, this, L"[OnRecvAccountLock:CASH_PACKAGEBUY] SendAccountUnlock() nRet: %d\r\n", nRet); // 20100621
|
||
}
|
||
}
|
||
break;
|
||
|
||
case CASH_GIFT:
|
||
{
|
||
if (strncmp(GetContextId(), pBillingContextID, GetContextIdCnt())) // pBillingOrderID <20><> AccountLock / AccountUnlock <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>ϹǷ<CFB9> <20><><EFBFBD><EFBFBD> pBillingContextID <20><> <20><><EFBFBD><EFBFBD>
|
||
break;
|
||
|
||
if (SNDAORDERSTEP_WORK != GetOrderStep())
|
||
break;
|
||
|
||
CDNBillingConnectionCH::TGoodsInfo Goods[MAX_GOOD_LEN] = { 0, };
|
||
int nCount = 0;
|
||
|
||
int nRet = ERROR_DB;
|
||
if (nResult == ERROR_NONE){
|
||
g_pBillingConnection->GetGiftGoodsInfo(GetGiftItemPart(), Goods, nCount);
|
||
|
||
nRet = g_pBillingConnection->SendAccountUnlock(this, true, pBillingContextID, Goods, nCount, true);
|
||
if (nRet >= ERROR_NONE) break;
|
||
}
|
||
|
||
g_Log.Log(LogType::_ERROR, this, L"[OnRecvAccountLock:CASH_GIFT] nRet:%d\r\n", nRet); // 20100621
|
||
|
||
SetOrderStepGiftPartList(SNDAORDERSTEP_FAIL);
|
||
m_nPartCount++;
|
||
|
||
int nPartListMax = (int)m_VecGiftItemPartList.size();
|
||
for (int i = m_nPartCount; i < nPartListMax; i++){
|
||
memset(&Goods, 0, sizeof(Goods));
|
||
nCount = 0;
|
||
g_pBillingConnection->GetGiftGoodsInfo(GetGiftItemPart(), Goods, nCount);
|
||
|
||
nRet = g_pBillingConnection->SendAccountLock(this, Goods, nCount, true);
|
||
if (nRet >= 0) break;
|
||
|
||
g_Log.Log(LogType::_ERROR, this, L"[OnRecvAccountLock:CASH_BUY] SendAccountLock() nRet : %d\r\n", nRet); // 20100621
|
||
|
||
SetOrderStepGiftPartList(SNDAORDERSTEP_FAIL);
|
||
m_nPartCount++;
|
||
}
|
||
|
||
if (m_nPartCount == nPartListMax) {
|
||
SendBuyGift(nResult);
|
||
}
|
||
#if defined (PRE_ADD_REJECT_DUPLICATED_CASH_REQUEST)
|
||
else
|
||
releaser.Lock();
|
||
#endif // #if defined (PRE_ADD_REJECT_DUPLICATED_CASH_REQUEST)
|
||
}
|
||
break;
|
||
|
||
case CASH_PACKAGEGIFT:
|
||
{
|
||
if (strncmp(GetContextId(), pBillingContextID, GetContextIdCnt())) { // pBillingOrderID <20><> AccountLock / AccountUnlock <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>ϹǷ<CFB9> <20><><EFBFBD><EFBFBD> pBillingContextID <20><> <20><><EFBFBD><EFBFBD>
|
||
break;
|
||
}
|
||
|
||
if (ERROR_NONE != nResult){
|
||
SendBuyGift(nResult);
|
||
break;
|
||
}
|
||
|
||
CDNBillingConnectionCH::TGoodsInfo Goods[MAX_GOOD_LEN] = { 0, };
|
||
|
||
Goods[0].nItemSN = m_nPackageSN;
|
||
Goods[0].nPrice = g_pExtManager->GetCashCommodityPrice(m_nPackageSN);
|
||
|
||
int nRet = g_pBillingConnection->SendAccountUnlock(this, true, pBillingContextID, Goods, 1, true);
|
||
if (0 > nRet) {
|
||
g_Log.Log(LogType::_ERROR, this, L"[OnRecvAccountLock:CASH_PACKAGEBUY] SendAccountUnlock() nRet : %d\r\n", nRet); // 20100621
|
||
}
|
||
}
|
||
break;
|
||
|
||
case CASH_VIPBUY:
|
||
case CASH_VIPGIFT:
|
||
{
|
||
if (strncmp(GetContextId(), pBillingContextID, GetContextIdCnt())) { // pBillingOrderID <20><> AccountLock / AccountUnlock <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>ϹǷ<CFB9> <20><><EFBFBD><EFBFBD> pBillingContextID <20><> <20><><EFBFBD><EFBFBD>
|
||
break;
|
||
}
|
||
|
||
if (ERROR_NONE != nResult){
|
||
SendVIPBuyGift(nResult, 0);
|
||
break;
|
||
}
|
||
|
||
CDNBillingConnectionCH::TGoodsInfo Goods[MAX_GOOD_LEN] = { 0, };
|
||
|
||
Goods[0].nItemSN = m_VIP.nItemSN;
|
||
Goods[0].nPrice = m_VIP.nPrice;
|
||
|
||
bool bGift = false;
|
||
if (m_nSubCommand == CASH_VIPGIFT)
|
||
bGift = true;
|
||
|
||
int nRet = g_pBillingConnection->SendAccountUnlock(this, true, pBillingContextID, Goods, 1, bGift);
|
||
if (0 > nRet) {
|
||
g_Log.Log(LogType::_ERROR, this, L"[OnRecvAccountLock:%d] SendAccountUnlock() nRet : %d\r\n", m_nSubCommand, nRet); // 20100621
|
||
}
|
||
}
|
||
break;
|
||
|
||
default:
|
||
break;
|
||
}
|
||
}
|
||
|
||
void CDNUserRepository::OnRecvAccountUnlock(int nBillingResult, char *pBillingContextID, char *pBillingOrderID, int nBalance)
|
||
{
|
||
#if defined (PRE_ADD_REJECT_DUPLICATED_CASH_REQUEST)
|
||
CRequestReleaser releaser(m_Requesting);
|
||
#endif // #if defined (PRE_ADD_REJECT_DUPLICATED_CASH_REQUEST)
|
||
|
||
CDNSQLMembership *pMembershipDB = GetMembershipDB();
|
||
if (!pMembershipDB){
|
||
SendBuyGift(ERROR_DB);
|
||
return;
|
||
}
|
||
|
||
int nResult = g_pBillingConnection->ConvertResult(nBillingResult);
|
||
|
||
switch(m_nSubCommand)
|
||
{
|
||
case CASH_BUY:
|
||
{
|
||
if (m_VecBuyItemPartList.empty()) return;
|
||
if (!GetBuyItemPart()) return;
|
||
|
||
if (strncmp(GetContextId(), pBillingContextID, GetContextIdCnt())) { // pBillingOrderID <20><> AccountLock / AccountUnlock <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>ϹǷ<CFB9> <20><><EFBFBD><EFBFBD> pBillingContextID <20><> <20><><EFBFBD><EFBFBD>
|
||
break;
|
||
}
|
||
|
||
if (SNDAORDERSTEP_WORK != GetOrderStep()) {
|
||
break;
|
||
}
|
||
|
||
char szOrderKey[PUBLISHERORDERKEYMAX] = {0, };
|
||
sprintf_s(szOrderKey, "%s", pBillingOrderID); // 20100809 <20>߱<EFBFBD><DFB1><EFBFBD> <20>°<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
char szContextKey[PUBLISHERORDERKEYMAX] = {0, };
|
||
sprintf_s(szContextKey, "%s", pBillingContextID); // 20100809 <20>߱<EFBFBD><DFB1><EFBFBD> <20>°<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
|
||
char cOrderCode = DBDNMembership::OrderStatusCode::FailPayment;
|
||
if (ERROR_NONE == nResult) {
|
||
SetSuccessBuyPartList();
|
||
cOrderCode = DBDNMembership::OrderStatusCode::Success;
|
||
}
|
||
|
||
int nRetCode = pMembershipDB->QuerySetPurchaseOrderResult(GetBuyItemPart()->biPurchaseOrderID, cOrderCode, szOrderKey, nBillingResult, GetTotalPetalBuyPartList(), m_nUsedPaidCash, szContextKey);
|
||
if (ERROR_NONE != nRetCode) {
|
||
SendBuyGift(nRetCode);
|
||
SetOrderStepBuyPartList(SNDAORDERSTEP_FAIL);
|
||
|
||
g_Log.Log(LogType::_ERROR, this, L"[OnRecvAccountUnlock:CASH_BUY] QuerySetPurchaseOrderResult Fail(%d) Order(Eye:%I64d Shanda:%S)\r\n",
|
||
nRetCode, GetPurchaseOrderID(), pBillingContextID); // pBillingOrderID <20><> AccountLock / AccountUnlock <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>ϹǷ<CFB9> <20><><EFBFBD><EFBFBD> pBillingContextID <20><> <20><><EFBFBD><EFBFBD>
|
||
return;
|
||
}
|
||
|
||
if (GetBuyItemPart()){
|
||
SetOrderStepBuyPartList(SNDAORDERSTEP_SUCCESS);
|
||
|
||
for (int i = 0; i < MAX_GOOD_LEN; i++){
|
||
if (!GetBuyItemPart()->pPartItem[i]) continue;
|
||
|
||
int nCode = DBDNWorldDef::AddMaterializedItem::CashBuy;
|
||
|
||
nRetCode = CashItemDBProcess(m_cWorldSetID, m_nAccountDBID, m_biCharacterDBID, m_nMapID, m_nChannelID, m_cPaymentRules, GetBuyItemPart()->pPartItem[i]->BuyItem,
|
||
GetBuyItemPart()->pPartItem[i]->nPrice, GetBuyItemPart()->biPurchaseOrderID, nCode);
|
||
|
||
if (ERROR_NONE != nRetCode) {
|
||
pMembershipDB->QueryModGiveFailFlag2(GetBuyItemPart()->pPartItem[i]->biPurchaseOrderDetailID, true);
|
||
}
|
||
}
|
||
}
|
||
|
||
m_nPartCount++;
|
||
|
||
CDNBillingConnectionCH::TGoodsInfo Goods[MAX_GOOD_LEN] = { 0, };
|
||
int nCount = 0;
|
||
|
||
int nPartListMax = (int)m_VecBuyItemPartList.size();
|
||
for (int i = m_nPartCount; i < nPartListMax; i++){
|
||
memset(&Goods, 0, sizeof(Goods));
|
||
nCount = 0;
|
||
g_pBillingConnection->GetBuyGoodsInfo(GetBuyItemPart(), Goods, nCount);
|
||
|
||
nRetCode = g_pBillingConnection->SendAccountLock(this, Goods, nCount, false);
|
||
if (nRetCode >= 0) break;
|
||
|
||
g_Log.Log(LogType::_ERROR, this, L"[OnRecvAccountUnlock:CASH_BUY] SendAccountLock() nRetCode : %d\r\n", nRetCode); // 20100621
|
||
|
||
SetOrderStepBuyPartList(SNDAORDERSTEP_FAIL);
|
||
m_nPartCount++;
|
||
}
|
||
|
||
if (m_nPartCount == nPartListMax) {
|
||
SendBuyGift(nResult);
|
||
}
|
||
#if defined (PRE_ADD_REJECT_DUPLICATED_CASH_REQUEST)
|
||
else
|
||
releaser.Lock();
|
||
#endif // #if defined (PRE_ADD_REJECT_DUPLICATED_CASH_REQUEST)
|
||
}
|
||
break;
|
||
|
||
case CASH_PACKAGEBUY:
|
||
{
|
||
if (strncmp(GetContextId(), pBillingContextID, GetContextIdCnt())) // pBillingOrderID <20><> AccountLock / AccountUnlock <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>ϹǷ<CFB9> <20><><EFBFBD><EFBFBD> pBillingContextID <20><> <20><><EFBFBD><EFBFBD>
|
||
break;
|
||
|
||
char szOrderKey[PUBLISHERORDERKEYMAX] = {0, };
|
||
sprintf_s(szOrderKey, "%s", pBillingOrderID); // 20100809 <20>߱<EFBFBD><DFB1><EFBFBD> <20>°<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
char szContextKey[PUBLISHERORDERKEYMAX] = {0, };
|
||
sprintf_s(szContextKey, "%s", pBillingContextID); // 20100809 <20>߱<EFBFBD><DFB1><EFBFBD> <20>°<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
|
||
char cOrderCode = DBDNMembership::OrderStatusCode::FailPayment;
|
||
if (nResult == ERROR_NONE)
|
||
cOrderCode = DBDNMembership::OrderStatusCode::Success;
|
||
|
||
int nRet = pMembershipDB->QuerySetPurchaseOrderResult(GetPurchaseOrderID(), cOrderCode, szOrderKey, nBillingResult, g_pExtManager->GetCashCommodityReserve(GetPackageSN()), m_nUsedPaidCash, szContextKey);
|
||
if (nRet != ERROR_NONE){
|
||
g_Log.Log(LogType::_ERROR, this, L"[OnRecvAccountUnlock(Package)] CASH_PACKAGEBUY QuerySetPurchaseOrderResult Fail(%d) Order(Eye:%I64d Shanda:%S)\r\n",
|
||
nRet, GetPurchaseOrderID(), pBillingContextID); // pBillingOrderID <20><> AccountLock / AccountUnlock <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>ϹǷ<CFB9> <20><><EFBFBD><EFBFBD> pBillingContextID <20><> <20><><EFBFBD><EFBFBD>
|
||
SendBuyGift(nRet);
|
||
return;
|
||
}
|
||
|
||
if (nResult == ERROR_NONE){
|
||
CalcPackageProcess();
|
||
}
|
||
|
||
SendBuyGift(nResult);
|
||
}
|
||
break;
|
||
|
||
case CASH_GIFT:
|
||
{
|
||
if (m_VecGiftItemPartList.empty()) return;
|
||
if (!GetGiftItemPart()) return;
|
||
|
||
if (strncmp(GetContextId(), pBillingContextID, GetContextIdCnt())) { // pBillingOrderID <20><> AccountLock / AccountUnlock <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>ϹǷ<CFB9> <20><><EFBFBD><EFBFBD> pBillingContextID <20><> <20><><EFBFBD><EFBFBD>
|
||
break;
|
||
}
|
||
|
||
if (SNDAORDERSTEP_WORK != GetOrderStep()) {
|
||
break;
|
||
}
|
||
|
||
char szOrderKey[PUBLISHERORDERKEYMAX] = {0, };
|
||
sprintf_s(szOrderKey, "%s", pBillingOrderID); // 20100809 <20>߱<EFBFBD><DFB1><EFBFBD> <20>°<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
char szContextKey[PUBLISHERORDERKEYMAX] = {0, };
|
||
sprintf_s(szContextKey, "%s", pBillingContextID); // 20100809 <20>߱<EFBFBD><DFB1><EFBFBD> <20>°<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
|
||
char cOrderCode = DBDNMembership::OrderStatusCode::FailPayment;
|
||
if (ERROR_NONE == nResult) {
|
||
SetSuccessGiftPartList();
|
||
cOrderCode = DBDNMembership::OrderStatusCode::Success;
|
||
}
|
||
|
||
for (int i = 0; i < MAX_GOOD_LEN; i++){
|
||
if (!GetGiftItemPart()->pPartItem[i]) continue;
|
||
|
||
int nRet = pMembershipDB->QuerySetPurchaseOrderResult(GetGiftItemPart()->pPartItem[i]->biPurchaseOrderID, cOrderCode, szOrderKey, nBillingResult, GetGiftItemPart()->pPartItem[i]->nReservePetal, m_nUsedPaidCash, szContextKey);
|
||
if (ERROR_NONE != nRet) {
|
||
g_Log.Log(LogType::_ERROR, this, L"[OnRecvAccountUnlock] CASH_GIFT QuerySetPurchaseOrderResult Fail(%d) Order(Eye:%I64d Shanda:%S)\r\n",
|
||
nRet, GetGiftItemPart()->pPartItem[i]->biPurchaseOrderID, pBillingContextID); // pBillingOrderID <20><> AccountLock / AccountUnlock <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>ϹǷ<CFB9> <20><><EFBFBD><EFBFBD> pBillingContextID <20><> <20><><EFBFBD><EFBFBD>
|
||
SendBuyGift(nRet);
|
||
return;
|
||
}
|
||
}
|
||
m_nPartCount++;
|
||
|
||
CDNBillingConnectionCH::TGoodsInfo Goods[MAX_GOOD_LEN] = { 0, };
|
||
int nCount = 0;
|
||
|
||
int nPartListMax = (int)m_VecGiftItemPartList.size();
|
||
for (int i = m_nPartCount; i < nPartListMax; i++){
|
||
memset(&Goods, 0, sizeof(Goods));
|
||
nCount = 0;
|
||
g_pBillingConnection->GetGiftGoodsInfo(GetGiftItemPart(), Goods, nCount);
|
||
|
||
int nRetCode = g_pBillingConnection->SendAccountLock(this, Goods, nCount, true);
|
||
if (nRetCode >= 0) break;
|
||
|
||
g_Log.Log(LogType::_ERROR, this, L"[OnRecvAccountUnlock:CASH_GIFT] SendAccountLock() nRetCode : %d\r\n", nRetCode); // 20100621
|
||
|
||
SetOrderStepGiftPartList(SNDAORDERSTEP_FAIL);
|
||
m_nPartCount++;
|
||
}
|
||
|
||
if (m_nPartCount == nPartListMax) {
|
||
SendBuyGift(nResult);
|
||
}
|
||
#if defined (PRE_ADD_REJECT_DUPLICATED_CASH_REQUEST)
|
||
else
|
||
releaser.Lock();
|
||
#endif // #if defined (PRE_ADD_REJECT_DUPLICATED_CASH_REQUEST)
|
||
}
|
||
break;
|
||
|
||
case CASH_PACKAGEGIFT:
|
||
{
|
||
if (strncmp(GetContextId(), pBillingContextID, GetContextIdCnt())) // pBillingOrderID <20><> AccountLock / AccountUnlock <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>ϹǷ<CFB9> <20><><EFBFBD><EFBFBD> pBillingContextID <20><> <20><><EFBFBD><EFBFBD>
|
||
break;
|
||
|
||
char szOrderKey[PUBLISHERORDERKEYMAX] = {0, };
|
||
sprintf_s(szOrderKey, "%s", pBillingOrderID); // 20100809 <20>߱<EFBFBD><DFB1><EFBFBD> <20>°<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
char szContextKey[PUBLISHERORDERKEYMAX] = {0, };
|
||
sprintf_s(szContextKey, "%s", pBillingContextID); // 20100809 <20>߱<EFBFBD><DFB1><EFBFBD> <20>°<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
|
||
char cOrderCode = DBDNMembership::OrderStatusCode::FailPayment;
|
||
if (nResult == ERROR_NONE) cOrderCode = DBDNMembership::OrderStatusCode::Success;
|
||
|
||
int nRet = pMembershipDB->QuerySetPurchaseOrderResult(GetPurchaseOrderID(), cOrderCode, szOrderKey, nBillingResult, g_pExtManager->GetCashCommodityReserve(GetPackageSN()), m_nUsedPaidCash, szContextKey);
|
||
if (nRet != ERROR_NONE){
|
||
g_Log.Log(LogType::_ERROR, this, L"[OnRecvAccountUnlock(CASH_PACKAGEGIFT)] QuerySetPurchaseOrderResult Fail(%d) Order(Eye:%I64d Shanda:%S)\r\n",
|
||
nRet, GetPurchaseOrderID(), pBillingContextID); // pBillingOrderID <20><> AccountLock / AccountUnlock <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>ϹǷ<CFB9> <20><><EFBFBD><EFBFBD> pBillingContextID <20><> <20><><EFBFBD><EFBFBD>
|
||
SendBuyGift(nRet);
|
||
return;
|
||
}
|
||
|
||
SendBuyGift(nResult);
|
||
}
|
||
break;
|
||
|
||
case CASH_VIPBUY:
|
||
case CASH_VIPGIFT:
|
||
{
|
||
if (strncmp(GetContextId(), pBillingContextID, GetContextIdCnt())) // pBillingOrderID <20><> AccountLock / AccountUnlock <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>ϹǷ<CFB9> <20><><EFBFBD><EFBFBD> pBillingContextID <20><> <20><><EFBFBD><EFBFBD>
|
||
break;
|
||
|
||
char szOrderKey[PUBLISHERORDERKEYMAX] = {0, };
|
||
sprintf_s(szOrderKey, "%s", pBillingOrderID);
|
||
char szContextKey[PUBLISHERORDERKEYMAX] = {0, };
|
||
sprintf_s(szContextKey, "%s", pBillingContextID);
|
||
|
||
char cOrderCode = DBDNMembership::OrderStatusCode::FailPayment;
|
||
if (nResult == ERROR_NONE) cOrderCode = DBDNMembership::OrderStatusCode::Success;
|
||
|
||
int nRet = pMembershipDB->QuerySetPurchaseOrderResult(m_VIP.biPurchaseOrderID, cOrderCode, szOrderKey, nBillingResult, g_pExtManager->GetCashCommodityReserve(m_VIP.nItemSN), m_nUsedPaidCash, szContextKey);
|
||
if (nRet != ERROR_NONE){
|
||
g_Log.Log(LogType::_ERROR, this, L"[OnRecvAccountUnlock(CASH_VIPBUY)] QuerySetPurchaseOrderResult Fail(%d) Order(Eye:%I64d Shanda:%S)\r\n",
|
||
nRet, m_VIP.biPurchaseOrderID, pBillingContextID); // pBillingOrderID <20><> AccountLock / AccountUnlock <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>ϹǷ<CFB9> <20><><EFBFBD><EFBFBD> pBillingContextID <20><> <20><><EFBFBD><EFBFBD>
|
||
SendVIPBuyGift(nRet, 0);
|
||
return;
|
||
}
|
||
|
||
SendVIPBuyGift(nResult, nBalance);
|
||
}
|
||
break;
|
||
|
||
default:
|
||
break;
|
||
}
|
||
}
|
||
#endif // #if defined(_CH) || defined(_EU)
|
||
|
||
// Connection<6F><6E><EFBFBD><EFBFBD> Send<6E>ϱ<EFBFBD>..
|
||
void CDNUserRepository::SendBalanceInquiry(int nResult, int nCashBalance, int nNotRefundableBalance/* = 0*/)
|
||
{
|
||
if (!m_pConnection) return;
|
||
m_pConnection->SendBalanceInquiry(nResult, m_nAccountDBID, nCashBalance, GetPetalBalance(), m_bOpen, m_bServer, nNotRefundableBalance);
|
||
}
|
||
|
||
#ifdef PRE_ADD_LIMITED_CASHITEM
|
||
void CDNUserRepository::SendBuyGift(int nResult, bool bUpdateLimitedCount)
|
||
#else //#ifdef PRE_ADD_LIMITED_CASHITEM
|
||
void CDNUserRepository::SendBuyGift(int nResult)
|
||
#endif //#ifdef PRE_ADD_LIMITED_CASHITEM
|
||
{
|
||
//if (ERROR_NONE != nResult) return;
|
||
|
||
if (!m_pConnection) return;
|
||
|
||
#ifdef PRE_ADD_LIMITED_CASHITEM
|
||
if (g_pLimitedCashItemRepository && bUpdateLimitedCount)
|
||
{
|
||
std::vector<LimitedCashItem::TLimitedQuantityCashItem> vList;
|
||
if (g_pLimitedCashItemRepository->GetLimitedItemList(vList))
|
||
m_pConnection->SendLimiteItemInfoList(vList);
|
||
}
|
||
#endif //#ifdef PRE_ADD_LIMITED_CASHITEM
|
||
|
||
INT64 nSeedPoint = 0;
|
||
#if defined( PRE_ADD_NEW_MONEY_SEED )
|
||
nSeedPoint = GetSeedPoint();
|
||
#endif
|
||
|
||
switch (m_nSubCommand)
|
||
{
|
||
case CASH_PACKAGEBUY:
|
||
{
|
||
#if defined(PRE_ADD_CASH_REFUND)
|
||
#if defined(PRE_ADD_SALE_COUPON)
|
||
m_pConnection->SendPackageBuy(m_nAccountDBID, nResult, GetPetalBalance(), m_nPackageSN, m_cProductCount, m_ProductPackageList, &m_PaymentPackageItem, m_cPaymentRules, m_biSaleCouponSerial, nSeedPoint);
|
||
#else
|
||
m_pConnection->SendPackageBuy(m_nAccountDBID, nResult, GetPetalBalance(), m_nPackageSN, m_cProductCount, m_ProductPackageList, &m_PaymentPackageItem, m_cPaymentRules, nSeedPoint);
|
||
#endif // #if defined(PRE_ADD_SALE_COUPON)
|
||
#else // #if defined(PRE_ADD_CASH_REFUND)
|
||
#if defined(PRE_ADD_SALE_COUPON)
|
||
m_pConnection->SendPackageBuy(m_nAccountDBID, nResult, GetPetalBalance(), m_nPackageSN, m_cProductCount, m_ProductPackageList, NULL, m_cPaymentRules, m_biSaleCouponSerial, nSeedPoint);
|
||
#else
|
||
m_pConnection->SendPackageBuy(m_nAccountDBID, nResult, GetPetalBalance(), m_nPackageSN, m_cProductCount, m_ProductPackageList, NULL, m_cPaymentRules, nSeedPoint);
|
||
#endif // #if defined(PRE_ADD_SALE_COUPON)
|
||
#endif //#if defined(PRE_ADD_CASH_REFUND)
|
||
}
|
||
break;
|
||
|
||
case CASH_BUY:
|
||
{
|
||
TCashBuyItem CashBuyItem[PREVIEWCARTLISTMAX];
|
||
memset(&CashBuyItem, 0, sizeof(CashBuyItem));
|
||
for (int i = 0; i < (int)m_VecBuyItemList.size(); i++)
|
||
{
|
||
CashBuyItem[i] = m_VecBuyItemList[i].BuyItem;
|
||
}
|
||
#if defined(PRE_ADD_CASH_REFUND)
|
||
#if defined(PRE_ADD_SALE_COUPON)
|
||
m_pConnection->SendBuy(m_nAccountDBID, nResult, m_cBuyCartType, GetPetalBalance(), m_cProductCount, CashBuyItem, m_PaymentItem, m_cPaymentRules, m_biSaleCouponSerial, nSeedPoint);
|
||
#else
|
||
m_pConnection->SendBuy(m_nAccountDBID, nResult, m_cBuyCartType, GetPetalBalance(), m_cProductCount, CashBuyItem, m_PaymentItem, m_cPaymentRules, nSeedPoint);
|
||
#endif //#if defined(PRE_ADD_SALE_COUPON)
|
||
#else //#if defined(PRE_ADD_CASH_REFUND)
|
||
#if defined(PRE_ADD_SALE_COUPON)
|
||
m_pConnection->SendBuy(m_nAccountDBID, nResult, m_cBuyCartType, GetPetalBalance(), m_cProductCount, CashBuyItem, NULL, m_cPaymentRules, m_biSaleCouponSerial, nSeedPoint);
|
||
#else
|
||
m_pConnection->SendBuy(m_nAccountDBID, nResult, m_cBuyCartType, GetPetalBalance(), m_cProductCount, CashBuyItem, NULL, m_cPaymentRules, nSeedPoint);
|
||
#endif //#if defined(PRE_ADD_SALE_COUPON)
|
||
#endif //#if defined(PRE_ADD_CASH_REFUND)
|
||
}
|
||
break;
|
||
|
||
case CASH_PACKAGEGIFT:
|
||
{
|
||
if (nResult != ERROR_NONE){
|
||
#if defined(PRE_ADD_CADGE_CASH)
|
||
m_pConnection->SendPackageGift(nResult, m_nAccountDBID, 0, (INT64)0, 0, 0, m_nPackageSN, m_cProductCount, m_GiftPackageList, m_nMailDBID, nSeedPoint);
|
||
#else // #if defined(PRE_ADD_CADGE_CASH)
|
||
m_pConnection->SendPackageGift(nResult, m_nAccountDBID, 0, (INT64)0, 0, 0, m_nPackageSN, m_cProductCount, m_GiftPackageList, 0, nSeedPoint);
|
||
#endif // #if defined(PRE_ADD_CADGE_CASH)
|
||
}
|
||
else{
|
||
CDNSQLMembership *pMembershipDB = GetMembershipDB();
|
||
if (!pMembershipDB){
|
||
#if defined(PRE_ADD_CADGE_CASH)
|
||
m_pConnection->SendPackageGift(nResult, m_nAccountDBID, 0, (INT64)0, 0, 0, m_nPackageSN, m_cProductCount, m_GiftPackageList, m_nMailDBID, nSeedPoint);
|
||
#else // #if defined(PRE_ADD_CADGE_CASH)
|
||
m_pConnection->SendPackageGift(nResult, m_nAccountDBID, 0, (INT64)0, 0, 0, m_nPackageSN, m_cProductCount, m_GiftPackageList, 0, nSeedPoint);
|
||
#endif // #if defined(PRE_ADD_CADGE_CASH)
|
||
return;
|
||
}
|
||
CDNSQLWorld *pWorldDB = GetWorldDB();
|
||
if (!pWorldDB){
|
||
#if defined(PRE_ADD_CADGE_CASH)
|
||
m_pConnection->SendPackageGift(nResult, m_nAccountDBID, 0, (INT64)0, 0, 0, m_nPackageSN, m_cProductCount, m_GiftPackageList, m_nMailDBID, nSeedPoint);
|
||
#else // #if defined(PRE_ADD_CADGE_CASH)
|
||
m_pConnection->SendPackageGift(nResult, m_nAccountDBID, 0, (INT64)0, 0, 0, m_nPackageSN, m_cProductCount, m_GiftPackageList, 0, nSeedPoint);
|
||
#endif // #if defined(PRE_ADD_CADGE_CASH)
|
||
return;
|
||
}
|
||
|
||
UINT nReceiverAccountDBID = 0;
|
||
INT64 biReceiverCharacterDBID = 0;
|
||
pWorldDB->QueryGetCharacterPartialy7(m_wszReceiverCharacterName, nReceiverAccountDBID, biReceiverCharacterDBID);
|
||
|
||
int nGiftCount = 0;
|
||
pMembershipDB->QueryGetCountNotReceivedGift(biReceiverCharacterDBID, nGiftCount);
|
||
|
||
#if defined(PRE_ADD_CADGE_CASH)
|
||
m_pConnection->SendPackageGift(nResult, m_nAccountDBID, nReceiverAccountDBID, biReceiverCharacterDBID, nGiftCount, GetPetalBalance(), m_nPackageSN, m_cProductCount, m_GiftPackageList, m_nMailDBID, nSeedPoint);
|
||
#else // #if defined(PRE_ADD_CADGE_CASH)
|
||
m_pConnection->SendPackageGift(nResult, m_nAccountDBID, nReceiverAccountDBID, biReceiverCharacterDBID, nGiftCount, GetPetalBalance(), m_nPackageSN, m_cProductCount, m_GiftPackageList, 0, nSeedPoint);
|
||
#endif // #if defined(PRE_ADD_CADGE_CASH)
|
||
}
|
||
}
|
||
break;
|
||
|
||
case CASH_GIFT:
|
||
{
|
||
TCashGiftItem CashGiftList[PREVIEWCARTLISTMAX] = {0,};
|
||
CDNSQLMembership *pMembershipDB = GetMembershipDB();
|
||
if (!pMembershipDB){
|
||
#if defined(PRE_ADD_CADGE_CASH)
|
||
m_pConnection->SendGift(ERROR_DB, m_nAccountDBID, 0, (INT64)0, 0, 0, m_cGiftCartType, m_cProductCount, CashGiftList, m_nMailDBID, 0);
|
||
#else // #if defined(PRE_ADD_CADGE_CASH)
|
||
m_pConnection->SendGift(ERROR_DB, m_nAccountDBID, 0, (INT64)0, 0, 0, m_cGiftCartType, m_cProductCount, CashGiftList, 0, 0);
|
||
#endif // #if defined(PRE_ADD_CADGE_CASH)
|
||
return;
|
||
}
|
||
CDNSQLWorld *pWorldDB = GetWorldDB();
|
||
if (!pWorldDB){
|
||
#if defined(PRE_ADD_CADGE_CASH)
|
||
m_pConnection->SendGift(ERROR_DB, m_nAccountDBID, 0, (INT64)0, 0, 0, m_cGiftCartType, m_cProductCount, CashGiftList, m_nMailDBID, 0);
|
||
#else // #if defined(PRE_ADD_CADGE_CASH)
|
||
m_pConnection->SendGift(ERROR_DB, m_nAccountDBID, 0, (INT64)0, 0, 0, m_cGiftCartType, m_cProductCount, CashGiftList, 0, 0);
|
||
#endif // #if defined(PRE_ADD_CADGE_CASH)
|
||
return;
|
||
}
|
||
|
||
for (int i = 0; i < (int)m_VecGiftItemList.size(); i++){
|
||
CashGiftList[i] = m_VecGiftItemList[i].GiftItem;
|
||
}
|
||
|
||
if (nResult != ERROR_NONE){
|
||
#if defined(PRE_ADD_CADGE_CASH)
|
||
m_pConnection->SendGift(nResult, m_nAccountDBID, 0, (INT64)0, 0, GetPetalBalance(), m_cGiftCartType, m_cProductCount, CashGiftList, m_nMailDBID, nSeedPoint);
|
||
#else // #if defined(PRE_ADD_CADGE_CASH)
|
||
m_pConnection->SendGift(nResult, m_nAccountDBID, 0, (INT64)0, 0, GetPetalBalance(), m_cGiftCartType, m_cProductCount, CashGiftList, 0, nSeedPoint);
|
||
#endif // #if defined(PRE_ADD_CADGE_CASH)
|
||
}
|
||
else{
|
||
UINT nReceiverAccountDBID = 0;
|
||
INT64 biReceiverCharacterDBID = 0;
|
||
pWorldDB->QueryGetCharacterPartialy7(m_wszReceiverCharacterName, nReceiverAccountDBID, biReceiverCharacterDBID);
|
||
|
||
int nGiftCount = 0;
|
||
pMembershipDB->QueryGetCountNotReceivedGift(biReceiverCharacterDBID, nGiftCount);
|
||
|
||
#if defined(PRE_ADD_CADGE_CASH)
|
||
m_pConnection->SendGift(nResult, m_nAccountDBID, nReceiverAccountDBID, biReceiverCharacterDBID, nGiftCount, GetPetalBalance(), m_cGiftCartType, m_cProductCount, CashGiftList, m_nMailDBID, nSeedPoint);
|
||
#else // #if defined(PRE_ADD_CADGE_CASH)
|
||
m_pConnection->SendGift(nResult, m_nAccountDBID, nReceiverAccountDBID, biReceiverCharacterDBID, nGiftCount, GetPetalBalance(), m_cGiftCartType, m_cProductCount, CashGiftList, 0, nSeedPoint);
|
||
#endif // #if defined(PRE_ADD_CADGE_CASH)
|
||
}
|
||
}
|
||
break;
|
||
}
|
||
}
|
||
|
||
#if defined(_TW)
|
||
void CDNUserRepository::SendCoupon(int nResult, bool bGashSend)
|
||
#else
|
||
void CDNUserRepository::SendCoupon(int nResult)
|
||
#endif // #if defined(_TW)
|
||
{
|
||
#if defined(_TW)
|
||
if( nResult == ERROR_NONE )
|
||
{
|
||
g_Log.Log(LogType::_ERROR, this, L"[Coupon Success!] Coupon:%S, Serial:%d, AccName:%S, ChaName:%S \r\n", m_szCoupon, m_nCouponSN, m_szAccountName, m_szCharacterName);
|
||
}
|
||
else
|
||
{
|
||
g_Log.Log(LogType::_ERROR, this, L"[Coupon Error!] Coupon:%S, Serial:%d, AccName:%S, ChaName:%S, Result:%d \r\n", m_szCoupon, m_nCouponSN, m_szAccountName, m_szCharacterName, nResult);
|
||
if( bGashSend ) // <20><><EFBFBD><EFBFBD> <20>ѹ<EFBFBD> Send
|
||
g_pBillingCouponRollBackConnection->SendCouponFailResult(m_szCoupon, m_nAccountDBID);
|
||
}
|
||
#endif
|
||
|
||
if (!m_pConnection) return;
|
||
m_pConnection->SendCoupon(m_nAccountDBID, nResult);
|
||
}
|
||
|
||
#if defined(PRE_ADD_CASH_REFUND)
|
||
void CDNUserRepository::SendCashRefund(int nResult)
|
||
{
|
||
if (!m_pConnection) return;
|
||
m_pConnection->SendCashRefund(m_nAccountDBID, nResult, m_cRefundType, m_biPurchaseOrderDetailID);
|
||
}
|
||
#endif
|
||
|
||
void CDNUserRepository::SendVIPBuyGift(int nResult, int nCash)
|
||
{
|
||
if (!m_pConnection) return;
|
||
|
||
switch (m_nSubCommand)
|
||
{
|
||
case CASH_VIPBUY:
|
||
{
|
||
if (nResult != ERROR_NONE){
|
||
m_pConnection->SendVIPBuy(m_nAccountDBID, nResult, 0, nCash, m_VIP.nItemSN, 0, 0, m_bAutoPay, m_bServer, 0);
|
||
}
|
||
else{
|
||
CDNSQLMembership *pMembershipDB = GetMembershipDB();
|
||
if (!pMembershipDB){
|
||
m_pConnection->SendVIPBuy(m_nAccountDBID, ERROR_DB, 0, nCash, m_VIP.nItemSN, 0, 0, m_bAutoPay, m_bServer, 0);
|
||
return;
|
||
}
|
||
|
||
int nPetal = 0;
|
||
int nVIPPoint = 0;
|
||
__time64_t tEndDate = 0;
|
||
if (!m_bAutoPay){
|
||
m_bAutoPay = g_pExtManager->GetCashCommodityPay(m_VIP.nItemSN);
|
||
}
|
||
int nRet = pMembershipDB->QueryIncreaseVIPBasicPoint(GetCharacterDBID(), g_pExtManager->GetCashCommodityVIPPoint(m_VIP.nItemSN), m_VIP.biPurchaseOrderID,
|
||
g_pExtManager->GetCashCommodityPeriod(m_VIP.nItemSN), m_bAutoPay, nVIPPoint, tEndDate);
|
||
|
||
if (nRet != ERROR_NONE){
|
||
pMembershipDB->QueryModGiveFailFlag(m_VIP.biPurchaseOrderID, m_VIP.nItemSN, g_pExtManager->GetCashCommodityItem0(m_VIP.nItemSN), true);
|
||
nResult = nRet;
|
||
}
|
||
|
||
INT64 nSeedPoint = 0;
|
||
#if defined( PRE_ADD_NEW_MONEY_SEED )
|
||
nSeedPoint = GetSeedPoint();
|
||
#endif
|
||
m_pConnection->SendVIPBuy(m_nAccountDBID, nResult, GetPetalBalance(), nCash, m_VIP.nItemSN, nVIPPoint, tEndDate, m_bAutoPay, m_bServer, nSeedPoint);
|
||
}
|
||
}
|
||
break;
|
||
|
||
case CASH_VIPGIFT:
|
||
{
|
||
if (nResult != ERROR_NONE){
|
||
m_pConnection->SendVIPGift(m_nAccountDBID, nResult, 0, nCash, m_VIP.nItemSN, 0, 0, 0, 0);
|
||
}
|
||
else{
|
||
CDNSQLMembership *pMembershipDB = GetMembershipDB();
|
||
if (!pMembershipDB){
|
||
m_pConnection->SendVIPGift(m_nAccountDBID, ERROR_DB, 0, nCash, m_VIP.nItemSN, 0, 0, 0, 0);
|
||
return;
|
||
}
|
||
CDNSQLWorld *pWorldDB = GetWorldDB();
|
||
if (!pWorldDB){
|
||
m_pConnection->SendVIPGift(m_nAccountDBID, ERROR_DB, 0, nCash, m_VIP.nItemSN, 0, 0, 0, 0);
|
||
return;
|
||
}
|
||
|
||
UINT nReceiverAccountDBID = 0;
|
||
INT64 biReceiverCharacterDBID = 0;
|
||
pWorldDB->QueryGetCharacterPartialy7(m_wszReceiverCharacterName, nReceiverAccountDBID, biReceiverCharacterDBID);
|
||
|
||
int nGiftCount = 0;
|
||
pMembershipDB->QueryGetCountNotReceivedGift(biReceiverCharacterDBID, nGiftCount);
|
||
|
||
INT64 nSeedPoint = 0;
|
||
#if defined( PRE_ADD_NEW_MONEY_SEED )
|
||
nSeedPoint = GetSeedPoint();
|
||
#endif
|
||
|
||
m_pConnection->SendVIPGift(m_nAccountDBID, nResult, GetPetalBalance(), nCash, m_VIP.nItemSN, nReceiverAccountDBID, biReceiverCharacterDBID, nGiftCount, nSeedPoint);
|
||
}
|
||
}
|
||
break;
|
||
}
|
||
}
|
||
|
||
void CDNUserRepository::OnRecvBillingBuyItem(int nBillingResult, UINT nOrderNo, bool bCart)
|
||
{
|
||
#if defined (PRE_ADD_REJECT_DUPLICATED_CASH_REQUEST)
|
||
CRequestReleaser releaser(m_Requesting);
|
||
#endif // #if defined (PRE_ADD_REJECT_DUPLICATED_CASH_REQUEST)
|
||
|
||
CDNSQLMembership *pMembershipDB = GetMembershipDB();
|
||
if (!pMembershipDB){
|
||
SendBuyGift(ERROR_GENERIC_INVALIDREQUEST);
|
||
return;
|
||
}
|
||
|
||
char szOrderNo[PUBLISHERORDERKEYMAX] = {0, };
|
||
sprintf_s(szOrderNo, "%d", nOrderNo);
|
||
|
||
switch (m_nSubCommand)
|
||
{
|
||
case CASH_BUY:
|
||
{
|
||
if (m_VecBuyItemList.empty()) return;
|
||
|
||
char cOrderCode = DBDNMembership::OrderStatusCode::FailPayment;
|
||
if (nBillingResult == ERROR_NONE)
|
||
cOrderCode = DBDNMembership::OrderStatusCode::Success;
|
||
|
||
int nPetalAmount = 0;
|
||
#if defined(PRE_ADD_CASH_REFUND) // <20><>Ű<EFBFBD><C5B0><EFBFBD><EFBFBD> ij<><C4B3><EFBFBD>κ<EFBFBD> <20>ٷΰ<D9B7><CEB0><EFBFBD> <20>϶<EFBFBD><CFB6><EFBFBD> <20><>Ż <20><><EFBFBD><EFBFBD>..<2E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ij<><C4B3><EFBFBD>κ<EFBFBD><CEBA><EFBFBD><EFBFBD><EFBFBD> <20>ű涧.
|
||
if( GetCashMoveInven() )
|
||
#endif
|
||
nPetalAmount = m_VecBuyItemList[m_cCurProductCount].nReservePetal;
|
||
|
||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>븸<EFBFBD><EBB8B8> <20><><EFBFBD><EFBFBD><EFBFBD>Ͼ<EFBFBD> orderkey<65><79> <20><><EFBFBD><EFBFBD>.
|
||
int nRet = pMembershipDB->QuerySetPurchaseOrderResult(m_biPurchaseOrderID, cOrderCode, szOrderNo, nBillingResult, nPetalAmount, m_nUsedPaidCash);
|
||
if (nRet != ERROR_NONE)
|
||
{
|
||
SendBuyGift(nRet);
|
||
g_Log.Log(LogType::_ERROR, this, L"[BillingBuyItem] QuerySetPurchaseOrderResult Fail(%d) Order(Eye:%I64d)\r\n", nBillingResult, m_biPurchaseOrderID);
|
||
return;
|
||
}
|
||
|
||
if( nBillingResult == ERROR_NONE )
|
||
{
|
||
if( bCart )
|
||
{
|
||
for (int i = 0; i < (int)m_VecBuyItemList.size(); i++)
|
||
{
|
||
m_VecBuyItemList[i].BuyItem.bFail = false;
|
||
int nCode = DBDNWorldDef::AddMaterializedItem::CashBuy;
|
||
|
||
nRet = CashItemDBProcess(m_cWorldSetID, m_nAccountDBID, m_biCharacterDBID, m_nMapID, m_nChannelID, m_cPaymentRules, m_VecBuyItemList[i].BuyItem, m_VecBuyItemList[i].nPrice, m_biPurchaseOrderID, nCode);
|
||
if (nRet != ERROR_NONE)
|
||
{
|
||
pMembershipDB->QueryModGiveFailFlag2(m_VecBuyItemList[i].biPurchaseOrderDetailID, true);
|
||
g_Log.Log(LogType::_ERROR, this, L"[BillingBuyItem] CashItemDBQuery Fail(%d) Order(%I64d) Item(SN:%d ID:%d)\r\n", nRet, m_biPurchaseOrderID, m_VecBuyItemList[i].BuyItem.nItemSN, m_VecBuyItemList[i].BuyItem.CashItem.nItemID);
|
||
// <20>ϴ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD> return <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> ó<><C3B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||
}
|
||
}
|
||
|
||
#if defined(_RU) || defined(_KAMO) //[OK_Cash]
|
||
int nCashOutgoID = 0, nCashBalance = 0;
|
||
int nRetDeductCash = pMembershipDB->QueryDeductCash(m_nAccountDBID, m_biPurchaseOrderID, m_nTotalPrice, nCashOutgoID, nCashBalance); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֹ<EFBFBD><D6B9><EFBFBD>㹺<EFBFBD><E3B9BA>
|
||
|
||
if (ERROR_NONE == nRetDeductCash)
|
||
{
|
||
SendBuyGift(nBillingResult); //<2F>ֶ<EFBFBD><D6B6>㹺<EFBFBD><E3B9BA><EFBFBD>ɹ<EFBFBD>
|
||
}
|
||
else
|
||
{
|
||
printf("[Err]pMembershipDB->QueryDeductCash AccountID=%d Ret=%d,TotalPrice=%d,CashBalance=%d",m_nAccountDBID,nRetDeductCash,m_nTotalPrice,nCashBalance);
|
||
//SendBuyGift(nRetDeductCash); //<2F>ֶ<EFBFBD><D6B6>㹺<EFBFBD><E3B9BA>ʧ<EFBFBD>ܣ<EFBFBD><DCA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
SendBuyGift(ERROR_GENERIC_INVALIDREQUEST); //@_@
|
||
}
|
||
|
||
#elif defined(_WORK)
|
||
//SendBuyGift(nBillingResult);
|
||
#endif
|
||
}
|
||
else
|
||
{
|
||
m_VecBuyItemList[m_cCurProductCount].BuyItem.bFail = false;
|
||
|
||
#if defined(PRE_ADD_CASH_REFUND) // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ǰ<EFBFBD>̳<EFBFBD> ȯ<>ҺҰ<D2BA><D2B0><EFBFBD><EFBFBD><EFBFBD> <20>ֵ鸸 <20>켱 ItemInsert..<2E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ij<><C4B3><EFBFBD>κ<EFBFBD><CEBA><EFBFBD><EFBFBD><EFBFBD> <20>ű涧...
|
||
if( GetCashMoveInven() || g_pExtManager->GetCashCommodityNoRefund(m_VecBuyItemList[m_cCurProductCount].BuyItem.CashItem.nItemID, m_VecBuyItemList[m_cCurProductCount].BuyItem.nItemSN) )
|
||
#endif
|
||
{
|
||
int nCode = DBDNWorldDef::AddMaterializedItem::CashBuy;
|
||
|
||
nRet = CashItemDBProcess(m_cWorldSetID, m_nAccountDBID, m_biCharacterDBID, m_nMapID, m_nChannelID, m_cPaymentRules, m_VecBuyItemList[m_cCurProductCount].BuyItem, m_VecBuyItemList[m_cCurProductCount].nPrice, m_biPurchaseOrderID, nCode);
|
||
if (nRet != ERROR_NONE)
|
||
{
|
||
pMembershipDB->QueryModGiveFailFlag2(m_VecBuyItemList[m_cCurProductCount].biPurchaseOrderDetailID, true);
|
||
g_Log.Log(LogType::_ERROR, this, L"[BillingBuyItem] CashItemDBQuery Fail(%d) Order(%I64d)\r\n", nRet, m_biPurchaseOrderID);
|
||
}
|
||
}
|
||
#if defined(PRE_ADD_CASH_REFUND)
|
||
else
|
||
{
|
||
__time64_t _tNow;
|
||
time(&_tNow);
|
||
// <20><><EFBFBD><EFBFBD><EFBFBD>κ<EFBFBD><CEBA><EFBFBD> <20>߰<EFBFBD><DFB0><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ..
|
||
m_PaymentItem[m_cCurProductCount].uiOrderNo = nOrderNo;
|
||
m_PaymentItem[m_cCurProductCount].nPrice = m_VecBuyItemList[m_cCurProductCount].nPrice;
|
||
m_PaymentItem[m_cCurProductCount].PaymentItemInfo.biDBID = m_VecBuyItemList[m_cCurProductCount].biPurchaseOrderDetailID;
|
||
m_PaymentItem[m_cCurProductCount].PaymentItemInfo.ItemInfo.nItemSN = m_VecBuyItemList[m_cCurProductCount].BuyItem.nItemSN;
|
||
m_PaymentItem[m_cCurProductCount].PaymentItemInfo.ItemInfo.nItemID = m_VecBuyItemList[m_cCurProductCount].BuyItem.CashItem.nItemID;
|
||
m_PaymentItem[m_cCurProductCount].PaymentItemInfo.tPaymentDate = _tNow; // <20>׳<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>ɷ<EFBFBD> <20><><EFBFBD><EFBFBD>.
|
||
}
|
||
#endif
|
||
|
||
++m_cCurProductCount;
|
||
if( m_cCurProductCount == m_cProductCount )
|
||
SendBuyGift(nBillingResult);
|
||
else
|
||
{
|
||
PurchaseBuyItem();
|
||
#if defined (PRE_ADD_REJECT_DUPLICATED_CASH_REQUEST)
|
||
releaser.Lock();
|
||
#endif // #if defined (PRE_ADD_REJECT_DUPLICATED_CASH_REQUEST)
|
||
}
|
||
}
|
||
}
|
||
else
|
||
{
|
||
SendBuyGift(nBillingResult);
|
||
}
|
||
}
|
||
break;
|
||
|
||
case CASH_PACKAGEBUY:
|
||
{
|
||
char cOrderCode = DBDNMembership::OrderStatusCode::FailPayment;
|
||
if (nBillingResult == ERROR_NONE) cOrderCode = DBDNMembership::OrderStatusCode::Success;
|
||
|
||
int nPetalAmount = 0;
|
||
#if defined(PRE_ADD_CASH_REFUND) // <20><>Ű<EFBFBD><C5B0><EFBFBD><EFBFBD> ij<><C4B3><EFBFBD>κ<EFBFBD> <20>ٷΰ<D9B7><CEB0><EFBFBD> <20>϶<EFBFBD><CFB6><EFBFBD> <20><>Ż <20><><EFBFBD><EFBFBD>..<2E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ij<><C4B3><EFBFBD>κ<EFBFBD><CEBA><EFBFBD><EFBFBD><EFBFBD> <20>ű涧.
|
||
if( GetCashMoveInven() )
|
||
#endif
|
||
nPetalAmount = g_pExtManager->GetCashCommodityReserve(m_nPackageSN);
|
||
|
||
int nRet = pMembershipDB->QuerySetPurchaseOrderResult(m_biPurchaseOrderID, cOrderCode, szOrderNo, nBillingResult, nPetalAmount, m_nUsedPaidCash);
|
||
if (nRet != ERROR_NONE){
|
||
g_Log.Log(LogType::_ERROR, this, L"[BillingBuyItem(Package)] QuerySetPurchaseOrderResult Fail(%d) Order(Eye:%I64d)\r\n", nBillingResult, m_biPurchaseOrderID);
|
||
SendBuyGift(nRet);
|
||
return;
|
||
}
|
||
if( nBillingResult == ERROR_NONE )
|
||
{
|
||
#if defined(PRE_ADD_CASH_REFUND) // <20><>Ű<EFBFBD><C5B0><EFBFBD><EFBFBD> ij<><C4B3><EFBFBD>κ<EFBFBD> <20>ٷΰ<D9B7><CEB0><EFBFBD> <20>϶<EFBFBD><CFB6><EFBFBD> <20><><EFBFBD><EFBFBD> <20>־<EFBFBD><D6BE><EFBFBD><EFBFBD><EFBFBD>..<2E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ij<><C4B3><EFBFBD>κ<EFBFBD><CEBA><EFBFBD><EFBFBD><EFBFBD> <20>ű涧.
|
||
if( !GetCashMoveInven() )
|
||
{
|
||
__time64_t _tNow;
|
||
time(&_tNow);
|
||
m_PaymentPackageItem.uiOrderNo = nOrderNo;
|
||
m_PaymentPackageItem.nPrice = g_pExtManager->GetCashCommodityPrice(m_nPackageSN);
|
||
m_PaymentPackageItem.PaymentPackageItemInfo.nPackageSN = m_nPackageSN;
|
||
m_PaymentPackageItem.PaymentPackageItemInfo.tPaymentDate = _tNow;
|
||
m_PaymentPackageItem.PaymentPackageItemInfo.biDBID = m_biPurchaseOrderDetailID;
|
||
|
||
for (int i = 0; i < m_cProductCount; i++)
|
||
{
|
||
m_PaymentPackageItem.PaymentPackageItemInfo.ItemInfoList[i].nItemSN = m_ProductPackageList[i].nItemSN;
|
||
m_PaymentPackageItem.PaymentPackageItemInfo.ItemInfoList[i].nItemID = m_ProductPackageList[i].CashItem.nItemID;
|
||
m_PaymentPackageItem.PaymentPackageItemInfo.ItemInfoList[i].cItemOption = m_ProductPackageList[i].CashItem.cOption;
|
||
}
|
||
}
|
||
else
|
||
#endif
|
||
{
|
||
CalcPackageProcess();
|
||
#if defined(_RU) || defined(_KAMO) //[OK_Cash]
|
||
int nCashOutgoID = 0, nCashBalance = 0;
|
||
pMembershipDB->QueryDeductCash(m_nAccountDBID, m_biPurchaseOrderID, m_nTotalPrice, nCashOutgoID, nCashBalance);
|
||
#endif
|
||
}
|
||
}
|
||
SendBuyGift(nBillingResult);
|
||
}
|
||
break;
|
||
|
||
case CASH_GIFT :
|
||
{
|
||
if (m_VecGiftItemList.empty())
|
||
return;
|
||
|
||
char cOrderCode = DBDNMembership::OrderStatusCode::FailPayment;
|
||
if (nBillingResult == ERROR_NONE)
|
||
cOrderCode = DBDNMembership::OrderStatusCode::Success;
|
||
printf("%s Cash Gift Success order\n",__FUNCTION__);
|
||
if( bCart)
|
||
{
|
||
for (int i = 0; i < (int)m_VecGiftItemList.size(); i++)
|
||
{
|
||
char cOrderCode = DBDNMembership::OrderStatusCode::FailPayment;
|
||
if (nBillingResult == ERROR_NONE){
|
||
m_VecGiftItemList[i].GiftItem.bFail = false;
|
||
cOrderCode = DBDNMembership::OrderStatusCode::Success;
|
||
}
|
||
|
||
int nRet = pMembershipDB->QuerySetPurchaseOrderResult(m_VecGiftItemList[i].biPurchaseOrderID, cOrderCode, szOrderNo, nBillingResult, m_VecGiftItemList[i].nReservePetal, m_nUsedPaidCash);
|
||
if (nRet != ERROR_NONE){
|
||
SendBuyGift(nRet);
|
||
g_Log.Log(LogType::_ERROR, this, L"[BillingBuyItem(Gift)] QuerySetPurchaseOrderResult Fail(%d) Order(Eye:%I64d)\r\n", nBillingResult, m_VecGiftItemList[i].biPurchaseOrderID );
|
||
return;
|
||
}
|
||
|
||
#if defined(_RU) || defined(_KAMO) //[OK_Cash]
|
||
int nCashOutgoID = 0, nCashBalance = 0;
|
||
int nRetDeductCash = pMembershipDB->QueryDeductCash(m_nAccountDBID, m_VecGiftItemList[i].biPurchaseOrderID, m_VecGiftItemList[i].nPrice, nCashOutgoID, nCashBalance);
|
||
#endif
|
||
printf("%s nRetDeductCash = %d\n", __FUNCTION__, nRetDeductCash);
|
||
}
|
||
SendBuyGift(nBillingResult);
|
||
}
|
||
else
|
||
{
|
||
if( nBillingResult == ERROR_NONE )
|
||
m_VecGiftItemList[m_cCurProductCount].GiftItem.bFail = false;
|
||
|
||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>븸<EFBFBD><EBB8B8> <20><><EFBFBD><EFBFBD><EFBFBD>Ͼ<EFBFBD> orderkey<65><79> <20><><EFBFBD><EFBFBD>.
|
||
int nRet = pMembershipDB->QuerySetPurchaseOrderResult(m_VecGiftItemList[m_cCurProductCount].biPurchaseOrderID, cOrderCode, szOrderNo, nBillingResult, m_VecGiftItemList[m_cCurProductCount].nReservePetal, m_nUsedPaidCash);
|
||
if (nRet != ERROR_NONE)
|
||
{
|
||
g_Log.Log(LogType::_ERROR, this, L"[BillingBuyItem(Gift)] QuerySetPurchaseOrderResult Fail(%d) Order(Eye:%I64d)\r\n", nBillingResult, m_VecGiftItemList[m_cCurProductCount].biPurchaseOrderID);
|
||
}
|
||
|
||
++m_cCurProductCount;
|
||
if( nBillingResult != ERROR_NONE || m_cCurProductCount == m_cProductCount )
|
||
SendBuyGift(nBillingResult);
|
||
else
|
||
{
|
||
PurchaseGiftItem();
|
||
#if defined (PRE_ADD_REJECT_DUPLICATED_CASH_REQUEST)
|
||
releaser.Lock();
|
||
#endif // #if defined (PRE_ADD_REJECT_DUPLICATED_CASH_REQUEST)
|
||
}
|
||
}
|
||
}
|
||
break;
|
||
|
||
case CASH_PACKAGEGIFT:
|
||
{
|
||
char cOrderCode = DBDNMembership::OrderStatusCode::FailPayment;
|
||
if (nBillingResult == ERROR_NONE)
|
||
cOrderCode = DBDNMembership::OrderStatusCode::Success;
|
||
|
||
int nRet = pMembershipDB->QuerySetPurchaseOrderResult(m_biPurchaseOrderID, cOrderCode, szOrderNo, nBillingResult, g_pExtManager->GetCashCommodityReserve(m_nPackageSN), m_nUsedPaidCash);
|
||
if (nRet != ERROR_NONE){
|
||
g_Log.Log(LogType::_ERROR, this, L"[BillingBuyItem(GiftPackage)] QuerySetPurchaseOrderResult Fail(%d) Order(Eye:%I64d)\r\n", nBillingResult, m_biPurchaseOrderID);
|
||
SendBuyGift(nRet);
|
||
return;
|
||
}
|
||
|
||
#if defined(_RU) || defined(_KAMO) //[OK_Cash]
|
||
int nCashOutgoID = 0, nCashBalance = 0;
|
||
pMembershipDB->QueryDeductCash(m_nAccountDBID, m_biPurchaseOrderID, m_nTotalPrice, nCashOutgoID, nCashBalance);
|
||
#endif
|
||
SendBuyGift(nBillingResult);
|
||
}
|
||
break;
|
||
|
||
case CASH_VIPBUY:
|
||
case CASH_VIPGIFT:
|
||
{
|
||
char cOrderCode = DBDNMembership::OrderStatusCode::FailPayment;
|
||
if (nBillingResult == ERROR_NONE)
|
||
cOrderCode = DBDNMembership::OrderStatusCode::Success;
|
||
|
||
int nRet = pMembershipDB->QuerySetPurchaseOrderResult(m_VIP.biPurchaseOrderID, cOrderCode, szOrderNo, nBillingResult, g_pExtManager->GetCashCommodityReserve(m_VIP.nItemSN), m_nUsedPaidCash);
|
||
if (nRet != ERROR_NONE){
|
||
g_Log.Log(LogType::_ERROR, this, L"[BillingBuyItem(CASH_VIPBUY)] QuerySetPurchaseOrderResult Fail(%d) Order(Eye:%I64d)\r\n", nRet, m_VIP.biPurchaseOrderID);
|
||
SendVIPBuyGift(nRet, 0);
|
||
return;
|
||
}
|
||
|
||
#if defined(_RU) || defined(_KAMO) //[OK_Cash]
|
||
int nCashOutgoID = 0, nCashBalance = 0;
|
||
pMembershipDB->QueryDeductCash(m_nAccountDBID, m_biPurchaseOrderID, m_nTotalPrice, nCashOutgoID, nCashBalance);
|
||
#endif
|
||
|
||
SendVIPBuyGift(nBillingResult, 0);
|
||
}
|
||
break;
|
||
}
|
||
}
|
||
|
||
int CDNUserRepository::PurchaseItemByPetal()
|
||
{
|
||
INT64 biOrderID = 0;
|
||
#ifdef PRE_ADD_LIMITED_CASHITEM
|
||
bool bUpdateLimitedCount = false;
|
||
#endif //#ifdef PRE_ADD_LIMITED_CASHITEM
|
||
|
||
CDNSQLMembership *pMembershipDB = GetMembershipDB();
|
||
if (!pMembershipDB){
|
||
SendBuyGift(ERROR_GENERIC_INVALIDREQUEST);
|
||
return ERROR_GENERIC_INVALIDREQUEST;
|
||
}
|
||
|
||
switch (m_nSubCommand)
|
||
{
|
||
case CASH_BUY:
|
||
{
|
||
std::vector<string> VecItemString;
|
||
AppendItemString(0, m_cProductCount, VecItemString);
|
||
|
||
int nRet = pMembershipDB->QueryPurchaseItemByPetal(m_biCharacterDBID, m_bPCBang, VecItemString, m_nTotalPrice, m_szIp, biOrderID);
|
||
if (nRet != ERROR_NONE){
|
||
SendBuyGift(nRet);
|
||
return nRet;
|
||
}
|
||
|
||
#ifdef PRE_ADD_LIMITED_CASHITEM
|
||
if (atoi(VecItemString[Append_QuantityLimited].c_str()) > 0)
|
||
bUpdateLimitedCount = true;
|
||
#endif //#ifdef PRE_ADD_LIMITED_CASHITEM
|
||
|
||
for (int i = 0; i < m_cProductCount; i++){
|
||
nRet = CashItemDBProcess(m_cWorldSetID, m_nAccountDBID, m_biCharacterDBID, m_nMapID, m_nChannelID, m_cPaymentRules, m_VecBuyItemList[i].BuyItem,
|
||
g_pExtManager->GetCashCommodityPrice(m_ProductPackageList[i].nItemSN), biOrderID, DBDNWorldDef::AddMaterializedItem::ReserveMoneyBuy);
|
||
|
||
if (nRet != ERROR_NONE){
|
||
SendBuyGift(nRet);
|
||
return nRet;
|
||
}
|
||
|
||
m_VecBuyItemList[i].BuyItem.bFail = false;
|
||
}
|
||
|
||
}
|
||
break;
|
||
|
||
case CASH_PACKAGEBUY:
|
||
{
|
||
std::vector<string> VecItemString;
|
||
AppendItemString(0, 0, VecItemString);
|
||
|
||
int nRet = pMembershipDB->QueryPurchaseItemByPetal(m_biCharacterDBID, m_bPCBang, VecItemString, m_nTotalPrice, m_szIp, biOrderID);
|
||
if (nRet != ERROR_NONE){
|
||
SendBuyGift(nRet);
|
||
return nRet;
|
||
}
|
||
|
||
#ifdef PRE_ADD_LIMITED_CASHITEM
|
||
if (atoi(VecItemString[Append_QuantityLimited].c_str()) > 0)
|
||
bUpdateLimitedCount = true;
|
||
#endif //#ifdef PRE_ADD_LIMITED_CASHITEM
|
||
|
||
CalcPackageProcess();
|
||
}
|
||
break;
|
||
}
|
||
|
||
#ifdef PRE_ADD_LIMITED_CASHITEM
|
||
SendBuyGift(ERROR_NONE, bUpdateLimitedCount);
|
||
#else //#ifdef PRE_ADD_LIMITED_CASHITEM
|
||
SendBuyGift(ERROR_NONE);
|
||
#endif //#ifdef PRE_ADD_LIMITED_CASHITEM
|
||
|
||
return ERROR_NONE;
|
||
}
|
||
|
||
#if defined( PRE_ADD_NEW_MONEY_SEED )
|
||
int CDNUserRepository::PurchaseItemBySeed()
|
||
{
|
||
INT64 biOrderID = 0;
|
||
#ifdef PRE_ADD_LIMITED_CASHITEM
|
||
bool bUpdateLimitedCount = false;
|
||
#endif //#ifdef PRE_ADD_LIMITED_CASHITEM
|
||
|
||
CDNSQLMembership *pMembershipDB = GetMembershipDB();
|
||
if (!pMembershipDB){
|
||
SendBuyGift(ERROR_GENERIC_INVALIDREQUEST);
|
||
return ERROR_GENERIC_INVALIDREQUEST;
|
||
}
|
||
|
||
CDNSQLWorld *pWorldDB = GetWorldDB();
|
||
if (!pWorldDB)
|
||
{
|
||
SendBuyGift(ERROR_GENERIC_INVALIDREQUEST);
|
||
return ERROR_GENERIC_INVALIDREQUEST;
|
||
}
|
||
|
||
switch (m_nSubCommand)
|
||
{
|
||
case CASH_BUY:
|
||
{
|
||
std::vector<string> VecItemString;
|
||
AppendItemString(0, m_cProductCount, VecItemString);
|
||
|
||
int nRet = pMembershipDB->QueryPurchaseItemBySeed(m_biCharacterDBID, m_bPCBang, VecItemString, m_nTotalPrice, m_szIp, biOrderID);
|
||
if (nRet != ERROR_NONE){
|
||
SendBuyGift(nRet);
|
||
return nRet;
|
||
}
|
||
|
||
#ifdef PRE_ADD_LIMITED_CASHITEM
|
||
if (atoi(VecItemString[Append_QuantityLimited].c_str()) > 0)
|
||
bUpdateLimitedCount = true;
|
||
#endif //#ifdef PRE_ADD_LIMITED_CASHITEM
|
||
|
||
nRet = UseSeedPoint();
|
||
|
||
if( nRet != ERROR_NONE )
|
||
{
|
||
SendBuyGift(ERROR_GENERIC_INVALIDREQUEST);
|
||
return ERROR_GENERIC_INVALIDREQUEST;
|
||
}
|
||
|
||
for (int i = 0; i < m_cProductCount; i++){
|
||
nRet = CashItemDBProcess(m_cWorldSetID, m_nAccountDBID, m_biCharacterDBID, m_nMapID, m_nChannelID, m_cPaymentRules, m_VecBuyItemList[i].BuyItem,
|
||
g_pExtManager->GetCashCommodityPrice(m_ProductPackageList[i].nItemSN), biOrderID, DBDNWorldDef::AddMaterializedItem::ReserveMoneyBuy);
|
||
|
||
if (nRet != ERROR_NONE){
|
||
SendBuyGift(nRet);
|
||
return nRet;
|
||
}
|
||
|
||
m_VecBuyItemList[i].BuyItem.bFail = false;
|
||
}
|
||
|
||
}
|
||
break;
|
||
|
||
case CASH_PACKAGEBUY:
|
||
{
|
||
std::vector<string> VecItemString;
|
||
AppendItemString(0, 0, VecItemString);
|
||
|
||
int nRet = pMembershipDB->QueryPurchaseItemBySeed(m_biCharacterDBID, m_bPCBang, VecItemString, m_nTotalPrice, m_szIp, biOrderID);
|
||
if (nRet != ERROR_NONE){
|
||
SendBuyGift(nRet);
|
||
return nRet;
|
||
}
|
||
|
||
#ifdef PRE_ADD_LIMITED_CASHITEM
|
||
if (atoi(VecItemString[Append_QuantityLimited].c_str()) > 0)
|
||
bUpdateLimitedCount = true;
|
||
#endif //#ifdef PRE_ADD_LIMITED_CASHITEM
|
||
|
||
nRet = UseSeedPoint();
|
||
|
||
if( nRet != ERROR_NONE )
|
||
{
|
||
SendBuyGift(ERROR_GENERIC_INVALIDREQUEST);
|
||
return ERROR_GENERIC_INVALIDREQUEST;
|
||
}
|
||
|
||
CalcPackageProcess();
|
||
}
|
||
break;
|
||
}
|
||
|
||
int nRet = pMembershipDB->QuerySetPurchaseOrderResult(biOrderID, 2, 0, 0, 0, 0);
|
||
|
||
#ifdef PRE_ADD_LIMITED_CASHITEM
|
||
SendBuyGift(ERROR_NONE, bUpdateLimitedCount);
|
||
#else //#ifdef PRE_ADD_LIMITED_CASHITEM
|
||
SendBuyGift(ERROR_NONE);
|
||
#endif //#ifdef PRE_ADD_LIMITED_CASHITEM
|
||
|
||
return ERROR_NONE;
|
||
}
|
||
#endif
|
||
int CDNUserRepository::AddPurchaseOrderByCash(int nIndex)
|
||
{
|
||
#if defined(_WORK)
|
||
return ERROR_NONE;
|
||
#endif //
|
||
|
||
INT64 biOrderID = 0;
|
||
int nRet = ERROR_DB;
|
||
#ifdef PRE_ADD_LIMITED_CASHITEM
|
||
bool bUpdateLimitedCount = false;
|
||
#endif //#ifdef PRE_ADD_LIMITED_CASHITEM
|
||
|
||
CDNSQLMembership *pMembershipDB = GetMembershipDB();
|
||
if (!pMembershipDB)
|
||
return ERROR_GENERIC_INVALIDREQUEST;
|
||
|
||
switch (m_nSubCommand)
|
||
{
|
||
case CASH_BUY:
|
||
{
|
||
#if defined(_KR) || defined(_US) || defined(_RU) || defined(_ID) || defined(_KAMO) //[OK_Cash] // <20><>ü <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ó<><C3B3>
|
||
std::vector<string> VecItemString;
|
||
AppendItemString(0, m_cProductCount, VecItemString);
|
||
|
||
char szTempOrderDetails[1024] = {0, };
|
||
nRet = pMembershipDB->QueryAddPurchaseOrderByCash(m_biCharacterDBID, m_bPCBang, VecItemString, m_nTotalPrice, m_szIp, false, NULL, NULL, biOrderID, szTempOrderDetails);
|
||
if (nRet != ERROR_NONE)
|
||
return nRet;
|
||
|
||
#ifdef PRE_ADD_LIMITED_CASHITEM
|
||
if (atoi(VecItemString[Append_QuantityLimited].c_str()) > 0)
|
||
bUpdateLimitedCount = true;
|
||
#endif //#ifdef PRE_ADD_LIMITED_CASHITEM
|
||
|
||
SetPurchaseOrderDetailID(szTempOrderDetails);
|
||
SetPurchaseOrderID(biOrderID);
|
||
|
||
#elif defined(_CH) || defined(_EU) // 5<><35><EFBFBD><EFBFBD> ó<><C3B3> (<28>߱<EFBFBD><DFB1><EFBFBD> Ư<><C6AF><EFBFBD><EFBFBD>)
|
||
int nStx = 0, nEtx = std::min<int>(MAX_GOOD_LEN, m_cProductCount);
|
||
while(true) {
|
||
std::vector<string> VecItemPartString;
|
||
AppendItemString(nStx, nEtx, VecItemPartString);
|
||
|
||
int nPrice = 0;
|
||
for (int i = nStx; i < nEtx; i++){
|
||
if (m_VecBuyItemList[i].BuyItem.nItemSN > 0){
|
||
nPrice += m_VecBuyItemList[i].nPrice;
|
||
}
|
||
}
|
||
|
||
char szTempOrderDetails[1024] = {0, };
|
||
nRet = pMembershipDB->QueryAddPurchaseOrderByCash(m_biCharacterDBID, m_bPCBang, VecItemPartString, nPrice, m_szIp, false, NULL, NULL, biOrderID, szTempOrderDetails);
|
||
if (nRet != ERROR_NONE)
|
||
return nRet;
|
||
|
||
#ifdef PRE_ADD_LIMITED_CASHITEM
|
||
if (atoi(VecItemString[Append_QuantityLimited].c_str()) > 0)
|
||
bUpdateLimitedCount = true;
|
||
#endif //#ifdef PRE_ADD_LIMITED_CASHITEM
|
||
|
||
SetBuyItemPartByShanda(nStx, nEtx, biOrderID, szTempOrderDetails);
|
||
if (m_cProductCount <= nEtx) {
|
||
break;
|
||
}
|
||
|
||
nStx = nEtx;
|
||
nEtx = std::min<int>(nEtx + MAX_GOOD_LEN, m_cProductCount);
|
||
}
|
||
|
||
#else // #if defined(_JP) || defined(_TW) || defined(_SG) || defined(_TH) // 1<><31><EFBFBD><EFBFBD> ó<><C3B3>
|
||
if (m_cProductCount <= nIndex) return ERROR_ITEM_FAIL;
|
||
|
||
char szTempOrderDetail[64] = {0, };
|
||
|
||
std::string StrRefundable;
|
||
StrRefundable.clear();
|
||
#if defined(PRE_ADD_CASH_REFUND)
|
||
if( m_bCashMoveInven || g_pExtManager->GetCashCommodityNoRefund(m_VecBuyItemList[nIndex].BuyItem.CashItem.nItemID, m_VecBuyItemList[nIndex].BuyItem.nItemSN) )
|
||
StrRefundable = "0"; // ij<><C4B3><EFBFBD>κ<EFBFBD><CEBA><EFBFBD><EFBFBD><EFBFBD> <20>ٷ<EFBFBD> <20>ֱ<EFBFBD>
|
||
else
|
||
StrRefundable = "1"; // <20><><EFBFBD><EFBFBD><EFBFBD>κ<EFBFBD><CEBA><EFBFBD><EFBFBD><EFBFBD>
|
||
#endif // #if defined(PRE_ADD_CASH_REFUND)
|
||
|
||
#ifdef PRE_ADD_LIMITED_CASHITEM
|
||
nRet = pMembershipDB->QueryAddPurchaseOrderByCash(m_biCharacterDBID, m_bPCBang, m_VecBuyItemList[nIndex].BuyItem.nItemSN, m_VecBuyItemList[nIndex].nPrice,
|
||
m_VecBuyItemList[nIndex].nLimitCount, m_VecBuyItemList[nIndex].BuyItem.CashItem.nItemID, m_VecBuyItemList[nIndex].BuyItem.CashItem.cOption, g_pExtManager->GetCashLimitedItemCount(m_VecBuyItemList[nIndex].BuyItem.nItemSN),
|
||
m_VecBuyItemList[nIndex].nPrice, m_szIp, false, NULL, NULL, biOrderID, szTempOrderDetail, StrRefundable.c_str());
|
||
#else //#ifdef PRE_ADD_LIMITED_CASHITEM
|
||
nRet = pMembershipDB->QueryAddPurchaseOrderByCash(m_biCharacterDBID, m_bPCBang, m_VecBuyItemList[nIndex].BuyItem.nItemSN, m_VecBuyItemList[nIndex].nPrice,
|
||
m_VecBuyItemList[nIndex].nLimitCount, m_VecBuyItemList[nIndex].BuyItem.CashItem.nItemID, m_VecBuyItemList[nIndex].BuyItem.CashItem.cOption,
|
||
m_VecBuyItemList[nIndex].nPrice, m_szIp, false, NULL, NULL, biOrderID, szTempOrderDetail, StrRefundable.c_str());
|
||
#endif //#ifdef PRE_ADD_LIMITED_CASHITEM
|
||
if (nRet != ERROR_NONE)
|
||
return nRet;
|
||
|
||
#ifdef PRE_ADD_LIMITED_CASHITEM
|
||
if (g_pExtManager->GetCashLimitedItemCount(m_VecBuyItemList[nIndex].BuyItem.nItemSN) > 0)
|
||
bUpdateLimitedCount = true;
|
||
#endif //#ifdef PRE_ADD_LIMITED_CASHITEM
|
||
|
||
m_VecBuyItemList[nIndex].biPurchaseOrderDetailID = _atoi64(szTempOrderDetail);
|
||
SetPurchaseOrderID(biOrderID);
|
||
#endif //
|
||
}
|
||
break;
|
||
|
||
case CASH_PACKAGEBUY:
|
||
{
|
||
std::vector<string> VecItemString;
|
||
AppendItemString(0, 0, VecItemString);
|
||
|
||
char szTempOrderDetails[64] = {0, };
|
||
nRet = pMembershipDB->QueryAddPurchaseOrderByCash(m_biCharacterDBID, m_bPCBang, VecItemString, m_nTotalPrice, m_szIp, false, NULL, NULL, biOrderID, szTempOrderDetails);
|
||
if (nRet != ERROR_NONE)
|
||
return nRet;
|
||
|
||
#ifdef PRE_ADD_LIMITED_CASHITEM
|
||
if (atoi(VecItemString[Append_QuantityLimited].c_str()) > 0)
|
||
bUpdateLimitedCount = true;
|
||
#endif //#ifdef PRE_ADD_LIMITED_CASHITEM
|
||
|
||
SetPurchaseOrderID(biOrderID);
|
||
SetPurchaseOrderDetailID(szTempOrderDetails);
|
||
}
|
||
break;
|
||
|
||
case CASH_GIFT:
|
||
{
|
||
#if defined(_KR) || defined(_US) || defined(_CH) || defined(_EU) || defined(_ID) // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ҽ<EFBFBD> <20><><EFBFBD><EFBFBD>..
|
||
for (int i = 0; i < m_cProductCount; i++){ // <20><>ü<EFBFBD><C3BC> ó<><C3B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Ѱ<EFBFBD><D1B0><EFBFBD> ó<><C3B3><EFBFBD>Ѵ<EFBFBD>
|
||
#ifdef PRE_ADD_LIMITED_CASHITEM
|
||
nRet = pMembershipDB->QueryAddPurchaseOrderByCash(m_biCharacterDBID, m_bPCBang, m_VecGiftItemList[i].GiftItem.nItemSN, m_VecGiftItemList[i].nPrice,
|
||
m_VecGiftItemList[i].nLimitCount, m_VecGiftItemList[i].GiftItem.nItemID, m_VecGiftItemList[i].GiftItem.cItemOption, g_pExtManager->GetCashLimitedItemCount(m_VecGiftItemList[i].GiftItem.nItemSN),
|
||
m_VecGiftItemList[i].nPrice, m_szIp, true, m_wszReceiverCharacterName, m_wszMessage, biOrderID);
|
||
#else //#ifdef PRE_ADD_LIMITED_CASHITEM
|
||
nRet = pMembershipDB->QueryAddPurchaseOrderByCash(m_biCharacterDBID, m_bPCBang, m_VecGiftItemList[i].GiftItem.nItemSN, m_VecGiftItemList[i].nPrice,
|
||
m_VecGiftItemList[i].nLimitCount, m_VecGiftItemList[i].GiftItem.nItemID, m_VecGiftItemList[i].GiftItem.cItemOption,
|
||
m_VecGiftItemList[i].nPrice, m_szIp, true, m_wszReceiverCharacterName, m_wszMessage, biOrderID);
|
||
#endif //#ifdef PRE_ADD_LIMITED_CASHITEM
|
||
|
||
if (nRet != ERROR_NONE)
|
||
return nRet;
|
||
|
||
#ifdef PRE_ADD_LIMITED_CASHITEM
|
||
if (g_pExtManager->GetCashLimitedItemCount(m_VecGiftItemList[i].GiftItem.nItemSN) > 0)
|
||
bUpdateLimitedCount = true;
|
||
#endif //#ifdef PRE_ADD_LIMITED_CASHITEM
|
||
|
||
SetGiftItemPurchaseOrderID(i, biOrderID);
|
||
#if defined(PRE_ADD_CADGE_CASH)
|
||
if (m_nMailDBID > 0){
|
||
CDNSQLWorld *pWorldDB = GetWorldDB();
|
||
if (pWorldDB)
|
||
pWorldDB->QueryModWishProducts(m_nMailDBID, biOrderID);
|
||
}
|
||
#endif // #if defined(PRE_ADD_CADGE_CASH)
|
||
}
|
||
|
||
SetGiftItemPartByShanda();
|
||
|
||
#else //
|
||
if (m_cProductCount <= nIndex) return ERROR_ITEM_FAIL;
|
||
|
||
#ifdef PRE_ADD_LIMITED_CASHITEM
|
||
nRet = pMembershipDB->QueryAddPurchaseOrderByCash(m_biCharacterDBID, m_bPCBang, m_VecGiftItemList[nIndex].GiftItem.nItemSN, m_VecGiftItemList[nIndex].nPrice,
|
||
m_VecGiftItemList[nIndex].nLimitCount, m_VecGiftItemList[nIndex].GiftItem.nItemID, m_VecGiftItemList[nIndex].GiftItem.cItemOption, g_pExtManager->GetCashLimitedItemCount(m_VecGiftItemList[nIndex].GiftItem.nItemSN),
|
||
m_VecGiftItemList[nIndex].nPrice, m_szIp, true, m_wszReceiverCharacterName, m_wszMessage, biOrderID);
|
||
#else //#ifdef PRE_ADD_LIMITED_CASHITEM
|
||
nRet = pMembershipDB->QueryAddPurchaseOrderByCash(m_biCharacterDBID, m_bPCBang, m_VecGiftItemList[nIndex].GiftItem.nItemSN, m_VecGiftItemList[nIndex].nPrice,
|
||
m_VecGiftItemList[nIndex].nLimitCount, m_VecGiftItemList[nIndex].GiftItem.nItemID, m_VecGiftItemList[nIndex].GiftItem.cItemOption,
|
||
m_VecGiftItemList[nIndex].nPrice, m_szIp, true, m_wszReceiverCharacterName, m_wszMessage, biOrderID);
|
||
#endif //#ifdef PRE_ADD_LIMITED_CASHITEM
|
||
|
||
if (nRet != ERROR_NONE)
|
||
return nRet;
|
||
|
||
#ifdef PRE_ADD_LIMITED_CASHITEM
|
||
if (g_pExtManager->GetCashLimitedItemCount(m_VecGiftItemList[nIndex].GiftItem.nItemSN) > 0)
|
||
bUpdateLimitedCount = true;
|
||
#endif //#ifdef PRE_ADD_LIMITED_CASHITEM
|
||
|
||
SetGiftItemPurchaseOrderID(nIndex, biOrderID);
|
||
SetPurchaseOrderID(biOrderID);
|
||
#if defined(PRE_ADD_CADGE_CASH)
|
||
if (m_nMailDBID > 0){
|
||
CDNSQLWorld *pWorldDB = GetWorldDB();
|
||
if (pWorldDB)
|
||
pWorldDB->QueryModWishProducts(m_nMailDBID, biOrderID);
|
||
}
|
||
#endif // #if defined(PRE_ADD_CADGE_CASH)
|
||
|
||
#endif //
|
||
}
|
||
break;
|
||
|
||
case CASH_PACKAGEGIFT:
|
||
{
|
||
std::vector<string> VecItemString;
|
||
AppendItemString(0, 0, VecItemString);
|
||
|
||
INT64 biOrderID = 0;
|
||
nRet = pMembershipDB->QueryAddPurchaseOrderByCash(m_biCharacterDBID, m_bPCBang, VecItemString, m_nTotalPrice, m_szIp, true, m_wszReceiverCharacterName, m_wszMessage, biOrderID);
|
||
if (nRet != ERROR_NONE)
|
||
return nRet;
|
||
|
||
#ifdef PRE_ADD_LIMITED_CASHITEM
|
||
if (atoi(VecItemString[Append_QuantityLimited].c_str()) > 0)
|
||
bUpdateLimitedCount = true;
|
||
#endif //#ifdef PRE_ADD_LIMITED_CASHITEM
|
||
|
||
SetPurchaseOrderID(biOrderID);
|
||
#if defined(PRE_ADD_CADGE_CASH)
|
||
if (m_nMailDBID > 0){
|
||
CDNSQLWorld *pWorldDB = GetWorldDB();
|
||
if (pWorldDB)
|
||
pWorldDB->QueryModWishProducts(m_nMailDBID, biOrderID);
|
||
}
|
||
#endif // #if defined(PRE_ADD_CADGE_CASH)
|
||
}
|
||
break;
|
||
|
||
case CASH_VIPBUY:
|
||
{
|
||
|
||
}
|
||
break;
|
||
|
||
case CASH_VIPGIFT:
|
||
{
|
||
|
||
}
|
||
break;
|
||
}
|
||
|
||
#ifdef PRE_ADD_LIMITED_CASHITEM
|
||
if (g_pLimitedCashItemRepository && bUpdateLimitedCount)
|
||
{
|
||
std::vector<LimitedCashItem::TLimitedQuantityCashItem> vList;
|
||
if (g_pLimitedCashItemRepository->GetLimitedItemList(vList))
|
||
m_pConnection->SendLimiteItemInfoList(vList);
|
||
}
|
||
#endif //#ifdef PRE_ADD_LIMITED_CASHITEM
|
||
|
||
return ERROR_NONE;
|
||
}
|
||
|
||
int CDNUserRepository::PurchaseBuyItem()
|
||
{
|
||
int nRet = ERROR_NONE;
|
||
#if defined(_JP)
|
||
// <20>Ϻ<EFBFBD><CFBA><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Լ<EFBFBD> <20>ȿ<EFBFBD><C8BF><EFBFBD> ó<><C3B3><EFBFBD>Ѵ<EFBFBD>.
|
||
#else // #if defined(_JP)
|
||
nRet = AddPurchaseOrderByCash(m_cCurProductCount);
|
||
if (nRet != ERROR_NONE){
|
||
SendBuyGift(nRet);
|
||
return nRet;
|
||
}
|
||
|
||
#endif // #if defined(_JP)
|
||
|
||
#if defined(_TW) || defined(_TH)
|
||
nRet = g_pBillingShopConnection->OnBuy(this);
|
||
#else // defined(_TW)
|
||
nRet = g_pBillingConnection->OnBuy(this);
|
||
#endif // defined(_TW)
|
||
if (nRet != ERROR_NONE){
|
||
SendBuyGift(nRet);
|
||
}
|
||
|
||
return nRet;
|
||
}
|
||
|
||
int CDNUserRepository::PurchaseGiftItem()
|
||
{
|
||
int nRet = ERROR_NONE;
|
||
#if defined(_JP)
|
||
// <20>Ϻ<EFBFBD><CFBA><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Լ<EFBFBD> <20>ȿ<EFBFBD><C8BF><EFBFBD> ó<><C3B3><EFBFBD>Ѵ<EFBFBD>.
|
||
#else // #if defined(_JP)
|
||
nRet = AddPurchaseOrderByCash(m_cCurProductCount);
|
||
if (nRet != ERROR_NONE){
|
||
SendBuyGift(nRet);
|
||
return nRet;
|
||
}
|
||
|
||
#endif // #if defined(_JP)
|
||
|
||
#if defined(_TW) || defined(_TH)
|
||
nRet = g_pBillingShopConnection->OnGift(this);
|
||
#else //
|
||
nRet = g_pBillingConnection->OnGift(this);
|
||
#endif //
|
||
if (nRet != ERROR_NONE){
|
||
SendBuyGift(nRet);
|
||
}
|
||
|
||
return nRet;
|
||
}
|
||
|
||
int CDNUserRepository::CashItemDBProcess(int nWorldSetID, int nAccountDBID, INT64 biCharacterDBID, int nMapID, int nChannelID, char cPaymentRules, TCashItemBase &BuyItem, int nPrice, INT64 biPurchaseOrderID,
|
||
int nAddMaterializedItemCode, INT64 biSenderCharacterDBID/* = 0*/, bool bGift/* = false*/, char cPayMethodCode/* = DBDNWorldDef::PayMethodCode::Cash*/)
|
||
{
|
||
CDNSQLMembership *pMembershipDB = GetMembershipDB();
|
||
if (!pMembershipDB)
|
||
return ERROR_GENERIC_INVALIDREQUEST;
|
||
|
||
CDNSQLWorld *pWorldDB = GetWorldDB();
|
||
if (!pWorldDB)
|
||
return ERROR_GENERIC_INVALIDREQUEST;
|
||
|
||
int nRet = ERROR_DB;
|
||
|
||
if (m_cPaymentRules == Cash::PaymentRules::Petal)
|
||
nAddMaterializedItemCode = DBDNWorldDef::AddMaterializedItem::ReserveMoneyBuy;
|
||
#if defined( PRE_ADD_NEW_MONEY_SEED )
|
||
else if (m_cPaymentRules == Cash::PaymentRules::Seed)
|
||
nAddMaterializedItemCode = DBDNWorldDef::AddMaterializedItem::SeedPointBuy;
|
||
#endif
|
||
|
||
switch (g_pExtManager->GetItemMainType(BuyItem.CashItem.nItemID))
|
||
{
|
||
case ITEMTYPE_CHARACTER_SLOT:
|
||
{
|
||
char cMaxCount = 0;
|
||
nRet = pMembershipDB->QueryModCharacterSlotCount(biCharacterDBID, 1, cMaxCount); // 34: ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
}
|
||
break;
|
||
|
||
default:
|
||
{
|
||
nRet = pWorldDB->CashItemDBQuery(nAccountDBID, biCharacterDBID, nMapID, nChannelID, cPaymentRules, BuyItem, nPrice, biPurchaseOrderID, nAddMaterializedItemCode, m_wszIp, biSenderCharacterDBID, bGift, cPayMethodCode);
|
||
}
|
||
break;
|
||
}
|
||
|
||
return nRet;
|
||
}
|
||
|
||
bool CDNUserRepository::CheckSaleItemSN(int nItemSN)
|
||
{
|
||
if (!g_pExtManager->IsOnSaleCommodity(nItemSN)){
|
||
g_Log.Log(LogType::_ERROR, this, L"[CheckSaleItemSN] IsOnSaleCommodity Error(ItemSN:%d)\r\n", nItemSN);
|
||
return false;
|
||
}
|
||
#if defined(_KR) || defined(_US)
|
||
if (!g_pBillingConnection->CheckProduct(nItemSN)){
|
||
g_Log.Log(LogType::_ERROR, this, L"[CheckSaleItemSN] CheckProduct Error(ItemSN:%d)\r\n", nItemSN);
|
||
return false;
|
||
}
|
||
#endif // #if defined(_KR) || defined(_US)
|
||
if (!g_pExtManager->IsOnSaleDate(nItemSN)){
|
||
g_Log.Log(LogType::_ERROR, this, L"[CheckSaleItemSN] IsOnSaleDate Error(ItemSN:%d)\r\n", nItemSN);
|
||
return false; //$_$ <20><><EFBFBD>Թ<EFBFBD><D4B9><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
}
|
||
|
||
return true;
|
||
}
|
||
|
||
#if defined(PRE_MOD_SELECT_CHAR)
|
||
int CDNUserRepository::CheckCharacterSlotCount(int nAccountDBID, int nAddCount)
|
||
#else // #if defined(PRE_MOD_SELECT_CHAR)
|
||
int CDNUserRepository::CheckCharacterSlotCount(INT64 biCharacterDBID, int nAddCount)
|
||
#endif // #if defined(PRE_MOD_SELECT_CHAR)
|
||
{
|
||
CDNSQLMembership *pMembershipDB = GetMembershipDB();
|
||
if (!pMembershipDB)
|
||
return ERROR_GENERIC_INVALIDREQUEST;
|
||
|
||
int nRet = ERROR_DB;
|
||
if (nAddCount > 0){
|
||
char cCharacterCount = 0;
|
||
#if defined(PRE_MOD_SELECT_CHAR)
|
||
nRet = pMembershipDB->QueryGetCharacterSlotCount(nAccountDBID, 0, 0, cCharacterCount);
|
||
#else // #if defined(PRE_MOD_SELECT_CHAR)
|
||
nRet = pMembershipDB->QueryGetCharacterSlotCount(0, 0, biCharacterDBID, cCharacterCount);
|
||
#endif // #if defined(PRE_MOD_SELECT_CHAR)
|
||
|
||
if (nRet == ERROR_NONE){
|
||
#if defined(PRE_MOD_SELECT_CHAR)
|
||
if (cCharacterCount + g_pExtManager->GetGlobalWeightValue(1023) >= g_pExtManager->GetGlobalWeightValue(1022)){
|
||
#else // #if defined(PRE_MOD_SELECT_CHAR)
|
||
if (cCharacterCount + nAddCount > (CreateCharacterDefaultCountMax + g_pExtManager->GetGlobalWeightValue(34))){
|
||
#endif // #if defined(PRE_MOD_SELECT_CHAR)
|
||
return ERROR_CASHSHOP_COUNTOVER;
|
||
}
|
||
}
|
||
else
|
||
{
|
||
return ERROR_ITEM_FAIL;
|
||
}
|
||
}
|
||
|
||
return ERROR_NONE;
|
||
}
|
||
|
||
void CDNUserRepository::AppendItemString(int nStartIndex, int nEndIndex, std::vector<std::string> &VecItemString)
|
||
{
|
||
VecItemString.resize(Append_Max);
|
||
|
||
switch (m_nSubCommand)
|
||
{
|
||
case CASH_BUY:
|
||
{
|
||
for (int i = nStartIndex; i < nEndIndex; i++){
|
||
if (m_VecBuyItemList[i].BuyItem.nItemSN > 0){
|
||
if (!VecItemString[Append_ItemSN].empty()){
|
||
VecItemString[Append_ItemSN].append(",");
|
||
VecItemString[Append_Price].append(",");
|
||
VecItemString[Append_Limit].append(",");
|
||
VecItemString[Append_ItemID].append(",");
|
||
VecItemString[Append_Option].append(",");
|
||
#if defined(PRE_ADD_CASH_REFUND)
|
||
VecItemString[Append_Refundable].append(",");
|
||
#endif
|
||
#ifdef PRE_ADD_LIMITED_CASHITEM
|
||
VecItemString[Append_QuantityLimited].append(",");
|
||
#endif //#ifdef PRE_ADD_LIMITED_CASHITEM
|
||
}
|
||
VecItemString[Append_ItemSN].append(boost::lexical_cast<std::string>(m_VecBuyItemList[i].BuyItem.nItemSN));
|
||
VecItemString[Append_Price].append(boost::lexical_cast<std::string>(g_pExtManager->GetCashCommodityPrice(m_VecBuyItemList[i].BuyItem.nItemSN)));
|
||
VecItemString[Append_Limit].append(boost::lexical_cast<std::string>(g_pExtManager->GetCashBuyAbleCount(m_VecBuyItemList[i].BuyItem.nItemSN)));
|
||
VecItemString[Append_ItemID].append(boost::lexical_cast<std::string>(m_VecBuyItemList[i].BuyItem.CashItem.nItemID));
|
||
BYTE cOption = m_VecBuyItemList[i].BuyItem.CashItem.cOption;
|
||
VecItemString[Append_Option].append(boost::lexical_cast<std::string>(static_cast<int>(cOption)));
|
||
#if defined(PRE_ADD_CASH_REFUND)
|
||
if( m_bCashMoveInven || g_pExtManager->GetCashCommodityNoRefund(m_VecBuyItemList[i].BuyItem.CashItem.nItemID, m_VecBuyItemList[i].BuyItem.nItemSN) )
|
||
VecItemString[Append_Refundable].append("0"); // ij<><C4B3><EFBFBD>κ<EFBFBD><CEBA><EFBFBD><EFBFBD><EFBFBD> <20>ٷ<EFBFBD> <20><><EFBFBD><EFBFBD><EEB0A1>
|
||
else
|
||
VecItemString[Append_Refundable].append("1"); // <20><><EFBFBD><EFBFBD><EFBFBD>κ<EFBFBD><CEBA><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EEB0A1>
|
||
#endif
|
||
#ifdef PRE_ADD_LIMITED_CASHITEM
|
||
VecItemString[Append_QuantityLimited].append(boost::lexical_cast<std::string>(g_pExtManager->GetCashLimitedItemCount(m_VecBuyItemList[i].BuyItem.nItemSN)));
|
||
#endif //#ifdef PRE_ADD_LIMITED_CASHITEM
|
||
}
|
||
}
|
||
}
|
||
break;
|
||
|
||
case CASH_PACKAGEBUY:
|
||
{
|
||
VecItemString[Append_ItemSN] = FormatA("%d", m_nPackageSN);
|
||
VecItemString[Append_Price] = FormatA("%d", g_pExtManager->GetCashCommodityPrice(m_nPackageSN));
|
||
VecItemString[Append_Limit] = FormatA("%d", g_pExtManager->GetCashBuyAbleCount(m_nPackageSN));
|
||
for (int i = 0; i < m_cProductCount; i++){
|
||
if (m_ProductPackageList[i].nItemSN > 0){
|
||
if (!VecItemString[Append_ItemID].empty()){
|
||
VecItemString[Append_ItemID].append("|");
|
||
VecItemString[Append_Option].append("|");
|
||
}
|
||
VecItemString[Append_ItemID].append(boost::lexical_cast<std::string>(m_ProductPackageList[i].CashItem.nItemID));
|
||
BYTE cOption = m_ProductPackageList[i].CashItem.cOption;
|
||
VecItemString[Append_Option].append(boost::lexical_cast<std::string>(static_cast<int>(cOption)));
|
||
}
|
||
}
|
||
|
||
#ifdef PRE_ADD_LIMITED_CASHITEM
|
||
VecItemString[Append_QuantityLimited].append(boost::lexical_cast<std::string>(g_pExtManager->GetCashLimitedItemCount(m_nPackageSN)));
|
||
#endif //#ifdef PRE_ADD_LIMITED_CASHITEM
|
||
|
||
#if defined(PRE_ADD_CASH_REFUND)
|
||
if( m_bCashMoveInven || g_pExtManager->GetCashCommodityNoRefund(0, m_nPackageSN))
|
||
{
|
||
VecItemString[Append_Refundable] = "0"; // ij<><C4B3><EFBFBD>κ<EFBFBD><CEBA><EFBFBD><EFBFBD><EFBFBD> <20>ٷ<EFBFBD> <20>ֱ<EFBFBD>
|
||
m_bCashMoveInven = true;
|
||
}
|
||
else
|
||
VecItemString[Append_Refundable] = "1"; // <20><><EFBFBD><EFBFBD><EFBFBD>κ<EFBFBD><CEBA><EFBFBD><EFBFBD><EFBFBD>
|
||
#endif // #if defined(PRE_ADD_CASH_REFUND)
|
||
}
|
||
break;
|
||
|
||
case CASH_PACKAGEGIFT:
|
||
{
|
||
VecItemString[Append_ItemSN] = FormatA("%d", m_nPackageSN);
|
||
VecItemString[Append_Price] = FormatA("%d", g_pExtManager->GetCashCommodityPrice(m_nPackageSN));
|
||
VecItemString[Append_Limit] = FormatA("%d", g_pExtManager->GetCashBuyAbleCount(m_nPackageSN));
|
||
for (int i = 0; i < m_cProductCount; i++){
|
||
if (m_GiftPackageList[i].nItemSN > 0){
|
||
if (!VecItemString[Append_ItemID].empty()){
|
||
VecItemString[Append_ItemID].append("|");
|
||
VecItemString[Append_Option].append("|");
|
||
}
|
||
VecItemString[Append_ItemID].append(boost::lexical_cast<std::string>(m_GiftPackageList[i].nItemID));
|
||
BYTE cOption = m_GiftPackageList[i].cItemOption;
|
||
VecItemString[Append_Option].append(boost::lexical_cast<std::string>(static_cast<int>(cOption)));
|
||
}
|
||
}
|
||
|
||
#ifdef PRE_ADD_LIMITED_CASHITEM
|
||
VecItemString[Append_QuantityLimited].append(boost::lexical_cast<std::string>(g_pExtManager->GetCashLimitedItemCount(m_nPackageSN)));
|
||
#endif //#ifdef PRE_ADD_LIMITED_CASHITEM
|
||
}
|
||
break;
|
||
}
|
||
}
|
||
|
||
void CDNUserRepository::SetUsedPaidCash(LPCWSTR pReservedFields)
|
||
{
|
||
if (!pReservedFields) return;
|
||
|
||
std::vector<std::wstring> UPCTokens;
|
||
TokenizeW(pReservedFields, UPCTokens, L"=");
|
||
if (UPCTokens.size() != 2) return;
|
||
|
||
m_nUsedPaidCash = _wtoi(UPCTokens[1].c_str());
|
||
}
|
||
|
||
#if defined( PRE_ADD_NEW_MONEY_SEED )
|
||
int CDNUserRepository::AddSeedPoint( int nSeedPoint )
|
||
{
|
||
CDNSQLWorld *pWorldDB = GetWorldDB();
|
||
|
||
if (!pWorldDB)
|
||
{
|
||
return ERROR_GENERIC_INVALIDREQUEST;
|
||
}
|
||
|
||
TQAddEtcPoint pQ;
|
||
memset( &pQ, 0, sizeof(pQ) );
|
||
|
||
pQ.biCharacterDBID = GetCharacterDBID();
|
||
pQ.cType = DBDNWorldDef::EtcPointCode::SeedPoint;
|
||
pQ.biAddPoint = nSeedPoint;
|
||
pQ.nMapID = GetMapID();
|
||
MultiByteToWideChar(CP_ACP, 0, m_szIp, -1, pQ.wszIP, IPLENMAX);
|
||
|
||
TAAddEtcPoint pA;
|
||
memset( &pA, 0, sizeof(pA) );
|
||
|
||
return pWorldDB->QueryAddEtcPoint( &pQ, &pA );
|
||
}
|
||
|
||
int CDNUserRepository::UseSeedPoint()
|
||
{
|
||
CDNSQLWorld *pWorldDB = GetWorldDB();
|
||
|
||
if (!pWorldDB)
|
||
{
|
||
return ERROR_GENERIC_INVALIDREQUEST;
|
||
}
|
||
|
||
TQUseEtcPoint pQ;
|
||
memset( &pQ, 0, sizeof(pQ) );
|
||
|
||
pQ.biCharacterDBID = GetCharacterDBID();
|
||
pQ.cType = DBDNWorldDef::EtcPointCode::SeedPoint;
|
||
pQ.biUsePoint = m_nTotalPrice;
|
||
pQ.nMapID = GetMapID();
|
||
MultiByteToWideChar(CP_ACP, 0, m_szIp, -1, pQ.wszIP, IPLENMAX);
|
||
|
||
TAUseEtcPoint pA;
|
||
memset( &pA, 0, sizeof(pA) );
|
||
|
||
return pWorldDB->QueryUseEtcPoint( &pQ, &pA );
|
||
}
|
||
|
||
INT64 CDNUserRepository::GetSeedPoint()
|
||
{
|
||
CDNSQLWorld *pWorldDB = GetWorldDB();
|
||
|
||
if (!pWorldDB)
|
||
{
|
||
return 0;
|
||
}
|
||
|
||
INT64 nPoint = 0;
|
||
pWorldDB->QueryGetEtcPoint( GetCharacterDBID(), DBDNWorldDef::EtcPointCode::SeedPoint, nPoint);
|
||
return nPoint;
|
||
}
|
||
#endif |