int NPC_Lua_NLG_DischargeParty(lua_State *_NLL) { CheckEx(_NLL, 1); CheckIndexNull(_NLL, 1); int TM_index = (int)lua_tointeger(_NLL, 1); BOOL TM_Ret = CHAR_DischargeParty( TM_index, 0); LRetBool(_NLL, TM_Ret); }
int NPC_NPCEnemy_Dying( int battleindex, int meindex ) { char argstr1[NPC_UTIL_GETARGSTR_BUFSIZE]; char *argstr; char buf[64]; int i,toindex=-1; int tmp=-1; if( !CHAR_CHECKINDEX( meindex)) { return FALSE; } argstr = NPC_Util_GetArgStr( meindex, argstr1, sizeof( argstr1)); #ifdef _NEW_WARPMAN if( strstr( argstr, "NEWNPCENEMY") ) { }else { #endif /* 蠅 及陲太 */ if( NPC_Util_GetStrFromStrWithDelim( argstr, "endmsg", buf, sizeof( buf)) != NULL ) { for( i = 0; i < 5; i ++ ) { /* 爵 卞輔笛仄化中月蟈夠卞丟永本□斥 */ int toindex = BattleArray[battleindex].Side[0].Entry[i].charaindex; if( CHAR_CHECKINDEX( toindex) ) { CHAR_talkToCli( toindex, meindex ,buf , CHAR_COLORYELLOW ); } } } #ifdef _NEW_WARPMAN } #endif if( NPC_Util_GetStrFromStrWithDelim( argstr, "steal", buf, sizeof( buf)) != NULL ) { print("\n steal TRUE !!"); if( atoi( buf) == 1 ) { int charaindex = BattleArray[battleindex].Side[0].Entry[0].charaindex; NPC_NPCEnemy_StealItem( argstr, meindex, charaindex); } } #ifdef _ALLDOMAN // (不可開) Syu ADD 排行榜NPC if( NPC_Util_GetStrFromStrWithDelim( argstr, "herobattlefield", buf, sizeof( buf)) != NULL ) { int charaindex = BattleArray[battleindex].Side[0].Entry[0].charaindex; CHAR_setWorkInt ( charaindex , CHAR_WORKHEROFLOOR , atoi ( buf ) ) ; // Syu ADD if ( atoi ( buf ) > CHAR_getInt ( charaindex , CHAR_HEROFLOOR ) ) CHAR_setInt ( charaindex , CHAR_HEROFLOOR , atoi( buf ) ) ; } #endif tmp = NPC_Util_GetNumFromStrWithDelim( argstr, "dieact"); if( tmp != 1 ) tmp = 0; CHAR_setWorkInt( meindex, CHAR_WORK_DIEACT, tmp); if( CHAR_getWorkInt( meindex, CHAR_WORK_DIEACT) == 0 ) { Char *ch; CHAR_setInt( meindex, CHAR_BASEIMAGENUMBER, 0); print("bbi---->bi10"); CHAR_sendCToArroundCharacter( CHAR_getWorkInt( meindex, CHAR_WORKOBJINDEX)); CHAR_setWorkInt( meindex, CHAR_WORKEVENTTYPE, CHAR_EVENT_ALTERRATIVE); MAP_sendAroundMapdata( CHAR_getInt( meindex, CHAR_FLOOR), CHAR_getInt( meindex, CHAR_X), CHAR_getInt( meindex, CHAR_Y)); ch = CHAR_getCharPointer( meindex); if( ch != NULL ) { strcpysafe( ch->charfunctable[CHAR_LOOPFUNC].string, sizeof( ch->charfunctable[CHAR_LOOPFUNC]), "NPCEnemyLoop"); CHAR_constructFunctable( meindex); CHAR_setInt( meindex, CHAR_LOOPINTERVAL, 5000); CHAR_setWorkInt( meindex, CHAR_WORK_DIETIME, NowTime.tv_sec); }else { print( "NPCENEMY:err\n"); } }else { for( i = 0; i < 5; i ++ ) { toindex = BattleArray[battleindex].Side[0].Entry[i].charaindex; if( CHAR_CHECKINDEX( toindex) ) { #ifdef _NEW_WARPMAN if( strstr( argstr, "NEWNPCENEMY") ) { BOOL Party=TRUE; if( NPC_NPCEnemy_CheckFree( meindex, toindex , &Party) == FALSE ) { continue; } if( Party == TRUE ) { }else { if( CHAR_getWorkInt( toindex, CHAR_WORKPARTYMODE ) == CHAR_PARTY_LEADER ) { if( NPC_WarpAllMsg( meindex, toindex ) == TRUE ) { return TRUE; } } continue; } } CHAR_DischargeParty( toindex, 0); // 拆隊 CHAR_warpToSpecificPoint( toindex, CHAR_getWorkInt( meindex, CHAR_WORK_WARP_FLOOR), CHAR_getWorkInt( meindex, CHAR_WORK_WARP_X), CHAR_getWorkInt( meindex, CHAR_WORK_WARP_Y) ); #else CHAR_warpToSpecificPoint( toindex, CHAR_getWorkInt( meindex, CHAR_WORK_WARP_FLOOR), CHAR_getWorkInt( meindex, CHAR_WORK_WARP_X), CHAR_getWorkInt( meindex, CHAR_WORK_WARP_Y) ); #endif #ifdef _NPC_REPLACEMENT Check_EnemyWarpMe( meindex, argstr); #endif } } } return TRUE; }
/************************************** * ��������� **************************************/ 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; } }
/************************************** * 伙□皿楮醒 **************************************/ 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_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; } }
void NPC_WarpWarpCharacter(int warpnpcindex, int charaindex) { char arg[NPC_UTIL_GETARGSTR_BUFSIZE]; int i = 0; #ifdef _NEW_WARPPOINT char buf1[256], buf2[256], buf3[256], freemsg[256]; int nBefind = FALSE; struct wapepoints { int m_floor; int m_x; int m_y; } Wpoint[10] = { {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0} }; int iRand = 0; #endif if(CHAR_getInt(charaindex, CHAR_WHICHTYPE) != CHAR_TYPEPLAYER) { return; } if(NPC_Util_GetArgStr(warpnpcindex, arg, sizeof(arg)) == NULL) { return; } { char token[16]; int floor = 0, x = 0, y = 0; int ret; #ifdef _NEW_WARPPOINT i = 1; if(strstr(arg, "FREEMORE") != NULL) { int k = 1, pw = -1; while(getStringFromIndexWithDelim(arg, "OVER", i, buf1, sizeof(buf1)) != FALSE) { i++; if(NPC_Util_GetStrFromStrWithDelim(buf1, "FREE", buf2, sizeof(buf2)) == NULL) continue; if(NPC_ActionPassCheck(warpnpcindex, charaindex, buf2) == FALSE) { continue; } else { iRand = 0; if(NPC_Util_GetStrFromStrWithDelim(buf1, "TO", buf2, sizeof(buf2)) != FALSE) { k = 1; while(getStringFromIndexWithDelim(buf2, "&", k, freemsg, sizeof(freemsg)) != FALSE) { k++; if(getStringFromIndexWithDelim(freemsg, ",", 1, buf3, sizeof(buf3)) == FALSE) break; Wpoint[iRand].m_floor = atoi(buf3); if(getStringFromIndexWithDelim(freemsg, ",", 2, buf3, sizeof(buf3)) == FALSE) break; Wpoint[iRand].m_x = atoi(buf3); if(getStringFromIndexWithDelim(freemsg, ",", 3, buf3, sizeof(buf3)) == FALSE) break; Wpoint[iRand].m_y = atoi(buf3); iRand++; nBefind = TRUE; if(iRand >= arraysizeof(Wpoint)) break; } break; } } if(nBefind == TRUE) break; } if(nBefind == FALSE || iRand <= 0) { //没找到条件 floor = CHAR_getInt(warpnpcindex, CHAR_FLOOR); x = CHAR_getInt(warpnpcindex, CHAR_X); y = CHAR_getInt(warpnpcindex, CHAR_Y); } else { pw = RAND(0, (iRand - 1)); floor = Wpoint[pw].m_floor; x = Wpoint[pw].m_x; y = Wpoint[pw].m_y; if(NPC_Util_GetStrFromStrWithDelim(arg, "CHECKPARTY", buf1, sizeof(buf1)) != NULL) { if(strstr(buf1, "TRUE") != NULL) { if(CHAR_getWorkInt(charaindex, CHAR_WORKPARTYMODE) == CHAR_PARTY_LEADER) { CHAR_DischargeParty(charaindex, 0); // 拆队 } } } if(MAP_IsValidCoordinate(floor, x, y) == FALSE) { print("*Warp NPC:Invalid %d %d %d", floor, x, y); return; } k = 0; } } else { #endif ret = getStringFromIndexWithDelim(arg, "|", 1, token, sizeof(token)); if(ret == FALSE)return; floor = atoi(token); ret = getStringFromIndexWithDelim(arg, "|", 2, token, sizeof(token)); if(ret == FALSE)return; x = atoi(token); ret = getStringFromIndexWithDelim(arg, "|", 3, token, sizeof(token)); if(ret == FALSE)return; y = atoi(token); #ifdef _NEW_WARPPOINT } #endif { int ff = floor; int of = CHAR_getInt(charaindex, CHAR_FLOOR); int fd = CHAR_getWorkInt(charaindex, CHAR_WORKFD); int eqen = getEqNoenemy(fd); if(eqen < 200) { if(eqen >= 120) { if((ff == 100) || (ff == 200) || (ff == 300) || (ff == 400) || (ff == 500)) { if((of != 100) && (of != 200) && (of != 300) && (of != 400) && (of != 500)) { CHAR_talkToCli(charaindex, -1, "太阳神的首饰发出一道奇异的光芒,隐藏了你的行踪。", CHAR_COLORWHITE); } } else { if((of == 100) || (of == 200) || (of == 300) || (of == 400) || (of == 500)) { CHAR_talkToCli(charaindex, -1, "环绕着你的光芒消失了。", CHAR_COLORWHITE); } } } else if(eqen >= 80) { if((ff == 100) || (ff == 200) || (ff == 300) || (ff == 400)) { if((of != 100) && (of != 200) && (of != 300) && (of != 400)) { CHAR_talkToCli(charaindex, -1, "太阳神的首饰发出一道奇异的光芒,隐藏了你的行踪。", CHAR_COLORWHITE); } } else { if((of == 100) || (of == 200) || (of == 300) || (of == 400)) { CHAR_talkToCli(charaindex, -1, "环绕着你的光芒消失了。", CHAR_COLORWHITE); } } } else if(eqen >= 40) { if((ff == 100) || (ff == 200)) { if((of != 100) && (of != 200)) { CHAR_talkToCli(charaindex, -1, "太阳神的首饰发出一道奇异的光芒,隐藏了你的行踪。", CHAR_COLORWHITE); } } else { if((of == 100) || (of == 200)) { CHAR_talkToCli(charaindex, -1, "环绕着你的光芒消失了。", CHAR_COLORWHITE); } } } } } #ifdef _DROPSTAKENEW { i = 0; for(i = 0; i < MAXSTAKENUM; i++) { if(CHAR_getWorkInt(charaindex, CHAR_WORKSTAKETYPE1 + i) > 0) { char tmpbuf[256]; snprintf(tmpbuf, sizeof(tmpbuf), "由於你离开了房间,所以将无法取回彩券!"); CHAR_setWorkInt(charaindex, CHAR_WORKSTAKETYPE1 + i, 0); CHAR_talkToCli(charaindex, -1, tmpbuf, CHAR_COLORYELLOW); } } CHAR_setWorkInt(charaindex, CHAR_WORKSTAKEFLAG, 0); #ifdef _FIX_GAMBLENUM if(CHAR_getInt(charaindex, CHAR_GAMBLENUM) < 0) CHAR_setInt(charaindex, CHAR_GAMBLENUM, 0); #endif } #endif if(floor == -1) { return; } else { if(MAP_IsValidCoordinate(floor, x, y) == FALSE) { print("Warp NPC:Invalid %d %d %d", floor, x, y); return; } CHAR_warpToSpecificPoint(charaindex, floor, x, y); } } }
int CHAR_die( int charaindex ) { CHAR_DischargeParty( charaindex, 0); { int bymonster = 0; int attackindex = CHAR_getWorkInt(charaindex, CHAR_WORKLASTATTACKCHARAINDEX); if( attackindex == -2 ) bymonster = 0; else if( CHAR_CHECKINDEX(attackindex) == TRUE ) { if( CHAR_getInt(attackindex,CHAR_WHICHTYPE) == CHAR_TYPEENEMY ) { bymonster = 1; } else { bymonster = 2; } } if( bymonster == 0 || bymonster == 1 ) { int i; for( i=0 ; i<CHAR_EQUIPPLACENUM ; i++ ) CHAR_DropItem(charaindex,i); } else { int eqindex[CHAR_EQUIPPLACENUM]; int itemhavenum=0; int i; for( i=0 ; i<CHAR_EQUIPPLACENUM ; i++ ) if( ITEM_CHECKINDEX(CHAR_getItemIndex(charaindex,i)) ) eqindex[itemhavenum++] = i; if( itemhavenum >= 1 ) { int randomindex = RAND(0,itemhavenum-1); CHAR_DropItem(charaindex,eqindex[randomindex]); } } CHAR_DropMoney(charaindex, CHAR_getInt(charaindex,CHAR_GOLD)/2 ); CHAR_setInt(charaindex,CHAR_GOLD,0); } CHAR_complianceParameter(charaindex); CHAR_sendCToArroundCharacter( CHAR_getWorkInt(charaindex, CHAR_WORKOBJINDEX) ); CHAR_setInt(charaindex,CHAR_DEADCOUNT, CHAR_getInt(charaindex,CHAR_DEADCOUNT)+1); { int i; BOOL old=FALSE; for( i=0 ; i<arraysizeof(pShow); i++) if( CHAR_setInt( charaindex, pShow[i].paramindex, 0 ) > 0 ) { old = TRUE; } if( CHAR_setInt( charaindex, CHAR_POISON, 0 ) > 0 )old=TRUE; if( old ) CHAR_sendCToArroundCharacter( CHAR_getInt(charaindex, CHAR_WORKOBJINDEX)); } CHAR_sendStatusString( charaindex, "P"); CHAR_sendStatusString( charaindex, "I"); CHAR_setFlg(charaindex,CHAR_ISDIE,1); CHAR_setFlg(charaindex,CHAR_ISATTACKED,0); return 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_FMPKCallManWindowTalked( int meindex, int talkerindex, int seqno, int select, char *data) { int datanum = -1, fl, x, y; char npcarg[NPC_UTIL_GETARGSTR_BUFSIZE]; char buf[1024], buff2[256]; int fd = getfdFromCharaIndex(talkerindex); if (fd == -1) return; if (NPC_Util_GetArgStr(meindex, npcarg, sizeof(npcarg)) == NULL) { print("GetArgStrErr"); return; } NPC_Util_GetStrFromStrWithDelim(npcarg, "WARP", buf, sizeof(buf)); getStringFromIndexWithDelim(buf, ",", 1, buff2, sizeof(buff2)); fl = atoi(buff2); getStringFromIndexWithDelim(buf, ",", 2, buff2, sizeof(buff2)); x = atoi(buff2); getStringFromIndexWithDelim(buf, ",", 3, buff2, sizeof(buff2)); y = atoi(buff2); makeStringFromEscaped( data); print("meindex:%d seqno:%d select:%d data:%s\n", meindex, seqno, select, data); datanum = atoi( data); switch( seqno){ /*--反元引曰及 --*/ case CHAR_WINDOWTYPE_FMPKCALLMAN_START: if (datanum == 1) NPC_FMPKCallMan_selectWindow(meindex, talkerindex, 1, -1); else if (datanum == 2) NPC_FMPKCallMan_selectWindow(meindex, talkerindex, 2, -1); break; case CHAR_WINDOWTYPE_FMPKCALLMAN_CALL: if (select == WINDOW_BUTTONTYPE_YES) { lssproto_WN_send(fd, WINDOW_MESSAGETYPE_MESSAGE, WINDOW_BUTTONTYPE_OK, -1, -1, makeEscapeString("\n召唤中···请稍候!\n@#$%↑&*···", buf, sizeof(buf))); NPC_CallFMMember(meindex, CHAR_getInt(talkerindex, CHAR_FLOOR), CHAR_getInt(talkerindex, CHAR_FMINDEX), CHAR_getChar(talkerindex, CHAR_FMNAME), CHAR_getWorkInt(talkerindex, CHAR_WORKFMINDEXI)); } break; case CHAR_WINDOWTYPE_FMPKCALLMAN_COME: if (select == WINDOW_BUTTONTYPE_YES) { print("CHAR_WINDOWTYPE_FMPKCALLMAN_COME\n"); if (CHAR_getWorkInt(talkerindex, CHAR_WORKBATTLEMODE) != BATTLE_CHARMODE_NONE) return; if (CHAR_getWorkInt(talkerindex, CHAR_WORKPARTYMODE) != CHAR_PARTY_NONE) CHAR_DischargeParty(talkerindex, 0); CHAR_setWorkInt(talkerindex, CHAR_WORKWARPCHECK, FALSE); CHAR_setWorkInt(talkerindex, CHAR_WORKFMPKFLAG, 1); CHAR_warpToSpecificPoint(talkerindex, fl, x, y); } break; case CHAR_WINDOWTYPE_FMPKCALLMAN_LEAVE: if (select == WINDOW_BUTTONTYPE_YES) { int spfl = 0, spx = 0, spy = 0, i = 0, itemindex = 0; if (CHAR_getWorkInt(talkerindex, CHAR_WORKBATTLEMODE) != BATTLE_CHARMODE_NONE) return; if (CHAR_getWorkInt(talkerindex, CHAR_WORKPARTYMODE) != CHAR_PARTY_NONE) { lssproto_WN_send(fd, WINDOW_MESSAGETYPE_MESSAGE, WINDOW_BUTTONTYPE_OK, -1, -1, makeEscapeString("\n无法以团队方式离开唷!\n请先解散团队!", buf, sizeof(buf))); return; } for (i = 0; i < CHAR_MAXITEMHAVE; i++) { itemindex = CHAR_getItemIndex(talkerindex, i); if (ITEM_CHECKINDEX(itemindex) == FALSE) continue; if (ITEM_getInt(itemindex, ITEM_DROPATLOGOUT) == TRUE) { lssproto_WN_send(fd, WINDOW_MESSAGETYPE_MESSAGE, WINDOW_BUTTONTYPE_OK, -1, -1, makeEscapeString("\n您身上有贵重物品喔!\n为了避免在传送途中不小心损坏,\n请先将这类物品卸下,\n谢谢您的合作!", buf, sizeof(buf))); return; } } CHAR_setWorkInt(talkerindex, CHAR_WORKWARPCHECK, FALSE); CHAR_getElderPosition(CHAR_getInt(talkerindex, CHAR_LASTTALKELDER), &spfl, &spx, &spy); CHAR_warpToSpecificPoint(talkerindex, spfl, spx, spy); } break; default: break; } }