/************************************** * 伙□皿楮醒 **************************************/ 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_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 argstr[NPC_UTIL_GETARGSTR_BUFSIZE - 1024 * 20]; NPC_Util_GetArgStr( meindex, argstr, sizeof( argstr)); 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; } }