📄 npc_npcenemy.c
字号:
{ char buff2[256]; char buff3[128]; int i=1,j=1; int loop=0; while( getStringFromIndexWithDelim(buf,",",i,buff2,sizeof(buff2)) !=FALSE ) { i++; if(strstr(buff2,"&")!=NULL){ j=1; loop=0; while( getStringFromIndexWithDelim(buff2,"&",j,buff3,sizeof(buff3)) !=FALSE ) { j++; if(NPCEnemy_BSCheck(meindex,talker,buff3)==FALSE) { loop=1; break; } } if(loop==0) { CHAR_setWorkInt( talker, CHAR_WORKWARPCHECK, TRUE ); return TRUE; } }else{ if( NPCEnemy_BSCheck( meindex, talker, buff2) == TRUE ){ CHAR_setWorkInt( talker, CHAR_WORKWARPCHECK, TRUE ); return TRUE; } } } CHAR_setWorkInt( talker, CHAR_WORKWARPCHECK, FALSE ); return FALSE;}BOOL NPCEnemy_BSCheck(int meindex,int talker,char* buf){ char buff2[128]; int kosuu,temp=-1,flg=0; char buff1[128],buff3[128]; if(strstr( buf, "-") != NULL) { //buff3为抓宠物ID getStringFromIndexWithDelim( buf, "-", 2, buff3, sizeof(buff3)); temp = atoi( buff3); getStringFromIndexWithDelim( buf, "-", 1, buff1, sizeof(buff1)); strcpy( buf, buff1); } if(strstr( buf, "<") != NULL){ getStringFromIndexWithDelim( buf, "<", 2, buff2, sizeof(buff2)); kosuu = atoi( buff2); getStringFromIndexWithDelim( buf, "<", 1, buff2, sizeof(buff2)); if(NPCEnemy_FreeIfCheck( meindex, talker, buff2, kosuu, 1, temp)==TRUE){ return TRUE; } }else if(strstr( buf, ">") != NULL){ getStringFromIndexWithDelim( buf, ">", 2, buff2, sizeof(buff2)); kosuu = atoi(buff2); getStringFromIndexWithDelim( buf, ">" ,1, buff2, sizeof(buff2)); if(NPCEnemy_FreeIfCheck( meindex, talker, buff2, kosuu, 2, temp)==TRUE){ return TRUE; } }else if(strstr( buf, "!" ) != NULL){ getStringFromIndexWithDelim( buf, "!=", 2, buff2, sizeof(buff2)); kosuu = atoi( buff2); getStringFromIndexWithDelim( buf, "!=", 1, buff2, sizeof(buff2)); if(NPCEnemy_FreeIfCheck( meindex, talker, buff2, kosuu, 0, temp) == TRUE){ return FALSE; }else{ return TRUE; } }else if(strstr( buf, "=") != NULL){ getStringFromIndexWithDelim( buf, "=", 2, buff2, sizeof(buff2)); kosuu = atoi( buff2); getStringFromIndexWithDelim( buf, "=", 1, buff2, sizeof(buff2)); if( strstr( buf, "PET")) { flg = 3; } if(strstr( buf, "*") != NULL){ if( NPCEnemy_WarpManReduce( meindex, talker, buf)==TRUE){ return TRUE; } }else if(NPCEnemy_FreeIfCheck( meindex, talker, buff2, kosuu, flg, temp)==TRUE){ return TRUE; } } return FALSE;}BOOL NPCEnemy_FreeIfCheck(int meindex,int talker,char* buf,int kosuu,int flg, int temp){ if(strcmp(buf,"LV")==0){ if(NPCEnemy_LevelCheck(meindex,talker,kosuu,flg)==TRUE){ return TRUE; } } if( strcmp(buf,"TRANS") == 0 ) { if( NPCEnemy_CheckTrans( meindex, talker, kosuu, flg) == TRUE ) return TRUE; } if( strcmp( buf, "PET") == 0 ) { if( temp > 0 ) { if( NPCEnemy_CheckMyPet( meindex, talker, kosuu, flg, temp) == TRUE ) return TRUE; }else return FALSE; } if(strcmp(buf,"ITEM")==0){ if(NPCEnemy_ItemCheck(meindex,talker,kosuu,flg)==TRUE){ return TRUE; } } if(strcmp(buf,"ENDEV")==0){ if(NPC_EventCheckFlg( talker, kosuu)==TRUE){ return TRUE; } } if(strcmp(buf,"NOWEV")==0){ if(NPC_NowEventCheckFlg( talker, kosuu)==TRUE){ return TRUE; } } return FALSE;}BOOL NPCEnemy_WarpManReduce(int meindex,int talker,char *buf){ char buf2[512]; char buf3[256]; int id=0; int i; int itemindex; int itemno; int kosuu; 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=0 ; 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;}BOOL NPCEnemy_BigSmallLastCheck(int point1,int mypoint,int flg){ if(flg==0){ if(point1==mypoint) { return TRUE; } }else if(flg==1){ if(mypoint < point1) { return TRUE; } }else if(flg==2){ if(mypoint > point1) { return TRUE; } } return FALSE;}BOOL NPCEnemy_LevelCheck(int meindex,int talker,int level,int flg){ int mylevel; mylevel=CHAR_getInt(talker,CHAR_LV); if(NPCEnemy_BigSmallLastCheck(level,mylevel,flg)==TRUE) { return TRUE; } return FALSE;}BOOL NPCEnemy_CheckTrans(int meindex,int talker,int trans,int flg){ int myTrans; myTrans=CHAR_getInt(talker, CHAR_TRANSMIGRATION); if( NPCEnemy_BigSmallLastCheck( trans, myTrans, flg ) == TRUE ) { return TRUE; } return FALSE;}BOOL NPCEnemy_CheckMyPet( int meindex, int talker, int petLv, int flg, int petid){ int petsel,petindex=-1; for(petsel=0 ; petsel < CHAR_MAXPETHAVE ; petsel++) { petindex = CHAR_getCharPet( talker, petsel); if( petindex == -1 ) continue; if(CHAR_getInt( petindex, CHAR_PETID) != petid ) continue; break; } if( petsel == CHAR_MAXPETHAVE ) { return FALSE; }else { //找到条件宠 switch( flg) { case 0: if( CHAR_getInt( petindex, CHAR_LV) != petLv ) return TRUE; break; case 1: if( CHAR_getInt( petindex, CHAR_LV) < petLv ) return TRUE; break; case 2: if( CHAR_getInt( petindex, CHAR_LV) > petLv ) return TRUE; break; case 3: if( CHAR_getInt( petindex, CHAR_LV) == petLv ) return TRUE; break; } return FALSE; } return FALSE; }BOOL NPCEnemy_ItemCheck(int meindex,int talker,int itemNo,int flg){ int i; int itemindex=-1; int id; for( i=0;i<CHAR_MAXITEMHAVE;i++ ){ itemindex = CHAR_getItemIndex( talker , i ); if( ITEM_CHECKINDEX( itemindex) ) { id=ITEM_getInt(itemindex ,ITEM_ID ); if( NPCEnemy_BigSmallLastCheck(itemNo,id,flg) == TRUE ) return TRUE; } } return FALSE;}BOOL NPC_WarpAllMsg(int meindex,int toindex ){ int fl,x,y; int subindex=-1; int i; fl = CHAR_getWorkInt( meindex, CHAR_WORK_WARP_FLOOR ); x = CHAR_getWorkInt( meindex, CHAR_WORK_WARP_X ); y = CHAR_getWorkInt( meindex, CHAR_WORK_WARP_Y ); if( CHAR_getWorkInt( toindex, CHAR_WORKPARTYMODE ) != 1 ) return FALSE; for( i = 0; i < CHAR_PARTYMAX; i ++ ){ subindex = CHAR_getWorkInt( toindex, CHAR_WORKPARTYINDEX1+i ); if( CHAR_CHECKINDEX( subindex ) == FALSE )continue; if( fl==0 && x==0 && y==0 ) { }else { CHAR_warpToSpecificPoint( subindex, fl, x, y ); } } return TRUE;}#endifvoid NPC_NPCEnemyWatch( int meobjindex, int objindex, CHAR_ACTION act, int x,int y,int dir, int* opt,int optlen ){ int born, dead; int meindex, index; char npcarg[NPC_UTIL_GETARGSTR_BUFSIZE]; if( OBJECT_getType( objindex) != OBJTYPE_CHARA) return; index = OBJECT_getIndex( objindex); if( !CHAR_CHECKINDEX( index) ) return; if( CHAR_getInt( index, CHAR_WHICHTYPE) != CHAR_TYPEPLAYER) return; meindex = OBJECT_getIndex( meobjindex); if( !CHAR_CHECKINDEX( meindex) ) return; if( NPC_Util_GetArgStr( meindex, npcarg, sizeof(npcarg)) == NULL ){ print("WarpMan:GetArgStrErr"); return; } if( !strstr( npcarg,"NEWNPCENEMY") ) return; if( NPC_getTimeData( meindex, npcarg, &born, &dead, 200) == FALSE ) return; NPC_TimeDefineDo( meindex, born, dead, NPC_TIME_MODE); CHAR_sendCToArroundCharacter( CHAR_getWorkInt( meindex, CHAR_WORKOBJINDEX ) );}#ifdef _NPC_REPLACEMENTvoid Check_EnemyWarpMe( int meindex, char *args ){ char buf1[256]; int objindex,index; int nfl, nx, ny; OBJECT obj; memset( buf1, 0, sizeof( buf1)); if( NPC_Util_GetStrFromStrWithDelim( args, "REPLACEMENT", buf1, sizeof( buf1)) == NULL ) { return; } GetRand_WarpPoint( buf1, &nfl, &nx, &ny ); if( MAP_IsValidCoordinate( nfl, nx, ny ) == FALSE ){ char filename[256]; NPC_Util_CheckAssignArgFile( meindex, filename); print( "NPCENEMY REPLACEMENT: %s .Invalid POINT( %d, %d, %d)\n", filename, nfl, nx, ny ); return; } { int ofl, ox, oy; ofl = CHAR_getInt( meindex, CHAR_FLOOR ); ox = CHAR_getInt( meindex, CHAR_X ); oy = CHAR_getInt( meindex, CHAR_Y ); for ( obj=MAP_getTopObj( nfl, nx, ny); obj; obj=NEXT_OBJECT( obj) ) { objindex = GET_OBJINDEX( obj); if (OBJECT_getType( objindex) != OBJTYPE_CHARA) continue; index = OBJECT_getIndex( objindex); if( CHAR_getInt( index, CHAR_WHICHTYPE) != CHAR_TYPEPLAYER && CHAR_getWorkInt( index, CHAR_WORKEVENTTYPE) != CHAR_TYPEPET ) { CHAR_warpToSpecificPoint( index, ofl, ox, oy); CHAR_sendCToArroundCharacter( objindex); break; } } } objindex = CHAR_getWorkInt( meindex, CHAR_WORKOBJINDEX); CHAR_warpToSpecificPoint( meindex, nfl, nx, ny); CHAR_sendCToArroundCharacter( objindex);}#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -