Common
1. service.h / CommonDefines.h
Add:
#define ENABLE_ITEMSHOP
2. length.h
Add:
#ifdef ENABLE_ITEMSHOP
enum
{
ITEMSHOP_CATEGORY_MAX_LEN = 24,
ITEMSHOP_ICON_MAX_LEN = 24,
ITEMSHOP_HASH_MAX_LEN = 32,
PROMOTION_CODE_MAX_LEN = 48,
};
#endif
3. tables.h
Search:
HEADER_GD_SETUP = 0xff,
Add above:
#ifdef ENABLE_ITEMSHOP
HEADER_GD_RELOAD_ITEMSHOP = 200,
HEADER_GD_BUY_ITEMSHOP = 201,
HEADER_GD_PROMOTION_REDEEM = 202,
#endif
Search:
HEADER_DG_MAP_LOCATIONS = 0xfe,
Add above:
#ifdef ENABLE_ITEMSHOP
HEADER_DG_RELOAD_ITEMSHOP = 192,
HEADER_DG_BUY_ITEMSHOP_ITEM = 193,
HEADER_DG_REFRESH_ITEMSHOP_SINGLE_ITEM = 194,
HEADER_DG_REMOVE_ITEMSHOP_SINGLE_ITEM = 195,
HEADER_DG_ADD_ITEMSHOP_SINGLE_ITEM = 196,
HEADER_DG_PROMOTION_CODE_REDEEM = 197,
#endif
Add to end of file above #pragma pack():
#ifdef ENABLE_ITEMSHOP
typedef struct SItemshopCategoryInfo
{
char category[ITEMSHOP_CATEGORY_MAX_LEN + 1];
char icon[ITEMSHOP_ICON_MAX_LEN + 1];
}TItemshopCategoryInfo;
typedef struct SItemshopCategoryTable
{
BYTE index;
TItemshopCategoryInfo info;
} TItemshopCategoryTable;
typedef struct SItemshopItemTable
{
char hash[ITEMSHOP_HASH_MAX_LEN + 1];
unsigned long long ullPrice;
BYTE byDiscountPercent;
long long llLimitCount;
BYTE byCategory;
DWORD dwVnum;
WORD wCount;
time_t end_time;
long alSockets[ITEM_SOCKET_MAX_NUM];
TPlayerItemAttribute aAttr[ITEM_ATTRIBUTE_MAX_NUM];
BYTE weight;
} TItemshopItemTable;
typedef struct SPromotionItemTable
{
DWORD dwVnum;
WORD wCount;
long alSockets[ITEM_SOCKET_MAX_NUM];
TPlayerItemAttribute aAttr[ITEM_ATTRIBUTE_MAX_NUM];
} TPromotionItemTable;
typedef struct SSpecialOfferTimes
{
time_t start_time;
time_t end_time;
bool is_activ;
} TSpecialOfferTimes;
typedef struct SSpecialOfferItems
{
long long llItemIndex;
TSpecialOfferTimes times;
TItemshopItemTable item;
} TSpecialOfferItems;
typedef struct SItemshopCheckBuy
{
char hash[ITEMSHOP_HASH_MAX_LEN + 1];
WORD wCount;
} TItemshopCheckBuy;
typedef struct SItemshopBuyAnswer
{
bool canBuy;
WORD wCount;
char code[ITEMSHOP_HASH_MAX_LEN + 1];
} TItemshopBuyAnswer;
typedef struct SPromotionRedeem
{
DWORD accID;
char code[PROMOTION_CODE_MAX_LEN + 1];
} TPromotionRedeem;
typedef struct SPromotionRedeemInfo
{
BYTE byRedeemAnswer;
WORD reward_count;
} TPromotionRedeemAnswer;
enum
{
REDEEM_FAIL,
REDEEM_SUCCESS,
REDEEM_ALREADY_REDEEMED
};
#endif
4. utils.h
Add:
#include "service.h"
Add to end of file:
#ifdef ENABLE_ITEMSHOP
inline bool str_to_number(unsigned long long& out, const char* in)
{
if (0 == in || 0 == in[0]) return false;
out = (unsigned long long)strtoull(in, NULL, 10);
return true;
}
template <typename T> inline bool check_mul_error(T a, T b) {
bool result = a == 0 || b == 0 || (
((T)(a * b) / a) != b);
return result;
}
#endif