/************************/
#include "../systeminc/version.h"
#include "../systeminc/system.h"
#include "../systeminc/pc.h"
#include "../systeminc/shop.h"
#include "../systeminc/tool.h"
#include "../systeminc/menu.h"
#include "../systeminc/t_music.h"
#include "../systeminc/netmain.h"
#include "../systeminc/map.h"
#include "../NewProto/protocol.h"
#include "../systeminc/login.h"
#include "../other/caryIme.h"
#include "../systeminc/field.h"
#include "../wgs/tea.h"
#include "../systeminc/VMProtectSDK.h"
int getfilesize(FILE* fp)
{
	if( fp == NULL) return 0;
	int size;
	fseek(fp,0,SEEK_END);
	size = ftell(fp);
	fseek(fp,0,SEEK_SET);
	return size;
}
#ifdef _NEWSHOP_

void 商城结算(short x,short y,UCHAR 层次);
void 清除商城动作();
void 购物车商品删除(short 索引);

extern void getStrSplit( char *, char *, int, int, int );
void StockFontBufferSplit(int x, int y, char unk1, int color, char* data, int unk2,int strLen){

	char token[310]={0};
	getStrSplit(token,(char *)data,0x64,3,strLen);
	char * b = token;
	int c = 20;
	int d = 0;
	do{
		if(strlen(b)!=1) StockFontBuffer(x,y+c*d,unk1,color,b,unk2);
		++d;
		b+=100;
	}while(d < 3);
}

typedef int                 BOOL;
extern int indexWN;
extern int idWN;
extern int cloasewindows;
typedef struct {
	char 商品名[32];
	unsigned int 商品形像;
	unsigned int 详细商品形像;
	unsigned int 商品价格;
	char 商品说明[500];
	short 序号;

}商品数据结构;


商城文件_ 商城文件[5];

typedef struct {
  short 当前;
  short 终点;
} 滚动条结构;

typedef struct {
	BOOL 使用;
	unsigned int 数量;
	商品数据结构 * 商品;
}购物车商品结构;

typedef struct {
  购物车商品结构 购物栏[15];
  short 商品总数;
  short 商品类型个数;
  short 当前页数;
  short 总页数;
  unsigned int 总价格;
} 购物车结构;

typedef struct {
  滚动条结构 滚动条;
  购物车结构 购物车;
  short 道具空;
  short 窗口ID;
  short 提示类型;
  short 商品数量;
  BOOL 结算窗口;
  unsigned int 玩家彩币;
  ACTION * 宠物动作结构;
  ACTION * 窗口动作结构;
  short 宽;
  short 高;
  short X;
  short Y;
  short 宠物位置;
  BOOL 宠物购物栏状态;
} 商城结构;



商品数据结构 商品数据[200];
商城结构 商城数据;

short 商城道具坐标[][2] = {
							{90,100},
							{245,100},
							{90,193},
							{245,193},
							{90,282},
							{242,282},
							{90,369},
							{242,369}
						  };

short 道具内容坐标[][2]={
							{0,5},
							{1,9},
							{2,11},
							{3,14},
							{4,17},
							{5,19}
						 };

unsigned short 窗口显示[][4] ={
								{40041,40046,40066,35},
								{40042,40047,40067,106},
								{40043,40048,40068,176},
								{40044,40049,40069,246},
								{40045,40050,40070,316},
							   }; 

void 在线商城数据初始化()
{
	memset(&商品数据,0,sizeof(商品数据结构)*200);
	memset(&商城数据,0,sizeof(商城结构));
}

int 字符串切割( char *arr[], char *str, const char *del)//字符分割函数的简单定义搜索和实现
{
	int num = 0;
	char *s =NULL;
	char *p =NULL;
	s=strtok_s(str,del,&p); 
	while(s != NULL) {
		arr[num] = s;
		s = strtok_s(NULL,del,&p);
		num++;
	}
	num--;
	return num;
}


void 在线商城窗口初始化(char * 内容)
{
	if(商城数据.窗口动作结构) DeathAction(商城数据.窗口动作结构);
	商城数据.窗口动作结构=0;
	if(商城数据.宠物动作结构) DeathAction(商城数据.宠物动作结构);
	商城数据.宠物动作结构=0;
	商城数据.宠物位置=-1;
	在线商城数据初始化();
	商城数据.道具空 = getIntegerToken(内容,'|',1);
	商城数据.玩家彩币 = getIntegerToken(内容,'|',2);
	商城数据.窗口ID = getIntegerToken(内容,'|',3);
	商城数据.滚动条.当前=1;
	if(商城文件[商城数据.窗口ID-1].商城数据!=NULL){
		int strlena=strlen(商城文件[商城数据.窗口ID-1].商城数据);
		char *临时商城内容 = new char [strlena+1];
		memset(临时商城内容,0,strlena+1);
		memcpy(临时商城内容,商城文件[商城数据.窗口ID-1].商城数据,strlena);
		char *临时全部道具数据[200] ={0};
		char *临时单个道具数据[5]={0};
		商城数据.商品数量 = 字符串切割(临时全部道具数据,临时商城内容,"#");
		int i=0;
		for(;i<=商城数据.商品数量;i++){
			字符串切割(临时单个道具数据,临时全部道具数据[i],"|");
			sprintf_s(商品数据[i].商品名,"%s",临时单个道具数据[0]);
			商品数据[i].商品形像 = atoi( 临时单个道具数据[1]);
			商品数据[i].详细商品形像 = atoi( 临时单个道具数据[2]);
			商品数据[i].商品价格 =  atoi( 临时单个道具数据[3]);
			sprintf_s(商品数据[i].商品说明,"%s",临时单个道具数据[4]);
			商品数据[i].商品名[strlen(商品数据[i].商品名)]=0;
			商品数据[i].商品说明[strlen(商品数据[i].商品说明)]=0;
			商品数据[i].序号=i;
		}
		商城数据.商品数量++;
		if(商城数据.商品数量 > 8)
			商城数据.滚动条.终点= 商城数据.商品数量%8 ? 商城数据.商品数量/8+1 : 商城数据.商品数量/8;
		else 商城数据.滚动条.终点= 1;
		商城数据.宠物位置=-1;
		商城数据.宠物购物栏状态=FALSE;
		delete 临时商城内容;
	}
	商城数据.宽=628;
	商城数据.高=386;
	商城数据.X=(800-商城数据.宽)/2;
	商城数据.Y=(600-商城数据.高)/2-40;
}


ACTION* 创建商城窗口()
{
	
	if(商城数据.窗口动作结构) DeathAction(商城数据.窗口动作结构);
	商城数据.窗口动作结构 = MakeWindowDisp(商城数据.X,商城数据.Y,0,0,窗口显示[商城数据.窗口ID-1][0],0,FALSE);
	play_se(202,320,240);
	return 商城数据.窗口动作结构;
}



ACTION* 商城数据显示()
{
	if(商城数据.窗口ID!=5){
		if(商城数据.宠物动作结构){
			DeathAction(商城数据.宠物动作结构);
			商城数据.宠物动作结构=0;
			商城数据.宠物位置=-1;
		}
	}

	int 按钮ID;
	StockDispBuffer(商城数据.X,商城数据.Y+28,104,窗口显示[商城数据.窗口ID-1][0],1);
	//类型按钮
	int i=0;
	for(;i<5;i++){
		if(i!=(商城数据.窗口ID-1)){
			if(MakeHitBox(商城数据.X+1,商城数据.Y+窗口显示[i][3],商城数据.X+29,商城数据.Y+窗口显示[i][3]+69,-1)==1){
				if(!商城数据.结算窗口){
					StockDispBuffer(商城数据.X+1,商城数据.Y+窗口显示[i][3],106,窗口显示[i][2],1);
					if( (mouse.onceState & MOUSE_LEFT_CRICK)){
						char 临时内容[10]={0};
						sprintf_s(临时内容,"%d",i+1);
						lssproto_WN_send(sockfd,nowGx,nowGy,indexWN,idWN,0,临时内容);
						windowTypeWN = -1;
						wnCloseFlag = 1;
					}else StockDispBuffer(商城数据.X+1,商城数据.Y+窗口显示[i][3],106,窗口显示[i][1],1);
				}
			}else StockDispBuffer(商城数据.X+1,商城数据.Y+窗口显示[i][3],106,窗口显示[i][1],1);
		}
	}


	//关闭按钮
	if(MakeHitBox(商城数据.X+595,商城数据.Y+27,商城数据.X+626,商城数据.Y+53,-1)==1){
		StockDispBuffer(商城数据.X+594,商城数据.Y+27,105,40054,1);
		if( (mouse.onceState & MOUSE_LEFT_CRICK)){
			cloasewindows = 1;
		}
	}else StockDispBuffer(商城数据.X+595,商城数据.Y+27,105,40061,1);
	if(商城数据.结算窗口) 商城结算(商城数据.X+130,商城数据.Y+140,110);
	
	//结算按钮

	if(MakeHitBox(商城数据.X+534,商城数据.Y+372,商城数据.X+591,商城数据.Y+391,-1)==1){
		if(!商城数据.结算窗口){
			StockDispBuffer(商城数据.X+534,商城数据.Y+372,105,40072,1);
			if( (mouse.onceState & MOUSE_LEFT_CRICK)){
				if(商城数据.购物车.商品总数){
					商城数据.提示类型=1;
					商城数据.结算窗口=TRUE;
				}else{
					商城数据.提示类型=2;
					商城数据.结算窗口=TRUE;
				}
			}
		}else StockDispBuffer(商城数据.X+534,商城数据.Y+372,105,40058,1);
	}else StockDispBuffer(商城数据.X+534,商城数据.Y+372,105,40058,1);

	//清空功能
	if(MakeHitBox(商城数据.X+435,商城数据.Y+372,商城数据.X+435+58,商城数据.Y+372+19,-1)==1){
		if(!商城数据.结算窗口){
			StockDispBuffer(商城数据.X+435,商城数据.Y+372,105,40059,1);
			if( (mouse.onceState & MOUSE_LEFT_CRICK)){
				商城数据.购物车.当前页数=0;
				商城数据.购物车.总页数=0;
				商城数据.购物车.商品类型个数=0;
				商城数据.购物车.商品总数=0;
				商城数据.购物车.总价格=0;
				商城数据.购物车.总页数=0;
				memset(商城数据.购物车.购物栏,0,sizeof(购物车商品结构)*15);
			}
		}else StockDispBuffer(商城数据.X+435,商城数据.Y+372,105,40073,1);
	}else StockDispBuffer(商城数据.X+435,商城数据.Y+372,105,40073,1);

	
	//商品上页
	if(MakeHitBox(商城数据.X+379,商城数据.Y+39,商城数据.X+405,商城数据.Y+66,-1)==1){
		if(!商城数据.结算窗口){
			StockDispBuffer(商城数据.X+379,商城数据.Y+39,105,40055,1);
			if( (mouse.onceState & MOUSE_LEFT_CRICK)){
				if(商城数据.滚动条.当前>1) 商城数据.滚动条.当前-=1;
			}
		}else StockDispBuffer(商城数据.X+379,商城数据.Y+39,105,40062,1);
	}else StockDispBuffer(商城数据.X+379,商城数据.Y+39,105,40062,1);

	//商品下页
	if(MakeHitBox(商城数据.X+379,商城数据.Y+370,商城数据.X+405,商城数据.Y+397,-1)==1){
		if(!商城数据.结算窗口){
			StockDispBuffer(商城数据.X+379,商城数据.Y+370,105,40056,1);
			if( (mouse.onceState & MOUSE_LEFT_CRICK)){
				if(商城数据.滚动条.当前<商城数据.滚动条.终点) 商城数据.滚动条.当前+=1;
			}
		}else StockDispBuffer(商城数据.X+379,商城数据.Y+370,105,40063,1);
	}else StockDispBuffer(商城数据.X+379,商城数据.Y+370,105,40063,1);

	//printf("当前=%d  结束=%d\n",商城数据.滚动条.当前,商城数据.滚动条.终点);
	short 滚动条块位置=0;
	if(商城数据.滚动条.当前==1 || 商城数据.滚动条.当前==0) 滚动条块位置=75;
	else if(商城数据.滚动条.当前==商城数据.滚动条.终点) 滚动条块位置=361;
	else 滚动条块位置=(361-75)/(商城数据.滚动条.终点-1)*(商城数据.滚动条.当前-1)+75;
	StockDispBuffer(商城数据.X+391,商城数据.Y+滚动条块位置,105,26447,1);
	
	//商城数据显示
	
	if(商城数据.商品数量>0){
		short 开始,结束;
		开始 = (商城数据.滚动条.当前-1)*8+1;
		结束 = 开始+7;
		if(结束 >商城数据.商品数量) 结束 = 商城数据.商品数量;
		short 临时位置=0;
		BOOL 宠物判断=FALSE;
		i=开始;
		for(;i<=结束;i++){
			临时位置++;
			按钮ID = StockDispBuffer(商城数据.X+商城道具坐标[临时位置-1][0],商城数据.Y+商城道具坐标[临时位置-1][1],106,商品数据[i-1].商品形像,1);
			if(HitDispNo==按钮ID){
				if(!商城数据.结算窗口){
					if(商城数据.宠物动作结构){
						if(商城数据.宠物位置!=按钮ID){
							DeathAction(商城数据.宠物动作结构);
							商城数据.宠物动作结构=0;
							商城数据.宠物位置=-1;
						}
					}
					显示道具数据(商城数据.X+商城道具坐标[临时位置-1][0],商城数据.Y+商城道具坐标[临时位置-1][1],109,商品数据[i-1].商品说明,商品数据[i-1].详细商品形像,商品数据[i-1].商品名);
					宠物判断=TRUE;
					if(商城数据.宠物动作结构) 商城数据.宠物位置=按钮ID;
				}else{
					if(商城数据.宠物动作结构){
						DeathAction(商城数据.宠物动作结构);
						商城数据.宠物动作结构=0;
						商城数据.宠物位置=-1;
					}
				}
			}
			//购买按钮
			if(MakeHitBox(商城数据.X+商城道具坐标[临时位置-1][0]+40,商城数据.Y+商城道具坐标[临时位置-1][1],商城数据.X+商城道具坐标[临时位置-1][0]+40+59,商城数据.Y+商城道具坐标[临时位置-1][1]+22,-1)==1){
				if(!商城数据.结算窗口){
					StockDispBuffer(商城数据.X+商城道具坐标[临时位置-1][0]+40,商城数据.Y+商城道具坐标[临时位置-1][1],105,40071,1);
					if( (mouse.onceState & MOUSE_LEFT_CRICK)){
						if(商城数据.玩家彩币 < 商城数据.购物车.总价格 + 商品数据[i-1].商品价格){
							StockChatBufferLine("系统：身上的金币不足。",6);
							break;
						}
						if(商城数据.道具空 < 商城数据.购物车.商品总数+1){
							StockChatBufferLine("系统：身上的道具位不足。",6);
							break;
						}
						if(!商城数据.购物车.商品类型个数){
							memset(&商城数据.购物车.购物栏,0,sizeof(购物车商品结构)*15);
							商城数据.购物车.购物栏[0].使用=TRUE;
							商城数据.购物车.购物栏[0].数量=1;
							商城数据.购物车.当前页数=1;
							商城数据.购物车.购物栏[0].商品=&商品数据[i-1];
							商城数据.购物车.商品类型个数++;
							商城数据.购物车.商品总数++;
							商城数据.购物车.总价格+=商城数据.购物车.购物栏[0].商品->商品价格;
						}else{
							BOOL 判断是否已经购买了=FALSE;
							int k=0;
							for(;k<15;k++){
								if(商城数据.购物车.购物栏[k].使用){
									//printf("地址1=%x   地址2=%x\n",商城数据.购物车.购物栏[0].商品,&商品数据[i-1]);
									if(商城数据.购物车.购物栏[k].商品 == &商品数据[i-1]){
										判断是否已经购买了=TRUE;
										商城数据.购物车.购物栏[k].数量++;
										商城数据.购物车.商品总数++;
										商城数据.购物车.总价格+=商城数据.购物车.购物栏[k].商品->商品价格;
										break;
									}
								}
							}
							if(!判断是否已经购买了){
								if(商城数据.购物车.购物栏[0].使用){
									购物车商品结构 临时购物车数据1;
									购物车商品结构 临时购物车数据2;
									临时购物车数据1.商品 = 商城数据.购物车.购物栏[0].商品;
									临时购物车数据1.数量 = 商城数据.购物车.购物栏[0].数量;
									k=1;
									for(;k<15;k++){
										if(商城数据.购物车.购物栏[k].使用){
											临时购物车数据2.商品 = 商城数据.购物车.购物栏[k].商品;
											临时购物车数据2.数量 = 商城数据.购物车.购物栏[k].数量;
											商城数据.购物车.购物栏[k].商品=临时购物车数据1.商品;
											商城数据.购物车.购物栏[k].数量=临时购物车数据1.数量;
											临时购物车数据1.商品=临时购物车数据2.商品;
											临时购物车数据1.数量=临时购物车数据2.数量;
										}else{
											商城数据.购物车.购物栏[k].使用 = TRUE;
											商城数据.购物车.购物栏[k].商品=临时购物车数据1.商品;
											商城数据.购物车.购物栏[k].数量=临时购物车数据1.数量;
											break;
										}
									}
								}
								商城数据.购物车.购物栏[0].商品 = &商品数据[i-1];
								商城数据.购物车.购物栏[0].数量 = 1;
								商城数据.购物车.购物栏[0].使用 = TRUE;
								商城数据.购物车.商品类型个数++;
								商城数据.购物车.商品总数++;
								商城数据.购物车.总价格+=商城数据.购物车.购物栏[0].商品->商品价格;
							}
						}
					//	printf("商城数据.购物车.商品类型个数%3   = %d\n",商城数据.购物车.商品类型个数%3);
						商城数据.购物车.总页数 = 商城数据.购物车.商品类型个数%3 ? 商城数据.购物车.商品类型个数/3+1 : 商城数据.购物车.商品类型个数/3;
						if(商城数据.购物车.总页数*3-2>商城数据.购物车.商品类型个数) 商城数据.购物车.总页数--;
						if(!商城数据.购物车.总页数) 商城数据.购物车.总页数=1;
					}
				}else StockDispBuffer(商城数据.X+商城道具坐标[临时位置-1][0]+40,商城数据.Y+商城道具坐标[临时位置-1][1],105,40057,1);
			}else StockDispBuffer(商城数据.X+商城道具坐标[临时位置-1][0]+40,商城数据.Y+商城道具坐标[临时位置-1][1],105,40057,1);
			char 临时内容[128]={0};
			sprintf_s(临时内容,"%-5d金币",商品数据[i-1].商品价格);
			StockFontBuffer(商城数据.X+商城道具坐标[临时位置-1][0]+15,商城数据.Y+商城道具坐标[临时位置-1][1]-45,1,0,商品数据[i-1].商品名,0);
			StockFontBuffer(商城数据.X+商城道具坐标[临时位置-1][0]+38,商城数据.Y+商城道具坐标[临时位置-1][1]-20,1,4,临时内容,0);
		}
		if(!商城数据.宠物购物栏状态 && !宠物判断){
			if(商城数据.宠物动作结构){
				DeathAction(商城数据.宠物动作结构);
				商城数据.宠物动作结构=0;
				商城数据.宠物位置=-1;
			}
		}
	}
	//购物车处理
	if(商城数据.购物车.商品总数>0){
		short 开始,结束;
		开始 = (商城数据.购物车.当前页数-1)*3+1;
		结束 = 商城数据.购物车.当前页数*3;
		if(结束>商城数据.购物车.商品类型个数) 结束 = 商城数据.购物车.商品类型个数;
		short 临时位置 =0;
		BOOL 购物判断 = FALSE;
		int i=开始;
		for(;i<=结束;i++){
			临时位置++;
			
			StockDispBuffer(商城数据.X+412,商城数据.Y+67+((临时位置-1)*80),105,40053,1);
			//购物车左页
			if(MakeHitBox(商城数据.X+505,商城数据.Y+121+((临时位置-1)*80),商城数据.X+505+31,商城数据.Y+121+((临时位置-1)*80)+16,-1)==1){
				if(!商城数据.结算窗口){
					StockDispBuffer(商城数据.X+505,商城数据.Y+121+((临时位置-1)*80),106,40064,1);
					if( (mouse.onceState & MOUSE_LEFT_CRICK)){
						商城数据.购物车.总价格-= 商城数据.购物车.购物栏[i-1].商品->商品价格;
						商城数据.购物车.商品总数-=1;
						if(商城数据.购物车.购物栏[i-1].数量==1){
							购物车商品删除(i-1);
							商城数据.购物车.商品类型个数--;
							商城数据.购物车.总页数  = 商城数据.购物车.商品类型个数%3 ? 商城数据.购物车.商品类型个数/3+1 : 商城数据.购物车.商品类型个数/3;
							if(商城数据.购物车.总页数*3>商城数据.购物车.商品类型个数) 商城数据.购物车.总页数--;
							if(!商城数据.购物车.总页数&&商城数据.购物车.商品类型个数) 商城数据.购物车.总页数=1;
							if(商城数据.购物车.当前页数>商城数据.购物车.总页数) 商城数据.购物车.当前页数 = 商城数据.购物车.总页数;
							if(!商城数据.购物车.商品类型个数) 
							{
								商城数据.购物车.当前页数=0;
								商城数据.购物车.总页数=0;
							}
							break;
						}else 商城数据.购物车.购物栏[i-1].数量-=1;
					}
				}else StockDispBuffer(商城数据.X+505,商城数据.Y+121+((临时位置-1)*80),106,40051,1);
			}else StockDispBuffer(商城数据.X+505,商城数据.Y+121+((临时位置-1)*80),106,40051,1);



			if(MakeHitBox(商城数据.X+571,商城数据.Y+121+((临时位置-1)*80),商城数据.X+571+31,商城数据.Y+121+((临时位置-1)*80)+16,-1)==1){
				if(!商城数据.结算窗口){
					StockDispBuffer(商城数据.X+571,商城数据.Y+121+((临时位置-1)*80),106,40065,1);
					if( (mouse.onceState & MOUSE_LEFT_CRICK)){
						if(商城数据.玩家彩币 < 商城数据.购物车.总价格 + 商城数据.购物车.购物栏[i-1].商品->商品价格){
							StockChatBufferLine("系统：身上的金币不足。",6);
							break;
						}
						if(商城数据.道具空 < 商城数据.购物车.商品总数+1){
							StockChatBufferLine("系统：身上的道具位不足。",6);
							break;
						}
						商城数据.购物车.商品总数++;
						商城数据.购物车.总价格+=商城数据.购物车.购物栏[i-1].商品->商品价格;
						商城数据.购物车.购物栏[i-1].数量++;
					}
				}else StockDispBuffer(商城数据.X+571,商城数据.Y+121+((临时位置-1)*80),106,40052,1);
			}else StockDispBuffer(商城数据.X+571,商城数据.Y+121+((临时位置-1)*80),106,40052,1);
			按钮ID = StockDispBuffer(商城数据.X+455,商城数据.Y+105+((临时位置-1)*80),106,商城数据.购物车.购物栏[i-1].商品->商品形像,1);

			if(HitDispNo==按钮ID){
				if(!商城数据.结算窗口){
					if(商城数据.宠物动作结构){
						if(商城数据.宠物位置!=按钮ID){
							DeathAction(商城数据.宠物动作结构);
							商城数据.宠物动作结构=0;
							商城数据.宠物位置=-1;
						}
					}
					显示道具数据(商城数据.X+455,商城数据.Y+105+((临时位置-1)*80),109,商城数据.购物车.购物栏[i-1].商品->商品说明,商城数据.购物车.购物栏[i-1].商品->详细商品形像,商城数据.购物车.购物栏[i-1].商品->商品名);
					购物判断=TRUE;
					if(商城数据.宠物动作结构) 商城数据.宠物位置=按钮ID;
				}else if(商城数据.宠物动作结构){
					DeathAction(商城数据.宠物动作结构);
					商城数据.宠物动作结构=0;
					商城数据.宠物位置=-1;
				}
			}
			char 临时内容[128]={0};
			sprintf_s(临时内容,"%-5d金币",商城数据.购物车.购物栏[i-1].商品->商品价格);
			StockFontBuffer(商城数据.X+500,商城数据.Y+80+((临时位置-1)*80),1,0,商城数据.购物车.购物栏[i-1].商品->商品名,0);
			StockFontBuffer(商城数据.X+535,商城数据.Y+100+((临时位置-1)*80),1,4,临时内容,0);
			sprintf_s(临时内容,"%d",商城数据.购物车.购物栏[i-1].数量);
			临时内容[strlen(临时内容)]=0;
			StockFontBuffer(商城数据.X+549,商城数据.Y+121+((临时位置-1)*80),1,4,临时内容,0);
		}
		if(购物判断) 商城数据.宠物购物栏状态=TRUE;
		else 商城数据.宠物购物栏状态 = FALSE;
//购物车按钮左页
		if(MakeHitBox(商城数据.X+420,商城数据.Y+312,商城数据.X+420+31,商城数据.Y+312+16,-1)==1){
			if(!商城数据.结算窗口){
				StockDispBuffer(商城数据.X+420,商城数据.Y+312,105,40064,1);
				if( (mouse.onceState & MOUSE_LEFT_CRICK)){
					if(商城数据.购物车.当前页数!=1) 商城数据.购物车.当前页数-=1;
				}
			}else StockDispBuffer(商城数据.X+420,商城数据.Y+312,105,40051,1);
		}else StockDispBuffer(商城数据.X+420,商城数据.Y+312,105,40051,1);
//购物车按钮右页
		if(MakeHitBox(商城数据.X+575,商城数据.Y+312,商城数据.X+575+31,商城数据.Y+312+16,-1)==1){
			if(!商城数据.结算窗口){
				StockDispBuffer(商城数据.X+575,商城数据.Y+312,105,40065,1);
				if( (mouse.onceState & MOUSE_LEFT_CRICK)){
					if(商城数据.购物车.当前页数!=商城数据.购物车.总页数) 商城数据.购物车.当前页数+=1;
				}
			}else StockDispBuffer(商城数据.X+575,商城数据.Y+312,105,40052,1);
		}else StockDispBuffer(商城数据.X+575,商城数据.Y+312,105,40052,1);
	}
	char 临时内容[20]={0};
	sprintf_s(临时内容,"%-3d/ %-3d",商城数据.购物车.当前页数,商城数据.购物车.总页数);
	StockFontBuffer(商城数据.X+490,商城数据.Y+314,1,0,临时内容,0);
	memset(临时内容,0,20);
	sprintf_s(临时内容,"%d",商城数据.玩家彩币);
	StockFontBuffer(商城数据.X+462,商城数据.Y+342,1,0,临时内容,0);
	memset(临时内容,0,20);
	sprintf_s(临时内容,"%d",商城数据.购物车.总价格);
	StockFontBuffer(商城数据.X+573,商城数据.Y+342,1,0,临时内容,0);
	
	if( CheckMenuFlag()
		|| ((joy_trg[ 0 ] & JOY_ESC) && GetImeString() == NULL)
		|| actBtn == 1
		|| menuBtn == 1
		|| disconnectServerFlag == TRUE
		|| wnCloseFlag == 1 
		|| cloasewindows == 1)
	{
		wnCloseFlag = 0;
		cloasewindows = 0;
		清除商城动作();
	}
	return 商城数据.窗口动作结构;
}



void 清除商城动作()
{
	if(商城数据.窗口动作结构) DeathAction(商城数据.窗口动作结构);
	商城数据.窗口动作结构=0;
	if(商城数据.宠物动作结构) DeathAction(商城数据.宠物动作结构);
	商城数据.宠物动作结构=0;
	商城数据.宠物位置=-1;
	wnCloseFlag=0;
	windowTypeWN = -1;
	wnCloseFlag = 1;
}

void 商城结算(short x,short y,UCHAR 层次)
{
	if(商城数据.提示类型==1){
		StockDispBuffer(x,y,层次,40088,1);
		StockFontBuffer(x+110,y+50,2,0,"您确定需要购买这些商品吗？",0);
		 if(MakeHitBox(x+60,y+100,x+60+105,y+100+18,-1)==1){
			StockDispBuffer(x+60,y+100,层次+1,40084,1);
			if( (mouse.onceState & MOUSE_LEFT_CRICK)){
				char 内容[256]={0};
				int i=0;
				for(;i<15;i++){
					if(商城数据.购物车.购物栏[i].使用){
						char 临时[15]={0};
						sprintf_s(临时,"%d|%d#",商城数据.购物车.购物栏[i].商品->序号+1,商城数据.购物车.购物栏[i].数量);
						strcat_s(内容,临时);
					}
				}
				lssproto_WN_send(sockfd,nowGx,nowGy,indexWN,idWN,商城数据.窗口ID,内容);
				windowTypeWN = -1;
				wnCloseFlag = 1;
			}
		 }else StockDispBuffer(x+60,y+100,层次+1,40086,1);
		 if(MakeHitBox(x+220,y+100,x+220+105,y+100+18,-1)==1){
			StockDispBuffer(x+220,y+100,层次+1,40085,1);
			if( (mouse.onceState & MOUSE_LEFT_CRICK)) 商城数据.结算窗口=FALSE;
		 }else StockDispBuffer(x+220,y+100,层次+1,40087,1);
	}else{
		StockDispBuffer(x,y,层次,40088,1);
		StockFontBuffer(x+130,y+50,2,0,"您的购物车没有商品！",0);
		if(MakeHitBox(x+140,y+100,x+140+105,y+100+18,-1)==1){
			StockDispBuffer(x+140,y+100,层次+1,40090,1);
			if( (mouse.onceState & MOUSE_LEFT_CRICK)) 商城数据.结算窗口=FALSE;
		}else StockDispBuffer(x+140,y+100,层次+1,40089,1);
	}
}

void 显示道具数据(short x,short y,UCHAR 层次,char* 内容,unsigned int 形像,char*名字 )
{
	char 临时内容[500]={0};
	sprintf_s(临时内容,"%s",内容);
	char *道具数据[30]={0};
	int 背景张数 = 0;
	if(商城数据.窗口ID!=5){
		背景张数 = 字符串切割(道具数据,临时内容,"\n");
		if(道具数据[背景张数-1][0]==0) 背景张数--;
	}
	int 背景张数1=背景张数;
	int 图片高,图片x,图片y,i=0;
	if(商城数据.窗口ID!=5){
		for(;i<6;i++){
			if(i==5) {
				背景张数 = 道具内容坐标[i][0];
				break;
			}
			if(道具内容坐标[i][1]>=背景张数){
				背景张数 = 道具内容坐标[i][0];
				break;
			}
		}
		图片高 = 背景张数*48+144;
		if((x-190) >(628+商城数据.X-x-65)) 图片x=x-190;
		else  图片x=x+35;
		图片y=y-(图片高/2);
		BOOL 判断=FALSE;
		while(true){
			if(商城数据.Y > 图片y-20){
				图片y +=10;
				判断=TRUE;
			}	
			if((商城数据.Y+386+30) < (图片y+图片高)){
				图片y -=10;
				判断=TRUE;
			}
			if(判断) 判断=FALSE;
			else break;
		}

		StockDispBuffer(图片x+80,图片y+50,层次,40171,1);
		int 高=48;
		if(背景张数 >=1){
			for(i=1;i<=背景张数;i++) StockDispBuffer(图片x+80,图片y+50+高*(i-1)+83,层次,40172,1);
		}
		StockDispBuffer(图片x+80,图片y+50+高*背景张数+83,层次,40173,1);
		int 内容x,内容y;
		内容x=图片x+6-10;
		内容y=图片y-25+50;

		for(i=1;i<=背景张数1+1;i++) StockFontBufferSplit(内容x+15,内容y+((i-1)*20),FONT_PRIO_AFRONT,0,道具数据[i-1],0,20);
	}else{
		图片高 = 1*48+144;
		if((x-190) >(628+商城数据.X-x-65)) 图片x=x-190;
		else  图片x=x+35;
		图片y=y-(图片高/2);
		BOOL 判断=FALSE;
		while(true){
			if(商城数据.Y > 图片y-20){
				图片y +=10;
				判断=TRUE;
			}	
			if((商城数据.Y+386+30) < (图片y+图片高)){
				图片y -=10;
				判断=TRUE;
			}
			if(判断) 判断=FALSE;
			else break;
		}
		StockDispBuffer(图片x+80,图片y+50,层次,40171,1);
		int 高=48;
		StockDispBuffer(图片x+80,图片y+50+83,层次,40173,1);
		if(!商城数据.宠物动作结构) 商城数据.宠物动作结构 = MakeAnimDisp(图片x+76,图片y+80,形像,0);
		StockFontBufferSplit(图片x+15,图片y+100,2,0,临时内容,0,20);
	}
}

void 购物车商品删除(short 索引)
{

	商城数据.购物车.购物栏[索引].商品=0;
	商城数据.购物车.购物栏[索引].数量=0;
	商城数据.购物车.购物栏[索引].使用=FALSE;
	int i = 索引+1;
	if(i>14) return;
	for(i;i<15;i++){
		if(!商城数据.购物车.购物栏[i].使用) break;
		商城数据.购物车.购物栏[索引].商品 = 商城数据.购物车.购物栏[i].商品;
		商城数据.购物车.购物栏[索引].数量 = 商城数据.购物车.购物栏[i].数量;
		商城数据.购物车.购物栏[索引].使用=TRUE;
		商城数据.购物车.购物栏[i].商品=0;
		商城数据.购物车.购物栏[i].数量=0;
		商城数据.购物车.购物栏[i].使用=FALSE;
		索引 = i;
	}
}

void 商城文件读取(char * 路径,商城文件_ *商城)
{
	FILE *fp;
	fopen_s(&fp,路径,"rb");	
	if( fp == NULL )
	{
		商城->MD5码[0]=NULL;
		商城->商城数据=NULL;
		return;
	}
	int size = getfilesize(fp);
	char *临时 = (char*)malloc(size);
	fread(临时,1,size,fp);
	fclose(fp);
	商城->商城数据 = (char*)malloc(size-34+1);
	memset(商城->商城数据,0,size-34+1);
	memset(商城->MD5码,0,64);
	memcpy_s(商城->MD5码,34,临时,34);
	memcpy_s(商城->商城数据,size-34,临时+34,size-34);
	TEA解密((long*)商城->商城数据,((size-34)/4),(long*)_KEY_);
	free(临时);
}


void 商城文件保存(char * 路径,商城文件_ *商城)
{
	FILE *fp;
	fopen_s(&fp,路径,"wb");
	int length=strlen(商城->商城数据);
	int length1 = length%4?length+(4-length%4):length;
	char *临时 = (char*)malloc(34+length1);
	memset(临时,0,34+length1);
	memcpy_s(临时,34,商城->MD5码,34);
	memcpy_s((临时+34),length,商城->商城数据,length);
#ifdef _VMP_
	TEA加密((long *)(临时+34),(long)(length1/4),(long*)VMProtectDecryptStringA(_KEY_));
#else
	TEA加密((long *)(临时+34),(long)(length1/4),(long*)_KEY_);
#endif
    fwrite(临时, length1+34, 1, fp);
	free(临时);
    fclose(fp);
}


void 商城初始化()
{
	商城文件读取("./data/shop1.bin",&商城文件[0]);
	商城文件读取("./data/shop2.bin",&商城文件[1]);
	商城文件读取("./data/shop3.bin",&商城文件[2]);
	商城文件读取("./data/shop4.bin",&商城文件[3]);
	商城文件读取("./data/shop5.bin",&商城文件[4]);
}
#endif














