#include "../systeminc/version.h"
#include "../systeminc/system.h"
#include "../systeminc/font.h"
#include "../systeminc/action.h"
#include "systeminc\sprdisp.h"
#include "systeminc\menu.h"
#include "systeminc\mouse.h"
#include "newproto\autil.h"
#include "newproto\protocol.h"
#ifdef _CHARTITLE_STR_
extern unsigned int sockfd;
typedef struct{
	BOOL 窗口显示;
	BOOL 确定窗口显示;
	int 当前页数;
	int 确定图档索引;
	char 介绍[100][32];
	int 称号索引[100];
	TITLE_STR title;//当前称号
	TITLE_STR titledata[100];//称号数据
	BOOL 关闭窗口;
}称号数据结构;
extern int play_se(int tone, int x, int y);
称号数据结构 称号;

void 打开称号窗口初始化()
{
	if(称号.窗口显示){
		称号.窗口显示=FALSE;
		称号.确定窗口显示=FALSE;
	}else{
		称号.当前页数=0;
		称号.窗口显示=TRUE;
		称号.确定窗口显示=FALSE;
	}
}

extern void PutTitleText(int x,int y,char fontPrio,TITLE_STR str,BOOL hitFlag);

BOOL 获取称号取消窗口()
{
	return 称号.关闭窗口;
}

void 设置称号取消窗口()
{
	if(称号.关闭窗口) 称号.关闭窗口=FALSE;
	else 称号.关闭窗口=TRUE;
}

BOOL 获取当前称号是否存在()
{
	return 称号.title.flg;
}

void 称号展示()
{
	if(称号.title.flg){
		PutTitleText(78-称号.title.len/2,49,FONT_PRIO_FRONT,称号.title,0);
	}
	int bnt;
	bnt = StockFontBuffer(18,49,1,FONT_PAL_GREEN,"                             ",2);
	if(mouse.onceState & MOUSE_LEFT_CRICK>0){
		if(HitFontNo == bnt){
			if(称号.关闭窗口) 称号.关闭窗口=FALSE;
			else 称号.关闭窗口=TRUE;
			play_se(203, 320, 240);
		}
	}
}

BOOL 人物称号处理(ACTION * pct)
{
	int x,y;
	x = pct->x;
	y = pct->y + 133;
	int 按钮左=-1;
	int 按钮右=-1;
	int 按钮关闭=-1;
	int 按钮ID;
	按钮左 = StockDispBuffer( x -55, y + 7, DISP_PRIO_IME3, 55250, 2 );
	按钮右 = StockDispBuffer( x -20, y + 7, DISP_PRIO_IME3, 55251, 2 );
	按钮关闭 = StockDispBuffer( x+40, y + 7, DISP_PRIO_IME3, 55252, 2 );
	if( mouse.onceState & MOUSE_LEFT_CRICK ){
		if(!称号.确定窗口显示){
			if(按钮左 == HitDispNo){
				if(称号.当前页数){
					称号.当前页数--;
				}
			}
			if(按钮右 == HitDispNo){
				if(称号.当前页数!=19 && 称号.titledata[(称号.当前页数+1)*5].flg)
				{
					称号.当前页数++;
				}
			}
			if(按钮关闭 == HitDispNo){
				DeathAction(pct);
				称号.窗口显示=FALSE;
				称号.确定窗口显示=FALSE;
				return TRUE;
			}
		}
	}

	int i=0;
	int 称号图档索引;
	for(;i<5;i++){
		称号图档索引 = 称号.当前页数*5+i;
		if(称号.titledata[称号图档索引].flg)
		{
			PutTitleText(380-称号.titledata[称号图档索引].len/2,43+i*0x20,FONT_PRIO_FRONT,称号.titledata[称号图档索引],0);
			char 称号序号[128];
			sprintf_s(称号序号,"%03d",称号图档索引+1);
			StockFontBufferExt(0x130,0x2D+i*0x20,1,FONT_PAL_GREEN,称号序号,0,19);
			if(!称号.确定窗口显示){
				if(MakeHitBox(0x124,0x26+i*0x20,0x1B8,0x44+i*0x20,0x6D)==1){
					StockFontBuffer(0x123,0xD1,2,0,称号.介绍[称号图档索引],0);
					if(mouse.onceState & MOUSE_LEFT_CRICK>0){
						称号.确定图档索引=称号.称号索引[ 称号图档索引];
						称号.确定窗口显示=TRUE;
					}
				}
			}
		}else break;
	}
	if(称号.确定窗口显示){
		StockFontBuffer(0x123,0xD1,2,0,称号.介绍[称号.确定图档索引],0);
		StockFontBuffer(0x130,0x118,2,0,"确定使用该称号吗？",0);
		StockDispBuffer(0x16D,0x130,0x6C,55253,1);//确定窗口底图
		按钮ID = StockDispBuffer(0x194,0x148,109,55252,2);//关闭
		if(mouse.onceState & MOUSE_LEFT_CRICK>0){
			if(按钮ID == HitDispNo){
				称号.确定窗口显示=FALSE;
				称号.确定图档索引=0;
			}
		}
		按钮ID = StockDispBuffer(0x148,0x148,109,55254,2);//确定
		if(mouse.onceState & MOUSE_LEFT_CRICK>0){
			if(按钮ID == HitDispNo){
				int checksum=0;
				char buf[1024*4];
				memset(buf,0,1024*4);
				checksum += util_mkint(buf, 称号.确定图档索引);
				util_mkint(buf, checksum);
				util_SendMesg(sockfd, LSSPROTO_CHARTITLE_SEND, buf);
				称号.确定窗口显示=FALSE;
				称号.确定图档索引=0;
			}
		}
	}
	return FALSE;
}
extern void getCharTitleSplit( char *str,TITLE_STR* title);
void 人物称号数据更新(char *数据)
{
	char 基础内容[126],图档内容[1024],图档索引[1024],内容介绍[4000],临时[126];
	memset(基础内容,0,126);
	memset(图档内容,0,1024);
	memset(图档索引,0,1024);
	memset(内容介绍,0,4000);
	getStringFromIndexWithDelim_body((char *) 数据,(char *)"#@",1,基础内容,126);
	getStringFromIndexWithDelim_body((char *) 基础内容,(char *)"|",1,临时,126);
	int titleindex = atoi(临时);
	extern char* FreeGetTitleStr(int id);
	if(titleindex>0) getCharTitleSplit(FreeGetTitleStr(titleindex),&称号.title);
	else memset(&称号.title,0,sizeof(TITLE_STR));
	getStringFromIndexWithDelim_body((char *) 基础内容,(char *)"|",2,临时,126);
	int 数量 = atoi(临时);
	if(数量!=0){
		memset(&称号.titledata,0,sizeof(称号.titledata[0])*100);
		memset(&称号.称号索引,0,sizeof(int)*100);
		memset(&称号.介绍,0,32*100);
		getStringFromIndexWithDelim_body((char *) 数据,(char *)"#@",2,图档内容,1024);
		getStringFromIndexWithDelim_body((char *) 数据,(char *)"#@",3,内容介绍,4000);
		getStringFromIndexWithDelim_body((char *) 数据,(char *)"#@",4,图档索引,1024);
		int i=0;
		extern char* FreeGetTitleStr(int id);
		for(i;i<数量;i++){
			getStringFromIndexWithDelim_body((char *)图档内容,(char *)"|",i+1,临时,126);
			titleindex = atoi(临时);
			getCharTitleSplit(FreeGetTitleStr(titleindex),&称号.titledata[i]);
			getStringFromIndexWithDelim_body((char *)图档索引,(char *)"|",i+1,临时,126);
			称号.称号索引[i]=atoi(临时);
			getStringFromIndexWithDelim_body((char *)内容介绍,(char *)"|",i+1,临时,126);
			sprintf_s(称号.介绍[i],32,"%s",临时);
		}
	}
}

void 初始化称号结构()
{
	memset(&称号,0,sizeof(称号数据结构));
}
#endif



#ifdef _CHARTITLE_
extern unsigned int sockfd;
typedef struct{
	int 称号窗口结构;
	ACTION *称号结构[5];
	ACTION * 当前称号结构;
	int 当前称号图档;
	BOOL 窗口显示;
	int 图档[100];
	int 称号索引[100];
	char 介绍[100][32];
	int 当前页数;
	BOOL 确定窗口显示;
	int 确定图档索引;
}称号数据结构;

称号数据结构 称号;

void 结束称号展示动画()
{
	int i=0;
	for(i;i<5;i++){
		if(称号.称号结构[i]){
			if(称号.称号结构[i]) DeathAction(称号.称号结构[i]);
			称号.称号结构[i]=0;
		}					
	}
}

void 打开称号窗口初始化()
{
	if(称号.窗口显示){
		结束称号展示动画();
		称号.窗口显示=FALSE;
		称号.确定窗口显示=FALSE;
	}else{
		称号.当前页数=0;
		称号.窗口显示=TRUE;
		称号.确定窗口显示=FALSE;
	}
}


void 称号展示()
{

	if(称号.当前称号图档)
		if(!称号.当前称号结构){
			if(称号.当前称号图档 < 100000){
				称号.当前称号结构 = 0;
				StockDispBuffer(0x7F,0x40,109,称号.当前称号图档,0);
			}else{
				称号.当前称号结构 = MakeAnimDisp(0x7F,0x59,称号.当前称号图档,0);
			}
		}else if(*(int *)(称号.当前称号结构+0x140)!= 称号.当前称号图档){
			DeathAction(称号.当前称号结构);
			if(称号.当前称号图档 < 100000){
				称号.当前称号结构 = 0;
				StockDispBuffer(0x7F,0x40,109,称号.当前称号图档,0);
			}else{
				称号.当前称号结构 = MakeAnimDisp(0x7F,0x59,称号.当前称号图档,0);
			}
		}
}

BOOL 人物称号处理(ACTION * pct)
{
	int x,y;
	x = pct->x;
	y = pct->y + 133;
	int 按钮左=-1;
	int 按钮右=-1;
	int 按钮关闭=-1;
	int 按钮ID;
	按钮左 = StockDispBuffer( x -55, y + 7, DISP_PRIO_IME3, 55250, 2 );
	按钮右 = StockDispBuffer( x -20, y + 7, DISP_PRIO_IME3, 55251, 2 );
	按钮关闭 = StockDispBuffer( x+40, y + 7, DISP_PRIO_IME3, 55252, 2 );
	if( mouse.onceState & MOUSE_LEFT_CRICK ){
		if(!称号.确定窗口显示){
			if(按钮左 == HitDispNo){
				if(称号.当前页数){
					称号.当前页数--;
					结束称号展示动画();
				}
			}
			if(按钮右 == HitDispNo){
				if(称号.当前页数!=19 && 称号.图档[(称号.当前页数+1)*5]){
					称号.当前页数++;
					结束称号展示动画();
				}
			}
			if(按钮关闭 == HitDispNo){
				DeathAction(pct);
				结束称号展示动画();
				称号.窗口显示=FALSE;
				称号.确定窗口显示=FALSE;
				return TRUE;
			}
		}
	}

	int i=0;
	int 称号图档索引;
	for(;i<5;i++){
		称号图档索引 = 称号.当前页数*5+i;
		if(称号.图档[称号图档索引]){
			if(!称号.称号结构[i]){
				if(称号.图档[称号图档索引] < 100000){
					称号.称号结构[i] = 0;
					StockDispBuffer(0x16D+20,0x35+i*0x20,109,称号.图档[称号图档索引],0);
				}else{
					称号.称号结构[i] = MakeAnimDisp(0x16D+20,0x35+i*0x20,称号.图档[称号图档索引],0);
				}
			}else if(称号.当前称号结构==0) StockDispBuffer(0x16D,0x35+i*0x20,109,称号.图档[称号图档索引],0);
			char 称号序号[128];
			sprintf_s(称号序号,"%03d",称号图档索引+1);

			StockFontBufferExt(0x130,0x2D+i*0x20,1,FONT_PAL_GREEN,称号序号,0,16);
			if(!称号.确定窗口显示){
				if(MakeHitBox(0x124,0x26+i*0x20,0x1B8,0x44+i*0x20,0x6D)==1){
					StockFontBuffer(0x123,0xD1,2,0,称号.介绍[称号图档索引],0);
					if(mouse.onceState & MOUSE_LEFT_CRICK>0){
						称号.确定图档索引=称号.称号索引[ 称号图档索引];
						称号.确定窗口显示=TRUE;
					}
				}
			}
		}else break;
	}
	if(称号.确定窗口显示){
		StockFontBuffer(0x123,0xD1,2,0,称号.介绍[称号.确定图档索引],0);
		StockFontBuffer(0x130,0x118,2,0,"确定使用该称号吗？",0);
		StockDispBuffer(0x16D,0x130,0x6C,55253,1);//确定窗口底图
		按钮ID = StockDispBuffer(0x194,0x148,109,55252,2);//关闭
		if(mouse.onceState & MOUSE_LEFT_CRICK>0){
			if(按钮ID == HitDispNo){
				称号.确定窗口显示=FALSE;
				称号.确定图档索引=0;
			}
		}
		按钮ID = StockDispBuffer(0x148,0x148,109,55254,2);//确定
		if(mouse.onceState & MOUSE_LEFT_CRICK>0){
			if(按钮ID == HitDispNo){
				int checksum=0;
				char buf[1024*4];
				memset(buf,0,1024*4);
				checksum += util_mkint(buf, 称号.确定图档索引);
				util_mkint(buf, checksum);
				util_SendMesg(sockfd, LSSPROTO_CHARTITLE_SEND, buf);
				称号.确定窗口显示=FALSE;
				称号.确定图档索引=0;
			}
		}
	}
	return FALSE;
}

void 窗口结束处理(ACTION* ID)//结束显示动画 
{
	称号.窗口显示=FALSE;
	结束称号展示动画();
	if(称号.当前称号结构) DeathAction(称号.当前称号结构);
	称号.当前称号结构=0;
	DeathAction(ID);
}

void 人物称号数据更新(char *数据)
{
	char 基础内容[126],图档内容[1024],图档索引[1024],内容介绍[4000],临时[126];
	memset(基础内容,0,126);
	memset(图档内容,0,1024);
	memset(图档索引,0,1024);
	memset(内容介绍,0,4000);
	getStringFromIndexWithDelim_body((char *) 数据,(char *)"#@",1,基础内容,126);
	getStringFromIndexWithDelim_body((char *) 基础内容,(char *)"|",1,临时,126);
	int 值 = atoi(临时);
	if(值) 称号.当前称号图档=值;
	getStringFromIndexWithDelim_body((char *) 基础内容,(char *)"|",2,临时,126);
	int 数量 = atoi(临时);
	if(数量!=0){
		memset(&称号.图档,0,sizeof(int)*100);
		memset(&称号.称号索引,0,sizeof(int)*100);
		memset(&称号.介绍,0,32*100);
		getStringFromIndexWithDelim_body((char *) 数据,(char *)"#@",2,图档内容,1024);
		getStringFromIndexWithDelim_body((char *) 数据,(char *)"#@",3,内容介绍,4000);
		getStringFromIndexWithDelim_body((char *) 数据,(char *)"#@",4,图档索引,1024);
		int i=0;
		for(i;i<数量;i++){
			getStringFromIndexWithDelim_body((char *)图档内容,(char *)"|",i+1,临时,126);
			称号.图档[i]=atoi(临时);
			getStringFromIndexWithDelim_body((char *)图档索引,(char *)"|",i+1,临时,126);
			称号.称号索引[i]=atoi(临时);
			getStringFromIndexWithDelim_body((char *)内容介绍,(char *)"|",i+1,临时,126);
			sprintf_s(称号.介绍[i],32,"%s",临时);
		}
	}
}

void 初始化称号结构()
{
	memset(&称号,0,sizeof(称号数据结构));
}
#endif


