📄 pet_event.c
字号:
break; } } if(loop==0) { CHAR_setWorkInt( talker, CHAR_WORKWARPCHECK, TRUE ); return TRUE; } }else{ if( PetTalk_BSCheck( meindex, talker, buff2) == TRUE ){ CHAR_setWorkInt( talker, CHAR_WORKWARPCHECK, TRUE ); return TRUE; } } } CHAR_setWorkInt( talker, CHAR_WORKWARPCHECK, FALSE ); return FALSE;}BOOL PetTalk_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(PetTalk_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(PetTalk_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(PetTalk_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( PetTalk_WarpManReduce( meindex, talker, buf)==TRUE){ return TRUE; } }else if(PetTalk_FreeIfCheck( meindex, talker, buff2, kosuu, flg, temp)==TRUE){ return TRUE; } } return FALSE;}BOOL PetTalk_FreeIfCheck(int meindex,int talker,char* buf,int kosuu,int flg, int temp){ int Type = -1; if(strcmp(buf,"LV")==0){ if(PetTalk_LevelCheck(meindex,talker,kosuu,flg)==TRUE){ return TRUE; } } if( strcmp( buf, "TRANS") == 0 ) { if( PetTalk_CheckTrans( meindex, talker, kosuu, flg) == TRUE ) return TRUE; } if( strcmp( buf, "PET") == 0 ) { if( temp > 0 ) { if( PetTalk_CheckMyPet( meindex, talker, kosuu, flg, temp) == TRUE ) return TRUE; }else return FALSE; } if(strcmp( buf, "ITEM")==0){ if(PetTalk_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; } } if(strcmp( buf, "HP" ) == 0 ) { Type = 0; if( PetTalk_CheckMyType( meindex, talker, kosuu, flg, Type ) == TRUE ) { return TRUE; } }#ifdef _PET_TALKBBI if(strcmp( buf, "BBI" ) == 0 ) { if( PET_CheckPlayerBBI( meindex, talker, kosuu, flg)== TRUE) { return TRUE; } }#endif return FALSE;}BOOL PetTalk_CheckMyType( int meindex, int toindex, int kosuu, int flg, int Type ) { int MyType=0,MyMaxType=0; switch( Type ) { case 0: //HP MyType = CHAR_getInt( toindex, CHAR_HP); MyMaxType = CHAR_getWorkInt( toindex, CHAR_WORKMAXHP); MyMaxType = (MyMaxType * kosuu )/ 100; if( PetTalk_BigSmallLastCheck( MyMaxType, MyType , flg ) == TRUE ) { return TRUE; } break; } return FALSE;}BOOL PetTalk_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 PetTalk_LevelCheck(int meindex,int talker,int level,int flg){ int mylevel; mylevel=CHAR_getInt(talker,CHAR_LV); if(PetTalk_BigSmallLastCheck(level,mylevel,flg)==TRUE) { return TRUE; } return FALSE;}BOOL PetTalk_CheckTrans(int meindex,int talker,int trans,int flg){ int myTrans; myTrans=CHAR_getInt(talker, CHAR_TRANSMIGRATION); if( PetTalk_BigSmallLastCheck( trans, myTrans, flg ) == TRUE ) { return TRUE; } return FALSE;}BOOL PetTalk_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 { //找到条件宠 if( PetTalk_BigSmallLastCheck( petLv, CHAR_getInt( petindex, CHAR_LV), flg ) == TRUE ) return TRUE; } return FALSE; }BOOL PetTalk_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( PetTalk_BigSmallLastCheck(itemNo,id,flg) == TRUE ) return TRUE; } } return FALSE;}BOOL PetTalk_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;}#elsevoid PET_Talkfunc( int meindex, int talkerindex, char *msg, int color){ print("\n PET_Talkfunc(...) return; "); return;}#endifvoid PET_CleanFreePetAll(){ int objindex; int objmaxnum = OBJECT_getNum(); for( objindex=0; objindex<objmaxnum; objindex++) { if( CHECKOBJECT( objindex ) == FALSE ) continue; PET_CleanPetdeletetime( objindex); }}int PET_CleanPetdeletetime( int objmeindex){ int pindex; if( OBJECT_getType(objmeindex) != OBJTYPE_CHARA ) return 0; pindex = OBJECT_getIndex( objmeindex); if( CHAR_getInt( pindex, CHAR_WHICHTYPE) != CHAR_TYPEPET) return 0; if( CHAR_getInt( pindex, CHAR_MAILMODE) != CHAR_PETMAIL_NONE) { }else if( CHAR_getWorkInt( pindex, CHAR_WORKPETFOLLOWMODE) == CHAR_PETFOLLOW_NOW ){ }else {#ifdef _PET_LOSTPET// CHAR_CharSaveLostPet( pindex, 0);#endif LogPet( "系统", "Watchfunc", CHAR_getChar( pindex, CHAR_NAME), CHAR_getInt( pindex, CHAR_LV), "timeout_lost(系统清除-地上自由宠)", CHAR_getInt( pindex, CHAR_FLOOR), CHAR_getInt( pindex,CHAR_X ), CHAR_getInt( pindex,CHAR_Y ), CHAR_getChar( pindex, CHAR_UNIQUECODE) // shan 2001/12/14 ); CHAR_CharaDelete(pindex); return 1; } return 0;}void PET_CHECKFreePetIsIt( int petindex){ int petputtime, defmaxtime; defmaxtime = getPetdeletetime(); petputtime = CHAR_getInt( petindex, CHAR_PUTPETTIME); if( NowTime.tv_sec < ( petputtime + getPetdeletetime() ) ) return;#ifdef _PET_LOSTPET// CHAR_CharSaveLostPet( petindex, 0);#endif LogPet( "系统", "Watchfunc", CHAR_getChar( petindex, CHAR_NAME), CHAR_getInt( petindex, CHAR_LV), "timeout_lost(系统清除-地上自由宠)", CHAR_getInt( petindex, CHAR_FLOOR), CHAR_getInt( petindex,CHAR_X ), CHAR_getInt( petindex,CHAR_Y ), CHAR_getChar( petindex, CHAR_UNIQUECODE) // shan 2001/12/14 ); CHAR_CharaDelete(petindex);}#define PETFOLLOW_TIME 60*60void PET_Watchfunc( int objmeindex, int objmoveindex, CHAR_ACTION act, int x, int y, int dir, int* opt, int optlen ){ int pindex; int petindex; int petputtime; if( OBJECT_getType(objmoveindex) != OBJTYPE_CHARA ) return; pindex = OBJECT_getIndex( objmoveindex); if( CHAR_getInt( pindex, CHAR_WHICHTYPE ) != CHAR_TYPEPLAYER ) return; petindex = OBJECT_getIndex( objmeindex); petputtime = CHAR_getInt( petindex, CHAR_PUTPETTIME); if( CHAR_getInt( petindex, CHAR_MAILMODE) != CHAR_PETMAIL_NONE) { //宠邮不处理 }else if( CHAR_getWorkInt( petindex, CHAR_WORKPETFOLLOWMODE) == CHAR_PETFOLLOW_NOW ){ if( NowTime.tv_sec >= (petputtime + 60*60) ) { int ownerindex = CHAR_getWorkInt( petindex, CHAR_WORKPLAYERINDEX); if( CHAR_CHECKINDEX( ownerindex) ){ if( CHAR_pickupFollowPet( ownerindex, petindex ) ) { return; } CHAR_talkToCli( ownerindex, -1, "溜宠太久,宠物走失了!!", CHAR_COLORYELLOW ); }#ifdef _PET_LOSTPET CHAR_CharSaveLostPet( petindex, 1); LogPet( "系统", "Watchfunc", CHAR_getChar( petindex, CHAR_NAME), CHAR_getInt( petindex, CHAR_LV), "timeout_lost(系统扣留-溜宠自由宠)", CHAR_getInt( petindex, CHAR_FLOOR), CHAR_getInt( petindex,CHAR_X ), CHAR_getInt( petindex,CHAR_Y ), CHAR_getChar( petindex, CHAR_UNIQUECODE) // shan 2001/12/14 ); print("系统扣留-溜宠自由宠:%s\n", CHAR_getUseName( petindex)); CHAR_CharaDelete( petindex);#else CHAR_setInt( petindex, CHAR_PUTPETTIME, NowTime.tv_sec); CHAR_setWorkInt( petindex, CHAR_WORKPETFOLLOWMODE, CHAR_PETFOLLOW_NONE); LogPet( CHAR_getChar( pindex, CHAR_NAME ), CHAR_getChar( pindex, CHAR_CDKEY ), CHAR_getChar( petindex, CHAR_NAME), CHAR_getInt( petindex, CHAR_LV), "timeout_lost(溜宠太久,宠物走失))", CHAR_getInt( pindex,CHAR_FLOOR), CHAR_getInt( pindex,CHAR_X ), CHAR_getInt( pindex,CHAR_Y ), CHAR_getChar( petindex, CHAR_UNIQUECODE) // shan 2001/12/14 );#endif return; } }else{ PET_CHECKFreePetIsIt( petindex); } if( CHAR_getInt( petindex, CHAR_MAILMODE) == CHAR_PETMAIL_IDLE3 || CHAR_getInt( petindex, CHAR_MAILMODE) == CHAR_PETMAIL_IDLE2){ if( act == CHAR_ACTATTACK) { if( NPC_Util_isFaceToChara( pindex,petindex,1 ) == TRUE ) { int action[2] = { CHAR_ACTDAMAGE, CHAR_ACTGUARD}; CHAR_sendWatchEvent( objmeindex, action[RAND(0,1)], NULL,0,FALSE); CHAR_setWorkInt( petindex, CHAR_WORKACTION, act); } } }else if( CHAR_getInt( petindex, CHAR_MAILMODE) != CHAR_PETMAIL_NONE) { ; }else if( CHAR_getWorkInt( petindex, CHAR_WORKFIXAI) >= 100 ) { int workpindex = CHAR_getWorkInt( petindex, CHAR_WORKPLAYERINDEX); if( act == CHAR_ACTWALK && CHAR_CHECKINDEX( workpindex) && workpindex == pindex ){ dir = NPC_Util_GetDirCharToChar( petindex, pindex, 0); if( dir != -1 ) { if( CHAR_getInt( petindex, CHAR_DIR) != dir ) { CHAR_setInt( petindex, CHAR_DIR, dir); CHAR_sendWatchEvent( CHAR_getWorkInt( petindex, CHAR_WORKOBJINDEX), CHAR_ACTTURN,NULL,0,TRUE); } } }else if( NPC_Util_isFaceToFace( petindex, pindex, 2 ) == TRUE ) { switch( act) { case CHAR_ACTATTACK: case CHAR_ACTDAMAGE: case CHAR_ACTDOWN: case CHAR_ACTSTAND: case CHAR_ACTACTIONWALK: case CHAR_ACTGUARD: case CHAR_ACTACTIONSTAND: CHAR_sendWatchEvent( objmeindex, act, NULL,0,FALSE); CHAR_setWorkInt( petindex, CHAR_WORKACTION, act); break; default: break; } } }else { } return;}#ifdef _PET_TALKBBIBOOL PET_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); if(flg==0){ if(BBI==MyBBI) return TRUE; }else if(flg==1){ if(BBI < MyBBI) return TRUE; }else if(flg==2){ if(BBI > MyBBI) return TRUE; } return FALSE;}#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -