#ifndef _PROTOCOL_H_
#define _PROTOCOL_H_

int SaDispatchMessage(int fd, char *encoded);

#define SEPARATOR	";"

#define LSSPROTO_W_SEND 	0
#define LSSPROTO_W2_SEND 	1
#define LSSPROTO_XYD_RECV 	2
#define LSSPROTO_EV_SEND 	3
#define LSSPROTO_EV_RECV 	4
#define LSSPROTO_EN_SEND 	5
#define LSSPROTO_DU_SEND 	6
#define LSSPROTO_EN_RECV 	7
#define LSSPROTO_EO_SEND 	8
#define LSSPROTO_BU_SEND 	9
#define LSSPROTO_JB_SEND 	10
#define LSSPROTO_LB_SEND 	11
#define LSSPROTO_RS_RECV 	12
#define LSSPROTO_RD_RECV 	13
#define LSSPROTO_B_SEND 	14
#define LSSPROTO_B_RECV 	15
#define LSSPROTO_SKD_SEND 	16
#define LSSPROTO_ID_SEND 	17
#define LSSPROTO_PI_SEND 	18
#define LSSPROTO_DI_SEND 	19
#define LSSPROTO_DG_SEND 	20
#define LSSPROTO_DP_SEND 	21
#define LSSPROTO_I_RECV 	22
#define LSSPROTO_MI_SEND 	23
#define LSSPROTO_SI_RECV 	24
#define LSSPROTO_MSG_SEND 	25
#define LSSPROTO_MSG_RECV 	26
#define LSSPROTO_PMSG_SEND 	27
#define LSSPROTO_PME_RECV 	28
#define LSSPROTO_AB_SEND 	29
#define LSSPROTO_AB_RECV 	30
#define LSSPROTO_ABI_RECV 	31
#define LSSPROTO_DAB_SEND 	32
#define LSSPROTO_AAB_SEND 	33
#define LSSPROTO_L_SEND 	34
#define LSSPROTO_TK_SEND 	35
#define LSSPROTO_TK_RECV 	36
#define LSSPROTO_MC_RECV 	37
#define LSSPROTO_M_SEND 	38
#define LSSPROTO_M_RECV 	39
#define LSSPROTO_C_SEND 	40
#define LSSPROTO_C_RECV 	41
#define LSSPROTO_CA_RECV 	42
#define LSSPROTO_CD_RECV 	43
#define LSSPROTO_R_RECV 	44
#define LSSPROTO_S_SEND 	45
#define LSSPROTO_S_RECV 	46
#define LSSPROTO_D_RECV 	47
#define LSSPROTO_FS_SEND 	48
#define LSSPROTO_FS_RECV 	49
#define LSSPROTO_HL_SEND 	50
#define LSSPROTO_HL_RECV 	51
#define LSSPROTO_PR_SEND 	52
#define LSSPROTO_PR_RECV 	53
#define LSSPROTO_KS_SEND 	54
#define LSSPROTO_KS_RECV 	55
#define LSSPROTO_AC_SEND 	56
#define LSSPROTO_MU_SEND 	57
#define LSSPROTO_PS_SEND 	58
#define LSSPROTO_PS_RECV 	59
#define LSSPROTO_ST_SEND 	60
#define LSSPROTO_DT_SEND 	61
#define LSSPROTO_FT_SEND 	62
#define LSSPROTO_SKUP_RECV 	63
#define LSSPROTO_SKUP_SEND 	64
#define LSSPROTO_KN_SEND 	65
#define LSSPROTO_WN_RECV 	66
#define LSSPROTO_WN_SEND 	67
#define LSSPROTO_EF_RECV 	68
#define LSSPROTO_SE_RECV 	69
#define LSSPROTO_SP_SEND 	70
#define LSSPROTO_CLIENTLOGIN_SEND 	71
#define LSSPROTO_CLIENTLOGIN_RECV 	72
#define LSSPROTO_CREATENEWCHAR_SEND 	73
#define LSSPROTO_CREATENEWCHAR_RECV 	74
#define LSSPROTO_CHARDELETE_SEND 	75
#define LSSPROTO_CHARDELETE_RECV 	76
#define LSSPROTO_CHARLOGIN_SEND 	77
#define LSSPROTO_CHARLOGIN_RECV 	78
#define LSSPROTO_CHARLIST_SEND 	79
#define LSSPROTO_CHARLIST_RECV 	80
#define LSSPROTO_CHARLOGOUT_SEND 	81
#define LSSPROTO_CHARLOGOUT_RECV 	82
#define LSSPROTO_PROCGET_SEND 	83
#define LSSPROTO_PROCGET_RECV 	84
#define LSSPROTO_PLAYERNUMGET_SEND 	85
#define LSSPROTO_PLAYERNUMGET_RECV 	86
#define LSSPROTO_ECHO_SEND 	87
#define LSSPROTO_ECHO_RECV 	88
#define LSSPROTO_SHUTDOWN_SEND 	89
#define LSSPROTO_NU_RECV 	90
#define LSSPROTO_TD_SEND 	91
#define LSSPROTO_TD_RECV 	92
#define LSSPROTO_FM_RECV 	93
#define LSSPROTO_FM_SEND 	94
#define LSSPROTO_WO_RECV	95
#define LSSPROTO_PETST_SEND	96
#define LSSPROTO_BM_SEND    97   // _BLACK_MARKET
#ifdef _MIND_ICON 
#define LSSPROTO_MA_SEND    98
#endif
#ifdef _FIX_DEL_MAP
#define LSSPROTO_DM_SEND    99   // 玩家抽地图送监狱
#endif
#ifdef _ITEM_CRACKER
#define LSSPROTO_IC_RECV    100   
#endif
#ifdef _MAGIC_NOCAST//沉默
#define LSSPROTO_NC_RECV    101   
#endif
#ifdef _CHECK_GAMESPEED
#define LSSPROTO_CS_SEND	103
#define LSSPROTO_CS_RECV	104
#endif

#ifdef _TEAM_KICKPARTY
#define LSSPROTO_KTEAM_SEND	106
#endif

#ifdef _PETS_SELECTCON
#define LSSPROTO_PETST_RECV	107
#endif
#ifdef _NEWREQUESTPROTOCOL			// (不可开) Syu ADD 新增Protocol要求细项
#define LSSPROTO_RESIST_SEND 108
#define LSSPROTO_RESIST_RECV 109
#endif
#ifdef _OUTOFBATTLESKILL			// (不可开) Syu ADD 非战斗时技能Protocol
#define LSSPROTO_BATTLESKILL_SEND 110
#define LSSPROTO_BATTLESKILL_RECV 111
#endif
#ifdef _CHATROOMPROTOCOL			// (不可开) Syu ADD 聊天室频道
#define LSSPROTO_CHATROOM_SEND 112
#define LSSPROTO_CHATROOM_RECV 113
#endif


#define LSSPROTO_SPET_SEND 	114		// Robin 待机宠
#define LSSPROTO_SPET_RECV 	115

#ifdef _STREET_VENDOR
#define LSSPROTO_STREET_VENDOR_SEND 	116		// 摆摊功能
#define LSSPROTO_STREET_VENDOR_RECV 	117
#endif
		
#ifdef _JOBDAILY
#define LSSPROTO_JOBDAILY_SEND 	121		// CYG　任务日志功能
#define LSSPROTO_JOBDAILY_RECV 	120
#endif

#ifdef _TEACHER_SYSTEM
#define LSSPROTO_TEACHER_SYSTEM_SEND 	122		// 导师功能
#define LSSPROTO_TEACHER_SYSTEM_RECV 	123
#endif

#ifdef _ADD_STATUS_2
#define LSSPROTO_S2_SEND 	124
#define LSSPROTO_S2_RECV 	125
#endif

#ifdef _ITEM_FIREWORK
#define LSSPROTO_FIREWORK_RECV 			126
#endif
#ifdef _PET_ITEM
#define LSSPROTO_PET_ITEM_EQUIP_SEND 	127
#endif
#ifdef _MOVE_SCREEN
#define LSSPROTO_MOVE_SCREEN_RECV		128
#endif
#ifdef _GET_HOSTNAME
#define LSSPROTO_HOSTNAME_SEND			129
#define LSSPROTO_HOSTNAME_RECV			130
#endif
#ifdef _THEATER
#define LSSPROTO_THEATER_DATA_RECV		131
#define LSSPROTO_THEATER_DATA_SEND		132
#endif

#ifdef _NPC_MAGICCARD
#define LSSPROTO_MAGICCARD_ACTION_RECV		133
#define LSSPROTO_MAGICCARD_DAMAGE_RECV		134
#endif


#ifdef _SECONDARY_WINDOW_DATA_
#define LSSPROTO_SECONDARY_WINDOW_RECV 	137
#endif

#ifdef _ICONBUTTONS_
#define LSSPROTO_TRUNTABLE_RECV 	138
#endif


#ifdef _ALCHEPLUS
#define LSSPROTO_ALCHEPLUS_SEND 135
#define LSSPROTO_ALCHEPLUS_RECV 136
#endif

#ifdef _NPC_DANCE
#define LSSPROTO_DANCEMAN_OPTION_RECV	137
#endif

#ifdef _HUNDRED_KILL
#define LSSPROTO_HUNDREDKILL_RECV       138
#endif

#ifdef _PK2007
#define LSSPROTO_PKLIST_SEND 	139
#define LSSPROTO_PKLIST_RECV 	140
#endif

#ifdef _CHARSIGNDAY_
#define LSSPROTO_SIGNDAY_SEND 141
#endif

#define LSSPROTO_CHAREFFECT_RECV 146
#ifdef _RED_MEMOY_
#define LSSPROTO_REDMEMOY_SEND 147
#define LSSPROTO_REDMEMOY_RECV 148
#endif
#ifdef _ANNOUNCEMENT_
#define LSSPROTO_DENGON_RECV	200
#endif
#ifdef _NEW_SYSTEM_MENU
#define LSSPROTO_SAMENU_RECV	201
#define LSSPROTO_SAMENU_SEND	202
#endif
#ifdef _NEWSHOP_
#define LSSPROTO_SHOPOK_SEND	208
#define LSSPROTO_SHOPOK_RECV	209
#endif
#ifdef _FAMILYBADGE_
#define	LSSPROTO_FAMILYBADGE_SEND 210
#define	LSSPROTO_FAMILYBADGE_RECV 211
#endif

#ifdef _CHARTITLE_
#define	LSSPROTO_CHARTITLE_SEND 212
#define	LSSPROTO_CHARTITLE_RECV 213
#endif

#ifdef _CHARTITLE_STR_
#define	LSSPROTO_CHARTITLE_SEND 212
#define	LSSPROTO_CHARTITLE_RECV 213
#endif

#ifdef _PETBLESS_
#define	LSSPROTO_VB_SEND 218
#define	LSSPROTO_VB_RECV 219
#endif

#ifdef _RIDEQUERY_//骑宠查询
#define LSSPROTO_RIDEQUERY_SEND 220
#endif

#ifdef _PET_SKINS
#define LSSPROTO_PETSKINS_SEND  221
#define LSSPROTO_PETSKINS_RECV  222
#endif


void lssproto_W_send(int fd,int x,int y,char* direction);
void lssproto_W2_send(int fd,int x,int y,char* direction);
//Cary say 战斗结束后的大地图座标
void lssproto_XYD_recv(int fd,int x,int y,int dir);
void lssproto_EV_send(int fd,int event,int seqno,int x,int y,int dir);
void lssproto_EV_recv(int fd,int seqno,int result);
void lssproto_EN_send(int fd,int x,int y);
void lssproto_DU_send(int fd,int x,int y);
void lssproto_EN_recv(int fd,int result,int field);
void lssproto_EO_send(int fd,int dummy);
void lssproto_BU_send(int fd,int dummy);
void lssproto_JB_send(int fd,int x,int y);
void lssproto_LB_send(int fd,int x,int y);
void lssproto_RS_recv(int fd,char* data);
void lssproto_RD_recv(int fd,char* data);
void lssproto_B_send(int fd,char* command);
void lssproto_B_recv(int fd,char* command);
void lssproto_SKD_send(int fd,int dir,int index);
void lssproto_ID_send(int fd,int x,int y,int haveitemindex,int toindex);
void lssproto_PI_send(int fd,int x,int y,int dir);
void lssproto_DI_send(int fd,int x,int y,int itemindex);
void lssproto_DG_send(int fd,int x,int y,int amount);
void lssproto_DP_send(int fd,int x,int y,int petindex);
void lssproto_I_recv(int fd,char* data);
void lssproto_MI_send(int fd,int fromindex,int toindex);
void lssproto_SI_recv(int fd,int fromindex,int toindex);
void lssproto_MSG_send(int fd,int index,char* message,int color);
//Cary say 收到普通邮件或宠物邮件
void lssproto_MSG_recv(int fd,int aindex,char* text,int color);
void lssproto_PMSG_send(int fd,int index,int petindex,int itemindex,char* message,int color);
void lssproto_PME_recv(int fd,int objindex,int graphicsno,int x,int y,int dir,int flg,int no,char* cdata);
void lssproto_AB_send(int fd);
void lssproto_AB_recv(int fd,char* data);
void lssproto_ABI_recv(int fd,int num,char* data);
void lssproto_DAB_send(int fd,int index);
void lssproto_AAB_send(int fd,int x,int y);
void lssproto_L_send(int fd,int dir);
void lssproto_TK_send(int fd,int x,int y,char* message,int color,int area);
void lssproto_TK_recv(int fd,int index,char* message,int color);
void lssproto_MC_recv(int fd,int fl,int x1,int y1,int x2,int y2,int tilesum,int objsum,int eventsum,char* data);
void lssproto_M_send(int fd,int fl,int x1,int y1,int x2,int y2);
void lssproto_M_recv(int fd,int fl,int x1,int y1,int x2,int y2,char* data);
void lssproto_C_send(int fd,int index);
void lssproto_C_recv(int fd,char* data);
void lssproto_CA_recv(int fd,char* data);
void lssproto_CD_recv(int fd,char* data);
void lssproto_R_recv(int fd,char* data);
void lssproto_S_send(int fd,char* category);
void lssproto_S_recv(int fd,char* data);
void lssproto_D_recv(int fd,int category,int dx,int dy,char* data);
void lssproto_FS_send(int fd,int flg);
void lssproto_FS_recv(int fd,int flg);
void lssproto_HL_send(int fd,int flg);
//战斗中是否要Help
void lssproto_HL_recv(int fd,int flg);
void lssproto_PR_send(int fd,int x,int y,int request);
void lssproto_PR_recv(int fd,int request,int result);
void lssproto_KS_send(int fd,int petarray);
//Cary say 指定那一只宠物出场战斗
void lssproto_KS_recv(int fd,int petarray,int result);

#ifdef _STANDBYPET
void lssproto_SPET_send(int fd,int standbypet);
void lssproto_SPET_recv(int fd,int standbypet,int result);
#endif

void lssproto_AC_send(int fd,int x,int y,int actionno);
void lssproto_MU_send(int fd,int x,int y,int array,int toindex);
void lssproto_PS_send(int fd,int havepetindex,int havepetskill,int toindex,char* data);
//Cary say 宠物合成
void lssproto_PS_recv(int fd,int result,int havepetindex,int havepetskill,int toindex);
void lssproto_ST_send(int fd,int titleindex);
void lssproto_DT_send(int fd,int titleindex);
void lssproto_FT_send(int fd,char* data);
//Cary say 取得可加的属性点数
void lssproto_SKUP_recv(int fd,int point);
void lssproto_SKUP_send(int fd,int skillid);
void lssproto_KN_send(int fd,int havepetindex,char* data);
void lssproto_WN_recv(int fd,int windowtype,int buttontype,int seqno,int objindex,char* data);
void lssproto_WN_send(int fd,int x,int y,int seqno,int objindex,int select,char* data);
void lssproto_EF_recv(int fd,int effect,int level,char* option);
void lssproto_SE_recv(int fd,int x,int y,int senumber,int sw);
void lssproto_SP_send(int fd,int x,int y,int dir);
#ifdef _NEW_CLIENT_LOGIN
void lssproto_ClientLogin_send(int fd,char* cdkey,char* passwd,char* mac,int selectServerIndex, char *ip);
#else
void lssproto_ClientLogin_send(int fd,char* cdkey,char* passwd);
#endif
void lssproto_ClientLogin_recv(int fd,char* result);

void lssproto_CreateNewChar_send(int fd,int dataplacenum,char* charname,int imgno,int faceimgno,int vital,int str,int tgh,int dex,int earth,int water,int fire,int wind,int hometown);
void lssproto_CreateNewChar_recv(int fd,char* result,char* data);
void lssproto_CharDelete_send(int fd,char* charname);
void lssproto_CharDelete_recv(int fd,char* result,char* data);
void lssproto_CharLogin_send(int fd,char* charname);
void lssproto_CharLogin_recv(int fd,char* result,char* data);
void lssproto_CharList_send(int fd);
void lssproto_CharList_recv(int fd,char* result,char* data);
void lssproto_CharLogout_send(int fd, int Flg);
void lssproto_CharLogout_recv(int fd,char* result,char* data);
void lssproto_ProcGet_send(int fd);
void lssproto_ProcGet_recv(int fd,char* data);
void lssproto_PlayerNumGet_send(int fd);
void lssproto_PlayerNumGet_recv(int fd,int logincount,int player);
void lssproto_Echo_send(int fd,char* test);
void lssproto_Echo_recv(int fd,char* test);
void lssproto_Shutdown_send(int fd,char* passwd,int min);
void lssproto_NU_recv(int fd, int AddCount);
void lssproto_TD_send(int fd, char* data);
void lssproto_TD_recv(int fd, char* data);
void lssproto_FM_send(int fd, char* data);
void lssproto_FM_recv(int fd, char* data);
//Cary say 取得转生的特效
void lssproto_WO_recv( int fd, int effect );
void lssproto_PETST_send(int fd, int nPet, int sPet);// sPet  0:休息 1:等待 4:邮件
void lssproto_BM_send(int fd, int iindex);             // _BLACK_MARKET
#ifdef _FIX_DEL_MAP
void lssproto_DM_send(int fd);                         // WON ADD 玩家抽地图送监狱
#endif
#ifdef _MIND_ICON 
void lssproto_MA_send(int fd, int x, int y, int nMind);
#endif
#ifdef _ITEM_CRACKER 
void lssproto_IC_recv(int fd, int x, int y);
#endif
#ifdef _MAGIC_NOCAST//沉默
void lssproto_NC_recv(int fd,int flg);
#endif

#ifdef _CHECK_GAMESPEED
void lssproto_CS_send( int fd);
void lssproto_CS_recv( int fd, int deltimes);
int lssproto_getdelaytimes();
void lssproto_setdelaytimes( int delays);
#endif

#ifdef _TEAM_KICKPARTY
void lssproto_KTEAM_send( int fd,int si);
#endif

#ifdef _PETS_SELECTCON
void lssproto_PETST_recv( int fd,int petarray,int result );
#endif
#ifdef _CHATROOMPROTOCOL			// (不可开) Syu ADD 聊天室频道
void lssproto_CHATROOM_send( int fd , char *data );
void lssproto_CHATROOM_recv( int fd , char *data ) ; 
#endif
#ifdef _NEWREQUESTPROTOCOL			// (不可开) Syu ADD 新增Protocol要求细项
void lssproto_RESIST_send( int fd , char *data );
void lssproto_RESIST_recv( int fd , char *data ) ; 
#endif

#ifdef _ALCHEPLUS
void lssproto_ALCHEPLUS_send( int fd , char *data );
void lssproto_ALCHEPLUS_recv( int fd , char *data ); 
#endif

#ifdef _OUTOFBATTLESKILL			// (不可开) Syu ADD 非战斗时技能Protocol
void lssproto_BATTLESKILL_send( int fd, int SkillNum);
void lssproto_BATTLESKILL_recv( int fd, char *data) ; 
#endif
void lssproto_CHAREFFECT_recv ( int fd, char *data);

void lssproto_SPET_send(int fd, int standbypet); // Robin 待机宠
#ifdef _STREET_VENDOR
void lssproto_STREET_VENDOR_send(int fd,char *data);	// 摆摊功能
void lssproto_STREET_VENDOR_recv(int fd,char *data);	// 摆摊功能
#endif

#ifdef _JOBDAILY
void lssproto_JOBDAILY_send(int fd,char *data);	
void lssproto_JOBDAILY_recv(int fd,char *data);	
#endif

#ifdef _FAMILYBADGE_
void lssproto_FamilyBadge_send(int fd);
void lssproto_FamilyBadge_recv(char *data);
#endif

#ifdef _TEACHER_SYSTEM
void lssproto_TEACHER_SYSTEM_send(int fd,char *data);	// 导师功能
void lssproto_TEACHER_SYSTEM_recv(int fd,char *data);
#endif

#ifdef _ADD_STATUS_2
void lssproto_S2_send(int fd,char *data);
void lssproto_S2_recv(int fd,char *data);
#endif

#ifdef _ITEM_FIREWORK
void lssproto_Firework_recv(int fd, int nCharaindex, int nType, int nActionNum);	// 烟火功能
#endif
#ifdef _PET_ITEM
void lssproto_PetItemEquip_send(int fd, int nGx, int nGy, int nPetNo, int nItemNo, int nDestNO);	// 宠物装备功能
#endif
#ifdef _THEATER
void lssproto_TheaterData_recv(int fd, char *pData);
#endif
#ifdef _MOVE_SCREEN
void lssproto_MoveScreen_recv(int fd, BOOL bMoveScreenMode, int iXY);	// client 移动荧幕
#endif
#ifdef _GET_HOSTNAME
void lssproto_HostName_send(int fd);
#endif

#ifdef _NPC_MAGICCARD
void lssproto_MagiccardAction_recv(int fd, char *data);	//魔法牌功能
void lssproto_MagiccardDamage_recv(int fd, int position , int damage , int offsetx, int offsety);
#endif

#ifdef  _NPC_DANCE
void lssproto_DancemanOption_recv(int fd, int option );	//动一动状态
#endif



#ifdef _ANNOUNCEMENT_

void lssproto_DENGON_recv(char *data, int colors, int nums);
#endif
#ifdef _HUNDRED_KILL
void lssproto_hundredkill_recv( int fd, int flag );
#endif
#ifdef _PK2007
void lssproto_pkList_send(int fd);
void lssproto_pkList_recv(int fd,int count,char* data);
#endif
#ifdef _NEW_SYSTEM_MENU
void lssproto_SaMenu_send(int fd, int index);
#endif
#endif


#ifdef _PETBLESS_
void lssproto_petbless_send(int fd ,int petpos,int type);
#endif
#ifdef _RIDEQUERY_
void lssproto_RideQuery_send(int fd);
#endif
#ifdef _PET_SKINS
void lssproto_PetSkins_recv(char *data);
#endif



#ifdef _CHARSIGNDAY_
void lssproto_SignDay_send(int fd);
#endif

