#ifndef _PROTOCOL_H_
#define _PROTOCOL_H_

#include "lssproto_util.h"	// for StoneAge

#ifdef MAXLSRPCARGS
#if ( MAXLSRPCARGS <= ( 13 + 1 )  )
#undef MAXLSRPCARGS
#define MAXLSRPCARGS ( 13 + 1 ) 
#endif
#else
#define MAXLSRPCARGS ( 13 + 1 ) 
#endif

int lssproto_InitServer(int (*writefunc)(int,char*,int) , int worksiz );
void lssproto_SetServerLogFiles( char *read , char *write );
void lssproto_CleanupServer( void );
int lssproto_ServerDispatchMessage(int fd, char *encoded);

#define SEPARATOR	";"

#define LSSPROTO_W_RECV 	0
#define LSSPROTO_W2_RECV 	1
#define LSSPROTO_XYD_SEND 	2
#define LSSPROTO_EV_RECV 	3
#define LSSPROTO_EV_SEND 	4
#define LSSPROTO_EN_RECV 	5
#define LSSPROTO_DU_RECV 	6
#define LSSPROTO_EN_SEND 	7
#define LSSPROTO_EO_RECV 	8
#define LSSPROTO_BU_RECV 	9
#define LSSPROTO_JB_RECV 	10
#define LSSPROTO_LB_RECV 	11
#define LSSPROTO_RS_SEND 	12
#define LSSPROTO_RD_SEND 	13
#define LSSPROTO_B_RECV 	14
#define LSSPROTO_B_SEND 	15
#define LSSPROTO_SKD_RECV 	16
#define LSSPROTO_ID_RECV 	17
#define LSSPROTO_PI_RECV 	18
#define LSSPROTO_DI_RECV 	19
#define LSSPROTO_DG_RECV 	20
#define LSSPROTO_DP_RECV 	21
#define LSSPROTO_I_SEND 	22
#define LSSPROTO_MI_RECV 	23
#define LSSPROTO_SI_SEND 	24
#define LSSPROTO_MSG_RECV 	25
#define LSSPROTO_MSG_SEND 	26
#define LSSPROTO_PMSG_RECV 	27
#define LSSPROTO_PME_SEND 	28
#define LSSPROTO_AB_RECV 	29
#define LSSPROTO_AB_SEND 	30
#define LSSPROTO_ABI_SEND 	31
#define LSSPROTO_DAB_RECV 	32
#define LSSPROTO_AAB_RECV 	33
#define LSSPROTO_L_RECV 	34
#define LSSPROTO_TK_RECV 	35
#define LSSPROTO_TK_SEND 	36
#define LSSPROTO_MC_SEND 	37
#define LSSPROTO_M_RECV 	38
#define LSSPROTO_M_SEND 	39
#define LSSPROTO_C_RECV 	40
#define LSSPROTO_C_SEND 	41
#define LSSPROTO_CA_SEND 	42
#define LSSPROTO_CD_SEND 	43
#define LSSPROTO_R_SEND 	44
#define LSSPROTO_S_RECV 	45
#define LSSPROTO_S_SEND 	46
#define LSSPROTO_D_SEND 	47
#define LSSPROTO_FS_RECV 	48
#define LSSPROTO_FS_SEND 	49
#define LSSPROTO_HL_RECV 	50
#define LSSPROTO_HL_SEND 	51
#define LSSPROTO_PR_RECV 	52
#define LSSPROTO_PR_SEND 	53
#define LSSPROTO_KS_RECV 	54
#define LSSPROTO_KS_SEND 	55
#define LSSPROTO_AC_RECV 	56
#define LSSPROTO_MU_RECV 	57
#define LSSPROTO_PS_RECV 	58
#define LSSPROTO_PS_SEND 	59
#define LSSPROTO_ST_RECV 	60
#define LSSPROTO_DT_RECV 	61
#define LSSPROTO_FT_RECV 	62
#define LSSPROTO_SKUP_SEND 	63
#define LSSPROTO_SKUP_RECV 	64
#define LSSPROTO_KN_RECV 	65
#define LSSPROTO_WN_SEND 	66
#define LSSPROTO_WN_RECV 	67
#define LSSPROTO_EF_SEND 	68
#define LSSPROTO_SE_SEND 	69
#define LSSPROTO_SP_RECV 	70
#define LSSPROTO_CLIENTLOGIN_RECV 	71
#define LSSPROTO_CLIENTLOGIN_SEND 	72
#define LSSPROTO_CREATENEWCHAR_RECV 	73
#define LSSPROTO_CREATENEWCHAR_SEND 	74
#define LSSPROTO_CHARDELETE_RECV 	75
#define LSSPROTO_CHARDELETE_SEND 	76
#define LSSPROTO_CHARLOGIN_RECV 	77
#define LSSPROTO_CHARLOGIN_SEND 	78
#define LSSPROTO_CHARLIST_RECV 	79
#define LSSPROTO_CHARLIST_SEND 	80
#define LSSPROTO_CHARLOGOUT_RECV 	81
#define LSSPROTO_CHARLOGOUT_SEND 	82
#define LSSPROTO_PROCGET_RECV 	83
#define LSSPROTO_PROCGET_SEND 	84
#define LSSPROTO_PLAYERNUMGET_RECV 	85
#define LSSPROTO_PLAYERNUMGET_SEND 	86
#define LSSPROTO_ECHO_RECV 	87
#define LSSPROTO_ECHO_SEND 	88
#define LSSPROTO_SHUTDOWN_RECV 	89
#define LSSPROTO_NU_SEND 	90
#define LSSPROTO_TD_RECV 	91
#define LSSPROTO_TD_SEND 	92
#define LSSPROTO_FM_SEND 	93
#define LSSPROTO_FM_RECV 	94
#define LSSPROTO_WO_SEND 	95
#define LSSPROTO_PETST_RECV	96
#define LSSPROTO_BM_RECV    97   // _BLACK_MARKET

#ifdef _MIND_ICON
#define LSSPROTO_MA_RECV    98
#endif

#ifdef _FIX_DEL_MAP              // WON ADD 玩家抽地图送监狱
#define LSSPROTO_DM_RECV    99
#endif

#ifdef _ITEM_CRACKER
#define LSSPROTO_IC_SEND    100
#endif

#ifdef _MAGIC_NOCAST             // 精灵:沉默
#define LSSPROTO_NC_SEND    101
#endif
#ifdef _CHECK_GAMESPEED
#define LSSPROTO_CS_RECV	103 //加速探针
#define LSSPROTO_CS_SEND	104 //加速探针
#endif

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

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

#ifdef _STREET_VENDOR
#define LSSPROTO_STREET_VENDOR_RECV 	116		// 摆摊功能
#define LSSPROTO_STREET_VENDOR_SEND 	117
#endif

#ifdef _RIGHTCLICK
#define LSSPROTO_RCLICK_RECV 	118
#define LSSPROTO_RCLICK_SEND 	119
#endif

#ifdef _JOBDAILY
#define LSSPROTO_JOBDAILY_SEND 	120		// CYG　任务日志功能
#define LSSPROTO_JOBDAILY_RECV 	121
#endif

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

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

void lssproto_W_recv(int fd,int x,int y,char* direction);
void lssproto_W2_recv(int fd,int x,int y,char* direction);
void lssproto_XYD_send(int fd,int x,int y,int dir);
void lssproto_EV_recv(int fd,int event,int seqno,int x,int y,int dir);
void lssproto_EV_send(int fd,int seqno,int result);
void lssproto_EN_recv(int fd,int x,int y);
void lssproto_DU_recv(int fd,int x,int y);
void lssproto_EN_send(int fd,int result,int field);
void lssproto_EO_recv(int fd,int dummy);
void lssproto_BU_recv(int fd,int dummy);
void lssproto_JB_recv(int fd,int x,int y);
void lssproto_LB_recv(int fd,int x,int y);
void lssproto_RS_send(int fd,char* data);
void lssproto_RD_send(int fd,char* data);
void lssproto_B_recv(int fd,char* command);
void lssproto_B_send(int fd,char* command);
void lssproto_SKD_recv(int fd,int dir,int index);
void lssproto_ID_recv(int fd,int x,int y,int haveitemindex,int toindex);
void lssproto_PI_recv(int fd,int x,int y,int dir);
void lssproto_DI_recv(int fd,int x,int y,int itemindex);
void lssproto_DG_recv(int fd,int x,int y,int amount);
void lssproto_DP_recv(int fd,int x,int y,int petindex);
void lssproto_I_send(int fd,char* data);
void lssproto_MI_recv(int fd,int fromindex,int toindex);
void lssproto_SI_send(int fd,int fromindex,int toindex);
void lssproto_MSG_recv(int fd,int index,char* message,int color);
void lssproto_MSG_send(int fd,int aindex,char* text,int color);
void lssproto_PMSG_recv(int fd,int index,int petindex,int itemindex,char* message,int color);
void lssproto_PME_send(int fd,int objindex,int graphicsno,int x,int y,int dir,int flg,int no,char* cdata);
void lssproto_AB_recv(int fd);
void lssproto_AB_send(int fd,char* data);
void lssproto_ABI_send(int fd,int num,char* data);
void lssproto_DAB_recv(int fd,int index);
void lssproto_AAB_recv(int fd,int x,int y);
void lssproto_L_recv(int fd,int dir);
void lssproto_TK_recv(int fd,int x,int y,char* message,int color,int area);
void lssproto_TK_send(int fd,int index,char* message,int color);
void lssproto_MC_send(int fd,int fl,int x1,int y1,int x2,int y2,int tilesum,int objsum,int eventsum,char* data);
void lssproto_M_recv(int fd,int fl,int x1,int y1,int x2,int y2);
void lssproto_M_send(int fd,int fl,int x1,int y1,int x2,int y2,char* data);
void lssproto_C_recv(int fd,int index);
void lssproto_C_send(int fd,char* data);
void lssproto_CA_send(int fd,char* data);
void lssproto_CD_send(int fd,char* data);
void lssproto_R_send(int fd,char* data);
void lssproto_S_recv(int fd,char* category);
void lssproto_S_send(int fd,char* data);
void lssproto_D_send(int fd,int category,int dx,int dy,char* data);
void lssproto_FS_recv(int fd,int flg);
void lssproto_FS_send(int fd,int flg);
void lssproto_HL_recv(int fd,int flg);
void lssproto_HL_send(int fd,int flg);
void lssproto_PR_recv(int fd,int x,int y,int request);
void lssproto_PR_send(int fd,int request,int result);
void lssproto_KS_recv(int fd,int petarray);
void lssproto_KS_send(int fd,int petarray,int result);

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

void lssproto_AC_recv(int fd,int x,int y,int actionno);
void lssproto_MU_recv(int fd,int x,int y,int array,int toindex);
void lssproto_PS_recv(int fd,int havepetindex,int havepetskill,int toindex,char* data);
void lssproto_PS_send(int fd,int result,int havepetindex,int havepetskill,int toindex);
void lssproto_ST_recv(int fd,int titleindex);
void lssproto_DT_recv(int fd,int titleindex);
void lssproto_FT_recv(int fd,char* data);
void lssproto_SKUP_send(int fd,int point);
void lssproto_SKUP_recv(int fd,int skillid);
void lssproto_KN_recv(int fd,int havepetindex,char* data);
void lssproto_WN_send(int fd,int windowtype,int buttontype,int seqno,int objindex,char* data);
void lssproto_WN_recv(int fd,int x,int y,int seqno,int objindex,int select,char* data);
void lssproto_EF_send(int fd,int effect,int level,char* option);
void lssproto_SE_send(int fd,int x,int y,int senumber,int sw);
void lssproto_SP_recv(int fd,int x,int y,int dir);
void lssproto_ClientLogin_recv(int fd,char* cdkey,char* passwd);
void lssproto_ClientLogin_send(int fd,char* result);
void lssproto_CreateNewChar_recv(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_send(int fd,char* result,char* data);
void lssproto_CharDelete_recv(int fd,char* charname);
void lssproto_CharDelete_send(int fd,char* result,char* data);
void lssproto_CharLogin_recv(int fd,char* charname);
void lssproto_CharLogin_send(int fd,char* result,char* data);

#ifdef _PKSEVER_VER
void lssproto_CharList_recv( int fd, int star);
#else
void lssproto_CharList_recv(int fd);
#endif

void lssproto_CharList_send(int fd,char* result,char* data);
void lssproto_CharLogout_recv(int fd, int flg);
void lssproto_CharLogout_send(int fd,char* result,char* data);
void lssproto_ProcGet_recv(int fd);
void lssproto_ProcGet_send(int fd,char* data);
void lssproto_PlayerNumGet_recv(int fd);
void lssproto_PlayerNumGet_send(int fd,int logincount,int player);
void lssproto_Echo_recv(int fd,char* test);
void lssproto_Echo_send(int fd,char* test);
void lssproto_Shutdown_recv(int fd,char* passwd,int min);

void lssproto_TD_send(int fd, int index, char* message);
void lssproto_TD_recv(int fd, char* message);

#ifdef _CHATROOMPROTOCOL			// (不可开) Syu ADD 聊天室频道
void lssproto_CHATROOM_recv(int fd , char *data) ; 
void lssproto_CHATROOM_send(int fd , char* message ) ; 
#endif

#ifdef _NEWREQUESTPROTOCOL			// (不可开) Syu ADD 新增Protocol要求细项
void lssproto_RESIST_recv(int fd ) ; 
void lssproto_RESIST_send(int fd , char* message ) ; 
#endif
#ifdef _OUTOFBATTLESKILL			// (不可开) Syu ADD 非战斗时技能Protocol
void lssproto_BATTLESKILL_recv(int fd, int iNum) ; 
void lssproto_BATTLESKILL_send(int fd , char* message ) ; 
#endif

void lssproto_NU_send(int fd, int nu);

void lssproto_FM_send(int fd, char* message);
void lssproto_FM_recv(int fd, char* message);

void lssproto_WO_send(int fd,int effect);
void lssproto_PETST_recv( int fd,  int nPet, int sPet);
void lssproto_BM_recv(int fd, int iindex);

#ifdef _FIX_DEL_MAP           // WON ADD 玩家抽地图送监狱
void lssproto_DM_recv( int fd );
#endif

#ifdef _MIND_ICON
void lssproto_MA_recv(int fd, int x, int y, int nMind);
#endif

#ifdef _ITEM_CRACKER
void lssproto_IC_send(int fd, int x, int y);
#endif

#ifdef _ITEM_CRACKER
void lssproto_NC_send(int fd,int flg);
#endif

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

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

#ifdef _PETS_SELECTCON
void lssproto_PETS_send(int fd,int petarray,int result);
//#define LSSPROTO_PETST_SEND 107
#endif

#ifdef _STREET_VENDOR
void lssproto_STREET_VENDOR_recv(int fd,char *message);
void lssproto_STREET_VENDOR_send(int fd,char *message);
#endif

#ifdef _RCLICK
void lssproto_RCLICK_recv(int fd, int type, char* data);
void lssproto_RCLICK_send(int fd, int type, char* data);
#endif

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

#ifdef _TEACHER_SYSTEM
void lssproto_TEACHER_SYSTEM_recv(int fd,char *data);
void lssproto_TEACHER_SYSTEM_send(int fd,char *data);
#endif

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

#endif



