DragonNest/Server/DNCashServer/DNUserRepository.h

372 lines
12 KiB
C
Raw Normal View History

2024-12-19 09:48:26 +08:00
#pragma once
#if defined (PRE_ADD_REJECT_DUPLICATED_CASH_REQUEST)
#if defined (_WIN64)
typedef LONGLONG USER_REQUEST;
#else
typedef LONG USER_REQUEST;
#endif // #if defined (_WIN64)
const USER_REQUEST CASH_NO_REQUESTING = 0;
const USER_REQUEST CASH_REQUESTING = 1;
void ReleaseExchange(USER_REQUEST volatile* pDestination);
class CRequestReleaser
{
public:
CRequestReleaser(USER_REQUEST& requesting)
: m_Requesting(requesting)
{
_ASSERT(m_Requesting == CASH_REQUESTING);
m_Lock = false;
}
~CRequestReleaser()
{
if (!m_Lock)
ReleaseExchange(&m_Requesting);
}
public:
void Lock() { m_Lock = true; }
private:
USER_REQUEST& m_Requesting;
bool m_Lock;
};
#endif // #if defined (PRE_ADD_REJECT_DUPLICATED_CASH_REQUEST)
// village, game<6D><65><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD> billing<6E><67><EFBFBD>ٿ<EFBFBD> <20><><EFBFBD>̿<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ҷ<EFBFBD><D2B6><EFBFBD><EFBFBD><EFBFBD> <20>ұ<EFBFBD>?;;
class CDNSQLWorld;
class CDNSQLMembership;
class CDNConnection;
class CDNUserRepository
{
public:
struct TBuyItem
{
TCashBuyItem BuyItem;
int nReservePetal;
int nPrice;
int nLimitCount;
#if defined( PRE_ADD_NEW_MONEY_SEED )
int nSeedPoint;
#endif
int nProductNo;
INT64 biPurchaseOrderDetailID; // <20><EFBFBD><ECB8AE> <20><>ǰ<EFBFBD><C7B0> ID
};
struct TGiftItem
{
TCashGiftItem GiftItem;
INT64 biPurchaseOrderID; // <20><EFBFBD><ECB8AE>
int nReservePetal;
int nPrice;
int nLimitCount;
// Nexon
int nProductNo;
int nOrderStep; // eSndaOrderStep, gash
#if defined( PRE_ADD_NEW_MONEY_SEED )
int nSeedPoint;
#endif
};
struct TVIPItem
{
int nItemSN;
INT64 biPurchaseOrderID; // <20><EFBFBD><ECB8AE>
int nPrice;
int nLimitCount;
int nOrderStep; // eSndaOrderStep
};
// <20><><EFBFBD>ٿ<EFBFBD>
#if defined(_CH) || defined(_EU)
struct TBuyItemPart
{
TBuyItem *pPartItem[MAX_GOOD_LEN];
INT64 biPurchaseOrderID; // <20><EFBFBD><ECB8AE>
int nOrderStep; // eSndaOrderStep
char context_id[MAX_ORDERID_LEN+1]; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> ID (<28>ֹ<EFBFBD> <20><> <20>ѹ<EFBFBD>, GetNewId() <20><> <20><><EFBFBD><EFBFBD><EFBFBD>Ͽ<EFBFBD> <20><><EFBFBD><EFBFBD>) // <20><><EFBFBD><EFBFBD> <20><>ǰ // <20><> AccountLock / AccountUnlock Request <20><> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ǿ<EFBFBD><C7BE><EFBFBD> <20><>.
};
struct TGiftItemPart
{
TGiftItem *pPartItem[MAX_GOOD_LEN];
int nOrderStep; // eSndaOrderStep
char context_id[MAX_ORDERID_LEN+1]; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> ID (<28>ֹ<EFBFBD> <20><> <20>ѹ<EFBFBD>, GetNewId() <20><> <20><><EFBFBD><EFBFBD><EFBFBD>Ͽ<EFBFBD> <20><><EFBFBD><EFBFBD>) // <20><><EFBFBD><EFBFBD> <20><>ǰ // <20><> AccountLock / AccountUnlock Request <20><> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ǿ<EFBFBD><C7BE><EFBFBD> <20><>.
};
#endif // #if defined(_CH) || defined(_EU)
private:
UINT m_nAccountDBID;
char m_szAccountName[IDLENMAX];
WCHAR m_wszAccountName[IDLENMAX];
char m_szCharacterName[NAMELENMAX];
WCHAR m_wszCharacterName[NAMELENMAX];
INT64 m_biCharacterDBID;
CDNConnection *m_pConnection;
int m_nThreadID;
char m_cWorldSetID;
int m_nMapID;
int m_nChannelID;
int m_nSubCommand;
// Nexon
UINT m_nNexonSN;
char m_cPaymentRules; // Cash::PaymentRules
// Shanda
#if defined(_CH) || defined(_EU)
char m_sess_id[MAX_SESSID_LEN+1]; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> ID (<28><><EFBFBD><EFBFBD> <20><> <20>ѹ<EFBFBD>, GetNewId() <20><> <20><><EFBFBD><EFBFBD><EFBFBD>Ͽ<EFBFBD> <20><><EFBFBD><EFBFBD>) // <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><31><C8B8> <20>α<EFBFBD><CEB1><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ش<EFBFBD> <20>ʵ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ġ<EFBFBD>ϵ<EFBFBD><CFB5><EFBFBD> <20>ؾ<EFBFBD> <20><>.
char m_context_id[MAX_ORDERID_LEN+1]; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> ID (<28>ֹ<EFBFBD> <20><> <20>ѹ<EFBFBD>, GetNewId() <20><> <20><><EFBFBD><EFBFBD><EFBFBD>Ͽ<EFBFBD> <20><><EFBFBD><EFBFBD>) // <20><>Ű<EFBFBD><C5B0> <20><>ǰ/<2F><><EFBFBD><EFBFBD> // <20><> AccountLock / AccountUnlock Request <20><> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ǿ<EFBFBD><C7BE><EFBFBD> <20><>.
int m_nOrderStep; // eSndaOrderStep / eGashOrderStep
#endif // #if defined(_CH) || defined(_EU)
int m_nPickupCount;
bool m_bOpen;
#if defined( PRE_ADD_NEW_MONEY_SEED )
INT64 m_nSeedPoint;
#endif
bool m_bPCBang;
char m_cBuyCartType; // <20><><EFBFBD><EFBFBD> īƮ Ÿ<><C5B8>
char m_cGiftCartType; // <20><><EFBFBD><EFBFBD> īƮ Ÿ<><C5B8>
int m_nPackageSN;
INT64 m_biPurchaseOrderID; // <20><EFBFBD><ECB8AE>
#if defined(PRE_ADD_CASH_REFUND)
INT64 m_biPurchaseOrderDetailID; // <20><EFBFBD><ECB8AE>
#endif
INT64 m_biCouponOrderID; // <20><EFBFBD><ECB8AE>
int m_nCouponSN;
TCashItemBase m_ProductPackageList[PACKAGEITEMMAX];
TCashPackageGiftItem m_GiftPackageList[PACKAGEITEMMAX];
#if defined(PRE_ADD_CASH_REFUND)
bool m_bCashMoveInven;
#endif
#if defined(PRE_ADD_SALE_COUPON)
INT64 m_biSaleCouponSerial;
#endif
#if defined(PRE_ADD_CADGE_CASH)
int m_nMailDBID;
#endif // #if defined(PRE_ADD_CADGE_CASH)
public:
char m_cCurProductCount;
char m_cProductCount;
std::vector<TBuyItem> m_VecBuyItemList;
std::vector<TGiftItem> m_VecGiftItemList;
#if defined(_CH) || defined(_EU)
int m_nPartCount;
std::vector<TBuyItemPart> m_VecBuyItemPartList; // <20>߱<EFBFBD><DFB1><EFBFBD> 5<><35><EFBFBD><EFBFBD> <20><><EFBFBD><20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ؼ<EFBFBD> <20>ϳ<EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. (<28><> <20>̷<EFBFBD><CCB7><EFBFBD>..)
std::vector<TGiftItemPart> m_VecGiftItemPartList; // <20>߱<EFBFBD><DFB1><EFBFBD> 5<><35><EFBFBD><EFBFBD> <20><><EFBFBD><20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ؼ<EFBFBD> <20>ϳ<EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. (<28><> <20>̷<EFBFBD><CCB7><EFBFBD>..)
#endif // _CH
#if defined(PRE_ADD_CASH_REFUND)
TPaymentItemInfoEx m_PaymentItem[PREVIEWCARTLISTMAX];
TPaymentPackageItemInfoEx m_PaymentPackageItem;
char m_cRefundType;
#endif
char m_cAge;
UINT m_nIp;
char m_szIp[IPLENMAX];
WCHAR m_wszIp[IPLENMAX];
WCHAR m_wszReceiverCharacterName[NAMELENMAX];
char m_szReceiverAccountName[IDLENMAX];
WCHAR m_wszMessage[GIFTMESSAGEMAX];
WCHAR m_wszCoupon[COUPONMAX];
char m_szCoupon[COUPONMAX]; // <20>븸, <20>̰<EFBFBD><CCB0><EFBFBD><EFBFBD><EFBFBD> char<61><72><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ȯ<EFBFBD>ؼ<EFBFBD> <20><><EFBFBD><EFBFBD>
int m_nTotalPrice;
int m_nUsedPaidCash;
TVIPItem m_VIP;
bool m_bAutoPay;
bool m_bServer;
#if defined (PRE_ADD_REJECT_DUPLICATED_CASH_REQUEST)
USER_REQUEST m_Requesting;
#endif // #if defined (PRE_ADD_REJECT_DUPLICATED_CASH_REQUEST)
private:
void Clear();
public:
CDNUserRepository(void);
~CDNUserRepository(void);
void SetAccountDBID(UINT nAccountDBID) { m_nAccountDBID = nAccountDBID; }
UINT GetAccountDBID() { return m_nAccountDBID; }
void SetAccountName(char *pName) { _strcpy(m_szAccountName, _countof(m_szAccountName), pName, (int)strlen(pName)); }
char *GetAccountName() { return m_szAccountName; }
WCHAR *GetAccountNameW() { return m_wszAccountName; }
char *GetCharacterName() { return m_szCharacterName; }
WCHAR *GetCharacterNameW() { return m_wszCharacterName; }
INT64 GetCharacterDBID() { return m_biCharacterDBID; }
char GetWorldID() { return m_cWorldSetID; }
int GetMapID() { return m_nMapID; }
int GetChannelID() { return m_nChannelID; }
void SetReceiverAccountName();
char *GetReceiverAccountName() { return m_szReceiverAccountName; }
WCHAR *GetReceiverCharacterNameW() { return m_wszReceiverCharacterName; }
char *GetCoupon() { return m_szCoupon; }
WCHAR *GetCouponW() { return m_wszCoupon; }
CDNConnection * GetConnection() { return m_pConnection; }
int GetThreadID() { return m_nThreadID; }
UINT GetNexonSN() { return m_nNexonSN; }
char GetPaymentRules() { return m_cPaymentRules; }
#if defined(_CH) || defined(_EU)
char* SetSessId() { return m_sess_id; }
const char* GetSessId() const { return m_sess_id; }
int GetSessIdCnt() const { return(static_cast<int>(_countof(m_sess_id))); }
void SetContextId(char *pContext) { _strcpy(m_context_id, _countof(m_context_id), pContext, (int)strlen(pContext)); } // pRes->order_id <20><> AccountLock / AccountUnlock <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>ϹǷ<CFB9> <20><><EFBFBD><EFBFBD> pRes->context_id <20><> <20><><EFBFBD><EFBFBD>
const char* GetContextId() const { return m_context_id; }
int GetContextIdCnt() const { return(static_cast<int>(_countof(m_context_id))); }
void SetOrderStep(int nOrderStep) { m_nOrderStep = nOrderStep; }
int GetOrderStep() const { return m_nOrderStep; }
CDNUserRepository::TBuyItemPart *GetBuyItemPart(); // <20><><EFBFBD><EFBFBD> pickupcount<6E><74> <20>ش<EFBFBD><D8B4>ϴ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ã<><C3A3>
CDNUserRepository::TGiftItemPart *GetGiftItemPart(); // <20><><EFBFBD><EFBFBD> pickupcount<6E><74> <20>ش<EFBFBD><D8B4>ϴ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ã<><C3A3>
int CheckSessID();
#endif // #if defined(_CH) || defined(_EU)
bool IsOpen() { return m_bOpen; }
bool IsPCBang() { return m_bPCBang; }
char GetBuyCartType() { return m_cBuyCartType; } // <20><><EFBFBD><EFBFBD> īƮ Ÿ<><C5B8>
int GetPackageSN() { return m_nPackageSN; }
void SetPurchaseOrderID(INT64 biPurchaseOrderID) { m_biPurchaseOrderID = biPurchaseOrderID; }
INT64 GetPurchaseOrderID() const { return m_biPurchaseOrderID; }
int GetSubCommand() { return m_nSubCommand; }
void SetPurchaseOrderDetailID(const char* pPurchaseOrderDetailIDs);
int GetPetalBalance();
CDNSQLMembership *GetMembershipDB();
CDNSQLWorld *GetWorldDB();
bool SetBuyItem(TCashBuyItem &Item);
void SetBuyItemPartByShanda(int nStartIndex, int nEndIndex, INT64 biOrderID, const char* pPurchaseOrderDetailIDs);
CDNUserRepository::TBuyItem *GetBuyItem(int nIndex);
bool SetGiftItem(TCashGiftItem &Item);
void SetGiftItemPartByShanda();
void SetGiftItemPurchaseOrderID(int nIndex, INT64 biPurchaseOrderID);
CDNUserRepository::TGiftItem *GetGiftItem(int nIndex);
void SetBalanceInquiry(int nThreadID, CDNConnection *pConnection, TQCashBalanceInquiry *pCash);
bool SetBuy(int nThreadID, CDNConnection *pConnection, TQCashBuy *pCash);
void SetPackageBuy(int nThreadID, CDNConnection *pConnection, TQCashPackageBuy *pCash);
bool SetGift(int nThreadID, CDNConnection *pConnection, TQCashGift *pCash);
void SetPackageGift(int nThreadID, CDNConnection *pConnection, TQCashPackageGift *pCash);
void SetCoupon(int nThreadID, CDNConnection *pConnection, TQCashCoupon *pCash);
void SetVIPBuy(int nThreadID, CDNConnection *pConnection, TQCashVIPBuy *pCash);
void SetVIPGift(int nThreadID, CDNConnection *pConnection, TQCashVIPGift *pCash);
void SetRefund(int nThreadID, CDNConnection *pConnection, TQCashRefund* pCash);
int OnBalanceInquiry(int nThreadID, CDNConnection *pConnection, TQCashBalanceInquiry *pCash);
int OnBuy(int nThreadID, CDNConnection *pConnection, TQCashBuy *pCash);
int OnPackageBuy(int nThreadID, CDNConnection *pConnection, TQCashPackageBuy *pCash);
int OnGift(int nThreadID, CDNConnection *pConnection, TQCashGift *pCash);
int OnPackageGift(int nThreadID, CDNConnection *pConnection, TQCashPackageGift *pCash);
int OnCoupon(int nThreadID, CDNConnection *pConnection, TQCashCoupon *pCash);
int OnVIPBuy(int nThreadID, CDNConnection *pConnection, TQCashVIPBuy *pCash);
int OnVIPGift(int nThreadID, CDNConnection *pConnection, TQCashVIPGift *pCash);
void OnRefund(int nThreadID, CDNConnection *pConnection, TQCashRefund* pCash);
void OnMoveCashInven(int nThreadID, CDNConnection *pConnection, TQCashMoveCashInven* pCash);
void OnPackageMoveCashInven(int nThreadID, CDNConnection *pConnection, TQCashPackageMoveCashInven* pCash);
int CalcPackageProcess();
bool OnRecvBillingCoupon(int nBillingResult, int nResult, int nItemSN, UINT nOrderNo);
// <20>ѱ<EFBFBD>, <20>̱<EFBFBD> <20><><EFBFBD><EFBFBD>
void OnRecvBillingPurchase(int nResult, int nBillingResult, UINT nOrderNo, char *pNexonOrderID); // purchase item <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> orderno<6E><6F> <20>޴°<DEB4> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ش<EFBFBD>
// <20><>Ÿ <20><><EFBFBD><EFBFBD>..(<28>߱<EFBFBD>, <20>Ϻ<EFBFBD> <20><><EFBFBD><EFBFBD>)
void OnRecvBillingBuyItem(int nBillingResult, UINT nOrderNo=0, bool bCart=false); // <20><><EFBFBD>ٱ<EFBFBD><D9B1><EFBFBD> <20><><EFBFBD><EFBFBD> On,Off(Off<66><66> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>)
#if defined(_CH) || defined(_EU)
int GetTotalPetalBuyPartList();
void SetSuccessBuyPartList();
void SetOrderStepBuyPartList(int nOrderStep);
void SetSuccessGiftPartList();
void SetOrderStepGiftPartList(int nOrderStep);
void OnRecvAccountLock(int nBillingResult, char *pBillingContextID);
void OnRecvAccountUnlock(int nBillingResult, char *pBillingContextID, char *pBillingOrderID, int nBalance);
#endif // #if defined(_CH) || defined(_EU)
// Connection<6F><6E><EFBFBD><EFBFBD> Send<6E>ϱ<EFBFBD>..
void SendBalanceInquiry(int nResult, int nCashBalance, int nNotRefundableBalance = 0);
#ifdef PRE_ADD_LIMITED_CASHITEM
void SendBuyGift(int nResult, bool bUpdateLimitedCount = false);
#else //#ifdef PRE_ADD_LIMITED_CASHITEM
void SendBuyGift(int nResult);
#endif //#ifdef PRE_ADD_LIMITED_CASHITEM
#if defined(_TW)
void SendCoupon(int nResult, bool bGashSend=true);
#else
void SendCoupon(int nResult);
#endif // #if defined(_TW)
void SendVIPBuyGift(int nResult, int nCash);
#if defined(PRE_ADD_CASH_REFUND)
void SendCashRefund(int nResult);
void OnRecvBillingRefund(int nResult);
inline bool GetCashMoveInven() { return m_bCashMoveInven; };
inline void SetCashMoveInven(bool bCashMoveInven) { m_bCashMoveInven = bCashMoveInven; };
#endif
int PurchaseItemByPetal();
#if defined( PRE_ADD_NEW_MONEY_SEED )
int PurchaseItemBySeed();
#endif
int AddPurchaseOrderByCash(int nIndex);
int PurchaseBuyItem();
int PurchaseGiftItem();
// <20>ȿ<EFBFBD><C8BF><EFBFBD> CashItemDBQuery ó<><C3B3>.. <20>ѹ<EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
int 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);
bool CheckSaleItemSN(int nItemSN);
#if defined(PRE_MOD_SELECT_CHAR)
int CheckCharacterSlotCount(int nAccountDBID, int nAddCount);
#else // #if defined(PRE_MOD_SELECT_CHAR)
int CheckCharacterSlotCount(INT64 biCharacterDBID, int nAddCount);
#endif // #if defined(PRE_MOD_SELECT_CHAR)
void AppendItemString(int nStartIndex, int nEndIndex, std::vector<std::string> &VecItemString);
void SetUsedPaidCash(LPCWSTR pReservedFields);
#if defined( PRE_ADD_NEW_MONEY_SEED )
INT64 GetSeedPoint();
int AddSeedPoint( int nSeedPoint );
int UseSeedPoint();
#endif
};