DragonNest/Server/DNCashServer/DNUserRepository.cpp

3410 lines
114 KiB
C++
Raw Normal View History

2024-12-19 09:48:26 +08:00
#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