⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 npc_eventaction.c

📁 石器时代2.0完整版源代码.已经加入新功能. 在REDHAT9下GCC3.4编译成功.
💻 C
📖 第 1 页 / 共 4 页
字号:
			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 + -