/********************************* * �ƾ�����ľ���ݼ��� *********************************/ void NPC_AirTalked( int meindex , int talkerindex , char *szMes , int color ) { int i; int partyflg = FALSE; int npc_wave = CHAR_getWorkInt( meindex, NPC_WORK_RUNWAVE); /* �����������帲�ƻ����� ɱ���� */ if( CHAR_getInt( talkerindex , CHAR_WHICHTYPE ) != CHAR_TYPEPLAYER ) { return; } /* ���м��ɡ� ū ��� ��������Ʃ���� */ for( i = 0; i < CHAR_PARTYMAX; i ++ ) { int index = CHAR_getWorkInt( meindex, CHAR_WORKPARTYINDEX1+i); if( CHAR_CHECKINDEX(index)){ if( index == talkerindex) { partyflg = TRUE; } } } if( !partyflg ) { //NPC_AirCheckJoinParty( meindex, talkerindex, TRUE); } else { if( CHAR_getWorkInt( meindex, NPC_WORK_MODE) == 0 ) { int i; // #define NPC_AIR_DEBUGROUTINTG "routingtable:" if( strstr( szMes, "����" ) || strstr( szMes, "����" ) || strstr( szMes, "Go" ) || strstr( szMes, "go" )) { CHAR_setWorkInt( meindex, NPC_WORK_MODE,1); /* ��������Ѽ�������ë���ʻ�պ������ */ CHAR_setInt( meindex, CHAR_LOOPINTERVAL, NPC_AIR_LOOPTIME); /* SE ���� Ѩ��ƹ������̫ */ if( CHAR_getWorkInt( meindex, NPC_WORK_SEFLG )) { //andy_reEdit NPC_WORK_RUNWAVE CHAR_sendSEoArroundCharacter( CHAR_getInt( meindex, CHAR_FLOOR), CHAR_getInt( meindex, CHAR_X), CHAR_getInt( meindex, CHAR_Y), npc_wave, TRUE); } /* �� �����ݼ�����������*/ for( i = 1; i < CHAR_PARTYMAX; i ++ ) { int partyindex = CHAR_getWorkInt( meindex, CHAR_WORKPARTYINDEX1+i); if( CHAR_CHECKINDEX( partyindex)) { NPC_AirSendMsg( meindex, partyindex, NPC_AIR_MSG_START); } } } } } }
/********************************* * 仄井仃日木凶凛及质 *********************************/ void NPC_BusTalked( int meindex , int talkerindex , char *szMes , int color ) { int i; int partyflg = FALSE; /* 皿伊奶乩□卞覆仄化分仃 杀允月 */ if( CHAR_getInt( talkerindex , CHAR_WHICHTYPE ) != CHAR_TYPEPLAYER ) { return; } /* 愤坌及由□ 奴 昙菸 井升丹井譬屯月 */ for( i = 0; i < CHAR_PARTYMAX; i ++ ) { int index = CHAR_getWorkInt( meindex, CHAR_WORKPARTYINDEX1+i); if( CHAR_CHECKINDEX(index)){ if( index == talkerindex) { partyflg = TRUE; } } } if( !partyflg ) { //NPC_BusCheckJoinParty( meindex, talkerindex, TRUE); } else { if( CHAR_getWorkInt( meindex, NPC_WORK_MODE) == 0 ) { int i; // #define NPC_BUS_DEBUGROUTINTG "routingtable:" if( strstr( szMes, "出发" ) || strstr( szMes, "出发" ) || strstr( szMes, "Go" ) || strstr( szMes, "go" )) { CHAR_setWorkInt( meindex, NPC_WORK_MODE,1); /* 伙□皿楮醒及裟请仄毛汹仁簧蘸卞允月 */ CHAR_setInt( meindex, CHAR_LOOPINTERVAL, NPC_BUS_LOOPTIME); /* SE 日允 穴件乒旦及陲太 */ if( CHAR_getWorkInt( meindex, NPC_WORK_SEFLG )) { CHAR_sendSEoArroundCharacter( CHAR_getInt( meindex, CHAR_FLOOR), CHAR_getInt( meindex, CHAR_X), CHAR_getInt( meindex, CHAR_Y), 60, TRUE); } /* 请 允月凛及丢永本□斥*/ for( i = 1; i < CHAR_PARTYMAX; i ++ ) { int partyindex = CHAR_getWorkInt( meindex, CHAR_WORKPARTYINDEX1+i); if( CHAR_CHECKINDEX( partyindex)) { NPC_BusSendMsg( meindex, partyindex, NPC_BUS_MSG_START); } } } } } }
/************************************** * ���ʣ� **************************************/ static void NPC_Bus_walk( int meindex) { POINT start, end; int dir; int ret; int i; /* �������� */ /* ���������ݼ��� */ start.x = CHAR_getInt( meindex, CHAR_X); start.y = CHAR_getInt( meindex, CHAR_Y); end.x = CHAR_getWorkInt( meindex, NPC_WORK_ROUTETOX); end.y = CHAR_getWorkInt( meindex, NPC_WORK_ROUTETOY); /* ��������ƥ�ݼ����̼����� */ if( start.x == end.x && start.y == end.y ) { int add = 1; char argstr[NPC_UTIL_GETARGSTR_BUFSIZE - 1024 * 20]; NPC_Util_GetArgStr( meindex, argstr, sizeof( argstr)); if( CHAR_getWorkInt( meindex, NPC_WORK_ROUNDTRIP ) == 1 ) { add *= -1; } CHAR_setWorkInt( meindex, NPC_WORK_ROUTEPOINT, CHAR_getWorkInt( meindex, NPC_WORK_ROUTEPOINT) +add); if( NPC_BusSetPoint( meindex, argstr) == FALSE ) { /* �����*/ /* ����ƹ��������� */ CHAR_setWorkInt( meindex, NPC_WORK_MODE,3); /* SE ���� Ѩ��ƹ������̫ */ if( CHAR_getWorkInt( meindex, NPC_WORK_SEFLG )) { CHAR_sendSEoArroundCharacter( CHAR_getInt( meindex, CHAR_FLOOR), CHAR_getInt( meindex, CHAR_X), CHAR_getInt( meindex, CHAR_Y), 60, TRUE); } /* �������ݼ�����������*/ for( i = 1; i < CHAR_PARTYMAX; i ++ ) { int partyindex = CHAR_getWorkInt( meindex, CHAR_WORKPARTYINDEX1+i); if( CHAR_CHECKINDEX( partyindex)) { NPC_BusSendMsg( meindex, partyindex, NPC_BUS_MSG_END); } } /* �ػ�������ë������ */ CHAR_setWorkInt( meindex, NPC_WORK_CURRENTTIME, NowTime.tv_sec); return; } else { return; } } /*-------------------------------------------------------*/ /* �ھ������� */ /* ��ë�ƻ��� */ dir = NPC_Util_getDirFromTwoPoint( &start,&end ); /* �������������� �ɡ� ū����ƥ���� */ end.x = CHAR_getInt( meindex, CHAR_X); end.y = CHAR_getInt( meindex, CHAR_Y); /* ���Ⱦ��������ݼ��м��� */ for( i = 0; i < 100; i ++ ) { if( dir < 0 ) { dir = RAND( 0,7); } dir = NPC_Util_SuberiWalk( meindex, dir); if( dir >= 0 && dir <= 7) break; } if( dir >= 0 && dir <= 7 ) { /* ���� */ ret = CHAR_walk( meindex, dir, 0); if( ret == CHAR_WALKSUCCESSED ) { /* ���л���ئ������ë�ھ����� */ int i; for( i = 1; i < CHAR_PARTYMAX; i ++ ) { int toindex = CHAR_getWorkInt( meindex, i + CHAR_WORKPARTYINDEX1); if( CHAR_CHECKINDEX(toindex) ) { int parent_dir; /* �Ҽ��� ����ʼ������� ���� ��ë�ƻ��� */ /* ���� */ start.x = CHAR_getInt( toindex, CHAR_X); start.y = CHAR_getInt( toindex, CHAR_Y); parent_dir = NPC_Util_getDirFromTwoPoint( &start,&end ); /* ��·�ū�����������������ë �����¿б�� * �ݼ��ҷ��Ҽ� ëܰ������������ */ end = start; if( parent_dir != -1 ) { CHAR_walk( toindex, parent_dir, 0); } } } } } }
/************************************** * ��������� **************************************/ void NPC_BusLoop( int meindex) { int i; switch( CHAR_getWorkInt( meindex, NPC_WORK_MODE )) { case 0: /* ����ƹ�����ݣ�����ë������������ */ /* ����������ƥ���� ���� */ if( CHAR_getWorkInt( meindex, NPC_WORK_CURRENTTIME) + CHAR_getWorkInt( meindex, NPC_WORK_WAITTIME) < NowTime.tv_sec) { /* SE ���� Ѩ��ƹ������̫ */ if( CHAR_getWorkInt( meindex, NPC_WORK_SEFLG )) { CHAR_sendSEoArroundCharacter( CHAR_getInt( meindex, CHAR_FLOOR), CHAR_getInt( meindex, CHAR_X), CHAR_getInt( meindex, CHAR_Y), 60, TRUE); } /* �� �����ݼ�����������*/ for( i = 1; i < CHAR_PARTYMAX; i ++ ) { int partyindex = CHAR_getWorkInt( meindex, CHAR_WORKPARTYINDEX1+i); if( CHAR_CHECKINDEX( partyindex)) { NPC_BusSendMsg( meindex, partyindex, NPC_BUS_MSG_START); } } CHAR_setWorkInt( meindex, NPC_WORK_MODE,1); /* ��������Ѽ�������ë���ʻ�պ������ */ CHAR_setInt( meindex, CHAR_LOOPINTERVAL, NPC_BUS_LOOPTIME); } return; case 1: /* ���� */ NPC_Bus_walk( meindex); case 2: /* �����Ȼ�����ƹ���� */ /* ����������ƥ���� ���� */ if( CHAR_getWorkInt( meindex, NPC_WORK_CURRENTTIME) + (CHAR_getWorkInt( meindex, NPC_WORK_WAITTIME) /3) < NowTime.tv_sec) { CHAR_setWorkInt( meindex, NPC_WORK_MODE,1); /* ��������Ѽ�������ë���ʻ�պ������ */ CHAR_setInt( meindex, CHAR_LOOPINTERVAL, NPC_BUS_LOOPTIME); } return; case 3: /* �����ƻ��֣��ͷ���ʧ������ �����м��б�� * ���Ƴ��ƥ��������ë��ľ��֧�� */ if( CHAR_getWorkInt( meindex, NPC_WORK_CURRENTTIME) + 3 < NowTime.tv_sec) { char argstr[NPC_UTIL_GETARGSTR_BUFSIZE - 1024 * 20]; NPC_Util_GetArgStr( meindex, argstr, sizeof( argstr)); /* ��������Ѽ�������ë�������� */ CHAR_setInt( meindex, CHAR_LOOPINTERVAL, NPC_BUS_WAITINGMODE_WAITTIME); /* ������������ */ { int r = CHAR_getWorkInt( meindex, NPC_WORK_ROUTEMAX); CHAR_setWorkInt( meindex, NPC_WORK_CURRENTROUTE, RAND( 1, r)); //print( "route:%d\n",CHAR_getWorkInt( meindex, NPC_WORK_CURRENTROUTE)); } /* �����Ի�º� �� */ CHAR_setWorkInt( meindex, NPC_WORK_ROUNDTRIP, CHAR_getWorkInt( meindex, NPC_WORK_ROUNDTRIP)^1); /* �ݺ��̼�����Ʃ� */ /* ��Ի�� ���� */ if( CHAR_getWorkInt( meindex, NPC_WORK_ROUNDTRIP) == 1) { /* ����������� �κ��̼�����ë �� */ int num = NPC_BusGetRoutePointNum( meindex, argstr); CHAR_setWorkInt( meindex, NPC_WORK_ROUTEPOINT, num-1); } else { CHAR_setWorkInt( meindex, NPC_WORK_ROUTEPOINT, CHAR_getWorkInt( meindex, NPC_WORK_ROUTEPOINT) +1); } /* �ݼ����̼������� ë���������� */ NPC_BusSetPoint( meindex, argstr); /* ������ë ������ */ NPC_BusSetDestPoint( meindex, argstr); /* �ɡ� ū ������ ë���� */ CHAR_DischargeParty( meindex, 0); /* �ػ�������ë������ */ CHAR_setWorkInt( meindex, NPC_WORK_CURRENTTIME, NowTime.tv_sec); /* ƹ��������ʧ */ CHAR_setWorkInt( meindex, NPC_WORK_MODE, 0); } return; default: break; } }
/************************************** * 洶仁〔 **************************************/ static void NPC_Air_walk( int meindex) { POINT start, end; int dir; int ret; int i; int npc_wave = CHAR_getWorkInt( meindex, NPC_WORK_RUNWAVE ); /* 洶仁楮溢 */ /* 讒邋仄凶凜及質 */ start.x = CHAR_getInt( meindex, CHAR_X); start.y = CHAR_getInt( meindex, CHAR_Y); end.x = CHAR_getWorkInt( meindex, NPC_WORK_ROUTETOX); end.y = CHAR_getWorkInt( meindex, NPC_WORK_ROUTETOY); /* 讒邋仄凶及匹戚及禾奶件玄卞 */ if( start.x == end.x && start.y == end.y ) { int add = 1; char argstr1[NPC_UTIL_GETARGSTR_BUFSIZE]; char *argstr; argstr = NPC_Util_GetArgStr( meindex, argstr1, sizeof( argstr1)); if( CHAR_getWorkInt( meindex, NPC_WORK_ROUNDTRIP ) == 1 ) { add *= -1; } CHAR_setWorkInt( meindex, NPC_WORK_ROUTEPOINT, CHAR_getWorkInt( meindex, NPC_WORK_ROUTEPOINT) +add); if( NPC_AirSetPoint( meindex, argstr) == FALSE ) { /* 卞讒邋*/ /* 謹切乒□玉卞允月 */ CHAR_setWorkInt( meindex, NPC_WORK_MODE,3); /* SE 日允 穴件乒旦及陲太 */ if( CHAR_getWorkInt( meindex, NPC_WORK_SEFLG )) { //ANDY_reEdit CHAR_sendSEoArroundCharacter( CHAR_getInt( meindex, CHAR_FLOOR), CHAR_getInt( meindex, CHAR_X), CHAR_getInt( meindex, CHAR_Y), npc_wave, TRUE); } /* 邋中凶凜及丟永本□斥*/ for( i = 1; i < CHAR_PARTYMAX; i ++ ) { int partyindex = CHAR_getWorkInt( meindex, CHAR_WORKPARTYINDEX1+i); if( CHAR_CHECKINDEX( partyindex)) { NPC_AirSendMsg( meindex, partyindex, NPC_AIR_MSG_END); } } /* 蜇箕及凜棉毛本永玄 */ CHAR_setWorkInt( meindex, NPC_WORK_CURRENTTIME, NowTime.tv_sec); return; } else { return; } } /*-------------------------------------------------------*/ /* 洶井六月質 */ /* 輊毛菲戶月 */ dir = NPC_Util_getDirFromTwoPoint( &start,&end ); /* 漆中月樺赭及謹 由□ 奴洶五匹銀丹 */ end.x = CHAR_getInt( meindex, CHAR_X); end.y = CHAR_getInt( meindex, CHAR_Y); #if 0 /* 夫勻井井勻凶凜及啃及質 */ for( i = 0; i < 100; i ++ ) { if( dir < 0 ) { dir = RAND( 0,7); } dir = NPC_Util_SuberiWalk( meindex, dir); if( dir >= 0 && dir <= 7) break; } #endif if( dir >= 0 && dir <= 7 ) { /* 洶仁 */ ret = CHAR_walk( meindex, dir, 0); if( ret == CHAR_WALKSUCCESSED ) { /* 憤坌互褪卅日醮棉毛洶井六月 */ int i; int mefl=CHAR_getInt( meindex, CHAR_FLOOR); for( i = 1; i < CHAR_PARTYMAX; i ++ ) { int toindex = CHAR_getWorkInt( meindex, i + CHAR_WORKPARTYINDEX1); int fl = CHAR_getInt( toindex, CHAR_FLOOR); int xx = CHAR_getInt( toindex, CHAR_X); int yy = CHAR_getInt( toindex, CHAR_Y); if( CHAR_CHECKINDEX(toindex) && (mefl==fl) && (abs(xx-end.x)+abs(yy-end.y)<10) ) { int parent_dir; /* 閡及匏 午〕褪及洶五蟆及匏 井日 輊毛菲戶月 */ /* 洶仁 */ start.x = xx; start.y = yy; parent_dir = NPC_Util_getDirFromTwoPoint( &start,&end ); /* 弘仿犯奴它旦左皿撲亦件洶五毛 蜇允月啃卞〕 * 戚及閡反蟆及閡及 毛馨丹方丹卞允月 */ end = start; if( parent_dir != -1 ) { CHAR_walk( toindex, parent_dir, 0); } } } } } }
/************************************** * 伙□皿楮醒 **************************************/ void NPC_AirLoop( int meindex) { int i; int npc_wave = CHAR_getWorkInt( meindex, NPC_WORK_RUNWAVE); switch( CHAR_getWorkInt( meindex, NPC_WORK_MODE )) { case 0: /* 謹切乒□玉及凜〕凜棉毛民尼永弁允月 */ /* 凜棉互煩勻凶及匹〕請 允月 */ if( CHAR_getWorkInt( meindex, NPC_WORK_CURRENTTIME) + CHAR_getWorkInt( meindex, NPC_WORK_WAITTIME) < NowTime.tv_sec) { /* SE 日允 穴件乒旦及陲太 */ if( CHAR_getWorkInt( meindex, NPC_WORK_SEFLG )) { //ANDY_reEdit CHAR_sendSEoArroundCharacter( CHAR_getInt( meindex, CHAR_FLOOR), CHAR_getInt( meindex, CHAR_X), CHAR_getInt( meindex, CHAR_Y), npc_wave, TRUE); } /* 請 允月凜及丟永本□斥*/ for( i = 1; i < CHAR_PARTYMAX; i ++ ) { int partyindex = CHAR_getWorkInt( meindex, CHAR_WORKPARTYINDEX1+i); if( CHAR_CHECKINDEX( partyindex)) { NPC_AirSendMsg( meindex, partyindex, NPC_AIR_MSG_START); } } CHAR_setWorkInt( meindex, NPC_WORK_MODE,1); /* 伙□皿楮醒及裟請仄毛洶仁簧蘸卞允月 */ CHAR_setInt( meindex, CHAR_LOOPINTERVAL, NPC_AIR_LOOPTIME); } return; case 1: /* 洶仁 */ NPC_Air_walk( meindex); case 2: /* 鞅引勻化中月乒□玉 */ /* 凜棉互煩勻凶及匹〕請 允月 */ if( CHAR_getWorkInt( meindex, NPC_WORK_CURRENTTIME) + (CHAR_getWorkInt( meindex, NPC_WORK_WAITTIME) /3) < NowTime.tv_sec) { CHAR_setWorkInt( meindex, NPC_WORK_MODE,1); /* 伙□皿楮醒及裟請仄毛洶仁簧蘸卞允月 */ CHAR_setInt( meindex, CHAR_LOOPINTERVAL, NPC_AIR_LOOPTIME); } return; case 3: /* 讒邋仄化手〕弁仿奶失件玄及 樟謹切及啃卞〕 * 劑仄仇仇匹它尼奶玄毛中木化支月 */ if( CHAR_getWorkInt( meindex, NPC_WORK_CURRENTTIME) + 3 < NowTime.tv_sec){ char argstr1[NPC_UTIL_GETARGSTR_BUFSIZE]; char *argstr; argstr = NPC_Util_GetArgStr( meindex, argstr1, sizeof( argstr1)); CHAR_setInt( meindex, CHAR_LOOPINTERVAL, NPC_AIR_WAITINGMODE_WAITTIME); { int r = CHAR_getWorkInt( meindex, NPC_WORK_ROUTEMAX); CHAR_setWorkInt( meindex, NPC_WORK_CURRENTROUTE, RAND( 1, r)); } CHAR_setWorkInt( meindex, NPC_WORK_ROUNDTRIP, CHAR_getWorkInt( meindex, NPC_WORK_ROUNDTRIP)^1); if( CHAR_getWorkInt( meindex, NPC_WORK_ROUNDTRIP) == 1) { int num = NPC_AirGetRoutePointNum( meindex, argstr); CHAR_setWorkInt( meindex, NPC_WORK_ROUTEPOINT, num-1); }else { CHAR_setWorkInt( meindex, NPC_WORK_ROUTEPOINT, CHAR_getWorkInt( meindex, NPC_WORK_ROUTEPOINT) +1); } NPC_AirSetPoint( meindex, argstr); NPC_AirSetDestPoint( meindex, argstr); CHAR_DischargeParty( meindex, 0); CHAR_setWorkInt( meindex, NPC_WORK_CURRENTTIME, NowTime.tv_sec); if ((CHAR_getWorkInt(meindex, NPC_WORK_ONEWAYFLG) == 1) && (CHAR_getWorkInt(meindex, NPC_WORK_ROUNDTRIP) == 1) ){ CHAR_setInt( meindex, CHAR_LOOPINTERVAL, NPC_AIR_LOOPTIME); CHAR_setWorkInt( meindex, NPC_WORK_MODE, 1); } else CHAR_setWorkInt( meindex, NPC_WORK_MODE, 0); } return; default: break; } }
/********************************* * 仄井仃日木凶凜及質 *********************************/ void NPC_AirTalked( int meindex , int talkerindex , char *szMes , int color ) { int i; int partyflg = FALSE; int npc_wave = CHAR_getWorkInt( meindex, NPC_WORK_RUNWAVE); /* 皿伊奶乩□卞覆仄化分仃 殺允月 */ if( CHAR_getInt( talkerindex , CHAR_WHICHTYPE ) != CHAR_TYPEPLAYER ) { return; } /* 憤坌及由□ 奴 曇菸 井升丹井譬屯月 */ for( i = 0; i < CHAR_PARTYMAX; i ++ ) { int index = CHAR_getWorkInt( meindex, CHAR_WORKPARTYINDEX1+i); if( CHAR_CHECKINDEX(index)){ if( index == talkerindex) { partyflg = TRUE; } } } if( !partyflg ) { //NPC_AirCheckJoinParty( meindex, talkerindex, TRUE); } else { if( CHAR_getWorkInt( meindex, NPC_WORK_MODE) == 0 ) { int i; // #define NPC_AIR_DEBUGROUTINTG "routingtable:" if( strstr( szMes, "出發" ) || strstr( szMes, "出發" ) || strstr( szMes, "Go" ) || strstr( szMes, "go" )) { CHAR_setWorkInt( meindex, NPC_WORK_MODE,1); /* 伙□皿楮醒及裟請仄毛洶仁簧蘸卞允月 */ CHAR_setInt( meindex, CHAR_LOOPINTERVAL, NPC_AIR_LOOPTIME); /* SE 日允 穴件乒旦及陲太 */ if( CHAR_getWorkInt( meindex, NPC_WORK_SEFLG )) { //andy_reEdit NPC_WORK_RUNWAVE CHAR_sendSEoArroundCharacter( CHAR_getInt( meindex, CHAR_FLOOR), CHAR_getInt( meindex, CHAR_X), CHAR_getInt( meindex, CHAR_Y), npc_wave, TRUE); } /* 請 允月凜及丟永本□斥*/ for( i = 1; i < CHAR_PARTYMAX; i ++ ) { int partyindex = CHAR_getWorkInt( meindex, CHAR_WORKPARTYINDEX1+i); if( CHAR_CHECKINDEX( partyindex)) { NPC_AirSendMsg( meindex, partyindex, NPC_AIR_MSG_START); } } } } #if 0 else if( strstr( szMes, "停止" ) || strstr( szMes, "停止" ) || strstr( szMes, "stop" ) || strstr( szMes, "Stop" )) { CHAR_setWorkInt( meindex, NPC_WORK_MODE,2); /* 伙□皿楮醒及奶件正□田伙毛聶仁允月 */ CHAR_setInt( meindex, CHAR_LOOPINTERVAL, NPC_AIR_WAITINGMODE_WAITTIME); /* 蜇箕及凜棉毛本永玄 */ CHAR_setWorkInt( meindex, NPC_WORK_CURRENTTIME, NowTime.tv_sec); } else if( strstr( szMes, NPC_AIR_DEBUGROUTINTG )) { /* 犯田永弘迕 */ char *p = strstr( szMes,NPC_AIR_DEBUGROUTINTG); char argstr1[NPC_UTIL_GETARGSTR_BUFSIZE]; char *argstr; argstr = NPC_Util_GetArgStr( meindex, argstr1, sizeof( argstr1)); if( p) { int a = atoi( p+strlen(NPC_AIR_DEBUGROUTINTG)); if( a <0 ) a = 1; CHAR_setWorkInt( meindex, NPC_WORK_CURRENTROUTE, a); } //print( "route:%d\n",CHAR_getWorkInt( meindex, NPC_WORK_CURRENTROUTE)); /* 伙□玄毛本永玄允月 */ NPC_AirSetPoint( meindex, argstr); } #endif } }
/************************************** * 汹仁[ **************************************/ static void NPC_Bus_walk( int meindex) { POINT start, end; int dir; int ret; int i; /* 汹仁楮溢 */ /* 谗邋仄凶凛及质 */ start.x = CHAR_getInt( meindex, CHAR_X); start.y = CHAR_getInt( meindex, CHAR_Y); end.x = CHAR_getWorkInt( meindex, NPC_WORK_ROUTETOX); end.y = CHAR_getWorkInt( meindex, NPC_WORK_ROUTETOY); /* 谗邋仄凶及匹戚及禾奶件玄卞 */ if( start.x == end.x && start.y == end.y ) { int add = 1; char argstr[NPC_UTIL_GETARGSTR_BUFSIZE - 1024 * 20]; NPC_Util_GetArgStr( meindex, argstr, sizeof( argstr)); if( CHAR_getWorkInt( meindex, NPC_WORK_ROUNDTRIP ) == 1 ) { add *= -1; } CHAR_setWorkInt( meindex, NPC_WORK_ROUTEPOINT, CHAR_getWorkInt( meindex, NPC_WORK_ROUTEPOINT) +add); if( NPC_BusSetPoint( meindex, argstr) == FALSE ) { /* 卞谗邋*/ /* 谨切乒□玉卞允月 */ CHAR_setWorkInt( meindex, NPC_WORK_MODE,3); /* SE 日允 穴件乒旦及陲太 */ if( CHAR_getWorkInt( meindex, NPC_WORK_SEFLG )) { CHAR_sendSEoArroundCharacter( CHAR_getInt( meindex, CHAR_FLOOR), CHAR_getInt( meindex, CHAR_X), CHAR_getInt( meindex, CHAR_Y), 60, TRUE); } /* 邋中凶凛及丢永本□斥*/ for( i = 1; i < CHAR_PARTYMAX; i ++ ) { int partyindex = CHAR_getWorkInt( meindex, CHAR_WORKPARTYINDEX1+i); if( CHAR_CHECKINDEX( partyindex)) { NPC_BusSendMsg( meindex, partyindex, NPC_BUS_MSG_END); } } /* 蜇箕及凛棉毛本永玄 */ CHAR_setWorkInt( meindex, NPC_WORK_CURRENTTIME, NowTime.tv_sec); return; } else { return; } } /*-------------------------------------------------------*/ /* 汹井六月质 */ /* 轾毛菲户月 */ dir = NPC_Util_getDirFromTwoPoint( &start,&end ); /* 漆中月桦赭及谨 由□ 奴汹五匹银丹 */ end.x = CHAR_getInt( meindex, CHAR_X); end.y = CHAR_getInt( meindex, CHAR_Y); /* 夫匀井井匀凶凛及啃及质 */ for( i = 0; i < 100; i ++ ) { if( dir < 0 ) { dir = RAND( 0,7); } dir = NPC_Util_SuberiWalk( meindex, dir); if( dir >= 0 && dir <= 7) break; } if( dir >= 0 && dir <= 7 ) { /* 汹仁 */ ret = CHAR_walk( meindex, dir, 0); if( ret == CHAR_WALKSUCCESSED ) { /* 愤坌互褪卅日醮棉毛汹井六月 */ int i; for( i = 1; i < CHAR_PARTYMAX; i ++ ) { int toindex = CHAR_getWorkInt( meindex, i + CHAR_WORKPARTYINDEX1); if( CHAR_CHECKINDEX(toindex) ) { int parent_dir; /* 阂及匏 午]褪及汹五蟆及匏 井日 轾毛菲户月 */ /* 汹仁 */ start.x = CHAR_getInt( toindex, CHAR_X); start.y = CHAR_getInt( toindex, CHAR_Y); parent_dir = NPC_Util_getDirFromTwoPoint( &start,&end ); /* 弘仿犯奴它旦左皿扑亦件汹五毛 蜇允月啃卞] * 戚及阂反蟆及阂及 毛馨丹方丹卞允月 */ end = start; if( parent_dir != -1 ) { CHAR_walk( toindex, parent_dir, 0); } } } } } }
/************************************** * 伙□皿楮醒 **************************************/ void NPC_BusLoop( int meindex) { int i; switch( CHAR_getWorkInt( meindex, NPC_WORK_MODE )) { case 0: /* 谨切乒□玉及凛]凛棉毛民尼永弁允月 */ /* 凛棉互烦匀凶及匹]请 允月 */ if( CHAR_getWorkInt( meindex, NPC_WORK_CURRENTTIME) + CHAR_getWorkInt( meindex, NPC_WORK_WAITTIME) < NowTime.tv_sec) { /* SE 日允 穴件乒旦及陲太 */ if( CHAR_getWorkInt( meindex, NPC_WORK_SEFLG )) { CHAR_sendSEoArroundCharacter( CHAR_getInt( meindex, CHAR_FLOOR), CHAR_getInt( meindex, CHAR_X), CHAR_getInt( meindex, CHAR_Y), 60, TRUE); } /* 请 允月凛及丢永本□斥*/ for( i = 1; i < CHAR_PARTYMAX; i ++ ) { int partyindex = CHAR_getWorkInt( meindex, CHAR_WORKPARTYINDEX1+i); if( CHAR_CHECKINDEX( partyindex)) { NPC_BusSendMsg( meindex, partyindex, NPC_BUS_MSG_START); } } CHAR_setWorkInt( meindex, NPC_WORK_MODE,1); /* 伙□皿楮醒及裟请仄毛汹仁簧蘸卞允月 */ CHAR_setInt( meindex, CHAR_LOOPINTERVAL, NPC_BUS_LOOPTIME); } return; case 1: /* 汹仁 */ NPC_Bus_walk( meindex); case 2: /* 鞅引匀化中月乒□玉 */ /* 凛棉互烦匀凶及匹]请 允月 */ if( CHAR_getWorkInt( meindex, NPC_WORK_CURRENTTIME) + (CHAR_getWorkInt( meindex, NPC_WORK_WAITTIME) /3) < NowTime.tv_sec) { CHAR_setWorkInt( meindex, NPC_WORK_MODE,1); /* 伙□皿楮醒及裟请仄毛汹仁簧蘸卞允月 */ CHAR_setInt( meindex, CHAR_LOOPINTERVAL, NPC_BUS_LOOPTIME); } return; case 3: /* 谗邋仄化手]弁仿奶失件玄及 樟谨切及啃卞] * 剂仄仇仇匹它尼奶玄毛中木化支月 */ if( CHAR_getWorkInt( meindex, NPC_WORK_CURRENTTIME) + 3 < NowTime.tv_sec) { char argstr[NPC_UTIL_GETARGSTR_BUFSIZE - 1024 * 20]; NPC_Util_GetArgStr( meindex, argstr, sizeof( argstr)); /* 伙□皿楮醒及裟请仄毛赞仁允月 */ CHAR_setInt( meindex, CHAR_LOOPINTERVAL, NPC_BUS_WAITINGMODE_WAITTIME); /* 伙□玄瑁烂允月 */ { int r = CHAR_getWorkInt( meindex, NPC_WORK_ROUTEMAX); CHAR_setWorkInt( meindex, NPC_WORK_CURRENTROUTE, RAND( 1, r)); //print( "route:%d\n",CHAR_getWorkInt( meindex, NPC_WORK_CURRENTROUTE)); } /* 垫五窖曰白仿弘 凳 */ CHAR_setWorkInt( meindex, NPC_WORK_ROUNDTRIP, CHAR_getWorkInt( meindex, NPC_WORK_ROUNDTRIP)^1); /* 戚禾奶件玄及譬濡 */ /* 窖曰反 溃质 */ if( CHAR_getWorkInt( meindex, NPC_WORK_ROUNDTRIP) == 1) { /* 公及伙□玄及 嫖禾奶件玄醒毛 月 */ int num = NPC_BusGetRoutePointNum( meindex, argstr); CHAR_setWorkInt( meindex, NPC_WORK_ROUTEPOINT, num-1); } else { CHAR_setWorkInt( meindex, NPC_WORK_ROUTEPOINT, CHAR_getWorkInt( meindex, NPC_WORK_ROUTEPOINT) +1); } /* 戚及禾奶件玄及甄 毛本永玄允月 */ NPC_BusSetPoint( meindex, argstr); /* 垫五燮毛 憎允月 */ NPC_BusSetDestPoint( meindex, argstr); /* 由□ 奴 仃月质 毛允月 */ CHAR_DischargeParty( meindex, 0); /* 蜇箕及凛棉毛本永玄 */ CHAR_setWorkInt( meindex, NPC_WORK_CURRENTTIME, NowTime.tv_sec); /* 乒□玉弁伉失 */ CHAR_setWorkInt( meindex, NPC_WORK_MODE, 0); } return; default: break; } }
/************************************** * ¬¤¤¯¡e **************************************/ static void NPC_Bus_walk( int meindex) { POINT start, end; int dir; int ret; int i; /* ¬¤¤¯´Ø·¸ */ /* ÅþÃ夷¤¿»þ¤Î½è */ start.x = CHAR_getInt( meindex, CHAR_X); start.y = CHAR_getInt( meindex, CHAR_Y); end.x = CHAR_getWorkInt( meindex, NPC_WORK_ROUTETOX); end.y = CHAR_getWorkInt( meindex, NPC_WORK_ROUTETOY); /* ÅþÃ夷¤¿¤Î¤Ç±¤Î¥Ý¥¤¥ó¥È¤Ë */ if( start.x == end.x && start.y == end.y ) { int add = 1; char argstr1[NPC_UTIL_GETARGSTR_BUFSIZE]; char *argstr; argstr = NPC_Util_GetArgStr( meindex, argstr1, sizeof( argstr1)); if( CHAR_getWorkInt( meindex, NPC_WORK_ROUNDTRIP ) == 1 ) { add *= -1; } CHAR_setWorkInt( meindex, NPC_WORK_ROUTEPOINT, CHAR_getWorkInt( meindex, NPC_WORK_ROUTEPOINT) +add); if( NPC_BusSetPoint( meindex, argstr) == FALSE ) { /* ¤ËÅþÃå*/ /* ÂÔ¤Á¥â¡¼¥É¤Ë¤¹¤ë */ CHAR_setWorkInt( meindex, NPC_WORK_MODE,3); /* SE ¤é¤¹ ¥Þ¥ó¥â¥¹¤Î¶«¤Ó */ if( CHAR_getWorkInt( meindex, NPC_WORK_SEFLG )) { CHAR_sendSEoArroundCharacter( CHAR_getInt( meindex, CHAR_FLOOR), CHAR_getInt( meindex, CHAR_X), CHAR_getInt( meindex, CHAR_Y), 60, TRUE); } /* Ã夤¤¿»þ¤Î¥á¥Ã¥»¡¼¥¸*/ for( i = 1; i < CHAR_PARTYMAX; i ++ ) { int partyindex = CHAR_getWorkInt( meindex, CHAR_WORKPARTYINDEX1+i); if( CHAR_CHECKINDEX( partyindex)) { NPC_BusSendMsg( meindex, partyindex, NPC_BUS_MSG_END); } } /* ¸½ºß¤Î»þ´Ö¤ò¥»¥Ã¥È */ CHAR_setWorkInt( meindex, NPC_WORK_CURRENTTIME, NowTime.tv_sec); return; } else { return; } } /*-------------------------------------------------------*/ /* ¬¤¤«¤»¤ë½è */ /* ¸þ¤òµá¤á¤ë */ dir = NPC_Util_getDirFromTwoPoint( &start,&end ); /* º£¤¤¤ë¾ì½ê¤ÎÂÔ ¥Ñ¡¼ ¥£¬¤¤¤Ç»È¤¦ */ end.x = CHAR_getInt( meindex, CHAR_X); end.y = CHAR_getInt( meindex, CHAR_Y); /* ¤Ò¤Ã¤«¤«¤Ã¤¿»þ¤Î°Ù¤Î½è */ for( i = 0; i < 100; i ++ ) { if( dir < 0 ) { dir = RAND( 0,7); } dir = NPC_Util_SuberiWalk( meindex, dir); if( dir >= 0 && dir <= 7) break; } if( dir >= 0 && dir <= 7 ) { /* ¬¤¤¯ */ ret = CHAR_walk( meindex, dir, 0); if( ret == CHAR_WALKSUCCESSED ) { /* ¼«Ê¬¤¬¿Æ¤Ê¤éÃç´Ö¤ò¬¤¤«¤»¤ë */ int i; for( i = 1; i < CHAR_PARTYMAX; i ++ ) { int toindex = CHAR_getWorkInt( meindex, i + CHAR_WORKPARTYINDEX1); if( CHAR_CHECKINDEX(toindex) ) { int parent_dir; /* »Ò¤Î°Ì ¤È¡f¿Æ¤Î¬¤¤Á°¤Î°Ì ¤«¤é ¸þ¤òµá¤á¤ë */ /* ¬¤¤¯ */ start.x = CHAR_getInt( toindex, CHAR_X); start.y = CHAR_getInt( toindex, CHAR_Y); parent_dir = NPC_Util_getDirFromTwoPoint( &start,&end ); /* ¥°¥é¥Ç¥£¥¦¥¹¥ª¥×¼³¥ç¥ó¬¤¤¤ò ¸½¤¹¤ë°Ù¤Ë¡f * ±¤Î»Ò¤ÏÁ°¤Î»Ò¤Î ¤òÄɤ¦¤è¤¦¤Ë¤¹¤ë */ end = start; if( parent_dir != -1 ) { CHAR_walk( toindex, parent_dir, 0); } } } } } }
/************************************** * ¥ë¡¼¥×´Ø¿ô **************************************/ void NPC_BusLoop( int meindex) { int i; switch( CHAR_getWorkInt( meindex, NPC_WORK_MODE )) { case 0: /* ÂÔ¤Á¥â¡¼¥É¤Î»þ¡f»þ´Ö¤ò¥Á¥§¥Ã¥¯¤¹¤ë */ /* »þ´Ö¤¬·Ð¤Ã¤¿¤Î¤Ç¡f½Ð ¤¹¤ë */ if( CHAR_getWorkInt( meindex, NPC_WORK_CURRENTTIME) + CHAR_getWorkInt( meindex, NPC_WORK_WAITTIME) < NowTime.tv_sec) { /* SE ¤é¤¹ ¥Þ¥ó¥â¥¹¤Î¶«¤Ó */ if( CHAR_getWorkInt( meindex, NPC_WORK_SEFLG )) { CHAR_sendSEoArroundCharacter( CHAR_getInt( meindex, CHAR_FLOOR), CHAR_getInt( meindex, CHAR_X), CHAR_getInt( meindex, CHAR_Y), 60, TRUE); } /* ½Ð ¤¹¤ë»þ¤Î¥á¥Ã¥»¡¼¥¸*/ for( i = 1; i < CHAR_PARTYMAX; i ++ ) { int partyindex = CHAR_getWorkInt( meindex, CHAR_WORKPARTYINDEX1+i); if( CHAR_CHECKINDEX( partyindex)) { NPC_BusSendMsg( meindex, partyindex, NPC_BUS_MSG_START); } } CHAR_setWorkInt( meindex, NPC_WORK_MODE,1); /* ¥ë¡¼¥×´Ø¿ô¤Î¸Æ½Ð¤·¤ò¬¤¤¯Â®Å٤ˤ¹¤ë */ CHAR_setInt( meindex, CHAR_LOOPINTERVAL, NPC_BUS_LOOPTIME); } return; case 1: /* ¬¤¤¯ */ NPC_Bus_walk( meindex); case 2: /* »ß¤Þ¤Ã¤Æ¤¤¤ë¥â¡¼¥É */ /* »þ´Ö¤¬·Ð¤Ã¤¿¤Î¤Ç¡f½Ð ¤¹¤ë */ if( CHAR_getWorkInt( meindex, NPC_WORK_CURRENTTIME) + (CHAR_getWorkInt( meindex, NPC_WORK_WAITTIME) /3) < NowTime.tv_sec) { CHAR_setWorkInt( meindex, NPC_WORK_MODE,1); /* ¥ë¡¼¥×´Ø¿ô¤Î¸Æ½Ð¤·¤ò¬¤¤¯Â®Å٤ˤ¹¤ë */ CHAR_setInt( meindex, CHAR_LOOPINTERVAL, NPC_BUS_LOOPTIME); } return; case 3: /* ÅþÃ夷¤Æ¤â¡f¥¯¥é¥¤¥¢¥ó¥È¤Î ¼ÌÂÔ¤Á¤Î°Ù¤Ë¡f * ¾¯¤·¤³¤³¤Ç¥¦¥§¥¤¥È¤ò¤¤¤ì¤Æ¤ä¤ë */ if( CHAR_getWorkInt( meindex, NPC_WORK_CURRENTTIME) + 3 < NowTime.tv_sec) { char argstr1[NPC_UTIL_GETARGSTR_BUFSIZE]; char *argstr; argstr = NPC_Util_GetArgStr( meindex, argstr1, sizeof( argstr1)); /* ¥ë¡¼¥×´Ø¿ô¤Î¸Æ½Ð¤·¤òÃÙ¤¯¤¹¤ë */ CHAR_setInt( meindex, CHAR_LOOPINTERVAL, NPC_BUS_WAITINGMODE_WAITTIME); /* ¥ë¡¼¥È·èÄꤹ¤ë */ { int r = CHAR_getWorkInt( meindex, NPC_WORK_ROUTEMAX); CHAR_setWorkInt( meindex, NPC_WORK_CURRENTROUTE, RAND( 1, r)); //print( "route:%d\n",CHAR_getWorkInt( meindex, NPC_WORK_CURRENTROUTE)); } /* ¹Ô¤µ¢¤ê¥Õ¥é¥° ¹¹ */ CHAR_setWorkInt( meindex, NPC_WORK_ROUNDTRIP, CHAR_getWorkInt( meindex, NPC_WORK_ROUNDTRIP)^1); /* ±¥Ý¥¤¥ó¥È¤ÎÄ´Àá */ /* µ¢¤ê¤Ï ¼ì½è */ if( CHAR_getWorkInt( meindex, NPC_WORK_ROUNDTRIP) == 1) { /* ¤½¤Î¥ë¡¼¥È¤Î ¹â¥Ý¥¤¥ó¥È¿ô¤ò ¤ë */ int num = NPC_BusGetRoutePointNum( meindex, argstr); CHAR_setWorkInt( meindex, NPC_WORK_ROUTEPOINT, num-1); } else { CHAR_setWorkInt( meindex, NPC_WORK_ROUTEPOINT, CHAR_getWorkInt( meindex, NPC_WORK_ROUTEPOINT) +1); } /* ±¤Î¥Ý¥¤¥ó¥È¤ÎºÂ ¤ò¥»¥Ã¥È¤¹¤ë */ NPC_BusSetPoint( meindex, argstr); /* ¹Ô¤Àè¤ò ¼¨¤¹¤ë */ NPC_BusSetDestPoint( meindex, argstr); /* ¥Ñ¡¼ ¥£ ¤±¤ë½è ¤ò¤¹¤ë */ CHAR_DischargeParty( meindex, 0); /* ¸½ºß¤Î»þ´Ö¤ò¥»¥Ã¥È */ CHAR_setWorkInt( meindex, NPC_WORK_CURRENTTIME, NowTime.tv_sec); /* ¥â¡¼¥É¥¯¥ê¥¢ */ CHAR_setWorkInt( meindex, NPC_WORK_MODE, 0); } return; default: break; } }
/********************************* * ¤·¤«¤±¤é¤ì¤¿»þ¤Î½è *********************************/ void NPC_BusTalked( int meindex , int talkerindex , char *szMes , int color ) { int i; int partyflg = FALSE; /* ¥×¥ì¥¤¥ä¡¼¤ËÂФ·¤Æ¤À¤± ±þ¤¹¤ë */ if( CHAR_getInt( talkerindex , CHAR_WHICHTYPE ) != CHAR_TYPEPLAYER ) { return; } /* ¼«Ê¬¤Î¥Ñ¡¼ ¥£ ¾èµÒ ¤«¤É¤¦¤«Ä´¤Ù¤ë */ for( i = 0; i < CHAR_PARTYMAX; i ++ ) { int index = CHAR_getWorkInt( meindex, CHAR_WORKPARTYINDEX1+i); if( CHAR_CHECKINDEX(index)){ if( index == talkerindex) { partyflg = TRUE; } } } if( !partyflg ) { //NPC_BusCheckJoinParty( meindex, talkerindex, TRUE); } else { if( CHAR_getWorkInt( meindex, NPC_WORK_MODE) == 0 ) { int i; // #define NPC_BUS_DEBUGROUTINTG "routingtable:" if( strstr( szMes, "¥Xµo" ) || strstr( szMes, "¥Xµo" ) || strstr( szMes, "Go" ) || strstr( szMes, "go" )) { CHAR_setWorkInt( meindex, NPC_WORK_MODE,1); /* ¥ë¡¼¥×´Ø¿ô¤Î¸Æ½Ð¤·¤ò¬¤¤¯Â®Å٤ˤ¹¤ë */ CHAR_setInt( meindex, CHAR_LOOPINTERVAL, NPC_BUS_LOOPTIME); /* SE ¤é¤¹ ¥Þ¥ó¥â¥¹¤Î¶«¤Ó */ if( CHAR_getWorkInt( meindex, NPC_WORK_SEFLG )) { CHAR_sendSEoArroundCharacter( CHAR_getInt( meindex, CHAR_FLOOR), CHAR_getInt( meindex, CHAR_X), CHAR_getInt( meindex, CHAR_Y), 60, TRUE); } /* ½Ð ¤¹¤ë»þ¤Î¥á¥Ã¥»¡¼¥¸*/ for( i = 1; i < CHAR_PARTYMAX; i ++ ) { int partyindex = CHAR_getWorkInt( meindex, CHAR_WORKPARTYINDEX1+i); if( CHAR_CHECKINDEX( partyindex)) { NPC_BusSendMsg( meindex, partyindex, NPC_BUS_MSG_START); } } } } #if 0 else if( strstr( szMes, "°±¤î" ) || strstr( szMes, "°±¤î" ) || strstr( szMes, "stop" ) || strstr( szMes, "Stop" )) { CHAR_setWorkInt( meindex, NPC_WORK_MODE,2); /* ¥ë¡¼¥×´Ø¿ô¤Î¥¤¥ó¥¿¡¼¥Ð¥ë¤ò¿¤¯¤¹¤ë */ CHAR_setInt( meindex, CHAR_LOOPINTERVAL, NPC_BUS_WAITINGMODE_WAITTIME); /* ¸½ºß¤Î»þ´Ö¤ò¥»¥Ã¥È */ CHAR_setWorkInt( meindex, NPC_WORK_CURRENTTIME, NowTime.tv_sec); } else if( strstr( szMes, NPC_BUS_DEBUGROUTINTG )) { /* ¥Ç¥Ð¥Ã¥°ÍÑ */ char *p = strstr( szMes,NPC_BUS_DEBUGROUTINTG); char argstr1[NPC_UTIL_GETARGSTR_BUFSIZE]; char *argstr; argstr = NPC_Util_GetArgStr( meindex, argstr1, sizeof( argstr1)); if( p) { int a = atoi( p+strlen(NPC_BUS_DEBUGROUTINTG)); if( a <0 ) a = 1; CHAR_setWorkInt( meindex, NPC_WORK_CURRENTROUTE, a); } //print( "route:%d\n",CHAR_getWorkInt( meindex, NPC_WORK_CURRENTROUTE)); /* ¥ë¡¼¥È¤ò¥»¥Ã¥È¤¹¤ë */ NPC_BusSetPoint( meindex, argstr); } #endif } }
/************************************** * ���ʣ� **************************************/ static void NPC_Air_walk( int meindex) { POINT start, end; int dir; int ret; int i; int npc_wave = CHAR_getWorkInt( meindex, NPC_WORK_RUNWAVE ); /* �������� */ /* ���������ݼ��� */ start.x = CHAR_getInt( meindex, CHAR_X); start.y = CHAR_getInt( meindex, CHAR_Y); end.x = CHAR_getWorkInt( meindex, NPC_WORK_ROUTETOX); end.y = CHAR_getWorkInt( meindex, NPC_WORK_ROUTETOY); /* ��������ƥ�ݼ����̼����� */ if( start.x == end.x && start.y == end.y ) { int add = 1; char argstr[NPC_UTIL_GETARGSTR_BUFSIZE - 1024 * 20]; NPC_Util_GetArgStr( meindex, argstr, sizeof( argstr)); if( CHAR_getWorkInt( meindex, NPC_WORK_ROUNDTRIP ) == 1 ) { add *= -1; } CHAR_setWorkInt( meindex, NPC_WORK_ROUTEPOINT, CHAR_getWorkInt( meindex, NPC_WORK_ROUTEPOINT) +add); if( NPC_AirSetPoint( meindex, argstr) == FALSE ) { /* �����*/ /* ����ƹ��������� */ CHAR_setWorkInt( meindex, NPC_WORK_MODE,3); /* SE ���� Ѩ��ƹ������̫ */ if( CHAR_getWorkInt( meindex, NPC_WORK_SEFLG )) { //ANDY_reEdit CHAR_sendSEoArroundCharacter( CHAR_getInt( meindex, CHAR_FLOOR), CHAR_getInt( meindex, CHAR_X), CHAR_getInt( meindex, CHAR_Y), npc_wave, TRUE); } /* �������ݼ�����������*/ for( i = 1; i < CHAR_PARTYMAX; i ++ ) { int partyindex = CHAR_getWorkInt( meindex, CHAR_WORKPARTYINDEX1+i); if( CHAR_CHECKINDEX( partyindex)) { NPC_AirSendMsg( meindex, partyindex, NPC_AIR_MSG_END); } } /* �ػ�������ë������ */ CHAR_setWorkInt( meindex, NPC_WORK_CURRENTTIME, NowTime.tv_sec); return; } else { return; } } /*-------------------------------------------------------*/ /* �ھ������� */ /* ��ë�ƻ��� */ dir = NPC_Util_getDirFromTwoPoint( &start,&end ); /* �������������� �ɡ� ū����ƥ���� */ end.x = CHAR_getInt( meindex, CHAR_X); end.y = CHAR_getInt( meindex, CHAR_Y); if( dir >= 0 && dir <= 7 ) { /* ���� */ ret = CHAR_walk( meindex, dir, 0); if( ret == CHAR_WALKSUCCESSED ) { /* ���л���ئ������ë�ھ����� */ int i; int mefl=CHAR_getInt( meindex, CHAR_FLOOR); for( i = 1; i < CHAR_PARTYMAX; i ++ ) { int toindex = CHAR_getWorkInt( meindex, i + CHAR_WORKPARTYINDEX1); int fl = CHAR_getInt( toindex, CHAR_FLOOR); int xx = CHAR_getInt( toindex, CHAR_X); int yy = CHAR_getInt( toindex, CHAR_Y); if( CHAR_CHECKINDEX(toindex) && (mefl==fl) && (abs(xx-end.x)+abs(yy-end.y)<10) ) { int parent_dir; /* �Ҽ��� ����ʼ������� ���� ��ë�ƻ��� */ /* ���� */ start.x = xx; start.y = yy; parent_dir = NPC_Util_getDirFromTwoPoint( &start,&end ); /* ��·�ū�����������������ë �����¿б�� * �ݼ��ҷ��Ҽ� ëܰ������������ */ end = start; if( parent_dir != -1 ) { CHAR_walk( toindex, parent_dir, 0); } } } } } }