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

📄 npc_warpman.c

📁 石器时代2.0完整版源代码.已经加入新功能. 在REDHAT9下GCC3.4编译成功.
💻 C
📖 第 1 页 / 共 2 页
字号:
	}else if(flg==2){		if(mypoint > point1) {			return TRUE;		}	}	return FALSE;}BOOL NPC_GetDuelPointCheck(int meindex,int talker){	int fdid = getFdidFromCharaIndex( talker);	char dbkey[256];		if( fdid == -1 ) return FALSE;	CHAR_makeDBKey( talker, dbkey, sizeof( dbkey));	saacproto_DBGetEntryRank_send( acfd, DB_DUELPOINT, dbkey, fdid,							CHAR_getWorkInt( meindex, CHAR_WORKOBJINDEX));		return TRUE;}void NPC_GetDuelRank(int rank,int fdid,int objindex){	int talker;	int meindex;	rank++;   	talker = getCharindexFromFdid( fdid);	if( talker == -1 ) return;	meindex= OBJECT_getIndex( objindex);	if( !CHAR_CHECKINDEX( meindex)) return;	CHAR_setWorkInt(talker,CHAR_WORKSHOPRELEVANTSEC,rank);	NPC_WarpMan_selectWindow( meindex, talker,0,-1);}BOOL NPC_PARTY_CHAECK(int meindex,int talker){	if(CHAR_getWorkInt(talker,CHAR_WORKPARTYMODE) != CHAR_PARTY_NONE){		return FALSE;	}	return TRUE;}void NPC_ERR_DiSP(int meindex,int talker,int errNO){	char token[1024];	int i=0;	int otherindex;	int fd = getfdFromCharaIndex( talker);	char npcarg[NPC_UTIL_GETARGSTR_BUFSIZE - 1024 * 20];		if(NPC_Util_GetArgStr( meindex, npcarg, sizeof(npcarg))==NULL){		print("GetArgStrErr");		return ;	}		if(errNO==1){		if(NPC_Util_GetStrFromStrWithDelim( npcarg, "PartyMsg",token, sizeof( token))==NULL) {			sprintf(token,"\n\n    无法加入团队。  "				"\n\n    请解散团队 。 ");		}		if(CHAR_getWorkInt(talker,CHAR_WORKPARTYMODE)==CHAR_PARTY_CLIENT){					}else{							for( i=0 ; i < CHAR_PARTYMAX ;i++){				otherindex=CHAR_getWorkInt(talker,CHAR_WORKPARTYINDEX1+i);				if(otherindex != -1){					fd = getfdFromCharaIndex( otherindex);					lssproto_WN_send( fd, WINDOW_MESSAGETYPE_MESSAGE,						WINDOW_BUTTONTYPE_OK,						CHAR_WINDOWTYPE_WINDOWWARPMAN_ERR, 						CHAR_getWorkInt( meindex, CHAR_WORKOBJINDEX),						token);				}			}			return ;		}	}else if (errNO==2){		if(NPC_Util_GetStrFromStrWithDelim( npcarg, "MoneyMsg", token, sizeof( token))==NULL){			sprintf(token,"\n\n    似乎金钱不足唷。  "				"\n\n 请存好钱後,再过来。");		}	}	lssproto_WN_send( fd, WINDOW_MESSAGETYPE_MESSAGE,		WINDOW_BUTTONTYPE_OK,		CHAR_WINDOWTYPE_WINDOWWARPMAN_ERR, 		CHAR_getWorkInt( meindex, CHAR_WORKOBJINDEX),		token);}int NPC_FloorUse(int charaindex,int floor){	int		i;	int		players=0;	int     playernum = CHAR_getPlayerMaxNum();	for( i=0 ; i< playernum ; i++ ){		if( CHAR_getCharUse(i) == FALSE )continue;			if(CHAR_getInt(i,CHAR_FLOOR)==floor){				players++;			}	}	return players;}int NPC_FloorUseOtherFloor(int warp, char *buf){	int		i,j=1;	int		players=0;	int     playernum = CHAR_getPlayerMaxNum();	char buf2[32];	int floor;	for( i=0 ; i< playernum ; i++ ){		if( CHAR_getCharUse(i) == FALSE )continue;		j=1;		while(getStringFromIndexWithDelim(buf,",",j,buf2,sizeof(buf2))!= FALSE){			j++;			floor = atoi(buf2);			if(CHAR_getInt(i,CHAR_FLOOR) == floor && warp != floor) {				players++;			}		}	}	return players;}BOOL NPC_WarpMsg(int meindex,int talker,char *arg){	char buf[256];		int fl=0,x=0,y=0;	int parent=-1;	int pmode;	int subindex;	int i;	if( NPC_Util_GetStrFromStrWithDelim( arg, "WARP", buf, sizeof( buf)) == NULL )		return FALSE;	GetRand_WarpPoint( buf, &fl, &x, &y );	if( fl == 0 && x == 0 && y == 0 )	{		return TRUE;	}else	{		if( MAP_IsValidCoordinate( fl,x,y )== FALSE ){			print( "Warp NPC:1.Invalid warpman ERR" );			return FALSE;		}	}#ifdef _TIME_TICKET	if( check_TimeTicketMap( fl) ) {		int havei, itemi;		CHAR_setWorkInt( talker, CHAR_WORKTICKETTIME, 0);		CHAR_setWorkInt( talker, CHAR_WORKTICKETTIMESTART, 0);		for( havei = CHAR_STARTITEMARRAY ; havei < CHAR_MAXITEMHAVE ; havei++ ){			itemi = CHAR_getItemIndex( talker, havei);			if( !ITEM_CHECKINDEX( itemi) ) continue;			if( strcmp( ITEM_getChar( itemi, ITEM_USEFUNC), "ITEM_timeticket") )	continue;			//if( ITEM_getInt( itemi ,ITEM_ID) != 20646 )	continue;			CHAR_talkToCli( talker, -1, "自动使用门票。", CHAR_COLORYELLOW);			ITEM_timeticketEx( talker, talker, havei, 1);			break;		}		if( havei == CHAR_MAXITEMHAVE ) {			CHAR_talkToCli( talker, -1, "请先准备专用门票才可进入。", CHAR_COLORYELLOW);			return FALSE;		}	}#endif	pmode = CHAR_getWorkInt( talker, CHAR_WORKPARTYMODE );	switch( pmode ){		case 1: 			parent = talker;			break;		case 2:			parent = CHAR_getWorkInt( talker, CHAR_WORKPARTYINDEX1 );			break;		default:			CHAR_warpToSpecificPoint(talker, fl, x,y);			return TRUE;	}	if( parent < 0 )		return TRUE;	for( i = 0; i < CHAR_PARTYMAX; i ++ ){		subindex = CHAR_getWorkInt( parent, CHAR_WORKPARTYINDEX1+i );		if( CHAR_CHECKINDEX( subindex ) == FALSE )continue;		if( fl==0 && x==0 && y==0 )	{		}else	{			CHAR_warpToSpecificPoint( subindex, fl, x, y );		}	}	return TRUE;}#ifdef _NEW_WARPMANstatic void NPC_NewWarpMan_selectWindow( int meindex, int toindex, int num,int select,char *TalkStr){		char npcarg[NPC_UTIL_GETARGSTR_BUFSIZE - 1024 * 20];	char token[1024];	int buttontype = 0, windowtype = 0, windowno = 0;	char buf[NPC_UTIL_GETARGSTR_BUFSIZE - 1024 * 20],buf1[256];	int fd = getfdFromCharaIndex( toindex);	BOOL tenflg =FALSE;	int talkNo=1,RunType=-1;	if(NPC_Util_GetArgStr( meindex, npcarg, sizeof(npcarg))==NULL){		print("GetArgStrErr");		return ;	}	if( NPC_Util_GetStrFromStrWithDelim( npcarg, "NEWTIME", buf1, sizeof( buf1)) != NULL ){		if( CHAR_getWorkInt( meindex, NPC_TIME_MODE) <= 0 )	{			if( NPC_Util_GetStrFromStrWithDelim( npcarg, "Time_Msg", token, sizeof( token) ) != NULL)	{				CHAR_talkToCli( toindex, meindex, token, CHAR_COLORYELLOW);			}			return;		}	}	windowtype = WINDOW_MESSAGETYPE_MESSAGE;	sprintf( buf1,"TALKEVENT");	//寻找多种条件 FREE	while(getStringFromIndexWithDelim( npcarg,"OVER",talkNo,buf,sizeof( buf)) != FALSE)	{ 	  if(strstr(buf, buf1) != NULL) {	    //检查对话  暗语		RunType = CheckWarpMsg( meindex, toindex, buf , TalkStr);		if( RunType > 1 )	{			return;		}else if( RunType != 0 )	{			talkNo++;			continue;		}	    if( NPC_Util_GetStrFromStrWithDelim( buf, "FREE", token, sizeof( token) ) == NULL)	{	      print("msgErr");	      return;	    }	    //检查玩家是否附合条件			    if((NPC_ActionPassCheck(meindex,toindex,token)==TRUE) || (strstr( token, "ALLFREE")!=NULL) )	{		  CHAR_setWorkInt( toindex, CHAR_WORKSHOPRELEVANT, talkNo-1);	      //若附合条件 取出 FreeMsg 字串	      if(NPC_Util_GetStrFromStrWithDelim( buf, "FreeMsg", token, sizeof( token))==NULL)	        return;	      CONNECT_set_pass(fd,TRUE);	      CONNECT_set_first_warp(fd,TRUE);	      buttontype = WINDOW_BUTTONTYPE_YESNO;	      windowno = NEW_WARPMAN;	      tenflg = TRUE;	      CHAR_setWorkInt( toindex , CHAR_WORKSHOPRELEVANTTRD , -1 );	      break;										    }	  }	  talkNo++;	}	//无任何条件成立	if( tenflg == FALSE )	{		if( getStringFromIndexWithDelim( npcarg,"OVER",1,buf,sizeof( buf)) == FALSE )			return;		if( strstr( buf, "NOFREE") == NULL )	{			return;		}else	{			strcpy( npcarg, buf);		}		if(NPC_Util_GetStrFromStrWithDelim( npcarg, "NomalMsg", token,sizeof(token)) != NULL)	{			CHAR_talkToCli( toindex, meindex, token,CHAR_COLORWHITE);			return;		}	}	//送讯息给 CLI							lssproto_WN_send( fd, windowtype, buttontype, windowno,			CHAR_getWorkInt( meindex, CHAR_WORKOBJINDEX), token	);																				}#endif//ANDY_REint CheckWarpMsg( int meindex, int talkerindex,char *npcarg ,char *TalkStr){  char buf[1024];  if( NPC_Util_GetStrFromStrWithDelim( npcarg, "warp_msg", buf, sizeof( buf) ) == NULL)	  return 0;  if( strcmp( buf, TalkStr) )	  return 1;  if( NPC_Util_GetStrFromStrWithDelim( npcarg, "CHECKPARTY", buf, sizeof( buf) ) != NULL)	{	  if( strstr( buf, "FALSE") != NULL )	{	  }else {	  if( NPC_PARTY_CHAECK( meindex, talkerindex) == FALSE )	{		  NPC_ERR_DiSP( meindex, talkerindex, 1);		  return 2;	  }			}  }   if( NPC_Util_GetStrFromStrWithDelim( npcarg, "FREE", buf, sizeof( buf)) == NULL )	   return 2;   if( ( NPC_ActionPassCheck( meindex, talkerindex, buf ) == FALSE) )	{	   	if(NPC_Util_GetStrFromStrWithDelim( npcarg, "NomalMsg", buf,sizeof(buf)) != NULL)	{			CHAR_talkToCli( talkerindex, meindex,buf,CHAR_COLORWHITE);		}		return	2;   }else   {		if( Action_RunDoEventAction( meindex, talkerindex, npcarg) == FALSE ){			CHAR_setWorkInt( talkerindex, CHAR_WORKSHOPRELEVANT, -1);			return 3;		}		CHAR_complianceParameter( talkerindex );		CHAR_send_P_StatusString( talkerindex ,			CHAR_P_STRING_ATK|CHAR_P_STRING_DEF|			CHAR_P_STRING_CHARM|CHAR_P_STRING_QUICK|			CHAR_P_STRING_WATER|CHAR_P_STRING_FIRE|			CHAR_P_STRING_WIND|CHAR_P_STRING_EARTH	);		if(NPC_Util_GetStrFromStrWithDelim( npcarg, "FreeMsg", buf, sizeof( buf)) != NULL ){			CHAR_talkToCli( talkerindex, meindex, buf,  CHAR_COLORWHITE);		}		NPC_WarpMsg( meindex, talkerindex, npcarg);		NPC_NpcWarpMsg( meindex, talkerindex, npcarg);		return 4;	}  return 0;}BOOL NPC_NpcWarpMsg(int meindex,int talker,char *arg){	char buf[256];		int fl=0,x=0,y=0;		if( CHAR_CHECKINDEX( meindex ) == FALSE )		return FALSE;	if( NPC_Util_GetStrFromStrWithDelim( arg, "NPCPOINT", buf, sizeof( buf)) == NULL )		return FALSE;	GetRand_WarpPoint( buf, &fl, &x, &y );	if( MAP_IsValidCoordinate( fl,x,y )== FALSE ){		print( "Warp NPC:2.Invalid warpman ERR" );		return FALSE;	}	CHAR_warpToSpecificPoint( meindex, fl, x, y );		return TRUE;}void NPC_WarpManLoop( int meindex){	int born, dead;	char npcarg[NPC_UTIL_GETARGSTR_BUFSIZE - 1024 * 20];	if( !CHAR_CHECKINDEX( meindex) ) return;	if( NPC_Util_GetArgStr( meindex, npcarg, sizeof(npcarg)) == NULL ){		print("WarpMan:GetArgStrErr");		return;	}	if( !strstr( npcarg,"NEWWARPMAN") )		return;	if( NPC_getTimeData( meindex, npcarg, &born, &dead, 200) != FALSE ){		NPC_TimeDefineDo( meindex, born, dead, NPC_TIME_MODE);		CHAR_sendCToArroundCharacter( CHAR_getWorkInt( meindex, CHAR_WORKOBJINDEX ) );	}}void NPC_WarpManWatch( int meobjindex, int objindex, CHAR_ACTION act,					  int x,int y,int dir, int* opt,int optlen ){	int born, dead;	int meindex, index;	char npcarg[NPC_UTIL_GETARGSTR_BUFSIZE - 1024 * 20];	if( OBJECT_getType( objindex) != OBJTYPE_CHARA) return;	index = OBJECT_getIndex( objindex);	if( !CHAR_CHECKINDEX( index) ) return;	if( CHAR_getInt( index, CHAR_WHICHTYPE) != CHAR_TYPEPLAYER) return;    meindex = OBJECT_getIndex( meobjindex);	if( !CHAR_CHECKINDEX( meindex) ) return;	if( NPC_Util_GetArgStr( meindex, npcarg, sizeof(npcarg)) == NULL ){		print("WarpMan:GetArgStrErr");		return;	}	if( !strstr( npcarg,"NEWWARPMAN") )		return;#ifdef _TREASURE_BOX	if( CHAR_getWorkInt( meindex, NPC_TIME_EVENTMODE) == NPC_EVENTMODE_OPEN ){		if( CHAR_getWorkInt( meindex, NPC_TIME_EVENTTIME) < NowTime.tv_sec ){			//变回宝箱			CHAR_setWorkInt( meindex, NPC_TIME_EVENTMODE, NPC_EVENTMODE_EVENT);			//变图			CHAR_setInt( meindex, CHAR_BASEBASEIMAGENUMBER,				CHAR_getWorkInt( meindex, NPC_TIME_EVENOFFDBBI));			CHAR_setInt( meindex, CHAR_BASEIMAGENUMBER,				CHAR_getWorkInt( meindex, NPC_TIME_EVENOFFDBBI));			NPC_TreasureEventRunMsg( meindex);	//是否warp			CHAR_sendCToArroundCharacter( CHAR_getWorkInt( meindex, CHAR_WORKOBJINDEX ) );		}	}#endif	if( NPC_getTimeData( meindex, npcarg, &born, &dead, 200) != FALSE ){		NPC_TimeDefineDo( meindex, born, dead, NPC_TIME_MODE);		CHAR_sendCToArroundCharacter( CHAR_getWorkInt( meindex, CHAR_WORKOBJINDEX ) );	}}#ifdef _TREASURE_BOXBOOL NPC_TreasureEventRunMsg( int meindex){	char buf[256];		char npcarg[NPC_UTIL_GETARGSTR_BUFSIZE - 1024 * 20];	int fl,x,y;		if( !CHAR_CHECKINDEX( meindex ))		return FALSE;	if(NPC_Util_GetArgStr( meindex, npcarg, sizeof(npcarg))==NULL){		print("WarpMan:GetArgStrErr");		return FALSE;	}		if( NPC_Util_GetStrFromStrWithDelim( npcarg, "TREASURE_NUM", buf, sizeof( buf)) == NULL )		return FALSE;	if(  CHAR_getWorkInt( meindex, NPC_TIME_EVENTNUM) < atoi( buf) ) return FALSE;	CHAR_setWorkInt( meindex, NPC_TIME_EVENTNUM, 0);		if( NPC_Util_GetStrFromStrWithDelim( npcarg, "TREASURE_POINT", buf, sizeof( buf)) == NULL )		return FALSE;	GetRand_WarpPoint( buf, &fl, &x, &y );	if( MAP_IsValidCoordinate( fl,x,y )== FALSE ){		print( "Warp NPC:2.Invalid warpman ERR" );		return FALSE;	}	CHAR_warpToSpecificPoint( meindex, fl, x, y );	return TRUE;}#endifBOOL NPC_TreasureRandItemGet(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( !CHAR_CHECKITEMINDEX( talker, ret) ){		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;}

⌨️ 快捷键说明

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