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