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

📄 npc_eventaction.c

📁 石器时代2.0完整版源代码.已经加入新功能. 在REDHAT9下GCC3.4编译成功.
💻 C
📖 第 1 页 / 共 4 页
字号:
	return FALSE;}BOOL NPC_ActionPartyCheck( int toindex, int nums, int flg){	int partys=0;	int leaderindex=-1;	if( CHAR_getWorkInt( toindex, CHAR_WORKPARTYMODE) == CHAR_PARTY_NONE ){		partys = 0;		leaderindex = toindex;	}else if( CHAR_getWorkInt( toindex, CHAR_WORKPARTYMODE) == CHAR_PARTY_CLIENT ){		leaderindex = CHAR_getWorkInt( toindex, CHAR_WORKPARTYINDEX1);	}	if( CHAR_getWorkInt( leaderindex, CHAR_WORKPARTYMODE) == CHAR_PARTY_LEADER ){		int i;		for( i=0; i<5; i++)	{			int pindex = CHAR_getWorkInt( leaderindex, CHAR_WORKPARTYINDEX1+i);			if( !CHAR_CHECKINDEX( pindex) ) continue;				partys++;		}	}	if(NPC_ActionBigSmallLastCheck( nums, partys, flg) == TRUE){		return TRUE;	}	return FALSE;}BOOL NPC_ActionReItemCheck( int toindex, int nums, int flg){	int remnants=0;	remnants = CHAR_findSurplusItemBox( toindex);	if(NPC_ActionBigSmallLastCheck( nums, remnants, flg) == TRUE){		return TRUE;	}	return FALSE;}BOOL NPC_ActionRePetCheck( int toindex, int nums, int flg){	int remnants=0;	remnants = CHAR_findSurplusPetBox( toindex);	if(NPC_ActionBigSmallLastCheck( nums, remnants, flg) == TRUE){		return TRUE;	}	return FALSE;}BOOL NPC_ActionGoldCheck(int meindex,int talker,int Golds,int flg){	int myGold;	myGold=CHAR_getInt(talker,CHAR_GOLD);	if(NPC_ActionBigSmallLastCheck( Golds, myGold, flg) == TRUE){		return TRUE;	}	return FALSE;}BOOL NPC_ActionWarpManReduce(int meindex,int talker,char *buf){	char buf2[512];	char buf3[256];	int i, itemindex, itemno, kosuu;	int id=0;	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=CHAR_STARTITEMARRAY ; 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;}#ifdef _NPCCHANGE_PLAYERIMG	//andyBOOL NPC_ActionChangePlayerBBI( int meindex, int charindex, char *Img){	int cBBI;	char buf1[256];	memset( buf1, 0, sizeof( buf1));	if( !CHAR_CHECKINDEX( charindex) )		return FALSE;	if( !CHAR_CHECKINDEX( meindex) )		return FALSE;#ifdef _FIXBUG_ATTACKBOW	{		int armtype;		int itemindex = CHAR_getItemIndex( charindex, CHAR_ARM);		if( ITEM_CHECKINDEX(itemindex) ){			armtype = ITEM_getInt( itemindex, ITEM_TYPE );			if( armtype == ITEM_BOW || armtype == ITEM_BOUNDTHROW ||				armtype == ITEM_BREAKTHROW || armtype == ITEM_BOOMERANG)	{				CHAR_talkToCli( charindex, -1, "使用远距离武器无法变身!", CHAR_COLORYELLOW );				return FALSE;			}		}	}#endif#ifdef _PETSKILL_BECOMEPIG    if( CHAR_getInt( charindex, CHAR_BECOMEPIG) > -1 ){//变成乌力了		CHAR_talkToCli( charindex, -1, "无法变身,乌力化中不能变身!", CHAR_COLORYELLOW );	    return FALSE;	}#endif	if( CHAR_getInt( charindex, CHAR_RIDEPET) != -1 )	{//骑宠不换图		CHAR_setInt( charindex, CHAR_RIDEPET, -1 );		BATTLE_changeRideImage( charindex );		CHAR_talkToCli( charindex, -1, "取消骑宠状态。", CHAR_COLORYELLOW);				//change -----> 修改bug(落马後,宠物选项的状态依然为"骑乘",这里修正过来 		CHAR_complianceParameter( charindex );		CHAR_send_P_StatusString( charindex, CHAR_P_STRING_RIDEPET);				//return FALSE;	}#ifdef _ITEM_METAMO	CHAR_setWorkInt( charindex, CHAR_WORKITEMMETAMO, 0);#endif	if( Img == NULL || !strcmp( Img, "\0"))		return FALSE;//=======================	CHAR_setWorkInt( charindex, CHAR_WORKNPCMETAMO, meindex);	if( strstr( Img, "NPCBBI") != NULL )	{		cBBI = CHAR_getInt( meindex, CHAR_BASEBASEIMAGENUMBER);		sprintf( buf1, "你化身成了%s的样子。", CHAR_getChar( meindex, CHAR_NAME));	}else if( strstr( Img, "MYBBI") != NULL )	{		cBBI = CHAR_getInt( charindex, CHAR_BASEBASEIMAGENUMBER);		CHAR_setWorkInt( charindex, CHAR_WORKNPCMETAMO, 0);		sprintf( buf1, "变回了原来的样子。");	}else if( strstr( Img, ",") != NULL )	{		int imgindex=1, maxImg=0;		while( getStringFromIndexWithDelim( Img, ",", imgindex, buf1, sizeof( buf1)) != FALSE )	{			imgindex++;			maxImg++;		}		if( (imgindex = (rand()%maxImg)) > maxImg) imgindex = 1;		if( imgindex < 1 ) imgindex = 1;		if( getStringFromIndexWithDelim( Img, ",", imgindex, buf1, sizeof( buf1)) == FALSE )			return FALSE;		cBBI = atoi( buf1);		sprintf( buf1, "你样子改变了。");	}else	{		cBBI = atoi( Img);		sprintf( buf1, "你样子改变了。");	}//=======================	if( cBBI < 0 )	{		return FALSE;	}	CHAR_talkToCli( charindex, -1, buf1, CHAR_COLORYELLOW);	//CHAR_BASEBASEIMAGENUMBER	CHAR_BASEIMAGENUMBER	CHAR_setInt( charindex, CHAR_BASEIMAGENUMBER, cBBI);	CHAR_complianceParameter( charindex );	CHAR_sendCToArroundCharacter( CHAR_getWorkInt( charindex , CHAR_WORKOBJINDEX ));	CHAR_send_P_StatusString( charindex , CHAR_P_STRING_BASEBASEIMAGENUMBER);	//CHAR_K_STRING_BASEIMAGENUMBER	//CHAR_P_STRING_BASEBASEIMAGENUMBER	return TRUE;}#endif#ifdef _NPCCHANGE_PLAYERIMGBOOL NPC_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);	return NPC_ActionBigSmallLastCheck( BBI, MyBBI,flg);}#endifBOOL showString( int meindex, char *showstr,int flg){	//广播	char buf1[256];	char argstr[NPC_UTIL_GETARGSTR_BUFSIZE];	int toindex = -1;	int floor;	int i;	if( NPC_Util_GetArgStr( meindex, argstr, sizeof( argstr)) == NULL )	{		print("\n not found argstr ");		return FALSE;	}	if( NPC_Util_GetStrFromStrWithDelim( argstr, showstr,buf1, sizeof(buf1)) == NULL ) {		strcpy( buf1, showstr);	}	toindex = -1;	floor = CHAR_getInt( meindex , CHAR_FLOOR);	while( toindex < 1000)	{		toindex ++;		if( !CHAR_CHECKINDEX( toindex) )			continue;		if( CHAR_getInt( toindex , CHAR_WHICHTYPE ) != CHAR_TYPEPLAYER )			continue;		if( CHAR_getInt( toindex , CHAR_FLOOR) != floor )			continue;		CHAR_talkToCli( toindex, meindex, buf1,  CHAR_COLORYELLOW);		if( flg == 1 )	{			CHAR_setWorkInt( toindex, CHAR_WORKSTAKEFLAG, FALSE );			for( i=0; i<5; i++)	{				CHAR_setWorkInt( toindex, i+CHAR_WORKSTAKETYPE1, 0);			}		}	}	return TRUE;}BOOL NPC_getTimeXYPoint( int meindex, int Mode){	char npcarg[NPC_UTIL_GETARGSTR_BUFSIZE];	char buf[256], buf1[256], buf2[256];	int fl=-1, x, y;	int GraNo = -1;	int points = 1;	//条件成立为1	if( Mode <= 0 )	{		points = 2;	}	memset( npcarg, 0, sizeof( npcarg));	if( !CHAR_CHECKINDEX( meindex) ) return FALSE;	if( NPC_Util_GetArgStr( meindex, npcarg, sizeof(npcarg)) == NULL ){		print("WarpMan:GetArgStrErr");		return FALSE;	}	memset( buf, 0, sizeof( buf));	if( NPC_Util_GetStrFromStrWithDelim( npcarg, "TimeXYPoint", buf, sizeof( buf)) != NULL ){		if( getStringFromIndexWithDelim(buf , "&" , points, buf1, sizeof( buf1)) != FALSE ){			memset( buf2, 0, sizeof( buf2));			if( getStringFromIndexWithDelim(buf1 , "," , 1, buf2, sizeof( buf2)) == FALSE ){				return FALSE;			}			fl = atoi( buf2);			if( getStringFromIndexWithDelim(buf1 , "," , 2, buf2, sizeof( buf2)) == FALSE ){				return FALSE;			}			x = atoi( buf2);			if( getStringFromIndexWithDelim(buf1 , "," , 3, buf2, sizeof( buf2)) == FALSE ){				return FALSE;			}			y = atoi( buf2);			if( MAP_IsValidCoordinate( fl, x, y ) == FALSE ){				char filename[256];				NPC_Util_CheckAssignArgFile( meindex, filename);				return FALSE;			}			if( CHAR_getInt( meindex, CHAR_FLOOR) != fl ||				CHAR_getInt( meindex, CHAR_X) != x ||				CHAR_getInt( meindex, CHAR_Y) != y ){				CHAR_warpToSpecificPoint( meindex, fl , x , y);			}		}	}	if( NPC_Util_GetStrFromStrWithDelim( npcarg, "GraNo", buf, sizeof( buf)) != NULL ){		if( getStringFromIndexWithDelim(buf , "&" , points, buf1, sizeof( buf1)) != FALSE ){			GraNo = atoi( buf1);			CHAR_setInt( meindex, CHAR_BASEIMAGENUMBER, GraNo);		}	}	return TRUE;}BOOL NPC_getTimeData( int meindex, char *npcarg, int *born, int *dead, int loopspeed){	int i;	char buf[256];	if( NPC_Util_GetStrFromStrWithDelim( npcarg, "NEWTIME", buf, sizeof( buf)) != NULL ){		for(i=0 ; i<9 ; i++){			if( strstr( buf, TimeTble[i].arg ) != NULL){				*born = TimeTble[i].born;				*dead = TimeTble[i].dead;				return TRUE;			}		}	}	return FALSE;}BOOL NPC_CheckTimeDefine( char *timetype){	LSTIME nowlstime;	int born=-1, dead=-1, finds=0, i;	RealTimeToLSTime( NowTime.tv_sec, &nowlstime);	for(i=0 ; i<9 ; i++){		if( strstr( timetype, TimeTble[i].arg ) != NULL){			born = TimeTble[i].born;			dead = TimeTble[i].dead;			finds = 1;			break;		}	}	if( finds == 0 ) return FALSE;	if( born < dead ){		if( (born < nowlstime.hour) && (dead > nowlstime.hour) ){			return TRUE;		}	}else{		if( (born < nowlstime.hour && 1024 > nowlstime.hour) ||			( 0 < nowlstime.hour && dead > nowlstime.hour)){			return TRUE;		}	}	return FALSE;}void NPC_TimeDefineDo( int meindex, int born, int dead, int typeMode){	LSTIME nowlstime;	RealTimeToLSTime( NowTime.tv_sec, &nowlstime);	if(born < dead){		if( (born < nowlstime.hour) && (dead > nowlstime.hour) ){			CHAR_setWorkInt(meindex,typeMode,0);				}else{			CHAR_setWorkInt(meindex,typeMode,1);		}	}else{		if( (born < nowlstime.hour && 1024 > nowlstime.hour) || ( 0 < nowlstime.hour && dead > nowlstime.hour)){			CHAR_setWorkInt(meindex,typeMode,0);		}else{			CHAR_setWorkInt(meindex,typeMode,1);		}	}	if( NPC_getTimeXYPoint( meindex, CHAR_getWorkInt( meindex, typeMode)) == FALSE )		return;}void GetRand_WarpPoint( char *buf, int *fl, int *x, int *y )	{	char buff1[256],buff2[256];	int i=0,point=1;	struct {		int m_fl;		int m_x;		int m_y;	} RandPoint[]={		{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},		{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},		{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},		{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},	};		while( getStringFromIndexWithDelim( buf,";",point,buff1,sizeof( buff1)) != FALSE) {			point++;			getStringFromIndexWithDelim(buff1,",",1,buff2,sizeof(buff2));			RandPoint[i].m_fl = atoi(buff2);			getStringFromIndexWithDelim(buff1,",",2,buff2,sizeof(buff2));			RandPoint[i].m_x = atoi(buff2);			getStringFromIndexWithDelim(buff1,",",3,buff2,sizeof(buff2));			RandPoint[i].m_y = atoi(buff2);			i++;			if( i >= arraysizeof( RandPoint) )				break;		}				point = RAND( 0, i);		if( RandPoint[point].m_fl <= 0 || point > arraysizeof( RandPoint) -1)	{			point = 0;		}		*fl = RandPoint[point].m_fl;		*x = RandPoint[point].m_x;		*y = RandPoint[point].m_y;	return;}BOOL NPC_ActionDuelRankCheck(int meindex,int talker,int rank,int flg){	int myrank;	myrank=CHAR_getWorkInt(talker,CHAR_WORKSHOPRELEVANTSEC);	if( NPC_ActionBigSmallLastCheck( rank, myrank, flg)==TRUE){		return TRUE;	}		return FALSE;}BOOL NPC_ActionDuelPointCheck(int meindex,int talker,int rank,int flg){	int myduel;	myduel = CHAR_getInt( talker, CHAR_DUELPOINT);	if( NPC_ActionBigSmallLastCheck( rank, myduel, flg)==TRUE){		return TRUE;	}		return FALSE;}BOOL NPC_ActionTreasureTypeCheck(int meindex,int level, int type, int flg){	int mylevel;//	if( CHAR_getWorkInt( meindex, NPC_TIME_EVENTMODE) == NPC_EVENTMODE_EVENT ){	mylevel = (type == NPC_EVENTMODE_EVENT)?1:0;	if( NPC_ActionBigSmallLastCheck( level, mylevel, flg)==TRUE)		return TRUE;	return FALSE;}BOOL NPC_ActionTreasureRandItemGet(int meidex,int talker,int rand_j,char *buf){	char buff2[64];	int randitem;	int ret;	int itemindex;	char token[128];	if(rand_j == 0) {		print("Event:由於0的介入,出现错误。"); 		return FALSE; 	} 		randitem = rand()%rand_j;	if(randitem == 0) randitem = rand_j;	getStringFromIndexWithDelim(buf , "," , randitem, buff2, sizeof(buff2)) ;	itemindex = ITEM_makeItemAndRegist( atoi( buff2));	if(itemindex == -1) return FALSE;		/*失奶  丞及馨笛(  涛失奶  丞  卞中木化仄引丹  */	ret = CHAR_addItemSpecificItemIndex( talker, itemindex);	if( ret < 0 || ret >= CHAR_MAXITEMHAVE ) {		print( "npc_exchangeman.c: additem error itemindex[%d]\n", itemindex);		ITEM_endExistItemsOne( itemindex);		return FALSE;	}	if(itemindex != -1) {		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			"EventAddItem(任务需求所得到的道具)",			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_COLORWHITE);	CHAR_sendItemDataOne( talker, ret);	return TRUE;}#ifdef _NPC_ADDWARPMAN1BOOL NPC_ActionPartyCountCheck( int toindex, int nums, int flg){	int partys=0;	int i;	partys = 0;	for( i=0 ; i < CHAR_PARTYMAX ;i++)		if(CHAR_getWorkInt(toindex,CHAR_WORKPARTYINDEX1+i) != -1)			partys++;	if(NPC_ActionBigSmallLastCheck( nums, partys, flg) == TRUE)		return TRUE;	return FALSE;}//检查男生人数BOOL NPC_ActionManCountCheck( int toindex, int nums, int flg){	int i,tempcount = 0;	if( CHAR_getWorkInt( toindex, CHAR_WORKPARTYMODE) == CHAR_PARTY_NONE ){	    if( IsMale(toindex) == 1 )		    tempcount++;	}	else{	    for( i=0 ; i < CHAR_PARTYMAX ;i++)	        if(CHAR_getWorkInt(toindex,CHAR_WORKPARTYINDEX1+i) != -1)			    if( IsMale( CHAR_getWorkInt(toindex,CHAR_WORKPARTYINDEX1+i) ) == 1 )				    tempcount++;	}	print("\n检查男生人数:%d",tempcount);	if(NPC_ActionBigSmallLastCheck( nums, tempcount, flg) == TRUE)		return TRUE;	return FALSE;}//检查女生人数BOOL NPC_ActionWomanCountCheck( int toindex, int nums, int flg){	int i,tempcount = 0;	if( CHAR_getWorkInt( toindex, CHAR_WORKPARTYMODE) == CHAR_PARTY_NONE ){	    if( IsFemale(toindex) == 1 )		    tempcount++;	}    else{	    for( i=0 ; i < CHAR_PARTYMAX ;i++)	        if(CHAR_getWorkInt(toindex,CHAR_WORKPARTYINDEX1+i) != -1)		        if( IsFemale( CHAR_getWorkInt(toindex,CHAR_WORKPARTYINDEX1+i) ) == 1 )				    tempcount++;	}    print("\n检查女生人数:%d",tempcount);	if(NPC_ActionBigSmallLastCheck( nums, tempcount, flg) == TRUE)		return TRUE;	return FALSE;}#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -