1043 lines
32 KiB
C
1043 lines
32 KiB
C
![]() |
//Terry 2001/09/27
|
|||
|
#include <string.h>
|
|||
|
#include <sys/types.h>
|
|||
|
#include <sys/socket.h>
|
|||
|
#include <netinet/in.h>
|
|||
|
#include <arpa/inet.h>
|
|||
|
#include "char.h"
|
|||
|
#include "object.h"
|
|||
|
#include "char_base.h"
|
|||
|
#include "npcutil.h"
|
|||
|
#include "lssproto_serv.h"
|
|||
|
#include "npc_stoneserviceman.h"
|
|||
|
#include "readmap.h"
|
|||
|
#include "battle.h"
|
|||
|
#include "log.h"
|
|||
|
#include "enemy.h"
|
|||
|
#include "configfile.h"
|
|||
|
|
|||
|
#ifdef _SERVICE
|
|||
|
#define LOOP_TIME 100 //0.1<EFBFBD><EFBFBD>(<28><><EFBFBD><EFBFBD>loop function <20><>ʱ<EFBFBD><CAB1>)
|
|||
|
#define MAX_AP_MSG 128 // <20><><EFBFBD><EFBFBD>AP<41><50><EFBFBD><EFBFBD>ѶϢ<D1B6><CFA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
|||
|
// socket struct
|
|||
|
struct socketaddr_in
|
|||
|
{
|
|||
|
u_short sin_family;
|
|||
|
u_short sin_port;
|
|||
|
u_long sin_addr;
|
|||
|
char sin_zero[8];
|
|||
|
};
|
|||
|
|
|||
|
// <20><><EFBFBD><EFBFBD>AP<41><50><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѶϢ
|
|||
|
typedef struct _MSG
|
|||
|
{
|
|||
|
int nAid; // nAid => <20><>ˮ<EFBFBD><CBAE>*10 + ѶϢ<D1B6><CFA2><EFBFBD><EFBFBD>(_AP_CLIENT_MESSAGE)
|
|||
|
int nIndex; // NPC<50><43>indexֵ
|
|||
|
int nLen; // ѶϢ<D1B6><CFA2><EFBFBD><EFBFBD>
|
|||
|
LPList Data; // ʵ<><CAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
int bIsUse; // <20><><EFBFBD><EFBFBD>ѶϢ<D1B6>Ƿ<EFBFBD><C7B7><EFBFBD>ʹ<EFBFBD>ù<EFBFBD>
|
|||
|
}Msg,*pMsg;
|
|||
|
Msg g_APMsg[MAX_AP_MSG];
|
|||
|
|
|||
|
// <20><><EFBFBD><EFBFBD>id
|
|||
|
enum _AP_CLIENT_MESSAGE
|
|||
|
{
|
|||
|
Cli_CHECKPLAYER, //Ҫ<><D2AA>AP<41><50><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7>й<EFBFBD><D0B9><EFBFBD><EFBFBD><EFBFBD>Ʒ<EFBFBD><C6B7>ȷ<EFBFBD><C8B7> 0
|
|||
|
AP_CHECKPLAYER, //AP<41><50>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7>й<EFBFBD><D0B9><EFBFBD><EFBFBD><EFBFBD>Ʒ
|
|||
|
Cli_YES, //<2F><><EFBFBD><EFBFBD>ȷ<EFBFBD><C8B7>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>Ʒ<EFBFBD><C6B7><EFBFBD><EFBFBD>
|
|||
|
Cli_CANCEL, //֪ͨAP<41><50>lock<63><6B>λ<EFBFBD><CEBB>Ϊ0
|
|||
|
Cli_GET, //֪ͨAP<41><50><EFBFBD><EFBFBD>Ʒ
|
|||
|
AP_GET, //AP<41><50>Ӧ<EFBFBD><D3A6>Ʒ 5
|
|||
|
Cli_CONNECT, //<2F><><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>AP
|
|||
|
AP_CONNECT, //AP<41><50>Ӧ
|
|||
|
AP_ERROR //AP<41>д<EFBFBD><D0B4><EFBFBD>
|
|||
|
};
|
|||
|
|
|||
|
// NPC<50>Ĺ<EFBFBD><C4B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
enum
|
|||
|
{
|
|||
|
NPC_WORK_FLAG1 = CHAR_NPCWORKINT2, //flag1
|
|||
|
NPC_WORK_FLAG2 = CHAR_NPCWORKINT3, //flag2
|
|||
|
NPC_WORK_FLAG3 = CHAR_NPCWORKINT4, //flag3
|
|||
|
NPC_WORK_TIMEOUT = CHAR_NPCWORKINT5, //time out ʱ<><CAB1>
|
|||
|
NPC_WORK_STATE = CHAR_NPCWORKINT6, //Ŀǰִ<C7B0><D6B4>״̬
|
|||
|
NPC_WORK_START = CHAR_NPCWORKINT7, //<2F><>ʼ<EFBFBD><CABC>ʱflag
|
|||
|
NPC_WORK_LEAVE_COUNT = CHAR_NPCWORKINT8, //<2F><><EFBFBD><EFBFBD>talkʱ<6B><CAB1><EFBFBD><EFBFBD>ʱ
|
|||
|
NPC_WORK_TOINDEX = CHAR_NPCWORKINT9, //<2F><><EFBFBD>ҵ<EFBFBD>indexֵ
|
|||
|
NPC_WORK_SERIALNUM = CHAR_NPCWORKINT10, //<2F><>ˮ<EFBFBD><CBAE>
|
|||
|
NPC_WORK_ISUSE = CHAR_NPCWORKINT11, //ĿǰNPC<50>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>
|
|||
|
};
|
|||
|
|
|||
|
// ִ<>е<EFBFBD>״̬
|
|||
|
enum
|
|||
|
{
|
|||
|
SERVICE_STATE_1, // check <20><>û<EFBFBD>к<EFBFBD>AP<41><50><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
SERVICE_STATE_2, // <20><>APȡ<50><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʒ
|
|||
|
SERVICE_STATE_3, // ȡ<><C8A1>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD>ҵĶ<D2B5><C4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
SERVICE_STATE_4 // end state
|
|||
|
};
|
|||
|
|
|||
|
extern int errno;
|
|||
|
|
|||
|
int g_nServiceSocket;
|
|||
|
int g_EnableService = 0;
|
|||
|
char g_ApID[32];
|
|||
|
struct socketaddr_in server_sin;
|
|||
|
struct sockaddr temp;
|
|||
|
unsigned short g_Port;
|
|||
|
|
|||
|
static void NPC_StoneServiceMan_selectWindow(int meindex,int toindex,int num,int select);
|
|||
|
extern int GetSerialNum(void);
|
|||
|
static int flag = 1;
|
|||
|
|
|||
|
/*********************************
|
|||
|
* <EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD>
|
|||
|
*********************************/
|
|||
|
BOOL NPC_StoneServiceManInit(int meindex )
|
|||
|
{
|
|||
|
char npcarg[NPC_UTIL_GETARGSTR_BUFSIZE];
|
|||
|
|
|||
|
if(NPC_Util_GetArgStr(meindex,npcarg,sizeof(npcarg)) == NULL){
|
|||
|
print("StoneServiceMan:GetArgStrErr");
|
|||
|
return FALSE;
|
|||
|
}
|
|||
|
|
|||
|
CHAR_setInt(meindex,CHAR_LOOPINTERVAL,LOOP_TIME);
|
|||
|
CHAR_setInt(meindex,CHAR_WHICHTYPE,CHAR_TYPESTONESERVICEMAN);
|
|||
|
CHAR_setWorkInt(meindex,NPC_WORK_FLAG1,1);
|
|||
|
CHAR_setWorkInt(meindex,NPC_WORK_FLAG2,1);
|
|||
|
CHAR_setWorkInt(meindex,NPC_WORK_FLAG3,1);
|
|||
|
CHAR_setWorkInt(meindex,NPC_WORK_TIMEOUT,0);
|
|||
|
CHAR_setWorkInt(meindex,NPC_WORK_STATE,SERVICE_STATE_2);
|
|||
|
CHAR_setWorkInt(meindex,NPC_WORK_START,0);
|
|||
|
CHAR_setWorkInt(meindex,NPC_WORK_TOINDEX,-1);
|
|||
|
CHAR_setWorkInt(meindex,NPC_WORK_ISUSE,0);
|
|||
|
CHAR_setWorkInt(meindex,NPC_WORK_LEAVE_COUNT,0);
|
|||
|
CHAR_setWorkInt(meindex,NPC_WORK_SERIALNUM,-1);
|
|||
|
|
|||
|
g_EnableService = getEnableService();
|
|||
|
|
|||
|
//<2F><><EFBFBD>ߵ<EFBFBD>AP<41><50>initʱֻ<CAB1><D6BB>һ<EFBFBD><D2BB>
|
|||
|
if(flag && g_EnableService){
|
|||
|
strcpy(g_ApID,getApID());
|
|||
|
g_Port = getApPort();
|
|||
|
bzero(g_APMsg,sizeof(g_APMsg));
|
|||
|
ConnectToAP();//<2F><><EFBFBD>ߵ<EFBFBD>AP
|
|||
|
flag = 0;
|
|||
|
}
|
|||
|
|
|||
|
return TRUE;
|
|||
|
}
|
|||
|
|
|||
|
void NPC_StoneServiceManTalked(int meindex,int talkerindex,char *szMes,int color)
|
|||
|
{
|
|||
|
if(CHAR_getInt(talkerindex,CHAR_WHICHTYPE) != CHAR_TYPEPLAYER) return;
|
|||
|
if(NPC_Util_isFaceToFace(talkerindex,meindex,1) == FALSE) return;
|
|||
|
NPC_StoneServiceMan_selectWindow(meindex,talkerindex,0,-1);
|
|||
|
}
|
|||
|
|
|||
|
static void NPC_StoneServiceMan_selectWindow(int meindex,int toindex,int num,int select)
|
|||
|
{
|
|||
|
char npcarg[NPC_UTIL_GETARGSTR_BUFSIZE];
|
|||
|
char token[1024],buf[128],*pUserid;
|
|||
|
int buttontype = 0, windowtype = 0, windowno = 0,nAid,nLen;
|
|||
|
int fd = getfdFromCharaIndex(toindex);
|
|||
|
char Data[3][32],talk[128];
|
|||
|
int i,j,k,Ret;
|
|||
|
LPList DataList = NULL,Kill = NULL;
|
|||
|
|
|||
|
|
|||
|
if(fd == -1)
|
|||
|
{
|
|||
|
print("getfd err\n");
|
|||
|
return;
|
|||
|
}
|
|||
|
|
|||
|
if(NPC_Util_GetArgStr(meindex,npcarg,sizeof(npcarg)) == NULL)
|
|||
|
{
|
|||
|
print("GetArgStrErr");
|
|||
|
return ;
|
|||
|
}
|
|||
|
|
|||
|
token[0] = '\0';
|
|||
|
|
|||
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>ʯ<EFBFBD><CAAF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ա<EFBFBD>Ĺ<EFBFBD><C4B9><EFBFBD>
|
|||
|
if(!g_EnableService)
|
|||
|
{
|
|||
|
sprintf(token,"\n <20>뵽<EFBFBD><EBB5BD><EFBFBD><EFBFBD>ϵ<EFBFBD><CFB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD>ô˷<C3B4><CBB7><EFBFBD><EFBFBD><EFBFBD>лл<D0BB><D0BB>");
|
|||
|
buttontype = WINDOW_BUTTONTYPE_OK;
|
|||
|
windowtype = WINDOW_MESSAGETYPE_MESSAGE;
|
|||
|
windowno = CHAR_WINDOWTYPE_SERVICE_WAIT;
|
|||
|
|
|||
|
lssproto_WN_send(fd,windowtype,buttontype,windowno,
|
|||
|
CHAR_getWorkInt(meindex,CHAR_WORKOBJINDEX),
|
|||
|
token);
|
|||
|
return;
|
|||
|
}
|
|||
|
|
|||
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǵ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>NPC<50><43><EFBFBD><EFBFBD>
|
|||
|
if(CHAR_getWorkInt(meindex,NPC_WORK_ISUSE) == 0 &&
|
|||
|
CHAR_getWorkInt(meindex,NPC_WORK_TOINDEX) == -1)
|
|||
|
{
|
|||
|
//<2F><>ס<EFBFBD><D7A1>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>NPC<50><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˭
|
|||
|
CHAR_setWorkInt(meindex,NPC_WORK_TOINDEX,toindex);
|
|||
|
//<2F>趨ΪNPC<50><43><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9><EFBFBD><EFBFBD>
|
|||
|
CHAR_setWorkInt(meindex,NPC_WORK_ISUSE,1);
|
|||
|
}
|
|||
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>ǵڶ<C7B5><DAB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>NPC<50><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
else if(CHAR_getWorkInt(meindex,NPC_WORK_ISUSE) == 1 &&
|
|||
|
CHAR_getWorkInt(meindex,NPC_WORK_TOINDEX) != toindex)
|
|||
|
{
|
|||
|
sprintf(token,"\n <20><><EFBFBD>ڷ<EFBFBD><DAB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD>Ե<EFBFBD>...");
|
|||
|
buttontype = WINDOW_BUTTONTYPE_OK;
|
|||
|
windowtype = WINDOW_MESSAGETYPE_MESSAGE;
|
|||
|
windowno = CHAR_WINDOWTYPE_SERVICE_WAIT;
|
|||
|
|
|||
|
lssproto_WN_send(fd,windowtype,buttontype,windowno,
|
|||
|
CHAR_getWorkInt(meindex,CHAR_WORKOBJINDEX),
|
|||
|
token);
|
|||
|
return;
|
|||
|
}
|
|||
|
if(flag)
|
|||
|
{
|
|||
|
ConnectToAP();
|
|||
|
flag = 0;
|
|||
|
}
|
|||
|
switch(num)
|
|||
|
{
|
|||
|
case 0:
|
|||
|
case 1:
|
|||
|
//ȡ<><C8A1><EFBFBD><EFBFBD><EFBFBD>ҵ<EFBFBD>id
|
|||
|
pUserid = CHAR_getChar(toindex,CHAR_CDKEY);
|
|||
|
if(CHAR_getWorkInt(meindex,NPC_WORK_FLAG2) == 1)
|
|||
|
{
|
|||
|
if(pUserid == NULL || SendToAP(Cli_CHECKPLAYER,meindex,1,pUserid,NULL) == 0)
|
|||
|
{
|
|||
|
if(NPC_Util_GetStrFromStrWithDelim(npcarg,"SysBusyMsg",buf,sizeof(buf)) == NULL) return;
|
|||
|
sprintf(token,"\n %s",buf);
|
|||
|
buttontype = WINDOW_BUTTONTYPE_OK;
|
|||
|
windowtype = WINDOW_MESSAGETYPE_MESSAGE;
|
|||
|
windowno = CHAR_WINDOWTYPE_SERVICE_EXIT;
|
|||
|
break;
|
|||
|
}
|
|||
|
CHAR_setWorkInt(meindex,NPC_WORK_FLAG2,0);
|
|||
|
CHAR_setWorkInt(meindex,NPC_WORK_START,1);
|
|||
|
}
|
|||
|
if(CHAR_getWorkInt(meindex,NPC_WORK_STATE) == SERVICE_STATE_2)
|
|||
|
{
|
|||
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>time out
|
|||
|
if(CHAR_getWorkInt(meindex,NPC_WORK_TIMEOUT) >= 50)
|
|||
|
{
|
|||
|
close(g_nServiceSocket);
|
|||
|
flag = 1;
|
|||
|
sprintf(token,"\n <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵͳȡ<CDB3><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>...");
|
|||
|
buttontype = WINDOW_BUTTONTYPE_OK;
|
|||
|
windowtype = WINDOW_MESSAGETYPE_MESSAGE;
|
|||
|
windowno = CHAR_WINDOWTYPE_SERVICE_CONTINUE;
|
|||
|
CHAR_setWorkInt(meindex,NPC_WORK_TIMEOUT,0);
|
|||
|
CHAR_setWorkInt(meindex,NPC_WORK_FLAG2,1);
|
|||
|
CHAR_setWorkInt(meindex,NPC_WORK_START,0);
|
|||
|
break;
|
|||
|
}
|
|||
|
if((Ret = RecvFromAP(&nAid,meindex,&nLen,&DataList)) == -1)
|
|||
|
{
|
|||
|
sprintf(token,"\n <20>ȴ<EFBFBD><C8B4><EFBFBD>Ӧ...");
|
|||
|
buttontype = WINDOW_BUTTONTYPE_OK;
|
|||
|
windowtype = WINDOW_MESSAGETYPE_MESSAGE;
|
|||
|
windowno = CHAR_WINDOWTYPE_SERVICE_CONTINUE;
|
|||
|
break;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
for(i=0;i<nLen;i++)
|
|||
|
{
|
|||
|
strcpy(Data[i],DataList->Data);
|
|||
|
Kill = DataList;
|
|||
|
DataList = DataList->Next;
|
|||
|
if(Kill != NULL) free(Kill);
|
|||
|
}
|
|||
|
// ʹ<>ù<EFBFBD><C3B9><EFBFBD>ѶϢ<D1B6><CFA2><EFBFBD><EFBFBD>
|
|||
|
bzero(&g_APMsg[Ret],sizeof(Msg));
|
|||
|
}
|
|||
|
if(nAid == AP_CHECKPLAYER)
|
|||
|
{
|
|||
|
switch(atoi(Data[0]))
|
|||
|
{
|
|||
|
case 0: //û<><C3BB>
|
|||
|
if(NPC_Util_GetStrFromStrWithDelim(npcarg,"ErrMsg",buf,sizeof(buf)) == NULL) return;
|
|||
|
sprintf(token,"\n %s",buf);
|
|||
|
buttontype = WINDOW_BUTTONTYPE_OK;
|
|||
|
windowtype = WINDOW_MESSAGETYPE_MESSAGE;
|
|||
|
windowno = CHAR_WINDOWTYPE_SERVICE_EXIT;
|
|||
|
break;
|
|||
|
case 1: //<2F><><EFBFBD><EFBFBD>
|
|||
|
if(NPC_Util_GetStrFromStrWithDelim(npcarg,"MainMsg",buf,sizeof(buf)) == NULL) return;
|
|||
|
sprintf(token,"5\n %s"
|
|||
|
"\n <20><>Ҫ<EFBFBD><D2AA>%s"
|
|||
|
"\n <20>Ľ<EFBFBD>Ʒ<EFBFBD><C6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫ<EFBFBD><C9AB><EFBFBD><EFBFBD>\n"
|
|||
|
"\n"
|
|||
|
"\n <20><> ȷ <20><> <20><>"
|
|||
|
"\n"
|
|||
|
"\n <20><> ȡ <20><> <20><>",
|
|||
|
buf,Data[1]);
|
|||
|
buttontype = WINDOW_BUTTONTYPE_NONE;
|
|||
|
windowtype = WINDOW_MESSAGETYPE_SELECT;
|
|||
|
windowno = CHAR_WINDOWTYPE_SERVICE_START;
|
|||
|
break;
|
|||
|
//<2F><>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>ɫ<EFBFBD><C9AB><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9><EFBFBD><EFBFBD>
|
|||
|
case 2:
|
|||
|
sprintf(token,"\n Ŀǰ<C4BF><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>ɫ<EFBFBD><C9AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ.");
|
|||
|
buttontype = WINDOW_BUTTONTYPE_OK;
|
|||
|
windowtype = WINDOW_MESSAGETYPE_MESSAGE;
|
|||
|
windowno = CHAR_WINDOWTYPE_SERVICE_EXIT;
|
|||
|
break;
|
|||
|
//<2F><><EFBFBD>ҵĽ<D2B5>Ʒ<EFBFBD><C6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
case 3:
|
|||
|
sprintf(token,"\n <20><><EFBFBD>Ľ<EFBFBD>Ʒ<EFBFBD>Ѿ<EFBFBD><D1BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>!!");
|
|||
|
buttontype = WINDOW_BUTTONTYPE_OK;
|
|||
|
windowtype = WINDOW_MESSAGETYPE_MESSAGE;
|
|||
|
windowno = CHAR_WINDOWTYPE_SERVICE_EXIT;
|
|||
|
break;
|
|||
|
break;
|
|||
|
}
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
sprintf(token,"\n ϵͳѶϢ<D1B6><CFA2><EFBFBD><EFBFBD>!!(%d)",nAid);
|
|||
|
buttontype = WINDOW_BUTTONTYPE_OK;
|
|||
|
windowtype = WINDOW_MESSAGETYPE_MESSAGE;
|
|||
|
windowno = CHAR_WINDOWTYPE_SERVICE_EXIT;
|
|||
|
}
|
|||
|
CHAR_setWorkInt(meindex,NPC_WORK_TIMEOUT,0);
|
|||
|
CHAR_setWorkInt(meindex,NPC_WORK_FLAG2,1);
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
sprintf(token,"\n <20>ȴ<EFBFBD><C8B4><EFBFBD>Ӧ...");
|
|||
|
buttontype = WINDOW_BUTTONTYPE_OK;
|
|||
|
windowtype = WINDOW_MESSAGETYPE_MESSAGE;
|
|||
|
windowno = CHAR_WINDOWTYPE_SERVICE_CONTINUE;
|
|||
|
}
|
|||
|
break;
|
|||
|
case 2:
|
|||
|
//ȡ<><C8A1><EFBFBD><EFBFBD><EFBFBD>ҵ<EFBFBD>id
|
|||
|
pUserid = CHAR_getChar(toindex,CHAR_CDKEY);
|
|||
|
if(CHAR_getWorkInt(meindex,NPC_WORK_FLAG3) == 1){
|
|||
|
if(pUserid == NULL || SendToAP(Cli_GET,meindex,1,pUserid,NULL) == 0){
|
|||
|
if(NPC_Util_GetStrFromStrWithDelim(npcarg,"SysBusyMsg",buf,sizeof(buf)) == NULL) return;
|
|||
|
sprintf(token,"\n %s",buf);
|
|||
|
buttontype = WINDOW_BUTTONTYPE_OK;
|
|||
|
windowtype = WINDOW_MESSAGETYPE_MESSAGE;
|
|||
|
windowno = CHAR_WINDOWTYPE_SERVICE_EXIT;
|
|||
|
break;
|
|||
|
}
|
|||
|
CHAR_setWorkInt(meindex,NPC_WORK_START,1);
|
|||
|
CHAR_setWorkInt(meindex,NPC_WORK_FLAG3,0);
|
|||
|
}
|
|||
|
if(CHAR_getWorkInt(meindex,NPC_WORK_STATE) == SERVICE_STATE_3){
|
|||
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>time out
|
|||
|
if(CHAR_getWorkInt(meindex,NPC_WORK_TIMEOUT) >= 50){
|
|||
|
close(g_nServiceSocket);
|
|||
|
flag = 1;
|
|||
|
sprintf(token,"\n <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵͳȡ<CDB3><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>...");
|
|||
|
buttontype = WINDOW_BUTTONTYPE_OK;
|
|||
|
windowtype = WINDOW_MESSAGETYPE_MESSAGE;
|
|||
|
windowno = CHAR_WINDOWTYPE_SERVICE_CONTINUE;
|
|||
|
CHAR_setWorkInt(meindex,NPC_WORK_TIMEOUT,0);
|
|||
|
CHAR_setWorkInt(meindex,NPC_WORK_FLAG3,1);
|
|||
|
CHAR_setWorkInt(meindex,NPC_WORK_START,0);
|
|||
|
break;
|
|||
|
}
|
|||
|
if((Ret = RecvFromAP(&nAid,meindex,&nLen,&DataList)) == -1){
|
|||
|
sprintf(token,"\n <20>ȴ<EFBFBD><C8B4><EFBFBD>Ӧ...");
|
|||
|
buttontype = WINDOW_BUTTONTYPE_OK;
|
|||
|
windowtype = WINDOW_MESSAGETYPE_MESSAGE;
|
|||
|
windowno = CHAR_WINDOWTYPE_SERVICE_CONTINUE;
|
|||
|
break;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
for(i=0;i<nLen;i++)
|
|||
|
{
|
|||
|
strcpy(Data[i],DataList->Data);
|
|||
|
Kill = DataList;
|
|||
|
DataList = DataList->Next;
|
|||
|
if(Kill != NULL) free(Kill);
|
|||
|
}
|
|||
|
// ʹ<>ù<EFBFBD><C3B9><EFBFBD>ѶϢ<D1B6><CFA2><EFBFBD><EFBFBD>
|
|||
|
bzero(&g_APMsg[Ret],sizeof(Msg));
|
|||
|
}
|
|||
|
if(nAid == AP_GET)
|
|||
|
{
|
|||
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>Ǹ<EFBFBD>Ǯ
|
|||
|
//ȷ<><C8B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD>пյ<D0BF><D5B5><EFBFBD>λ
|
|||
|
if(atoi(Data[2]) == 0){
|
|||
|
if(CHAR_getInt(toindex,CHAR_GOLD)+atoi(Data[1]) > CHAR_getMaxHaveGold(toindex) ){
|
|||
|
sprintf(token,"\n"
|
|||
|
"\n <20><><EFBFBD><EFBFBD><EFBFBD>ϵĿռ䲻<D5BC><E4B2BB><EFBFBD>Է<EFBFBD><D4B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ǯ<EFBFBD><C7AE>\n");
|
|||
|
buttontype = WINDOW_BUTTONTYPE_OK;
|
|||
|
windowtype = WINDOW_MESSAGETYPE_MESSAGE;
|
|||
|
windowno = CHAR_WINDOWTYPE_SERVICE_EXIT;
|
|||
|
break;
|
|||
|
}else{
|
|||
|
CHAR_AddGold( toindex, atoi(Data[1]) );
|
|||
|
|
|||
|
CHAR_send_P_StatusString(toindex,CHAR_P_STRING_GOLD);
|
|||
|
LogService(CHAR_getChar(toindex,CHAR_NAME),
|
|||
|
CHAR_getChar(toindex,CHAR_CDKEY),
|
|||
|
atoi(Data[1]),
|
|||
|
"Ǯ",
|
|||
|
CHAR_getInt(toindex,CHAR_FLOOR),
|
|||
|
CHAR_getInt(toindex,CHAR_X),
|
|||
|
CHAR_getInt(toindex,CHAR_Y)
|
|||
|
);
|
|||
|
sprintf(talk,"%sʯ<73><CAAF><EFBFBD>Ѿ<EFBFBD><D1BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>!!\n",Data[1]);
|
|||
|
}
|
|||
|
}
|
|||
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>Ǹ<EFBFBD><C7B8><EFBFBD>Ʒ
|
|||
|
else if(atoi(Data[2]) == 1){
|
|||
|
//ȷ<><C8B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD>пյ<D0BF><D5B5><EFBFBD>λ
|
|||
|
int num = 0,itemindex = 0;
|
|||
|
|
|||
|
for(i=CHAR_STARTITEMARRAY;i<CHAR_MAXITEMHAVE;i++)
|
|||
|
if(CHAR_getItemIndex(toindex,i) != -1) num++;
|
|||
|
if(atoi(Data[1])+num > CHAR_MAXITEMNUM){
|
|||
|
sprintf(token,"\n"
|
|||
|
"\n <20><><EFBFBD>ĵ<EFBFBD><C4B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ռ䲻<D5BC><E4B2BB><EFBFBD><EFBFBD>\n");
|
|||
|
buttontype = WINDOW_BUTTONTYPE_OK;
|
|||
|
windowtype = WINDOW_MESSAGETYPE_MESSAGE;
|
|||
|
windowno = CHAR_WINDOWTYPE_SERVICE_EXIT;
|
|||
|
break;
|
|||
|
}
|
|||
|
//<2F>пյ<D0BF><D5B5><EFBFBD>λ
|
|||
|
for(j=0;j<atoi(Data[1]);j++){
|
|||
|
for(i=CHAR_STARTITEMARRAY;i<CHAR_MAXITEMHAVE;i++){
|
|||
|
if(CHAR_getItemIndex(toindex,i) == -1){
|
|||
|
itemindex = ITEM_makeItemAndRegist(atoi(Data[0]));
|
|||
|
CHAR_setItemIndex(toindex,i,itemindex);
|
|||
|
ITEM_setWorkInt(itemindex,ITEM_WORKOBJINDEX,-1);
|
|||
|
ITEM_setWorkInt(itemindex,ITEM_WORKCHARAINDEX,toindex);
|
|||
|
CHAR_sendItemDataOne(toindex,i);
|
|||
|
LogService(CHAR_getChar(toindex,CHAR_NAME),
|
|||
|
CHAR_getChar(toindex,CHAR_CDKEY),
|
|||
|
atoi(Data[0]),
|
|||
|
"<EFBFBD><EFBFBD>Ʒ",
|
|||
|
CHAR_getInt(toindex,CHAR_FLOOR),
|
|||
|
CHAR_getInt(toindex,CHAR_X),
|
|||
|
CHAR_getInt(toindex,CHAR_Y)
|
|||
|
);
|
|||
|
break;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
sprintf(talk,"%s %s<><73><EFBFBD>Ѿ<EFBFBD><D1BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>!!\n",ITEM_getAppropriateName(itemindex),Data[1]);
|
|||
|
}
|
|||
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>Ǹ<EFBFBD><C7B8><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
else if(atoi(Data[2]) == 2)
|
|||
|
{
|
|||
|
//ȷ<><C8B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD>пյ<D0BF><D5B5><EFBFBD>λ
|
|||
|
int num = 0,ret = 0;
|
|||
|
|
|||
|
for(i=0;i<CHAR_MAXPETHAVE;i++)
|
|||
|
if(CHAR_getCharPet(toindex,i) != -1) num++;
|
|||
|
if(atoi(Data[1])+num > CHAR_MAXPETHAVE)
|
|||
|
{
|
|||
|
sprintf(token,"\n"
|
|||
|
"\n <20><><EFBFBD>ij<EFBFBD><C4B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ռ䲻<D5BC><E4B2BB><EFBFBD><EFBFBD>\n");
|
|||
|
buttontype = WINDOW_BUTTONTYPE_OK;
|
|||
|
windowtype = WINDOW_MESSAGETYPE_MESSAGE;
|
|||
|
windowno = CHAR_WINDOWTYPE_SERVICE_EXIT;
|
|||
|
break;
|
|||
|
}
|
|||
|
//<2F>пյ<D0BF><D5B5><EFBFBD>λ
|
|||
|
for(j=0;j<atoi(Data[1]);j++)
|
|||
|
{
|
|||
|
for(i=0;i<CHAR_MAXPETHAVE;i++)
|
|||
|
{
|
|||
|
if(CHAR_getCharPet(toindex,i) == -1)
|
|||
|
{
|
|||
|
int enemynum,count;
|
|||
|
char msgbuf[64];
|
|||
|
|
|||
|
enemynum = ENEMY_getEnemyNum();
|
|||
|
for(k=0;k<enemynum;k++)
|
|||
|
{
|
|||
|
if(ENEMY_getInt(k,ENEMY_ID) == atoi(Data[0])) break;
|
|||
|
}
|
|||
|
if(k == enemynum) break;
|
|||
|
|
|||
|
ret = ENEMY_createPetFromEnemyIndex( toindex,k);
|
|||
|
CHAR_setCharPet(toindex,i,ret);
|
|||
|
snprintf(msgbuf,sizeof(msgbuf),"K%d",i);
|
|||
|
CHAR_sendStatusString(toindex,msgbuf);
|
|||
|
snprintf(msgbuf,sizeof(msgbuf),"W%d",i);
|
|||
|
CHAR_sendStatusString(toindex,msgbuf);
|
|||
|
|
|||
|
for(count=0;count<CHAR_MAXPETHAVE;count++)
|
|||
|
{
|
|||
|
if(CHAR_getCharPet(toindex,count) == ret)
|
|||
|
{
|
|||
|
CHAR_send_K_StatusString(toindex,count,CHAR_K_STRING_HP|CHAR_K_STRING_AI);
|
|||
|
}
|
|||
|
}
|
|||
|
//CHAR_setInt(petindex,CHAR_VARIABLEAI,CHAR_MAXVARIABLEAI);
|
|||
|
LogService(CHAR_getChar(toindex,CHAR_NAME),
|
|||
|
CHAR_getChar(toindex,CHAR_CDKEY),
|
|||
|
atoi(Data[0]),
|
|||
|
"<EFBFBD><EFBFBD><EFBFBD><EFBFBD>",
|
|||
|
CHAR_getInt(toindex,CHAR_FLOOR),
|
|||
|
CHAR_getInt(toindex,CHAR_X),
|
|||
|
CHAR_getInt(toindex,CHAR_Y)
|
|||
|
);
|
|||
|
break;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
sprintf(talk,"%s %sֻ<73>Ѿ<EFBFBD><D1BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>!!\n",CHAR_getChar(ret,CHAR_NAME),Data[1]);
|
|||
|
}
|
|||
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϴ浵
|
|||
|
CHAR_charSaveFromConnect(CHAR_getWorkInt(toindex,CHAR_WORKFD),0);
|
|||
|
if(pUserid == NULL || SendToAP(Cli_YES,meindex,1,pUserid,NULL) == 0)
|
|||
|
{
|
|||
|
if(NPC_Util_GetStrFromStrWithDelim(npcarg,"SysBusyMsg",buf,sizeof(buf)) == NULL) return;
|
|||
|
sprintf(token,"\n %s",buf);
|
|||
|
buttontype = WINDOW_BUTTONTYPE_OK;
|
|||
|
windowtype = WINDOW_MESSAGETYPE_MESSAGE;
|
|||
|
windowno = CHAR_WINDOWTYPE_SERVICE_EXIT;
|
|||
|
LogService(CHAR_getChar(toindex,CHAR_NAME),
|
|||
|
CHAR_getChar(toindex,CHAR_CDKEY),
|
|||
|
-1,
|
|||
|
"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD>ﵫCli_YESû<EFBFBD>͵<EFBFBD>AP",
|
|||
|
CHAR_getInt(toindex,CHAR_FLOOR),
|
|||
|
CHAR_getInt(toindex,CHAR_X),
|
|||
|
CHAR_getInt(toindex,CHAR_Y)
|
|||
|
);
|
|||
|
break;
|
|||
|
}
|
|||
|
if(NPC_Util_GetStrFromStrWithDelim(npcarg , "ExitMsg" , buf , sizeof(buf)) == NULL) return;
|
|||
|
sprintf(token,"%s %s",talk,buf);
|
|||
|
buttontype = WINDOW_BUTTONTYPE_OK;
|
|||
|
windowtype = WINDOW_MESSAGETYPE_MESSAGE;
|
|||
|
windowno = CHAR_WINDOWTYPE_SERVICE_EXIT;
|
|||
|
CHAR_setWorkInt(meindex,NPC_WORK_TIMEOUT,0);
|
|||
|
CHAR_setWorkInt(meindex,NPC_WORK_FLAG3,1);
|
|||
|
CHAR_setWorkInt(meindex,NPC_WORK_STATE,SERVICE_STATE_4);
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
sprintf(token,"\n ϵͳѶϢ<D1B6><CFA2><EFBFBD><EFBFBD>!!(%d)",nAid);
|
|||
|
buttontype = WINDOW_BUTTONTYPE_OK;
|
|||
|
windowtype = WINDOW_MESSAGETYPE_MESSAGE;
|
|||
|
windowno = CHAR_WINDOWTYPE_SERVICE_EXIT;
|
|||
|
break;
|
|||
|
}
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
sprintf(token,"\n <20>ȴ<EFBFBD><C8B4><EFBFBD>Ӧ...");
|
|||
|
buttontype = WINDOW_BUTTONTYPE_OK;
|
|||
|
windowtype = WINDOW_MESSAGETYPE_MESSAGE;
|
|||
|
windowno = CHAR_WINDOWTYPE_SERVICE_CONTINUE;
|
|||
|
}
|
|||
|
break;
|
|||
|
case 3:
|
|||
|
pUserid = CHAR_getChar(toindex,CHAR_CDKEY);
|
|||
|
if(NPC_Util_GetStrFromStrWithDelim(npcarg,"CancelMsg",buf,sizeof(buf)) == NULL) return;
|
|||
|
sprintf(token,"\n %s",buf);
|
|||
|
buttontype = WINDOW_BUTTONTYPE_OK;
|
|||
|
windowtype = WINDOW_MESSAGETYPE_MESSAGE;
|
|||
|
windowno = CHAR_WINDOWTYPE_SERVICE_EXIT;
|
|||
|
break;
|
|||
|
}
|
|||
|
|
|||
|
lssproto_WN_send(fd,windowtype,buttontype,windowno,
|
|||
|
CHAR_getWorkInt(meindex,CHAR_WORKOBJINDEX),
|
|||
|
token);
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
void NPC_StoneServiceManLoop(int meindex)
|
|||
|
{
|
|||
|
int nLeaveCount,nTimeout;
|
|||
|
fd_set readfds;
|
|||
|
struct timeval tm;
|
|||
|
LPList kill = NULL;
|
|||
|
//static unsigned int dwLifeTime = 0;
|
|||
|
|
|||
|
if(g_EnableService)
|
|||
|
{
|
|||
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Һ<EFBFBD>NPC<50><43><EFBFBD><EFBFBD><EFBFBD>˾Ϳ<CBBE>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>
|
|||
|
if(CHAR_getWorkInt(meindex,NPC_WORK_ISUSE) == 1)
|
|||
|
{
|
|||
|
nLeaveCount = CHAR_getWorkInt(meindex,NPC_WORK_LEAVE_COUNT);
|
|||
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҳ<EFBFBD><D2B3><EFBFBD>ʱ<EFBFBD><CAB1>û<EFBFBD><C3BB><EFBFBD>ɶ<EFBFBD><C9B6><EFBFBD>(Ҳ<>п<EFBFBD><D0BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD>а<EFBFBD><D0B0><EFBFBD>ok<6F><6B><EFBFBD>뿪<EFBFBD>Ի<EFBFBD><D4BB><EFBFBD>)
|
|||
|
// <20><>ʱҪ<CAB1><D2AA>NPC<50>Ĺ<EFBFBD><C4B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>talk
|
|||
|
if(nLeaveCount > getLoopTime())
|
|||
|
{
|
|||
|
int talkerindex,i;
|
|||
|
char *pUserid;
|
|||
|
|
|||
|
talkerindex = CHAR_getWorkInt(meindex,NPC_WORK_TOINDEX);
|
|||
|
pUserid = CHAR_getChar(talkerindex,CHAR_CDKEY);
|
|||
|
if(pUserid != NULL) SendToAP(Cli_CANCEL,meindex,1,pUserid,NULL);
|
|||
|
CHAR_setWorkInt(meindex,NPC_WORK_FLAG1,1);
|
|||
|
CHAR_setWorkInt(meindex,NPC_WORK_FLAG2,1);
|
|||
|
CHAR_setWorkInt(meindex,NPC_WORK_FLAG3,1);
|
|||
|
CHAR_setWorkInt(meindex,NPC_WORK_STATE,SERVICE_STATE_2);
|
|||
|
CHAR_setWorkInt(meindex,NPC_WORK_START,0);
|
|||
|
CHAR_setWorkInt(meindex,NPC_WORK_TIMEOUT,0);
|
|||
|
CHAR_setWorkInt(meindex,NPC_WORK_TOINDEX,-1);
|
|||
|
CHAR_setWorkInt(meindex,NPC_WORK_ISUSE,0);
|
|||
|
CHAR_setWorkInt(meindex,NPC_WORK_LEAVE_COUNT,0);
|
|||
|
CHAR_setWorkInt(meindex,NPC_WORK_SERIALNUM,-1);
|
|||
|
//<2F><>֮ǰ<D6AE>յ<EFBFBD><D5B5>й<EFBFBD><D0B9><EFBFBD><EFBFBD><EFBFBD>NPC<50><43>ѶϢbuf<75><66><EFBFBD><EFBFBD>
|
|||
|
for(i=0;i<MAX_AP_MSG;i++)
|
|||
|
{
|
|||
|
// <20><><EFBFBD><EFBFBD>ѶϢ<D1B6><CFA2><EFBFBD><EFBFBD>û<EFBFBD>б<EFBFBD>ʹ<EFBFBD><CAB9>
|
|||
|
if(g_APMsg[i].bIsUse == 1)
|
|||
|
{
|
|||
|
// <20><><EFBFBD><EFBFBD><EFBFBD>Dz<EFBFBD><C7B2><EFBFBD><EFBFBD><EFBFBD><CDB8><EFBFBD><EFBFBD><EFBFBD>NPC<50><43>ѶϢ
|
|||
|
if(g_APMsg[i].nIndex == meindex)
|
|||
|
{
|
|||
|
// ʹ<>ù<EFBFBD><C3B9><EFBFBD>ѶϢ<D1B6><CFA2><EFBFBD><EFBFBD>
|
|||
|
while(g_APMsg[i].Data != NULL)
|
|||
|
{
|
|||
|
kill = g_APMsg[i].Data;
|
|||
|
g_APMsg[i].Data = g_APMsg[i].Data->Next;
|
|||
|
if(kill != NULL) free(kill);
|
|||
|
}
|
|||
|
bzero(&g_APMsg[i],sizeof(Msg));
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
print("Player leave NPC\n");
|
|||
|
return;
|
|||
|
}
|
|||
|
// δ<><CEB4><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
CHAR_setWorkInt(meindex,NPC_WORK_LEAVE_COUNT,++nLeaveCount);
|
|||
|
}
|
|||
|
|
|||
|
/*if(dwLifeTime > 3000)
|
|||
|
{
|
|||
|
SendToAP(Cli_CONNECT,meindex,0,NULL,NULL);
|
|||
|
dwLifeTime = 0;
|
|||
|
print("\nI'm life!!!!!");
|
|||
|
}
|
|||
|
else dwLifeTime++;*/
|
|||
|
// NPC_WORK_STARTΪ1ʱ<31><CAB1>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊtime out
|
|||
|
if(CHAR_getWorkInt(meindex,NPC_WORK_START) == 1)
|
|||
|
{
|
|||
|
tm.tv_sec = 0;
|
|||
|
tm.tv_usec = 0;
|
|||
|
FD_ZERO(&readfds);
|
|||
|
FD_SET(g_nServiceSocket,&readfds);
|
|||
|
// <20><><EFBFBD><EFBFBD>AP<41><50>û<EFBFBD><C3BB><EFBFBD><EFBFBD>ѶϢ<D1B6><CFA2><EFBFBD><EFBFBD>
|
|||
|
if(!select(g_nServiceSocket+1,&readfds,NULL,NULL,&tm))
|
|||
|
{
|
|||
|
nTimeout = CHAR_getWorkInt(meindex,NPC_WORK_TIMEOUT);
|
|||
|
CHAR_setWorkInt(meindex,NPC_WORK_TIMEOUT,++nTimeout);
|
|||
|
return;
|
|||
|
}
|
|||
|
print("\nAP send message.");
|
|||
|
|
|||
|
// <20><><EFBFBD><EFBFBD>ѶϢ<D1B6><CFA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѶϢ
|
|||
|
switch(GetMsg(meindex))
|
|||
|
{
|
|||
|
//<2F><><EFBFBD><EFBFBD>ѶϢ<D1B6><CFA2><EFBFBD>Ǹ<EFBFBD><C7B8><EFBFBD><EFBFBD><EFBFBD>NPC
|
|||
|
case 0:
|
|||
|
print("Msg not send to this npc!!\n");
|
|||
|
nTimeout = CHAR_getWorkInt(meindex,NPC_WORK_TIMEOUT);
|
|||
|
CHAR_setWorkInt(meindex,NPC_WORK_TIMEOUT,++nTimeout);
|
|||
|
return;
|
|||
|
case -1: break; //<2F><><EFBFBD><EFBFBD>connect to ap
|
|||
|
case -2: print("Msg buf is full!!\n"); break; // ѶϢbuffer<65>ù<EFBFBD><C3B9><EFBFBD>
|
|||
|
case -3: print("Msg data is wrong!!\n"); break; // ѶϢ<D1B6><CFA2><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD>
|
|||
|
case -4: print("calloc fail!!\n"); break; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ô<EFBFBD>ʧ<EFBFBD><CAA7>
|
|||
|
case -5: print("\nAP send get I'm life"); break; // AP<41>յ<EFBFBD>Cli_CONNECT<43>Ļ<EFBFBD>Ӧ
|
|||
|
}
|
|||
|
CHAR_setWorkInt(meindex,NPC_WORK_START,0);
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
void NPC_StoneServiceManWindowTalked(int meindex,int talkerindex,int seqno,int select,char *data)
|
|||
|
{
|
|||
|
int datanum = -1,i;
|
|||
|
char *pUserid;
|
|||
|
LPList Kill = NULL;
|
|||
|
|
|||
|
makeStringFromEscaped(data);
|
|||
|
datanum = atoi( data);
|
|||
|
switch(seqno)
|
|||
|
{
|
|||
|
case CHAR_WINDOWTYPE_SERVICE_START:
|
|||
|
if(datanum == 1)
|
|||
|
{
|
|||
|
CHAR_setWorkInt(meindex,NPC_WORK_STATE,SERVICE_STATE_3);
|
|||
|
NPC_StoneServiceMan_selectWindow(meindex,talkerindex,2,-1);
|
|||
|
}
|
|||
|
else
|
|||
|
if(datanum == 3) NPC_StoneServiceMan_selectWindow(meindex,talkerindex,3,-1);
|
|||
|
break;
|
|||
|
case CHAR_WINDOWTYPE_SERVICE_EXIT:
|
|||
|
pUserid = CHAR_getChar(talkerindex,CHAR_CDKEY);
|
|||
|
if(pUserid != NULL) SendToAP(Cli_CANCEL,meindex,1,pUserid,NULL);
|
|||
|
CHAR_setWorkInt(meindex,NPC_WORK_FLAG1,1);
|
|||
|
CHAR_setWorkInt(meindex,NPC_WORK_FLAG2,1);
|
|||
|
CHAR_setWorkInt(meindex,NPC_WORK_FLAG3,1);
|
|||
|
CHAR_setWorkInt(meindex,NPC_WORK_STATE,SERVICE_STATE_2);
|
|||
|
CHAR_setWorkInt(meindex,NPC_WORK_START,0);
|
|||
|
CHAR_setWorkInt(meindex,NPC_WORK_TIMEOUT,0);
|
|||
|
CHAR_setWorkInt(meindex,NPC_WORK_TOINDEX,-1);
|
|||
|
CHAR_setWorkInt(meindex,NPC_WORK_ISUSE,0);
|
|||
|
CHAR_setWorkInt(meindex,NPC_WORK_LEAVE_COUNT,0);
|
|||
|
CHAR_setWorkInt(meindex,NPC_WORK_SERIALNUM,-1);
|
|||
|
//<2F><>֮ǰ<D6AE>յ<EFBFBD><D5B5>й<EFBFBD><D0B9><EFBFBD><EFBFBD><EFBFBD>NPC<50><43>ѶϢbuf<75><66><EFBFBD><EFBFBD>
|
|||
|
for(i=0;i<MAX_AP_MSG;i++)
|
|||
|
{
|
|||
|
// <20><><EFBFBD><EFBFBD>ѶϢ<D1B6><CFA2><EFBFBD><EFBFBD>û<EFBFBD>б<EFBFBD>ʹ<EFBFBD><CAB9>
|
|||
|
if(g_APMsg[i].bIsUse == 1)
|
|||
|
{
|
|||
|
// <20><><EFBFBD><EFBFBD><EFBFBD>Dz<EFBFBD><C7B2><EFBFBD><EFBFBD><EFBFBD><CDB8><EFBFBD><EFBFBD><EFBFBD>NPC<50><43>ѶϢ
|
|||
|
if(g_APMsg[i].nIndex == meindex)
|
|||
|
{
|
|||
|
// ʹ<>ù<EFBFBD><C3B9><EFBFBD>ѶϢ<D1B6><CFA2><EFBFBD><EFBFBD>
|
|||
|
while(g_APMsg[i].Data != NULL)
|
|||
|
{
|
|||
|
Kill = g_APMsg[i].Data;
|
|||
|
if(g_APMsg[i].Data->Next != NULL)
|
|||
|
{
|
|||
|
g_APMsg[i].Data = g_APMsg[i].Data->Next;
|
|||
|
if(Kill != NULL) free(Kill);
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
if(Kill != NULL) free(Kill);
|
|||
|
break;
|
|||
|
}
|
|||
|
}
|
|||
|
bzero(&g_APMsg[i],sizeof(Msg));
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
case CHAR_WINDOWTYPE_SERVICE_CONTINUE:
|
|||
|
if(CHAR_getWorkInt(meindex,NPC_WORK_STATE) == SERVICE_STATE_1)
|
|||
|
{
|
|||
|
NPC_StoneServiceMan_selectWindow(meindex,talkerindex,0,-1);
|
|||
|
}
|
|||
|
if(CHAR_getWorkInt(meindex,NPC_WORK_STATE) == SERVICE_STATE_2)
|
|||
|
{
|
|||
|
NPC_StoneServiceMan_selectWindow(meindex,talkerindex,1,-1);
|
|||
|
}
|
|||
|
if(CHAR_getWorkInt(meindex,NPC_WORK_STATE) == SERVICE_STATE_3)
|
|||
|
{
|
|||
|
NPC_StoneServiceMan_selectWindow(meindex,talkerindex,2,-1);
|
|||
|
}
|
|||
|
break;
|
|||
|
case CHAR_WINDOWTYPE_SERVICE_WAIT:
|
|||
|
break;
|
|||
|
default:
|
|||
|
print("ERROR type\n");
|
|||
|
break;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
//<2F><>ѶϢ<D1B6><CFA2>AP
|
|||
|
|
|||
|
//nAid (Cli_????) nIndex (npc Index) nLen (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϱ<EFBFBD><CFB1><EFBFBD>) Data1 (user cdkey)
|
|||
|
int SendToAP(int nAid,int nIndex,int nLen,void *Data1,void *Data2)
|
|||
|
{
|
|||
|
char buf[128];
|
|||
|
char *pData[2];
|
|||
|
int i,j,bufnum;
|
|||
|
fd_set fdset;
|
|||
|
struct timeval tmv;
|
|||
|
int ret;
|
|||
|
// Syu ADD <20><><EFBFBD><EFBFBD>ʯ<EFBFBD><CAAF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ա<EFBFBD><D4B1>ϵȷ<CFB5><C8B7>
|
|||
|
char *sags="";
|
|||
|
if( strcmp ( getAccountservername() , "210.64.50.31") == 0 ) sags = "sags31"; //<2F><><EFBFBD><EFBFBD>
|
|||
|
if( strcmp ( getAccountservername() , "210.64.50.41") == 0 ) sags = "sags41"; //<2F><><EFBFBD><EFBFBD>
|
|||
|
if( strcmp ( getAccountservername() , "210.64.50.51") == 0 ) sags = "sags51"; //̫<><CCAB>
|
|||
|
if( strcmp ( getAccountservername() , "210.64.50.61") == 0 ) sags = "sags61"; //<2F><>
|
|||
|
if( strcmp ( getAccountservername() , "210.64.50.71") == 0 ) sags = "sags71"; //<2F><><EFBFBD><EFBFBD>
|
|||
|
if( strcmp ( getAccountservername() , "210.64.50.81") == 0 ) sags = "sags81"; //<2F><><EFBFBD><EFBFBD>
|
|||
|
if( strcmp ( getAccountservername() , "210.64.50.91") == 0 ) sags = "sags91"; //<2F><>ӥ
|
|||
|
if( strcmp ( getAccountservername() , "210.64.50.101") == 0 ) sags = "sags101"; //<2F><>·<EFBFBD><C2B7>ͥ
|
|||
|
if( strcmp ( getAccountservername() , "210.64.50.106") == 0 ) sags = "sags106"; //<2F><><EFBFBD><EFBFBD>
|
|||
|
if( strcmp ( getAccountservername() , "210.64.50.111") == 0 ) sags = "sags111"; //ʥ<><CAA5>
|
|||
|
if( strcmp ( getAccountservername() , "152.104.1.206") == 0 ) sags = "hkgs206"; //<2F><><EFBFBD><EFBFBD>
|
|||
|
if( strcmp ( getAccountservername() , "202.134.122.130") == 0 ) sags = "hkgs130"; //<2F>½<EFBFBD>
|
|||
|
|
|||
|
|
|||
|
bzero(buf,sizeof(buf));
|
|||
|
pData[0] = (char*)Data1;
|
|||
|
pData[1] = (char*)Data2;
|
|||
|
|
|||
|
// <20><><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>
|
|||
|
// ȡ<><C8A1><EFBFBD><EFBFBD>ˮ<EFBFBD><CBAE>
|
|||
|
nAid = GetSerialNum()*10+nAid;
|
|||
|
// Syu ADD <20><><EFBFBD><EFBFBD>ʯ<EFBFBD><CAAF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ա<EFBFBD><D4B1>ϵȷ<CFB5><C8B7>
|
|||
|
nLen=2;
|
|||
|
|
|||
|
sprintf(buf,"&;%d;%d;%d;",nAid,nIndex,nLen);
|
|||
|
CHAR_setWorkInt(nIndex,NPC_WORK_SERIALNUM,nAid/10);
|
|||
|
if(nLen > 0)
|
|||
|
{
|
|||
|
// Syu ADD <20><><EFBFBD><EFBFBD>ʯ<EFBFBD><CAAF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ա<EFBFBD><D4B1>ϵȷ<CFB5><C8B7>
|
|||
|
for(j = 0 ; j < 1 ; j++)
|
|||
|
|
|||
|
{
|
|||
|
for(i = strlen(buf) ; i < 128 ; i++)
|
|||
|
{
|
|||
|
if(*pData[j] == '\0')
|
|||
|
break;
|
|||
|
else if(*pData[j] == ';')
|
|||
|
{
|
|||
|
buf[i] = '\\';
|
|||
|
buf[++i] = ';';
|
|||
|
}
|
|||
|
else if(*pData[j] == '\\')
|
|||
|
{
|
|||
|
buf[i] = '\\';
|
|||
|
buf[++i] = '\\';
|
|||
|
}
|
|||
|
else if(*pData[j] == '&')
|
|||
|
{
|
|||
|
buf[i] = '\\';
|
|||
|
buf[++i] = '&';
|
|||
|
}
|
|||
|
else buf[i] = *pData[j];
|
|||
|
pData[j]++;
|
|||
|
}
|
|||
|
// Syu ADD <20><><EFBFBD><EFBFBD>ʯ<EFBFBD><CAAF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ա<EFBFBD><D4B1>ϵȷ<CFB5><C8B7>
|
|||
|
strcat(buf,";");
|
|||
|
strcat(buf,sags);
|
|||
|
|
|||
|
buf[strlen(buf)] = ';';
|
|||
|
|
|||
|
}
|
|||
|
}
|
|||
|
else strcat(buf,"0;0;");
|
|||
|
|
|||
|
|
|||
|
memset(&buf[strlen(buf)],'&',sizeof(buf)-strlen(buf));
|
|||
|
|
|||
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD>ɲ<EFBFBD><C9B2><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD>ѶϢ
|
|||
|
FD_ZERO(&fdset);
|
|||
|
FD_SET(g_nServiceSocket,&fdset);
|
|||
|
tmv.tv_sec = tmv.tv_usec = 0;
|
|||
|
ret = select(g_nServiceSocket + 1,(fd_set*)NULL,&fdset,(fd_set*)NULL,&tmv);
|
|||
|
print("ret1=%d ",ret);
|
|||
|
|
|||
|
|
|||
|
if(ret > 0)
|
|||
|
{
|
|||
|
// <20><>ѶϢ<D1B6><CFA2>AP
|
|||
|
print("\n**SendToAP**:[%s]",buf);
|
|||
|
if((bufnum = write(g_nServiceSocket,buf,sizeof(buf))) < 0)
|
|||
|
{
|
|||
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧȥ<CAA7><C8A5><EFBFBD><EFBFBD>
|
|||
|
print("reconnect to server!\n");
|
|||
|
close(g_nServiceSocket);
|
|||
|
flag = 1;
|
|||
|
return 0;
|
|||
|
}
|
|||
|
print("\nSend %d bytes to AP.",bufnum);
|
|||
|
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
print("reconnect to server!\n");
|
|||
|
close(g_nServiceSocket);
|
|||
|
flag = 1;
|
|||
|
|
|||
|
return 0;
|
|||
|
}
|
|||
|
|
|||
|
return 1;
|
|||
|
}
|
|||
|
|
|||
|
//<2F>յ<EFBFBD>AP<41><50>Ӧ<EFBFBD><D3A6>ѶϢ
|
|||
|
int RecvFromAP(int *nAid,int nIndex,int *nLen,LPList *Data)
|
|||
|
{
|
|||
|
int i;
|
|||
|
|
|||
|
for(i=0;i<MAX_AP_MSG;i++)
|
|||
|
{
|
|||
|
// <20><><EFBFBD><EFBFBD>ѶϢ<D1B6><CFA2><EFBFBD><EFBFBD>û<EFBFBD>б<EFBFBD>ʹ<EFBFBD><CAB9>
|
|||
|
if(g_APMsg[i].bIsUse == 1)
|
|||
|
{
|
|||
|
// <20><><EFBFBD><EFBFBD><EFBFBD>Dz<EFBFBD><C7B2><EFBFBD><EFBFBD><EFBFBD><CDB8><EFBFBD><EFBFBD><EFBFBD>NPC<50><43>ѶϢ
|
|||
|
if(g_APMsg[i].nIndex == nIndex)
|
|||
|
{
|
|||
|
*nAid = g_APMsg[i].nAid;
|
|||
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ˮ<EFBFBD>ŶԲ<C5B6><D4B2><EFBFBD>
|
|||
|
if((*nAid)/10 == CHAR_getWorkInt(nIndex,NPC_WORK_SERIALNUM))
|
|||
|
{
|
|||
|
*nAid = *nAid%10;
|
|||
|
*nLen = g_APMsg[i].nLen;
|
|||
|
*Data = g_APMsg[i].Data;
|
|||
|
|
|||
|
return i;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
return -1;
|
|||
|
}
|
|||
|
|
|||
|
int GetMsg(int meindex)
|
|||
|
{
|
|||
|
char buf[128];
|
|||
|
char temp[3][128];
|
|||
|
char *p;
|
|||
|
int i = 0,j;
|
|||
|
pMsg Msg = NULL;
|
|||
|
LPList tempList = NULL;
|
|||
|
|
|||
|
bzero(buf,sizeof(buf));
|
|||
|
// <20><><EFBFBD><EFBFBD>AP<41><50><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѶϢ
|
|||
|
if(read(g_nServiceSocket,buf,sizeof(buf)) <= 0)
|
|||
|
{
|
|||
|
print("can't read message!\n");
|
|||
|
//<2F><><EFBFBD><EFBFBD>AP
|
|||
|
close(g_nServiceSocket);
|
|||
|
flag = 1;
|
|||
|
return -1;
|
|||
|
}
|
|||
|
print("**GetFromAP**:[%s]\n",buf);
|
|||
|
// ȡ<><C8A1>һ<EFBFBD><D2BB>û<EFBFBD>ù<EFBFBD><C3B9><EFBFBD>ѶϢ<D1B6><CFA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
for(j=0;j<MAX_AP_MSG;j++)
|
|||
|
{
|
|||
|
if(g_APMsg[j].bIsUse == 0)
|
|||
|
{
|
|||
|
Msg = &g_APMsg[j];
|
|||
|
if((Msg->Data = (LPList)calloc( 1,sizeof(List))) != NULL)
|
|||
|
{
|
|||
|
Msg->Data->Next = NULL;
|
|||
|
tempList = Msg->Data;
|
|||
|
break;
|
|||
|
}
|
|||
|
else return -4;
|
|||
|
}
|
|||
|
}
|
|||
|
// <20><><EFBFBD><EFBFBD>MAX_AP_MSG<53><47>ʾѶϢ<D1B6><CFA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
if(j == MAX_AP_MSG) return -2;
|
|||
|
Msg->bIsUse = 1;
|
|||
|
|
|||
|
// <20><><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>
|
|||
|
if(buf[i] == '&')
|
|||
|
{
|
|||
|
if(buf[++i] == ';')
|
|||
|
{
|
|||
|
bzero(temp[0] , sizeof(temp[0]));
|
|||
|
bzero(temp[1] , sizeof(temp[1]));
|
|||
|
bzero(temp[2] , sizeof(temp[2]));
|
|||
|
for(j = 0 ; j < 3 ; j++)
|
|||
|
{
|
|||
|
p = strchr(&buf[i+1] , ';');
|
|||
|
strncpy(temp[j] , &buf[i+1] , p - (&buf[i+1]));
|
|||
|
i += strlen(temp[j]) + 1;
|
|||
|
}
|
|||
|
Msg->nAid = atoi(temp[0]);
|
|||
|
Msg->nIndex = atoi(temp[1]);
|
|||
|
Msg->nLen = atoi(temp[2]);
|
|||
|
// <20><><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD>AP_CONNECT<43><54><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѶϢ
|
|||
|
if(Msg->nAid%10 == AP_CONNECT)
|
|||
|
{
|
|||
|
free(Msg->Data);
|
|||
|
bzero(Msg,sizeof(Msg));
|
|||
|
return -5;
|
|||
|
}
|
|||
|
j = 0;
|
|||
|
|
|||
|
bzero(temp[0] , sizeof(temp[0]));
|
|||
|
|
|||
|
if(Msg->nLen > 0)
|
|||
|
{
|
|||
|
while(buf[++i] != '\0')
|
|||
|
{
|
|||
|
switch(buf[i])
|
|||
|
{
|
|||
|
case '\\':
|
|||
|
switch(buf[i + 1])
|
|||
|
{
|
|||
|
case ';':
|
|||
|
case '&':
|
|||
|
case '\\':
|
|||
|
temp[0][j++] = buf[++i];
|
|||
|
break;
|
|||
|
default:
|
|||
|
temp[0][j++] = buf[i++];
|
|||
|
break;
|
|||
|
}
|
|||
|
break;
|
|||
|
case ';':
|
|||
|
j = 0;
|
|||
|
strcpy(tempList->Data,temp[0]);
|
|||
|
tempList->Next = (LPList)calloc( 1,sizeof(List));
|
|||
|
tempList = tempList->Next;
|
|||
|
bzero(temp[0],sizeof(temp[0]));
|
|||
|
break;
|
|||
|
case '&':
|
|||
|
buf[i--] = '\0';
|
|||
|
break;
|
|||
|
default:
|
|||
|
temp[0][j++] = buf[i];
|
|||
|
break;
|
|||
|
}
|
|||
|
}
|
|||
|
tempList->Next = NULL;
|
|||
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѶϢ<D1B6>Ǹ<EFBFBD><C7B8><EFBFBD><EFBFBD><EFBFBD>NPC return 1
|
|||
|
if(Msg->nIndex == meindex) return 1;
|
|||
|
else return 0;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
else return -3;
|
|||
|
|
|||
|
return 1;
|
|||
|
}
|
|||
|
|
|||
|
int ConnectToAP(void)
|
|||
|
{
|
|||
|
//make socket and connect to ap
|
|||
|
if((g_nServiceSocket = socket(PF_INET,SOCK_STREAM,0)) < 0)
|
|||
|
//if((g_nServiceSocket = socket(PF_INET,SOCK_DGRAM,0)) < 0)
|
|||
|
{
|
|||
|
print("can't create socket!\n");
|
|||
|
return 0;
|
|||
|
}
|
|||
|
bzero((char*)&server_sin , sizeof(server_sin));
|
|||
|
server_sin.sin_family = AF_INET;
|
|||
|
server_sin.sin_port = htons(g_Port);
|
|||
|
server_sin.sin_addr = inet_addr(g_ApID);
|
|||
|
memcpy(&temp , &server_sin , sizeof(server_sin));
|
|||
|
if(connect(g_nServiceSocket,&temp,sizeof(temp)) < 0)
|
|||
|
{
|
|||
|
// print("connect server error: %s\n" , sys_errlist[errno]);
|
|||
|
print("connect server error !!\n");
|
|||
|
print("ip:%s,port:%d\n",g_ApID,g_Port);
|
|||
|
return 0;
|
|||
|
}
|
|||
|
else print("connect AP server success!\n");
|
|||
|
|
|||
|
return 1;
|
|||
|
}
|
|||
|
|
|||
|
//ȡ<><C8A1><EFBFBD><EFBFBD>ˮ<EFBFBD><CBAE>
|
|||
|
int GetSerialNum(void)
|
|||
|
{
|
|||
|
static int i = 0;
|
|||
|
|
|||
|
if(++i > 65535)
|
|||
|
{
|
|||
|
i = 0;
|
|||
|
}
|
|||
|
return i;
|
|||
|
}
|
|||
|
|
|||
|
#endif
|