📄 npc_eventaction.c
字号:
return FALSE;}BOOL NPC_ActionPartyCheck( int toindex, int nums, int flg){ int partys=0; int leaderindex=-1; if( CHAR_getWorkInt( toindex, CHAR_WORKPARTYMODE) == CHAR_PARTY_NONE ){ partys = 0; leaderindex = toindex; }else if( CHAR_getWorkInt( toindex, CHAR_WORKPARTYMODE) == CHAR_PARTY_CLIENT ){ leaderindex = CHAR_getWorkInt( toindex, CHAR_WORKPARTYINDEX1); } if( CHAR_getWorkInt( leaderindex, CHAR_WORKPARTYMODE) == CHAR_PARTY_LEADER ){ int i; for( i=0; i<5; i++) { int pindex = CHAR_getWorkInt( leaderindex, CHAR_WORKPARTYINDEX1+i); if( !CHAR_CHECKINDEX( pindex) ) continue; partys++; } } if(NPC_ActionBigSmallLastCheck( nums, partys, flg) == TRUE){ return TRUE; } return FALSE;}BOOL NPC_ActionReItemCheck( int toindex, int nums, int flg){ int remnants=0; remnants = CHAR_findSurplusItemBox( toindex); if(NPC_ActionBigSmallLastCheck( nums, remnants, flg) == TRUE){ return TRUE; } return FALSE;}BOOL NPC_ActionRePetCheck( int toindex, int nums, int flg){ int remnants=0; remnants = CHAR_findSurplusPetBox( toindex); if(NPC_ActionBigSmallLastCheck( nums, remnants, flg) == TRUE){ return TRUE; } return FALSE;}BOOL NPC_ActionGoldCheck(int meindex,int talker,int Golds,int flg){ int myGold; myGold=CHAR_getInt(talker,CHAR_GOLD); if(NPC_ActionBigSmallLastCheck( Golds, myGold, flg) == TRUE){ return TRUE; } return FALSE;}BOOL NPC_ActionWarpManReduce(int meindex,int talker,char *buf){ char buf2[512]; char buf3[256]; int i, itemindex, itemno, kosuu; int id=0; int cnt =0; getStringFromIndexWithDelim(buf,"=",2,buf2,sizeof(buf2)); getStringFromIndexWithDelim(buf2,"*",1,buf3,sizeof(buf3)); itemno = atoi(buf3); getStringFromIndexWithDelim(buf2,"*",2,buf3,sizeof(buf3)); kosuu = atoi(buf3); for( i=CHAR_STARTITEMARRAY ; i < CHAR_MAXITEMHAVE;i++ ){ itemindex=CHAR_getItemIndex( talker , i ); if( ITEM_CHECKINDEX(itemindex) ){ id=ITEM_getInt(itemindex ,ITEM_ID ); if( itemno == id ){ cnt++; if(cnt==kosuu){ return TRUE; } } } } return FALSE;}#ifdef _NPCCHANGE_PLAYERIMG //andyBOOL NPC_ActionChangePlayerBBI( int meindex, int charindex, char *Img){ int cBBI; char buf1[256]; memset( buf1, 0, sizeof( buf1)); if( !CHAR_CHECKINDEX( charindex) ) return FALSE; if( !CHAR_CHECKINDEX( meindex) ) return FALSE;#ifdef _FIXBUG_ATTACKBOW { int armtype; int itemindex = CHAR_getItemIndex( charindex, CHAR_ARM); if( ITEM_CHECKINDEX(itemindex) ){ armtype = ITEM_getInt( itemindex, ITEM_TYPE ); if( armtype == ITEM_BOW || armtype == ITEM_BOUNDTHROW || armtype == ITEM_BREAKTHROW || armtype == ITEM_BOOMERANG) { CHAR_talkToCli( charindex, -1, "使用远距离武器无法变身!", CHAR_COLORYELLOW ); return FALSE; } } }#endif#ifdef _PETSKILL_BECOMEPIG if( CHAR_getInt( charindex, CHAR_BECOMEPIG) > -1 ){//变成乌力了 CHAR_talkToCli( charindex, -1, "无法变身,乌力化中不能变身!", CHAR_COLORYELLOW ); return FALSE; }#endif if( CHAR_getInt( charindex, CHAR_RIDEPET) != -1 ) {//骑宠不换图 CHAR_setInt( charindex, CHAR_RIDEPET, -1 ); BATTLE_changeRideImage( charindex ); CHAR_talkToCli( charindex, -1, "取消骑宠状态。", CHAR_COLORYELLOW); //change -----> 修改bug(落马後,宠物选项的状态依然为"骑乘",这里修正过来 CHAR_complianceParameter( charindex ); CHAR_send_P_StatusString( charindex, CHAR_P_STRING_RIDEPET); //return FALSE; }#ifdef _ITEM_METAMO CHAR_setWorkInt( charindex, CHAR_WORKITEMMETAMO, 0);#endif if( Img == NULL || !strcmp( Img, "\0")) return FALSE;//======================= CHAR_setWorkInt( charindex, CHAR_WORKNPCMETAMO, meindex); if( strstr( Img, "NPCBBI") != NULL ) { cBBI = CHAR_getInt( meindex, CHAR_BASEBASEIMAGENUMBER); sprintf( buf1, "你化身成了%s的样子。", CHAR_getChar( meindex, CHAR_NAME)); }else if( strstr( Img, "MYBBI") != NULL ) { cBBI = CHAR_getInt( charindex, CHAR_BASEBASEIMAGENUMBER); CHAR_setWorkInt( charindex, CHAR_WORKNPCMETAMO, 0); sprintf( buf1, "变回了原来的样子。"); }else if( strstr( Img, ",") != NULL ) { int imgindex=1, maxImg=0; while( getStringFromIndexWithDelim( Img, ",", imgindex, buf1, sizeof( buf1)) != FALSE ) { imgindex++; maxImg++; } if( (imgindex = (rand()%maxImg)) > maxImg) imgindex = 1; if( imgindex < 1 ) imgindex = 1; if( getStringFromIndexWithDelim( Img, ",", imgindex, buf1, sizeof( buf1)) == FALSE ) return FALSE; cBBI = atoi( buf1); sprintf( buf1, "你样子改变了。"); }else { cBBI = atoi( Img); sprintf( buf1, "你样子改变了。"); }//======================= if( cBBI < 0 ) { return FALSE; } CHAR_talkToCli( charindex, -1, buf1, CHAR_COLORYELLOW); //CHAR_BASEBASEIMAGENUMBER CHAR_BASEIMAGENUMBER CHAR_setInt( charindex, CHAR_BASEIMAGENUMBER, cBBI); CHAR_complianceParameter( charindex ); CHAR_sendCToArroundCharacter( CHAR_getWorkInt( charindex , CHAR_WORKOBJINDEX )); CHAR_send_P_StatusString( charindex , CHAR_P_STRING_BASEBASEIMAGENUMBER); //CHAR_K_STRING_BASEIMAGENUMBER //CHAR_P_STRING_BASEBASEIMAGENUMBER return TRUE;}#endif#ifdef _NPCCHANGE_PLAYERIMGBOOL NPC_CheckPlayerBBI( int meindex, int charindex, int BBI, int flg){ int MyBBI; if( !CHAR_CHECKINDEX( charindex)) return FALSE; if( BBI < 0 ) return FALSE; MyBBI = CHAR_getInt( charindex, CHAR_BASEIMAGENUMBER); return NPC_ActionBigSmallLastCheck( BBI, MyBBI,flg);}#endifBOOL showString( int meindex, char *showstr,int flg){ //广播 char buf1[256]; char argstr[NPC_UTIL_GETARGSTR_BUFSIZE]; int toindex = -1; int floor; int i; if( NPC_Util_GetArgStr( meindex, argstr, sizeof( argstr)) == NULL ) { print("\n not found argstr "); return FALSE; } if( NPC_Util_GetStrFromStrWithDelim( argstr, showstr,buf1, sizeof(buf1)) == NULL ) { strcpy( buf1, showstr); } toindex = -1; floor = CHAR_getInt( meindex , CHAR_FLOOR); while( toindex < 1000) { toindex ++; if( !CHAR_CHECKINDEX( toindex) ) continue; if( CHAR_getInt( toindex , CHAR_WHICHTYPE ) != CHAR_TYPEPLAYER ) continue; if( CHAR_getInt( toindex , CHAR_FLOOR) != floor ) continue; CHAR_talkToCli( toindex, meindex, buf1, CHAR_COLORYELLOW); if( flg == 1 ) { CHAR_setWorkInt( toindex, CHAR_WORKSTAKEFLAG, FALSE ); for( i=0; i<5; i++) { CHAR_setWorkInt( toindex, i+CHAR_WORKSTAKETYPE1, 0); } } } return TRUE;}BOOL NPC_getTimeXYPoint( int meindex, int Mode){ char npcarg[NPC_UTIL_GETARGSTR_BUFSIZE]; char buf[256], buf1[256], buf2[256]; int fl=-1, x, y; int GraNo = -1; int points = 1; //条件成立为1 if( Mode <= 0 ) { points = 2; } memset( npcarg, 0, sizeof( npcarg)); if( !CHAR_CHECKINDEX( meindex) ) return FALSE; if( NPC_Util_GetArgStr( meindex, npcarg, sizeof(npcarg)) == NULL ){ print("WarpMan:GetArgStrErr"); return FALSE; } memset( buf, 0, sizeof( buf)); if( NPC_Util_GetStrFromStrWithDelim( npcarg, "TimeXYPoint", buf, sizeof( buf)) != NULL ){ if( getStringFromIndexWithDelim(buf , "&" , points, buf1, sizeof( buf1)) != FALSE ){ memset( buf2, 0, sizeof( buf2)); if( getStringFromIndexWithDelim(buf1 , "," , 1, buf2, sizeof( buf2)) == FALSE ){ return FALSE; } fl = atoi( buf2); if( getStringFromIndexWithDelim(buf1 , "," , 2, buf2, sizeof( buf2)) == FALSE ){ return FALSE; } x = atoi( buf2); if( getStringFromIndexWithDelim(buf1 , "," , 3, buf2, sizeof( buf2)) == FALSE ){ return FALSE; } y = atoi( buf2); if( MAP_IsValidCoordinate( fl, x, y ) == FALSE ){ char filename[256]; NPC_Util_CheckAssignArgFile( meindex, filename); return FALSE; } if( CHAR_getInt( meindex, CHAR_FLOOR) != fl || CHAR_getInt( meindex, CHAR_X) != x || CHAR_getInt( meindex, CHAR_Y) != y ){ CHAR_warpToSpecificPoint( meindex, fl , x , y); } } } if( NPC_Util_GetStrFromStrWithDelim( npcarg, "GraNo", buf, sizeof( buf)) != NULL ){ if( getStringFromIndexWithDelim(buf , "&" , points, buf1, sizeof( buf1)) != FALSE ){ GraNo = atoi( buf1); CHAR_setInt( meindex, CHAR_BASEIMAGENUMBER, GraNo); } } return TRUE;}BOOL NPC_getTimeData( int meindex, char *npcarg, int *born, int *dead, int loopspeed){ int i; char buf[256]; if( NPC_Util_GetStrFromStrWithDelim( npcarg, "NEWTIME", buf, sizeof( buf)) != NULL ){ for(i=0 ; i<9 ; i++){ if( strstr( buf, TimeTble[i].arg ) != NULL){ *born = TimeTble[i].born; *dead = TimeTble[i].dead; return TRUE; } } } return FALSE;}BOOL NPC_CheckTimeDefine( char *timetype){ LSTIME nowlstime; int born=-1, dead=-1, finds=0, i; RealTimeToLSTime( NowTime.tv_sec, &nowlstime); for(i=0 ; i<9 ; i++){ if( strstr( timetype, TimeTble[i].arg ) != NULL){ born = TimeTble[i].born; dead = TimeTble[i].dead; finds = 1; break; } } if( finds == 0 ) return FALSE; if( born < dead ){ if( (born < nowlstime.hour) && (dead > nowlstime.hour) ){ return TRUE; } }else{ if( (born < nowlstime.hour && 1024 > nowlstime.hour) || ( 0 < nowlstime.hour && dead > nowlstime.hour)){ return TRUE; } } return FALSE;}void NPC_TimeDefineDo( int meindex, int born, int dead, int typeMode){ LSTIME nowlstime; RealTimeToLSTime( NowTime.tv_sec, &nowlstime); if(born < dead){ if( (born < nowlstime.hour) && (dead > nowlstime.hour) ){ CHAR_setWorkInt(meindex,typeMode,0); }else{ CHAR_setWorkInt(meindex,typeMode,1); } }else{ if( (born < nowlstime.hour && 1024 > nowlstime.hour) || ( 0 < nowlstime.hour && dead > nowlstime.hour)){ CHAR_setWorkInt(meindex,typeMode,0); }else{ CHAR_setWorkInt(meindex,typeMode,1); } } if( NPC_getTimeXYPoint( meindex, CHAR_getWorkInt( meindex, typeMode)) == FALSE ) return;}void GetRand_WarpPoint( char *buf, int *fl, int *x, int *y ) { char buff1[256],buff2[256]; int i=0,point=1; struct { int m_fl; int m_x; int m_y; } RandPoint[]={ {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, {0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}, }; while( getStringFromIndexWithDelim( buf,";",point,buff1,sizeof( buff1)) != FALSE) { point++; getStringFromIndexWithDelim(buff1,",",1,buff2,sizeof(buff2)); RandPoint[i].m_fl = atoi(buff2); getStringFromIndexWithDelim(buff1,",",2,buff2,sizeof(buff2)); RandPoint[i].m_x = atoi(buff2); getStringFromIndexWithDelim(buff1,",",3,buff2,sizeof(buff2)); RandPoint[i].m_y = atoi(buff2); i++; if( i >= arraysizeof( RandPoint) ) break; } point = RAND( 0, i); if( RandPoint[point].m_fl <= 0 || point > arraysizeof( RandPoint) -1) { point = 0; } *fl = RandPoint[point].m_fl; *x = RandPoint[point].m_x; *y = RandPoint[point].m_y; return;}BOOL NPC_ActionDuelRankCheck(int meindex,int talker,int rank,int flg){ int myrank; myrank=CHAR_getWorkInt(talker,CHAR_WORKSHOPRELEVANTSEC); if( NPC_ActionBigSmallLastCheck( rank, myrank, flg)==TRUE){ return TRUE; } return FALSE;}BOOL NPC_ActionDuelPointCheck(int meindex,int talker,int rank,int flg){ int myduel; myduel = CHAR_getInt( talker, CHAR_DUELPOINT); if( NPC_ActionBigSmallLastCheck( rank, myduel, flg)==TRUE){ return TRUE; } return FALSE;}BOOL NPC_ActionTreasureTypeCheck(int meindex,int level, int type, int flg){ int mylevel;// if( CHAR_getWorkInt( meindex, NPC_TIME_EVENTMODE) == NPC_EVENTMODE_EVENT ){ mylevel = (type == NPC_EVENTMODE_EVENT)?1:0; if( NPC_ActionBigSmallLastCheck( level, mylevel, flg)==TRUE) return TRUE; return FALSE;}BOOL NPC_ActionTreasureRandItemGet(int meidex,int talker,int rand_j,char *buf){ char buff2[64]; int randitem; int ret; int itemindex; char token[128]; if(rand_j == 0) { print("Event:由於0的介入,出现错误。"); return FALSE; } randitem = rand()%rand_j; if(randitem == 0) randitem = rand_j; getStringFromIndexWithDelim(buf , "," , randitem, buff2, sizeof(buff2)) ; itemindex = ITEM_makeItemAndRegist( atoi( buff2)); if(itemindex == -1) return FALSE; /*失奶 丞及馨笛( 涛失奶 丞 卞中木化仄引丹 */ ret = CHAR_addItemSpecificItemIndex( talker, itemindex); if( ret < 0 || ret >= CHAR_MAXITEMHAVE ) { print( "npc_exchangeman.c: additem error itemindex[%d]\n", itemindex); ITEM_endExistItemsOne( itemindex); return FALSE; } if(itemindex != -1) { LogItem( CHAR_getChar( talker, CHAR_NAME ), /* 平乓仿 */ CHAR_getChar( talker, CHAR_CDKEY ),#ifdef _add_item_log_name // WON ADD 在item的log中增加item名称 itemindex,#else ITEM_getInt( itemindex, ITEM_ID), /* 失奶 丞 寞 */#endif "EventAddItem(任务需求所得到的道具)", CHAR_getInt( talker,CHAR_FLOOR), CHAR_getInt( talker,CHAR_X ), CHAR_getInt( talker,CHAR_Y ), ITEM_getChar( itemindex, ITEM_UNIQUECODE), ITEM_getChar( itemindex, ITEM_NAME), ITEM_getInt( itemindex, ITEM_ID) ); } sprintf(token,"收下了%s",ITEM_getChar( itemindex, ITEM_NAME)); CHAR_talkToCli( talker, -1, token, CHAR_COLORWHITE); CHAR_sendItemDataOne( talker, ret); return TRUE;}#ifdef _NPC_ADDWARPMAN1BOOL NPC_ActionPartyCountCheck( int toindex, int nums, int flg){ int partys=0; int i; partys = 0; for( i=0 ; i < CHAR_PARTYMAX ;i++) if(CHAR_getWorkInt(toindex,CHAR_WORKPARTYINDEX1+i) != -1) partys++; if(NPC_ActionBigSmallLastCheck( nums, partys, flg) == TRUE) return TRUE; return FALSE;}//检查男生人数BOOL NPC_ActionManCountCheck( int toindex, int nums, int flg){ int i,tempcount = 0; if( CHAR_getWorkInt( toindex, CHAR_WORKPARTYMODE) == CHAR_PARTY_NONE ){ if( IsMale(toindex) == 1 ) tempcount++; } else{ for( i=0 ; i < CHAR_PARTYMAX ;i++) if(CHAR_getWorkInt(toindex,CHAR_WORKPARTYINDEX1+i) != -1) if( IsMale( CHAR_getWorkInt(toindex,CHAR_WORKPARTYINDEX1+i) ) == 1 ) tempcount++; } print("\n检查男生人数:%d",tempcount); if(NPC_ActionBigSmallLastCheck( nums, tempcount, flg) == TRUE) return TRUE; return FALSE;}//检查女生人数BOOL NPC_ActionWomanCountCheck( int toindex, int nums, int flg){ int i,tempcount = 0; if( CHAR_getWorkInt( toindex, CHAR_WORKPARTYMODE) == CHAR_PARTY_NONE ){ if( IsFemale(toindex) == 1 ) tempcount++; } else{ for( i=0 ; i < CHAR_PARTYMAX ;i++) if(CHAR_getWorkInt(toindex,CHAR_WORKPARTYINDEX1+i) != -1) if( IsFemale( CHAR_getWorkInt(toindex,CHAR_WORKPARTYINDEX1+i) ) == 1 ) tempcount++; } print("\n检查女生人数:%d",tempcount); if(NPC_ActionBigSmallLastCheck( nums, tempcount, flg) == TRUE) return TRUE; return FALSE;}#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -