📄 npc_eventaction.c
字号:
kNum = atoi(buf2); }else { petno = atoi( buff3); kNum = 30; } //andy_log print("petno:%d kNum:%d \n ", petno, kNum); find =0; for(petsel=0 ; petsel < CHAR_MAXPETHAVE ; petsel++) { petindex = CHAR_getCharPet( talker, petsel); if( !CHAR_CHECKINDEX(petindex)) continue; if(CHAR_getInt( petindex, CHAR_PETID) != petno )continue; switch( flg) { case 0: if( CHAR_getInt( petindex, CHAR_LV ) != petLv ) { }else { continue; } break; case 1: if( CHAR_getInt( petindex, CHAR_LV ) < petLv ) { }else { continue; } break; case 2: if( CHAR_getInt( petindex, CHAR_LV ) > petLv ) { }else { continue; } break; case 3: if( CHAR_getInt( petindex, CHAR_LV ) != petLv )continue; break; } petindex = CHAR_getCharPet( talker, petsel); if( !CHAR_CHECKINDEX(petindex) ) continue; if( CHAR_getWorkInt( CONNECT_getCharaindex( fd), CHAR_WORKBATTLEMODE) != BATTLE_CHARMODE_NONE ) continue; defpet = CHAR_getInt( talker, CHAR_DEFAULTPET); if(defpet == petsel) { CHAR_setInt( talker, CHAR_DEFAULTPET, -1); lssproto_KS_send( fd, -1, TRUE); } snprintf( msgbuf,sizeof( msgbuf), "交出%s。", CHAR_getChar( petindex, CHAR_NAME)); CHAR_talkToCli( talker, -1, msgbuf, CHAR_COLORYELLOW); LogPet( CHAR_getChar( talker, CHAR_NAME ), CHAR_getChar( talker, CHAR_CDKEY ), CHAR_getChar( petindex, CHAR_NAME), CHAR_getInt( petindex, CHAR_LV), "TenseiDel", CHAR_getInt( talker,CHAR_FLOOR), CHAR_getInt( talker,CHAR_X ), CHAR_getInt( talker,CHAR_Y ), CHAR_getChar( petindex, CHAR_UNIQUECODE) // shan 2001/12/14 ); CHAR_setCharPet( talker, petsel, -1); CHAR_endCharOneArray( petindex ); snprintf( szPet, sizeof( szPet ), "K%d", petsel); CHAR_sendStatusString( talker, szPet ); find++; if( find >= kNum ) break; //条件数目皆删除完 } } return TRUE;}#ifdef _NPC_NewDelPetBOOL NPC_ActionNewDelPet( int toindex, char *msg){ int i,petindex=0,petlev,petnum,petcount,mypetlevel,petid; char buf[32],buf2[32]; int flg=0,count=0; //比较方式 if ( strstr( msg, "=" ) ) flg = 0; else if( strstr( msg, "<" ) ) flg = 1; else flg = 2; //等级 if ( getStringFromIndexWithDelim( msg, "-", 1, buf, sizeof( buf )) ){ char cmp[12]; if( flg == 0 ) strcpy(cmp,"="); else if( flg == 1 ) strcpy(cmp,"<"); else strcpy(cmp,">"); if ( getStringFromIndexWithDelim( buf, cmp, 2, buf2, sizeof( buf2 )) ){ petlev = atoi(buf2); } else return FALSE; } else return FALSE; //宠物编号 if ( getStringFromIndexWithDelim( msg, "-", 2, buf, sizeof( buf )) ){ if ( getStringFromIndexWithDelim( buf, "*", 1, buf2, sizeof( buf2 )) ){ petnum = atoi( buf2 ); } else return FALSE; } else return FALSE; //数量 if ( getStringFromIndexWithDelim( msg, "-", 2, buf, sizeof( buf )) ){ if ( getStringFromIndexWithDelim( buf, "*", 2, buf2, sizeof( buf2 )) ){ petcount = atoi( buf2 ); } else return FALSE; } else return FALSE; for( i = 0; i < CHAR_MAXPETHAVE; i ++ ){ BOOL cmp=FALSE; petindex = CHAR_getCharPet( toindex, i); petid = CHAR_getInt( petindex, CHAR_PETID); mypetlevel = CHAR_getInt( petindex, CHAR_LV); if( flg == 0 ) if( mypetlevel == petlev ) cmp = TRUE; if( flg == 1 ) if( mypetlevel < petlev ) cmp = TRUE; if( flg == 2 ) if( mypetlevel > petlev ) cmp = TRUE; if( petnum == petid && cmp ){//删除宠物 char szPet[128]; int defpet; char msgbuf[64]; int fd = getfdFromCharaIndex( toindex ); if( !CHAR_CHECKINDEX(petindex) ) return FALSE; if( CHAR_getInt( toindex, CHAR_RIDEPET) == i ) { //CHAR_talkToCli( talker, -1, "骑乘中的宠物无法交出!", CHAR_COLORYELLOW ); //return FALSE; CHAR_setInt( toindex, CHAR_RIDEPET, -1); CHAR_send_P_StatusString( toindex, CHAR_P_STRING_RIDEPET ); CHAR_complianceParameter( toindex ); CHAR_sendCToArroundCharacter( CHAR_getWorkInt( toindex , CHAR_WORKOBJINDEX )); } //公及平乓仿互爵 卅日}矢永玄毛丹日内蔽 if( CHAR_getWorkInt( CONNECT_getCharaindex( fd ), CHAR_WORKBATTLEMODE) != BATTLE_CHARMODE_NONE) return FALSE; //及矢永玄互田玄伙井升丹井及民尼永弁 defpet = CHAR_getInt( toindex, CHAR_DEFAULTPET); if(defpet == i){ CHAR_setInt( toindex, CHAR_DEFAULTPET, -1); lssproto_KS_send( fd, -1, TRUE); } snprintf( msgbuf,sizeof( msgbuf), "交出%s。", CHAR_getChar( petindex, CHAR_NAME)); CHAR_talkToCli( toindex, -1, msgbuf, CHAR_COLORWHITE); // 矢永玄毛澎 仄凶夫弘 LogPet( CHAR_getChar( toindex, CHAR_NAME ), // 平乓仿 CHAR_getChar( toindex, CHAR_CDKEY ), CHAR_getChar( petindex, CHAR_NAME), CHAR_getInt( petindex, CHAR_LV), "EvnetDell(任务删除)", CHAR_getInt( toindex,CHAR_FLOOR), CHAR_getInt( toindex,CHAR_X ), CHAR_getInt( toindex,CHAR_Y ), CHAR_getChar( petindex, CHAR_UNIQUECODE) // shan 2001/12/14 ); // 切 井日壅允 CHAR_setCharPet( toindex, i, -1); CHAR_endCharOneArray( petindex ); snprintf( szPet, sizeof( szPet ), "K%d", i); // 蕙仄中矢永玄旦 □正旦霜曰勾仃月 CHAR_sendStatusString( toindex, szPet ); ++count; if( count >= petcount ) break; } } return TRUE;}#endifBOOL NPC_ActionAddPet( int talker, char *buf){ int ret; char msgbuf[64], buff3[64]; int enemynum; int i,j,k=1; int petindex, petindex2, petid; k=1; while( getStringFromIndexWithDelim(buf , "," , k, buff3, sizeof(buff3)) !=FALSE ){ k++; //检查宠物栏是否有空位 for( i = 0 ;i < CHAR_MAXPETHAVE ; i++) { petindex = CHAR_getCharPet( talker, i); if( petindex == -1 ) break; } if( i == CHAR_MAXPETHAVE ){ snprintf( msgbuf,sizeof( msgbuf), "宠物已满!!"); CHAR_talkToCli( talker, -1, msgbuf, CHAR_COLORYELLOW); return FALSE; }#ifdef _PET_MM if(strstr(buff3,"MM1") || strstr(buff3,"MM3")) petid = 1479; else if(strstr(buff3,"MM2") || strstr(buff3,"MM4")) petid = 2547; else petid = atoi( buff3);#else petid = atoi( buff3);#endif enemynum = ENEMY_getEnemyNum(); for( i = 0; i < enemynum; i ++ ) { if( ENEMY_getInt( i, ENEMY_ID ) == petid ) //if( ENEMY_getInt( i, ENEMY_TEMPNO ) == petid ) break; } if( i == enemynum ) continue; ret = ENEMY_createPetFromEnemyIndex( talker, i); for( i = 0; i < CHAR_MAXPETHAVE; i ++ ) { if( CHAR_getCharPet( talker, i ) == ret ) break; } if( i == CHAR_MAXPETHAVE ) i = 0; if( CHAR_CHECKINDEX( ret ) == TRUE ){#ifdef _PET_MM if(strstr(buff3,"MM1") || strstr(buff3,"MM2")){ int LevelUpPoint; LevelUpPoint = ( 50<< 24) + ( 50<< 16) + ( 50<< 8) + ( 50<< 0); CHAR_setInt( ret, CHAR_ALLOCPOINT, LevelUpPoint); }else if(strstr(buff3,"MM3") || strstr(buff3,"MM4")){ while(CHAR_getInt( ret, CHAR_LV)<79){ //升级 int LevelUpPoint; LevelUpPoint = ( 50<< 24) + ( 50<< 16) + ( 50<< 8) + ( 50<< 0); CHAR_setInt( ret, CHAR_ALLOCPOINT, LevelUpPoint); CHAR_PetLevelUp( ret ); CHAR_PetAddVariableAi( ret, AI_FIX_PETLEVELUP ); 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) ) continue; snprintf( msgbuf,sizeof( msgbuf), "拿到%s。", CHAR_getChar(petindex2,CHAR_NAME)); 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 ); } LogPet( CHAR_getChar( talker, CHAR_NAME ), CHAR_getChar( talker, CHAR_CDKEY ), CHAR_getChar( petindex2, CHAR_NAME), CHAR_getInt( petindex2, CHAR_LV), "TenseiGet", CHAR_getInt( talker,CHAR_FLOOR), CHAR_getInt( talker,CHAR_X ), CHAR_getInt( talker,CHAR_Y ), CHAR_getChar( petindex2, CHAR_UNIQUECODE) // shan 2001/12/14 ); } return TRUE;}BOOL NPC_ActionDelItem( int talker, char *buf){ int i = 1, j = 1,k = 1; char buff3[128]; char buf2[32]; int itemindex; char token[256]; if( !CHAR_CHECKINDEX( talker) ) return FALSE; while( getStringFromIndexWithDelim(buf , "," , k, buff3, sizeof(buff3)) !=FALSE ) { k++; if(strstr(buff3,"*")!=NULL){ int itemno, kosuu=0, id, cnt=0; struct _tagItemArray { int index; int itemindex; }; struct _tagItemArray ItemArray[20]; for( i=0; i<20 ; i++){ ItemArray[i].itemindex = -1; ItemArray[i].index = -1; } //取得字串 getStringFromIndexWithDelim(buff3,"*",1,buf2,sizeof(buf2)); itemno = atoi(buf2); getStringFromIndexWithDelim(buff3,"*",2,buf2,sizeof(buf2)); kosuu = atoi(buf2); //取得 item index 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){ ItemArray[cnt].itemindex = itemindex; ItemArray[cnt].index = i; cnt++; } } if(cnt == kosuu) break; } if(cnt != kosuu){ CHAR_talkToCli( talker, -1,"条件不足", CHAR_COLORYELLOW); return FALSE; } //收取物品 for( i=0; i<20; i++) { itemindex = ItemArray[i].itemindex; if( !ITEM_CHECKINDEX(itemindex) ) break; sprintf(token,"交出%s",ITEM_getChar( itemindex, ITEM_NAME)); CHAR_talkToCli( talker, -1, token, CHAR_COLORYELLOW); CHAR_setItemIndex( talker, ItemArray[i].index ,-1); ITEM_endExistItemsOne( itemindex); CHAR_sendItemDataOne( talker, ItemArray[i].index); 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 "WarpManDelItem", 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) ); } }else{ for( j = CHAR_STARTITEMARRAY ; j < CHAR_MAXITEMHAVE ; j++){ itemindex = CHAR_getItemIndex( talker ,j); if( ITEM_CHECKINDEX(itemindex) ){ if( atoi( buff3) == ITEM_getInt(itemindex,ITEM_ID)){ 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 "WarpManDelItem", 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_COLORYELLOW); CHAR_DelItem( talker, j); } } } } } return TRUE;}#ifdef _VIP_SHOPBOOL NPC_ActionVipItem( int talker, char *buf){ int itemID,itemindex=-1; int pVipPoint, VipPoints; char buff[256], token[256]; int ret; if(getStringFromIndexWithDelim(buf , "," , 1, buff, sizeof(buff)) !=FALSE) itemID = atoi(buf); itemindex = CHAR_findEmptyItemBox( talker ); if( itemindex < 0 ) { CHAR_talkToCli( talker, -1, "物品栏空间不足!!", CHAR_COLORYELLOW); return FALSE; } if(getStringFromIndexWithDelim(buf , "," , 2, buff, sizeof(buff)) !=FALSE) VipPoints=atoi(buff); if(VipPoints<0)VipPoints=0; pVipPoint = CHAR_getInt( talker, CHAR_AMPOINT); if( pVipPoint < VipPoints ) { CHAR_talkToCli( talker, -1, "你身上的点数不够哦", CHAR_COLORYELLOW); return FALSE; } itemindex = ITEM_makeItemAndRegist( itemID ); if( itemindex != -1 ){ 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_setInt( talker, CHAR_AMPOINT, pVipPoint-VipPoints); sprintf( token, "扣除会员点数%d", VipPoints); CHAR_talkToCli( talker, -1, token, CHAR_COLORYELLOW); CHAR_sendItemDataOne( talker, ret); } return TRUE; }BOOL NPC_ActionVipPet( int talker, char *buf){ int ret; char msgbuf[64], buf1[8], buf2[10]; int enemynum; int i,j; int petindex, petindex2, petid; int pVipPoint, VipPoints; if(getStringFromIndexWithDelim(buf , "," , 1, buf1, sizeof(buf1)) !=FALSE)#ifdef _PET_MM if(strstr(buf1,"MM1") || strstr(buf1,"MM3")) petid = 1479; else if(strstr(buf1,"MM2") || strstr(buf1,"MM4")) petid = 2547; else petid = atoi( buf1 );#else petid = atoi( buf1 );#endif if(getStringFromIndexWithDelim(buf , "," , 2, buf2, sizeof(buf2)) !=FALSE) VipPoints=atoi(buf2); if(VipPoints<0)VipPoints=0; pVipPoint = CHAR_getInt( talker, CHAR_AMPOINT); if( pVipPoint < VipPoints ) { CHAR_talkToCli( talker, -1, "你身上的点数不够哦", CHAR_COLORYELLOW); return FALSE; } for( i = 0 ;i < CHAR_MAXPETHAVE ; i++) { petindex = CHAR_getCharPet( talker, i); if( petindex == -1 ) break; } if( i == CHAR_MAXPETHAVE ) { snprintf( msgbuf,sizeof( msgbuf), "宠物已满!!"); CHAR_talkToCli( talker, -1, msgbuf, CHAR_COLORYELLOW); return FALSE; } enemynum = ENEMY_getEnemyNum(); for( i = 0; i < enemynum; i ++ ) { if( ENEMY_getInt( i, ENEMY_ID) == petid) { break; } } if( i == enemynum ) return FALSE; ret = ENEMY_createPetFromEnemyIndex( talker, i); for( i = 0; i < CHAR_MAXPETHAVE; i ++ ) { if( CHAR_getCharPet( talker, i ) == ret ) break; } if( i == CHAR_MAXPETHAVE ) CHAR_talkToCli( talker, -1, "领取宠物失败!", CHAR_COLORYELLOW); if( CHAR_CHECKINDEX( ret ) == TRUE ){#ifdef _PET_MM if(strstr(buf1,"MM1") || strstr(buf1,"MM2")){ int LevelUpPoint; LevelUpPoint = ( 50<< 24) + ( 50<< 16) + ( 50<< 8) + ( 50<< 0); CHAR_setInt( ret, CHAR_ALLOCPOINT, LevelUpPoint); }else if(strstr(buf1,"MM3") || strstr(buf1,"MM4")){ while(CHAR_getInt( ret, CHAR_LV)<79){ //升级 int LevelUpPoint; LevelUpPoint = ( 50<< 24) + ( 50<< 16) + ( 50<< 8) + ( 50<< 0); CHAR_setInt( ret, CHAR_ALLOCPOINT, LevelUpPoint); CHAR_PetLevelUp( ret ); CHAR_PetAddVariableAi( ret, AI_FIX_PETLEVELUP );
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -