📄 npc_eventaction.c
字号:
CHAR_setInt( ret, CHAR_LV, CHAR_getInt( ret, CHAR_LV) +1 ); } }#endif CHAR_setInt( ret, CHAR_HP, CHAR_getWorkInt( ret, CHAR_WORKMAXHP )); CHAR_setMaxExpFromLevel( ret, CHAR_getInt( ret, CHAR_LV )); CHAR_setInt(ret,CHAR_VARIABLEAI,10000); } petindex2 = CHAR_getCharPet(talker, i); if( !CHAR_CHECKINDEX( petindex2) ) return FALSE; snprintf( msgbuf,sizeof( msgbuf), "拿到%s。", CHAR_getChar(petindex2,CHAR_NAME)); CHAR_talkToCli( talker, -1, msgbuf, CHAR_COLORYELLOW); CHAR_setInt( talker, CHAR_AMPOINT, pVipPoint-VipPoints); snprintf( msgbuf,sizeof( msgbuf), "扣除会员点数%d", VipPoints); CHAR_talkToCli( talker, -1, msgbuf, CHAR_COLORYELLOW); for(j = 0; j < CHAR_MAXPETHAVE; j++){ petindex = CHAR_getCharPet(talker, j); if( !CHAR_CHECKINDEX( petindex) ) continue; CHAR_complianceParameter( petindex ); snprintf( msgbuf, sizeof( msgbuf ), "K%d", j ); CHAR_sendStatusString( talker, msgbuf ); snprintf( msgbuf, sizeof( msgbuf ), "W%d", j ); CHAR_sendStatusString( talker, msgbuf ); } return TRUE;}#endif#ifdef _TRANS_7_NPCBOOL NPC_ActionTrans7( int talker, char *buf){ char token[128]; int work[10]; int Trans=CHAR_getInt(talker,CHAR_TRANSMIGRATION)+1;#ifdef _ADD_POOL_ITEM // WON ADD 增加可寄放的道具 int tran_pool_item[5] = { 4, 4, 4, 4, 4 }; // 增加的道具寄放数 int tran_pool_pet[5] = { 2, 2, 2, 2, 2}; // 增加的宠物寄放数 int j,item_sum=0, pet_sum=0; if(Trans>7 || CHAR_getInt(talker,CHAR_LV)<80){ sprintf( token, "由于你已七转或等级小于80级,所以转生失败!", CHAR_getChar( talker, CHAR_NAME)); CHAR_talkToCli( talker, -1, token, CHAR_COLORYELLOW ); return; } for(j=0; j<5 ;j++){ item_sum += tran_pool_item[j] ; pet_sum += tran_pool_pet[j]; } item_sum += 10; // 限制最大的寄道具数 pet_sum += 5; // 限制最大的寄宠数#endif NPC_TransmigrationStatus(talker, talker, work); NPC_TransmigrationFlg_CLS(talker, talker); CHAR_setInt(talker ,CHAR_TRANSMIGRATION, Trans); CHAR_setInt(talker, CHAR_LV ,1); CHAR_setMaxExp( talker, 0); CHAR_setInt( talker,CHAR_SKILLUPPOINT,CHAR_getInt( talker, CHAR_TRANSMIGRATION)*10); CHAR_Skillupsend( talker ); CHAR_setInt( talker,CHAR_RIDEPET, -1 ); CHAR_setInt( talker , CHAR_BASEIMAGENUMBER , CHAR_getInt( talker , CHAR_BASEBASEIMAGENUMBER) ); CHAR_sendStatusString( talker , "P");}#endifBOOL NPC_ActionAddItem( int talker, char *buf){ int itemID,k=0,itemindex=-1; int spaceNum=5,i; char buff3[256], msgbuf[64], token[256]; int ret; k=1; while( getStringFromIndexWithDelim(buf , "," , k, buff3, sizeof(buff3)) !=FALSE ){ k++; for( i = spaceNum ; i < CHAR_MAXITEMHAVE ; i++ ){ itemindex=CHAR_getItemIndex( talker , i ); if( itemindex == -1 ) { spaceNum = i+1; break; } } if( i == CHAR_MAXITEMHAVE ) { snprintf( msgbuf,sizeof( msgbuf), "物品栏空间不足!!"); CHAR_talkToCli( talker, -1, msgbuf, CHAR_COLORYELLOW); return FALSE; } } k=1; while( getStringFromIndexWithDelim(buf , "," , k, buff3, sizeof(buff3)) !=FALSE ){ k++; itemID = atoi( buff3); if( itemID ) itemindex = ITEM_makeItemAndRegist( itemID); if(itemindex == -1) continue; ret = CHAR_addItemSpecificItemIndex( talker, itemindex); if( ret < 0 || ret >= CHAR_MAXITEMHAVE ) { ITEM_endExistItemsOne( itemindex); print ("\n ret error!!"); return FALSE; } sprintf( token,"拿到%s",ITEM_getChar( itemindex, ITEM_NAME)); CHAR_talkToCli( talker, -1, token, CHAR_COLORYELLOW ); CHAR_sendItemDataOne( talker, ret); } return TRUE; }BOOL NPC_ActionSetEend( int talkerindex, char * buf){ int eveno; int talkNo=1, iflg=0; char buf1[256]; while( getStringFromIndexWithDelim( buf,",",talkNo,buf1,sizeof( buf1)) != FALSE) { talkNo++; eveno = atoi( buf); NPC_EventSetFlg( talkerindex, eveno); if( ++iflg > 20 ) break; } return TRUE;}BOOL NPC_ActionClearEvent( int toindex, char * buf){ int eveno; int talkNo=1, iflg=0; char buf1[256]; while( getStringFromIndexWithDelim( buf,",",talkNo,buf1,sizeof( buf1)) != FALSE) { talkNo++; eveno = atoi( buf); NPC_NowEndEventSetFlgCls( toindex, eveno); if( ++iflg > 20 ) break; } return TRUE;}BOOL NPC_ActionSetNow( int toindex, char * buf){ int eveno; int talkNo=1, iflg=0; char buf1[256]; while( getStringFromIndexWithDelim( buf,",",talkNo,buf1,sizeof( buf1)) != FALSE) { talkNo++; eveno = atoi( buf); NPC_NowEventSetFlg( toindex, eveno); if( ++iflg > 20 ) break; } return TRUE;}BOOL NPC_ActionPassCheck( int meindex, int talker, char *buf){ 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(NPC_ActionBigSmallCheck( meindex, talker, buff3)==FALSE) { loop=1; break; } } if(loop==0) { CHAR_setWorkInt( talker, CHAR_WORKWARPCHECK, TRUE ); return TRUE; } }else{ if( NPC_ActionBigSmallCheck( meindex, talker, buff2) == TRUE){ CHAR_setWorkInt( talker, CHAR_WORKWARPCHECK, TRUE ); return TRUE; } } } CHAR_setWorkInt( talker, CHAR_WORKWARPCHECK, FALSE ); return FALSE;}BOOL NPC_ActionBigSmallCheck(int meindex,int talker,char* buf){ char buff2[128], buff3[128]; int kosuu,temp=-1,flg=0;#ifdef _NEW_WARPMAN char buff1[128]; if(strstr( buf, "-") != NULL) { getStringFromIndexWithDelim( buf, "-", 2, buff3, sizeof(buff3)); temp = atoi( buff3); getStringFromIndexWithDelim( buf, "-", 1, buff1, sizeof(buff1)); strcpy( buf, buff1); } #endif if( strstr( buf, "<") != NULL ){ getStringFromIndexWithDelim( buf, "<", 2, buff3, sizeof(buff2)); kosuu = atoi( buff3); getStringFromIndexWithDelim( buf, "<", 1, buff2, sizeof(buff2)); if( NPC_ActionFreeIfCheck( meindex, talker, buff2, buff3, kosuu, 1, temp)==TRUE){ return TRUE; } }else if(strstr( buf, ">") != NULL){ getStringFromIndexWithDelim( buf, ">", 2, buff3, sizeof(buff2)); kosuu = atoi(buff3); getStringFromIndexWithDelim( buf, ">" ,1, buff2, sizeof(buff2)); if( NPC_ActionFreeIfCheck( meindex, talker, buff2, buff3, kosuu, 2, temp) == TRUE ){ return TRUE; } }else if( strstr( buf, "!" ) != NULL){ getStringFromIndexWithDelim( buf, "!=", 2, buff3, sizeof(buff2)); kosuu = atoi( buff3); getStringFromIndexWithDelim( buf, "!=", 1, buff2, sizeof(buff2)); if( NPC_ActionFreeIfCheck( meindex, talker, buff2, buff3, kosuu, 0, temp) == TRUE ){ return FALSE; }else{ return TRUE; } }else if( strstr( buf, "=") != NULL){ getStringFromIndexWithDelim( buf, "=", 2, buff3, sizeof(buff2)); kosuu = atoi( buff3); getStringFromIndexWithDelim( buf, "=", 1, buff2, sizeof(buff2)); flg = 0; if( strstr( buf, "*") != NULL){ if( NPC_ActionWarpManReduce( meindex, talker, buf)==TRUE){ return TRUE; } }#ifdef _NPC_ActionFreeCmp else if( strstr( buf, "^") != NULL){ if( NPC_ActionWarpManReduce2( meindex, talker, buf)==TRUE){ return TRUE; } }#endif else if( NPC_ActionFreeIfCheck( meindex, talker, buff2, buff3, kosuu, flg, temp) == TRUE ) { return TRUE; } } return FALSE;}#ifdef _NPC_ActionFreeCmp //其实功能和原本的NPC_ActionWarpManReduce差不多,但为了不影响以前的设定,所以不去修改原本的BOOL NPC_ActionWarpManReduce2(int meindex,int talker,char *buf){ char buf2[512]; char buf3[256]; int i, itemindex, itemno, kosuu; int id=0; int nums = 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 ){ nums += ITEM_getInt( itemindex, ITEM_USEPILENUMS);//数量 } } } if( nums == kosuu ) return TRUE; return FALSE;}#endifBOOL NPC_ActionFreeIfCheck(int meindex,int talker, char* buf, char *opt, int kosuu,int flg, int temp){#ifdef _VIP_SHOP if(strcmp(buf,"VIPPOINT")==0){ if(NPC_ActionVipPointCheck(meindex,talker,kosuu,flg)==TRUE) return TRUE; }#endif#ifdef _VIP_RIDE if(strcmp(buf,"VIP")==0){ if(NPC_ActionVipCheck(meindex,talker,kosuu,flg)==TRUE) return TRUE; }#endif if(strcmp(buf,"LV")==0){ if(NPC_ActionLevelCheck(meindex,talker,kosuu,flg)==TRUE) return TRUE; } if(strcmp(buf,"GOLD")==0){ if(NPC_ActionGoldCheck(meindex,talker,kosuu,flg)==TRUE) return TRUE; } if( strcmp(buf,"TRANS") == 0 ) { if( NPC_ActionCheckTrans( meindex, talker, kosuu, flg) == TRUE ) return TRUE; } if( !strcmp( buf, "GTIME") ){ if( NPC_CheckTimeDefine( opt) == TRUE ) return TRUE; } if(strcmp( buf, "TIME") == 0) { if(NPC_TiemCheck( meindex, talker, kosuu, flg) == TRUE) return TRUE; } if( strcmp( buf, "PET") == 0 ) { if( temp > 0 ) { if( ActionCheckMyPet( meindex, talker, kosuu, flg, temp) == TRUE ) return TRUE; }else return FALSE; } if(strcmp(buf,"ITEM")==0){ if(NPC_ActionItemCheck(meindex,talker,kosuu, flg)==TRUE) return TRUE; } if(strcmp(buf,"EQUIT")==0){ if(NPC_ActioneEquitCheck(meindex,talker,kosuu, flg)==TRUE) return TRUE; } if( !strcmp(buf,"ENDEV") || !strcmp(buf,"EVEND") ){ if(NPC_EventCheckFlg( talker, kosuu)==TRUE) return TRUE; } if( !strcmp(buf,"NOWEV") || !strcmp(buf,"EVNOW") ){ if(NPC_NowEventCheckFlg( talker, kosuu)==TRUE) return TRUE; } if(strcmp(buf,"PARTY")==0){ if(NPC_ActionPartyCheck( talker, kosuu, flg)==TRUE) return TRUE; } if(strcmp(buf,"reITEM")==0){ if( NPC_ActionReItemCheck( talker, kosuu, flg)==TRUE) return TRUE; } if(strcmp(buf,"rePET")==0){ if( NPC_ActionRePetCheck( talker, kosuu, flg)==TRUE) return TRUE; }#ifdef _NPCCHANGE_PLAYERIMG if(strcmp( buf, "BBI")==0) { if( NPC_CheckPlayerBBI( meindex, talker, kosuu, flg)== TRUE) { return TRUE; } }#endif if( strcmp( buf, "FM") == 0 ){ if( CHAR_getInt( talker, CHAR_FMLEADERFLAG ) > 0 && CHAR_getInt( talker, CHAR_FMLEADERFLAG ) != FMMEMBER_APPLY) if( CHAR_getWorkInt( talker, CHAR_WORKFMFLOOR) == kosuu ){ return TRUE; } } if(strcmp(buf,"DR")==0){ if(NPC_ActionDuelRankCheck(meindex,talker,kosuu,flg)==TRUE){ return TRUE; } } if(strcmp(buf,"DP")==0){ if(NPC_ActionDuelPointCheck(meindex,talker,kosuu,flg)==TRUE){ return TRUE; } }#ifdef _TREASURE_BOX if( strcmp( buf, "BOX") == 0 ){ if( NPC_ActionTreasureTypeCheck( meindex, kosuu, //NPC_TIME_EVENTMODE = CHAR_NPCWORKINT6,// 1 CHAR_getWorkInt( meindex, CHAR_NPCWORKINT6) ,flg)==TRUE) return TRUE; }#endif#ifdef _NPC_ADDWARPMAN1 if( strcmp( buf, "PARTYCOUNT") == 0){ if(NPC_ActionPartyCountCheck( talker, kosuu, flg)==TRUE) return TRUE; } if( strcmp( buf, "MANCOUNT" ) == 0 ){ if(NPC_ActionManCountCheck( talker, kosuu, flg ) == TRUE ) return TRUE; } if( strcmp( buf, "WOMANCOUNT" ) == 0 ){ if(NPC_ActionWomanCountCheck( talker, kosuu, flg ) == TRUE ) return TRUE; }#endif return FALSE;}BOOL NPC_ActioneEquitCheck(int meindex,int talker,int itemNo, int flg){ int i; int itemindex=-1; int id; for( i=0;i<CHAR_STARTITEMARRAY;i++ ){ itemindex = CHAR_getItemIndex( talker , i ); if( ITEM_CHECKINDEX( itemindex) ) { id=ITEM_getInt(itemindex ,ITEM_ID ); if( NPC_ActionBigSmallLastCheck(itemNo,id,flg) == TRUE ) return TRUE; } } return FALSE;}BOOL NPC_ActionItemCheck(int meindex,int talker,int itemNo, int flg){ int i; int itemindex=-1; int id; for( i=CHAR_STARTITEMARRAY;i<CHAR_MAXITEMHAVE;i++ ){ itemindex = CHAR_getItemIndex( talker , i ); if( ITEM_CHECKINDEX( itemindex) ) { id=ITEM_getInt(itemindex ,ITEM_ID ); if( NPC_ActionBigSmallLastCheck(itemNo,id,flg) == TRUE ) return TRUE; } } return FALSE;}BOOL NPC_ActionBigSmallLastCheck(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 ActionCheckMyPet( int meindex, int talker, int petLv, int flg, int petid){ int petsel,petindex=-1; int lv=-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 { //找到条件宠 lv = CHAR_getInt( petindex, CHAR_LV); if( NPC_ActionBigSmallLastCheck( petLv, lv, flg) == TRUE) { return TRUE; }else { return FALSE; } } return FALSE; }BOOL NPC_ActionCheckTrans(int meindex,int talker,int trans,int flg){ int myTrans; myTrans=CHAR_getInt(talker, CHAR_TRANSMIGRATION); if( NPC_ActionBigSmallLastCheck( trans, myTrans, flg ) == TRUE ) { return TRUE; } return FALSE;}#ifdef _VIP_SHOPBOOL NPC_ActionVipPointCheck(int meindex,int talker,int point,int flg){ int mypoint; mypoint=CHAR_getInt(talker,CHAR_AMPOINT); if(NPC_ActionBigSmallLastCheck( point, mypoint, flg) == TRUE){ return TRUE; } return FALSE;}#endif#ifdef _VIP_RIDEBOOL NPC_ActionVipCheck(int meindex,int talker,int vip,int flg){ if(NPC_ActionBigSmallLastCheck( CHAR_getInt(talker,CHAR_VIPRIDE), vip, flg) == TRUE){ return TRUE; } return FALSE;}#endifBOOL NPC_ActionLevelCheck(int meindex,int talker,int level,int flg){ int mylevel; mylevel=CHAR_getInt(talker,CHAR_LV); if(NPC_ActionBigSmallLastCheck( level, mylevel, flg) == TRUE){ return TRUE; }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -