DragonNest/Server/DNCashServer/DNUserRepository.cpp
2024-12-19 09:48:26 +08:00

3410 lines
No EOL
114 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

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

#include "StdAfx.h"
#include "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