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

📄 npc_npcenemy.c

📁 石器时代8.0服务端完整源代码。可以直接编译
💻 C
📖 第 1 页 / 共 3 页
字号:
						!= NULL )
					{
						strcpysafe( &buf[len], sizeof( buf)-len, "\n" );
						len++;
						strcpysafe( &buf[len], sizeof( buf)-len, buf2 );
						len += strlen( buf2);
						if( len >= sizeof( buf) ) {
							print( "buffer over\n");
							return FALSE;
						}
					}
					else {
						strcpysafe( &buf[len], sizeof( buf)-len, "\n" );
						len++;
						if( len >= sizeof( buf) ) {
							print( "buffer over\n");
							return FALSE;
						}
					}
				}

				if( fd != -1 ) {
					lssproto_WN_send( fd, WINDOW_MESSAGETYPE_MESSAGE,
									WINDOW_BUTTONTYPE_YESNO,
									CHAR_WINDOWTYPE_NPCENEMY_START,
									CHAR_getWorkInt( meindex, CHAR_WORKOBJINDEX),
									makeEscapeString( buf, escapebuf,sizeof(escapebuf)));
				}
				/* 仇仇分仃    卞伉正□件 */
				return FALSE;
			}else {
				/* 爵  卞  日六月 */
				flg = NPC_NPCEnemy_BattleIn( meindex, charaindex);
			}
		}
	}
	if( !flg) {
		if( NPC_Util_GetStrFromStrWithDelim( argstr, "deniedmsg", buf, sizeof( buf))
			!= NULL )
		{
			CHAR_talkToCliAndParty( charaindex, meindex ,buf , CHAR_COLORYELLOW );
		}
	}
	return flg;
}

int NPC_NPCEnemy_Dying( int battleindex, int meindex )
{
	char	argstr[NPC_UTIL_GETARGSTR_BUFSIZE];
	char	buf[64];
	int	i,toindex=-1;
	int tmp=-1;

	if( !CHAR_CHECKINDEX( meindex)) {
		return FALSE;
	}
	NPC_Util_GetArgStr( meindex, argstr, sizeof( argstr));

#ifdef _NEW_WARPMAN
	if( strstr( argstr, "NEWNPCENEMY") )    {
	}else	{
#endif
	/* 蝇    及陲太 */
	if( NPC_Util_GetStrFromStrWithDelim( argstr, "endmsg", buf, sizeof( buf)) != NULL ) {
		for( i = 0; i < 5; i ++ ) {
			/* 爵  卞辅笛仄化中月蝈够卞丢永本□斥 */
			int toindex = BattleArray[battleindex].Side[0].Entry[i].charaindex;
			if( CHAR_CHECKINDEX( toindex) )	{
				CHAR_talkToCli( toindex, meindex ,buf , CHAR_COLORYELLOW );
			}
		}

	}
#ifdef _NEW_WARPMAN
	}
#endif
	if( NPC_Util_GetStrFromStrWithDelim( argstr, "steal", buf, sizeof( buf)) != NULL ) {
		print("\n steal TRUE !!");
		if( atoi( buf) == 1 ) {
			int charaindex = BattleArray[battleindex].Side[0].Entry[0].charaindex;
			NPC_NPCEnemy_StealItem( argstr, meindex, charaindex);
		}
		
	}
#ifdef _ALLDOMAN // (不可开) Syu ADD 排行榜NPC
	if( NPC_Util_GetStrFromStrWithDelim( argstr, "herobattlefield", buf, sizeof( buf)) != NULL ) {
			int charaindex = BattleArray[battleindex].Side[0].Entry[0].charaindex;
			CHAR_setWorkInt ( charaindex , CHAR_WORKHEROFLOOR , atoi ( buf ) ) ;
			// Syu ADD 
			if ( atoi ( buf ) > CHAR_getInt ( charaindex , CHAR_HEROFLOOR ) )
				CHAR_setInt ( charaindex , CHAR_HEROFLOOR , atoi( buf ) ) ; 
	}

#endif
	tmp = NPC_Util_GetNumFromStrWithDelim( argstr, "dieact");
	if( tmp != 1 ) 
		tmp = 0;
	CHAR_setWorkInt( meindex, CHAR_WORK_DIEACT, tmp);
	if( CHAR_getWorkInt( meindex, CHAR_WORK_DIEACT) == 0 ) {
	    Char 	*ch;
		CHAR_setInt( meindex, CHAR_BASEIMAGENUMBER, 0);
		print("bbi---->bi10");
		CHAR_sendCToArroundCharacter( CHAR_getWorkInt( meindex, CHAR_WORKOBJINDEX));

		CHAR_setWorkInt( meindex, CHAR_WORKEVENTTYPE, CHAR_EVENT_ALTERRATIVE);
		MAP_sendAroundMapdata( CHAR_getInt( meindex, CHAR_FLOOR),
								CHAR_getInt( meindex, CHAR_X),
								CHAR_getInt( meindex, CHAR_Y));
	    ch  = CHAR_getCharPointer( meindex);
	    if( ch != NULL ) {
			strcpysafe( ch->charfunctable[CHAR_LOOPFUNC].string,
						sizeof( ch->charfunctable[CHAR_LOOPFUNC]),
						"NPCEnemyLoop");
			CHAR_constructFunctable( meindex);
			CHAR_setInt( meindex, CHAR_LOOPINTERVAL, 5000);
			CHAR_setWorkInt( meindex, CHAR_WORK_DIETIME, NowTime.tv_sec);
		}else {
			print( "NPCENEMY:err\n");
		}
	}else {
		for( i = 0; i < 5; i ++ ) {
			toindex = BattleArray[battleindex].Side[0].Entry[i].charaindex;
			if( CHAR_CHECKINDEX( toindex) ) {
#ifdef _NEW_WARPMAN
				if( strstr( argstr, "NEWNPCENEMY") )    {
					BOOL Party=TRUE;
					if( NPC_NPCEnemy_CheckFree( meindex, toindex , &Party) == FALSE )       {
						continue;
					}
					if( Party == TRUE )	{
					}else	{
						if( CHAR_getWorkInt( toindex, CHAR_WORKPARTYMODE ) == CHAR_PARTY_LEADER )	{
							if( NPC_WarpAllMsg( meindex, toindex ) == TRUE )	{
								return TRUE;
							}
						}
						continue;
					}
				}
				CHAR_DischargeParty( toindex, 0); // 拆队
				CHAR_warpToSpecificPoint( toindex,
					CHAR_getWorkInt( meindex, CHAR_WORK_WARP_FLOOR),
					CHAR_getWorkInt( meindex, CHAR_WORK_WARP_X),
					CHAR_getWorkInt( meindex, CHAR_WORK_WARP_Y)
					);

#else
				CHAR_warpToSpecificPoint( toindex,
								CHAR_getWorkInt( meindex, CHAR_WORK_WARP_FLOOR),
								CHAR_getWorkInt( meindex, CHAR_WORK_WARP_X),
								CHAR_getWorkInt( meindex, CHAR_WORK_WARP_Y)
								);
#endif
#ifdef _NPC_REPLACEMENT
				Check_EnemyWarpMe( meindex, argstr);
#endif
			}
		}
	}
	return TRUE;
}

void NPC_NPCEnemyLoop( int meindex )
{

	if( NowTime.tv_sec > CHAR_getWorkInt( meindex, CHAR_WORK_DIETIME) +
						 CHAR_getWorkInt( meindex, CHAR_WORK_REVIVALTIME)){
		Char	*ch;
		CHAR_setInt( meindex, CHAR_BASEIMAGENUMBER,	CHAR_getWorkInt( meindex, CHAR_WORK_BASEIMGBAK));
		print("bbi---->bi11");

		CHAR_sendCToArroundCharacter( CHAR_getWorkInt( meindex, CHAR_WORKOBJINDEX));
		CHAR_setWorkInt( meindex, CHAR_WORKEVENTTYPE, CHAR_EVENT_ENEMY);
		MAP_sendAroundMapdata( CHAR_getInt( meindex, CHAR_FLOOR),
								CHAR_getInt( meindex, CHAR_X),
								CHAR_getInt( meindex, CHAR_Y));
	    ch  = CHAR_getCharPointer( meindex);
	    if( ch != NULL ) {
			strcpysafe( ch->charfunctable[CHAR_LOOPFUNC].string,
						sizeof( ch->charfunctable[CHAR_LOOPFUNC]),	"");
			CHAR_constructFunctable( meindex);
//			CHAR_setInt( meindex, CHAR_LOOPINTERVAL, 0);
		}
	}
}


BOOL NPC_NPCEnemy_BattleIn(  int meindex, int charaindex)
{
	int		gym;
	int		ret;
	char	buf[256];
	char	argstr[NPC_UTIL_GETARGSTR_BUFSIZE];

	memset( argstr, 0, sizeof( argstr));
	NPC_Util_GetArgStr( meindex, argstr, sizeof( argstr));
	gym = NPC_Util_GetNumFromStrWithDelim( argstr, "gym");

#ifdef _EMENY_CHANCEMAN
	{
		int masterindex=-1;
		masterindex = NPC_EmenyChanceCheck( meindex, charaindex, argstr);
		if( CHAR_CHECKINDEX( masterindex)){
			charaindex = masterindex;
		}else	{
			return TRUE;
		}
	}
#endif
	if( gym > 0 ){
		ret = BATTLE_CreateVsEnemy( charaindex, 2, meindex);
	}else{
		ret = BATTLE_CreateVsEnemy( charaindex, 1, meindex);
	}
	if( ret == 0 ) {
		BattleArray[CHAR_getWorkInt( charaindex, CHAR_WORKBATTLEINDEX)].WinFunc	= NPC_NPCEnemy_Dying;
		if( NPC_Util_GetStrFromStrWithDelim( argstr, "startmsg", buf, sizeof( buf))	!= NULL ){
			CHAR_talkToCliAndParty( charaindex, meindex ,buf , CHAR_COLORYELLOW );
		}
		if( NPC_Util_GetStrFromStrWithDelim( argstr, "steal", buf, sizeof( buf))!= NULL ){
			if( atoi( buf) == 0 ) {
				NPC_NPCEnemy_StealItem( argstr, meindex, charaindex);
			}
		}
	}
	return ( ret == 0 ) ?TRUE:FALSE ;
}

void NPC_NPCEnemyWindowTalked( int meindex, int talkerindex, int seqno, int select, char *data)
{
	if( seqno == CHAR_WINDOWTYPE_NPCENEMY_START) {
		if( select == WINDOW_BUTTONTYPE_YES) {
#if 0
			print(" NPC_NPCEnemyWindowTalked ");
			if( CHAR_getWorkInt( meindex, CHAR_WORKEVENTTYPE) != CHAR_EVENT_ENEMY ) {
				print(" NPCEnemyError!! ");
				return;
			}
#endif
			NPC_NPCEnemy_BattleIn( meindex, talkerindex);
		}
	}
}

static int NPC_NPCEnemy_StealItem( char *argstr, int meindex, int charaindex)
{
	char	itembuf[1024];
	if( NPC_Util_GetStrFromStrWithDelim( argstr, "item", itembuf, sizeof( itembuf))
		!= NULL )
	{
		char	data[128];
		int		delitemgroup[CHAR_MAXITEMHAVE];
		int		found = 0;
		int		i;
		for( i = 0; i < CHAR_MAXITEMHAVE; i ++ ) {
			int		j;
			int		itemid;
			int ret = getStringFromIndexWithDelim( itembuf,",", i + 1,data, sizeof(data));
			if( ret == FALSE) {
				break;
			}
			itemid = atoi( data);
			for( j = 0; j < CHAR_MAXITEMHAVE; j ++ ) {
				int itemindex = CHAR_getItemIndex( charaindex, j);
				if( ITEM_CHECKINDEX( itemindex)){
					if( ITEM_getInt( itemindex, ITEM_ID) == itemid ){
						CHAR_setItemIndex( charaindex, j, -1);
						ITEM_endExistItemsOne( itemindex);
						delitemgroup[found] = j;
						found ++;
						break;
					}
				}
			}
			if( !found ) break;
		}
		CHAR_sendItemData( charaindex, delitemgroup, found);
	}
	else {
		print( "NPCENEMY:奇怪\n");
		return FALSE;
	}
	return TRUE;
}

#ifdef _NEW_WARPMAN
static BOOL NPC_NPCEnemy_CheckFree( int  meindex, int toindex, BOOL *Party)
{
  char npcarg[NPC_UTIL_GETARGSTR_BUFSIZE];
  char buf1[1024],buf2[256],buf3[256],buf4[256];
  char token[256];
  char temp1[16];
  int talkNo = 1;
  int point=1;

  int i=0,type=0;

  struct tagWarpPoint {
	int floor;
	int x;
	int y;
  }AllWarPoint[]={
	{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},
  };

  if(NPC_Util_GetArgStr( meindex, npcarg, sizeof(npcarg))==NULL)	{
	print("GetArgStrErr");
	return FALSE;
  }
  if( (strstr( npcarg,"NEWNPCENEMY") == NULL) && (strstr( npcarg,"OVER") == NULL) )	{
	return FALSE;
  }else	{
  }
	
  while( getStringFromIndexWithDelim( npcarg,"OVER",talkNo,buf1,sizeof( buf1)) != FALSE )	{
	
	talkNo++;
	sprintf(temp1,"NEWEVENT");
	if( strstr( buf1, temp1) != NULL)	{
	  if( NPC_Util_GetStrFromStrWithDelim( buf1, "FREE", buf2, sizeof( buf2) ) == FALSE )	{
	  	continue;
	  }
		if( NPC_ActionPassCheck( meindex, toindex, buf2) == FALSE )	{
			continue;
		}

	  if( NPC_Util_GetStrFromStrWithDelim( buf1, "endmsg", token, sizeof( token)) != NULL ) {
		CHAR_talkToCli( toindex, meindex ,token , CHAR_COLORYELLOW );
	  }
#ifdef _ALLDOMAN // (不可开) Syu ADD 排行榜NPC
	  if( NPC_Util_GetStrFromStrWithDelim( buf1, "herobattlefield", token, sizeof( token)) != NULL ) {
		  CHAR_setWorkInt ( toindex , CHAR_WORKHEROFLOOR , atoi ( token ) ) ;
		  if ( atoi ( token ) > CHAR_getInt ( toindex , CHAR_HEROFLOOR ) )
				CHAR_setInt ( toindex , CHAR_HEROFLOOR , atoi( token ) ) ; 

	  }
#endif

	  if( NPC_Util_GetStrFromStrWithDelim( buf1, "WARP", buf2, sizeof( buf2) ) == FALSE ){
	  	continue;
	  }else	{//RAND	arraysizeof	AllWarPoint
		  	while( getStringFromIndexWithDelim( buf2, ";", point, buf3,sizeof( buf3)) != FALSE )	{
				point++;
				getStringFromIndexWithDelim( buf3, ",", 1, buf4, sizeof( buf4));
				AllWarPoint[i].floor = atoi( buf4);
				getStringFromIndexWithDelim( buf3, ",", 2, buf4, sizeof( buf4));
				AllWarPoint[i].x = atoi( buf4);
				getStringFromIndexWithDelim( buf3, ",", 3, buf4, sizeof( buf4));
				AllWarPoint[i].y = atoi( buf4);
				i++;
				if( i >= arraysizeof( AllWarPoint)  )
					  break;
			}
			type = RAND( 0, i-1);
			if( AllWarPoint[type].floor <= 0 || type > arraysizeof( AllWarPoint)-1)	{
				type = 0;
			}
		  CHAR_setWorkInt( meindex, CHAR_WORK_WARP_FLOOR, AllWarPoint[type].floor );
		  CHAR_setWorkInt( meindex, CHAR_WORK_WARP_X, AllWarPoint[type].x );
		  CHAR_setWorkInt( meindex, CHAR_WORK_WARP_Y, AllWarPoint[type].y );
		  
	  }
	  if( NPC_Util_GetStrFromStrWithDelim( buf1, "CHECKPARTY", buf4, sizeof( buf4)) != NULL ) {
		  if( strstr( buf4, "FALSE") != NULL )	{
				*Party = FALSE;
		  }
	  }
	  if( *Party == TRUE )	{
		  Action_RunDoEventAction( meindex, toindex, buf1);
	  }
	  return TRUE;
	}

⌨️ 快捷键说明

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