#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; // ±¸¸Å īƮ ŸÀÔ 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(); // Áß±¹Àº 5°³¾¿ ¹­¾î¼­ º¸³»¾ßÇØ¼­ Çϳª ´õ ¸¸µç´Ù. (¸Ó ÀÌ·¯³Ä..) 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; // ÆÄ½Ì string strOrderDetails = pPurchaseOrderDetailIDs; std::vector tokens; TokenizeA(strOrderDetails.c_str(), tokens, ","); std::vector::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¸¦ fail·Î ¼³Á¤... Á¦´ë·Î °¡Á³À»¶§¸¸ true·Î ÇÑ´Ù. #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,}; // ÆÄ½Ì string strOrderDetails = pPurchaseOrderDetailIDs; std::vector tokens; TokenizeA(strOrderDetails.c_str(), tokens, ","); std::vector::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¸¦ fail·Î ¼³Á¤... Á¦´ë·Î ¼±¹° °¡Á³À»¶§¸¸ true·Î ÇÑ´Ù. #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(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(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) // ÀÚµ¿°áÁ¦¸é ÇÒÀÎµÈ °¡°ÝÀ¸·Î 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){ // ÆäÅ»·Î ¹°°Ç»ç±â nRet = PurchaseItemByPetal(); //$_$ Áúµã¹ºÂò } #if defined( PRE_ADD_NEW_MONEY_SEED ) else if( pCash->cPaymentRules == Cash::PaymentRules::Seed ) { //nRet = PurchaseItemBySeed(); //$_$ ÖÖ×Ó¹ºÂò } #endif else { // ij½¬·Î ¹°°Ç»ç±â 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(); //µãȯ¹ºÂò } else if (m_nTotalPrice <= nPetal) { pCash->cPaymentRules = Cash::PaymentRules::Petal; nRet = PurchaseItemByPetal(); //$_$ Áúµã¹ºÂò } 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){ // ÆäÅ»·Î ¹°°Ç»ç±â PurchaseItemByPetal(); } #if defined( PRE_ADD_NEW_MONEY_SEED ) else if( pCash->cPaymentRules == Cash::PaymentRules::Seed ) { nRet = PurchaseItemBySeed(); } #endif else { // ij½¬·Î ¹°°Ç »ç±â 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) ) { // °¡°ÝÀÌ 0¿øÀ̰í ÄíÆù¾ÆÀÌÅÛÀÌ¸é ºô¸µÀ¸·Î ½îÁö ¾Ê°í ¹Ù·Î Áö±Þ(Áß±¹ºô¸µ¼­¹öÀÇ °æ¿ì 0¿øµµ ¿¡·¯·Î ¸®ÅÏÇϱ⠶§¹®¿¡ ºô¸µ¼­¹ö¸¦ °ÅÄ¡Áö ¾Ê°í ó¸®) 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ÀÎ ¾Ö°¡ ¾Æ´Ñµ¥ »ç¸é ¿¡·¯°ª ¹ñ¾î¶ó 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)// ½Ì°¡Æú, ű¹, Àεµ³×½Ã¾ÆÀº AccountNameÇÊ¿äÇÔ 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)// ½Ì°¡Æú, ű¹, Àεµ³×½Ã¾ÆÀº AccountNameÇÊ¿äÇÔ 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] ÐòºÅ¶Ò»»¹¦ÄÜ£¬Ö±½Ó·µ»ØÊ§°Ü 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) // ÀÚµ¿°áÁ¦¸é ÇÒÀÎµÈ °¡°ÝÀ¸·Î 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 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´Â ¾ÆÀÌÅÛ¸®½ºÆ® °°Àº°Ô ¾ø°í ´Ü¼ø Æ÷ÀÎÆ® Â÷°¨ 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); //ÀÖ¶¹µã¹ºÂò³É¹¦ } else { printf("[Err]CDNUserRepository::OnVIPBuy AccountID=%d Ret=%d,TotalPrice=%d,CashBalance=%d",m_nAccountDBID,nRetDeductCash,nVIPPrice,nCashBalance); //SendVIPBuyGift(ERROR_GENERIC_INVALIDREQUEST, 0); //ÀÖ¶¹µã¹ºÂòʧ°Ü£¬¿ÉÄÜÊÇÁúµã } 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 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´Â ¾ÆÀÌÅÛ¸®½ºÆ® °°Àº°Ô ¾ø°í ´Ü¼ø Æ÷ÀÎÆ® Â÷°¨ 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; } // °áÀçÀκ¥ Ç÷¡±× ²ô°í int nRet = pMembershipDB->QueryModPurchaseOrderDetail(pCash->PaymentItemInfo.PaymentItemInfo.biDBID); if (nRet != ERROR_NONE) { m_pConnection->SendMoveCashInven(pCash->nAccountDBID, nRet, 0, 0, NULL, 0); return; } // »óǰ DB¿¡ ³Ö°í 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) // ¸¸¾à ½ÇÆÐÇÏ¸é ½ÇÆÐÇ÷¡±× ÄѰí.. pMembershipDB->QueryModGiveFailFlag2(pCash->PaymentItemInfo.PaymentItemInfo.biDBID, true); // Ȥ½Ã ÆäÅ» Àû¸³ÇؾßÇÏ´ÂÁö °Ë»ç 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 ) // ¿©±â±îÁö ¿Í¼­ ¿¡·¯¸¦ Áà¾ßÇϳª.. { m_pConnection->SendMoveCashInven(pCash->nAccountDBID, nRet, 0, 0, NULL, 0); return; } } else { nTotalPetal = GetPetalBalance(); } /* // ºô¸µ¿¡ SendPickUp ³¯¸®ÀÚ int nProductNo = g_pBillingConnection->GetProductNoBySN(pCash->PaymentItemInfo.PaymentItemInfo.ItemInfo.nItemSN); g_pBillingConnection->SendInventoryPickup(pCash->nAccountDBID, pCash->PaymentItemInfo.uiOrderNo, nProductNo, 1); // ¼ö·®Àº ¹«Á¶°Ç 1°³. */ 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; } // °áÀçÀκ¥ Ç÷¡±× ²ô°í 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; iPaymentPackageItemInfo.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; // »óǰ DB¿¡ ³Ö°í 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); // ÀÏ´Ü ½ÇÆÐÇØµµ return ÇÏÁö¸»°í ´Ù 󸮴 ÇÏÀÚ } nTempPrice += nUnitPrice; } // Ȥ½Ã ÆäÅ» Àû¸³ÇؾßÇÏ´ÂÁö °Ë»ç 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 ) // ¿©±â±îÁö ¿Í¼­ ¿¡·¯¸¦ Áà¾ßÇϳª.. { 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 /* // ºô¸µ¿¡ SendPickUp ³¯¸®ÀÚ int nProductNo = g_pBillingConnection->GetProductNoBySN(pCash->PaymentPackageItemInfo.PaymentPackageItemInfo.nPackageSN); g_pBillingConnection->SendInventoryPickup(pCash->nAccountDBID, pCash->PaymentPackageItemInfo.uiOrderNo, nProductNo, 1); // ¼ö·®Àº ¹«Á¶°Ç 1°³. */ 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²»ÄÜ×÷Ϊ³ýÊý 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); // ÀÏ´Ü ½ÇÆÐÇØµµ return ÇÏÁö¸»°í ´Ù 󸮴 ÇÏÀÚ } 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); // ÀÌ¹Ì È¯ºÒµÆ´Âµ¥ ÀÌ·³ ¾ÈµÊ.. return; } // ȯºÒ ó¸®.. 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) { // ¾¾¸®¾ó ÆÐŰÁö°¡ Á¸ÀçÇÏ´ÂÁö À¯¹«. 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(CashData.nItemID[0])); ItemOptionStr.append(boost::lexical_cast(static_cast(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(CashData.nItemID[0])); ItemOptionStr.append(boost::lexical_cast(static_cast(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) // ÆÐŰÁö´Â ij½¬Àκ¥ ¹Ù·Î°¡±â À϶§¸¸ ÆäÅ» ÀúÀå..³ª¸ÓÁö´Â ij½¬Àκ¥À¸·Î ¿Å±æ¶§. 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 // Á¦´ë·Î µÆÀ»¶§¸¸ if (nResult == ERROR_NONE) { #if defined(PRE_ADD_CASH_REFUND) // ÆÐŰÁö´Â ij½¬Àκ¥ ¹Ù·Î°¡±â À϶§¸¸ °ªÀ» ³Ö¾îÁÖÀÚ..³ª¸ÓÁö´Â ij½¬Àκ¥À¸·Î ¿Å±æ¶§. 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) // Áï½ÃÀû¿ë »óǰÀ̳ª ȯºÒºÒ°¡´ÉÇÑ ¾Öµé¸¸ ¿ì¼± PetalÀû¸³..³ª¸ÓÁö´Â ij½¬Àκ¥À¸·Î ¿Å±æ¶§. 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) // Áï½ÃÀû¿ë »óǰÀ̳ª ȯºÒºÒ°¡´ÉÇÑ ¾Öµé¸¸ ¿ì¼± ItemInsert..³ª¸ÓÁö´Â ij½¬Àκ¥À¸·Î ¿Å±æ¶§... 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); // ÀÏ´Ü ½ÇÆÐÇØµµ return ÇÏÁö¸»°í ´Ù 󸮴 ÇÏÀÚ } } #if defined(PRE_ADD_CASH_REFUND) else { __time64_t _tNow; time(&_tNow); // °áÀçÀκ¥¿¡ Ãß°¡µÈ ¸®½ºÆ®.. 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; // ±×³É Áö±Ý »ê°É·Î ¼ÂÆÃ. 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 ´Â AccountLock / AccountUnlock ½Ã ¸¶´Ù º¯ÇϹǷΠ´ë½Å pBillingContextID ¸¦ »ç¿ë 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 ´Â AccountLock / AccountUnlock ½Ã ¸¶´Ù º¯ÇϹǷΠ´ë½Å pBillingContextID ¸¦ »ç¿ë 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 ´Â AccountLock / AccountUnlock ½Ã ¸¶´Ù º¯ÇϹǷΠ´ë½Å pBillingContextID ¸¦ »ç¿ë 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 ´Â AccountLock / AccountUnlock ½Ã ¸¶´Ù º¯ÇϹǷΠ´ë½Å pBillingContextID ¸¦ »ç¿ë 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 ´Â AccountLock / AccountUnlock ½Ã ¸¶´Ù º¯ÇϹǷΠ´ë½Å pBillingContextID ¸¦ »ç¿ë 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 ´Â AccountLock / AccountUnlock ½Ã ¸¶´Ù º¯ÇϹǷΠ´ë½Å pBillingContextID ¸¦ »ç¿ë break; } if (SNDAORDERSTEP_WORK != GetOrderStep()) { break; } char szOrderKey[PUBLISHERORDERKEYMAX] = {0, }; sprintf_s(szOrderKey, "%s", pBillingOrderID); // 20100809 Áß±¹¿¡ ¸Â°Ô ¼öÁ¤µÊ char szContextKey[PUBLISHERORDERKEYMAX] = {0, }; sprintf_s(szContextKey, "%s", pBillingContextID); // 20100809 Áß±¹¿¡ ¸Â°Ô ¼öÁ¤µÊ 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 ´Â AccountLock / AccountUnlock ½Ã ¸¶´Ù º¯ÇϹǷΠ´ë½Å pBillingContextID ¸¦ »ç¿ë 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 ´Â AccountLock / AccountUnlock ½Ã ¸¶´Ù º¯ÇϹǷΠ´ë½Å pBillingContextID ¸¦ »ç¿ë break; char szOrderKey[PUBLISHERORDERKEYMAX] = {0, }; sprintf_s(szOrderKey, "%s", pBillingOrderID); // 20100809 Áß±¹¿¡ ¸Â°Ô ¼öÁ¤µÊ char szContextKey[PUBLISHERORDERKEYMAX] = {0, }; sprintf_s(szContextKey, "%s", pBillingContextID); // 20100809 Áß±¹¿¡ ¸Â°Ô ¼öÁ¤µÊ 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 ´Â AccountLock / AccountUnlock ½Ã ¸¶´Ù º¯ÇϹǷΠ´ë½Å pBillingContextID ¸¦ »ç¿ë 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 ´Â AccountLock / AccountUnlock ½Ã ¸¶´Ù º¯ÇϹǷΠ´ë½Å pBillingContextID ¸¦ »ç¿ë break; } if (SNDAORDERSTEP_WORK != GetOrderStep()) { break; } char szOrderKey[PUBLISHERORDERKEYMAX] = {0, }; sprintf_s(szOrderKey, "%s", pBillingOrderID); // 20100809 Áß±¹¿¡ ¸Â°Ô ¼öÁ¤µÊ char szContextKey[PUBLISHERORDERKEYMAX] = {0, }; sprintf_s(szContextKey, "%s", pBillingContextID); // 20100809 Áß±¹¿¡ ¸Â°Ô ¼öÁ¤µÊ 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 ´Â AccountLock / AccountUnlock ½Ã ¸¶´Ù º¯ÇϹǷΠ´ë½Å pBillingContextID ¸¦ »ç¿ë 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 ´Â AccountLock / AccountUnlock ½Ã ¸¶´Ù º¯ÇϹǷΠ´ë½Å pBillingContextID ¸¦ »ç¿ë break; char szOrderKey[PUBLISHERORDERKEYMAX] = {0, }; sprintf_s(szOrderKey, "%s", pBillingOrderID); // 20100809 Áß±¹¿¡ ¸Â°Ô ¼öÁ¤µÊ char szContextKey[PUBLISHERORDERKEYMAX] = {0, }; sprintf_s(szContextKey, "%s", pBillingContextID); // 20100809 Áß±¹¿¡ ¸Â°Ô ¼öÁ¤µÊ 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 ´Â AccountLock / AccountUnlock ½Ã ¸¶´Ù º¯ÇϹǷΠ´ë½Å pBillingContextID ¸¦ »ç¿ë SendBuyGift(nRet); return; } SendBuyGift(nResult); } break; case CASH_VIPBUY: case CASH_VIPGIFT: { if (strncmp(GetContextId(), pBillingContextID, GetContextIdCnt())) // pBillingOrderID ´Â AccountLock / AccountUnlock ½Ã ¸¶´Ù º¯ÇϹǷΠ´ë½Å pBillingContextID ¸¦ »ç¿ë 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 ´Â AccountLock / AccountUnlock ½Ã ¸¶´Ù º¯ÇϹǷΠ´ë½Å pBillingContextID ¸¦ »ç¿ë SendVIPBuyGift(nRet, 0); return; } SendVIPBuyGift(nResult, nBalance); } break; default: break; } } #endif // #if defined(_CH) || defined(_EU) // ConnectionÀ¸·Î SendÇϱâ.. 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 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 ) // ÄíÆù ·Ñ¹é 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) // ÆÐŰÁö´Â ij½¬Àκ¥ ¹Ù·Î°¡±â À϶§¸¸ ÆäÅ» ÀúÀå..³ª¸ÓÁö´Â ij½¬Àκ¥À¸·Î ¿Å±æ¶§. if( GetCashMoveInven() ) #endif nPetalAmount = m_VecBuyItemList[m_cCurProductCount].nReservePetal; // Âü°í·Î ´ë¸¸Àº °¨¸¶´Ï¾Æ orderkey°¡ ¾øÀ½. 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); // ÀÏ´Ü ½ÇÆÐÇØµµ return ÇÏÁö¸»°í ´Ù 󸮴 ÇÏÀÚ } } #if defined(_RU) || defined(_KAMO) //[OK_Cash] int nCashOutgoID = 0, nCashBalance = 0; int nRetDeductCash = pMembershipDB->QueryDeductCash(m_nAccountDBID, m_biPurchaseOrderID, m_nTotalPrice, nCashOutgoID, nCashBalance); //ÕâÀï·ÀÖ¹Áúµã¹ºÂò if (ERROR_NONE == nRetDeductCash) { SendBuyGift(nBillingResult); //ÀÖ¶¹µã¹ºÂò³É¹¦ } else { printf("[Err]pMembershipDB->QueryDeductCash AccountID=%d Ret=%d,TotalPrice=%d,CashBalance=%d",m_nAccountDBID,nRetDeductCash,m_nTotalPrice,nCashBalance); //SendBuyGift(nRetDeductCash); //ÀÖ¶¹µã¹ºÂòʧ°Ü£¬¿ÉÄÜÊÇÁúµã SendBuyGift(ERROR_GENERIC_INVALIDREQUEST); //@_@ } #elif defined(_WORK) //SendBuyGift(nBillingResult); #endif } else { m_VecBuyItemList[m_cCurProductCount].BuyItem.bFail = false; #if defined(PRE_ADD_CASH_REFUND) // Áï½ÃÀû¿ë »óǰÀ̳ª ȯºÒºÒ°¡´ÉÇÑ ¾Öµé¸¸ ¿ì¼± ItemInsert..³ª¸ÓÁö´Â ij½¬Àκ¥À¸·Î ¿Å±æ¶§... 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); // °áÀçÀκ¥¿¡ Ãß°¡µÈ ¸®½ºÆ®.. 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; // ±×³É Áö±Ý »ê°É·Î ¼ÂÆÃ. } #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) // ÆÐŰÁö´Â ij½¬Àκ¥ ¹Ù·Î°¡±â À϶§¸¸ ÆäÅ» ÀúÀå..³ª¸ÓÁö´Â ij½¬Àκ¥À¸·Î ¿Å±æ¶§. 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) // ÆÐŰÁö´Â ij½¬Àκ¥ ¹Ù·Î°¡±â À϶§¸¸ °ªÀ» ³Ö¾îÁÖÀÚ..³ª¸ÓÁö´Â ij½¬Àκ¥À¸·Î ¿Å±æ¶§. 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; // Âü°í·Î ´ë¸¸Àº °¨¸¶´Ï¾Æ orderkey°¡ ¾øÀ½. 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 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 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 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 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] // Àüü ÅëÀ¸·Î ó¸® std::vector 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±ú¾¿ ó¸® (Áß±¹¸¸ ƯÀÌÇÔ) int nStx = 0, nEtx = std::min(MAX_GOOD_LEN, m_cProductCount); while(true) { std::vector 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(nEtx + MAX_GOOD_LEN, m_cProductCount); } #else // #if defined(_JP) || defined(_TW) || defined(_SG) || defined(_TH) // 1°³¾¿ ó¸® 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½¬Àκ¥À¸·Î ¹Ù·Î ³Ö±â else StrRefundable = "1"; // °áÀçÀκ¥À¸·Î #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 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) // ¼±¹°À» ´ã±â·Î ¿©·¯°³ ±¸¸ÅÇÒ¼ö ÀÖÀ½.. for (int i = 0; i < m_cProductCount; i++){ // Àüü·Î ó¸®ÇÏÁö¸»°í ÇѰ³¾¿ ó¸®ÇÑ´Ù #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 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 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) // ÀϺ»Àº ºô¸µÇÔ¼ö ¾È¿¡¼­ ó¸®ÇÑ´Ù. #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) // ÀϺ»Àº ºô¸µÇÔ¼ö ¾È¿¡¼­ ó¸®ÇÑ´Ù. #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¸¯ÅÍ ½½·Ô °³¼öÁ¦ÇÑ } 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; //$_$ ºöÂÔ¹ºÂòʱ¼äµÄÏÞÖÆ } 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 &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(m_VecBuyItemList[i].BuyItem.nItemSN)); VecItemString[Append_Price].append(boost::lexical_cast(g_pExtManager->GetCashCommodityPrice(m_VecBuyItemList[i].BuyItem.nItemSN))); VecItemString[Append_Limit].append(boost::lexical_cast(g_pExtManager->GetCashBuyAbleCount(m_VecBuyItemList[i].BuyItem.nItemSN))); VecItemString[Append_ItemID].append(boost::lexical_cast(m_VecBuyItemList[i].BuyItem.CashItem.nItemID)); BYTE cOption = m_VecBuyItemList[i].BuyItem.CashItem.cOption; VecItemString[Append_Option].append(boost::lexical_cast(static_cast(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½¬Àκ¥À¸·Î ¹Ù·Î µé¾î°¡±â else VecItemString[Append_Refundable].append("1"); // °áÀçÀκ¥À¸·Î µé¾î°¡±â #endif #ifdef PRE_ADD_LIMITED_CASHITEM VecItemString[Append_QuantityLimited].append(boost::lexical_cast(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(m_ProductPackageList[i].CashItem.nItemID)); BYTE cOption = m_ProductPackageList[i].CashItem.cOption; VecItemString[Append_Option].append(boost::lexical_cast(static_cast(cOption))); } } #ifdef PRE_ADD_LIMITED_CASHITEM VecItemString[Append_QuantityLimited].append(boost::lexical_cast(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½¬Àκ¥À¸·Î ¹Ù·Î ³Ö±â m_bCashMoveInven = true; } else VecItemString[Append_Refundable] = "1"; // °áÀçÀκ¥À¸·Î #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(m_GiftPackageList[i].nItemID)); BYTE cOption = m_GiftPackageList[i].cItemOption; VecItemString[Append_Option].append(boost::lexical_cast(static_cast(cOption))); } } #ifdef PRE_ADD_LIMITED_CASHITEM VecItemString[Append_QuantityLimited].append(boost::lexical_cast(g_pExtManager->GetCashLimitedItemCount(m_nPackageSN))); #endif //#ifdef PRE_ADD_LIMITED_CASHITEM } break; } } void CDNUserRepository::SetUsedPaidCash(LPCWSTR pReservedFields) { if (!pReservedFields) return; std::vector 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