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

📄 npc_bus.c

📁 石器时代2.0完整版源代码.已经加入新功能. 在REDHAT9下GCC3.4编译成功.
💻 C
📖 第 1 页 / 共 2 页
字号:
#include "version.h"#include <string.h>#include "char.h"#include "object.h"#include "char_base.h"#include "npcutil.h"#include "lssproto_serv.h"#include "npc_bus.h"#include "handletime.h"/*  * 田旦心凶中卅仪毛允月NPC */ enum {	NPC_WORK_ROUTETOX = CHAR_NPCWORKINT1,		/* 升仇尺"  甄   */	NPC_WORK_ROUTETOY = CHAR_NPCWORKINT2,		/* 升仇尺"  甄   */	NPC_WORK_ROUTEPOINT = CHAR_NPCWORKINT3,		/* 漆窒    井 */	NPC_WORK_ROUNDTRIP = CHAR_NPCWORKINT4,		/* 垫五井窖曰井  ㄟ“垫五 ㄠ“窖曰  */	NPC_WORK_MODE = CHAR_NPCWORKINT5,	NPC_WORK_CURRENTROUTE = CHAR_NPCWORKINT6, 	NPC_WORK_ROUTEMAX = CHAR_NPCWORKINT7,	NPC_WORK_WAITTIME = CHAR_NPCWORKINT8,	NPC_WORK_CURRENTTIME = CHAR_NPCWORKINT9,	NPC_WORK_SEFLG = CHAR_NPCWORKINT10,};/* 蛐  丢永本□斥及enum */enum {	NPC_BUS_MSG_GETTINGON,	NPC_BUS_MSG_NOTPARTY,	NPC_BUS_MSG_OVERPARTY,	NPC_BUS_MSG_DENIEDITEM,	NPC_BUS_MSG_ALLOWITEM,	NPC_BUS_MSG_LEVEL,	NPC_BUS_MSG_GOLD,	NPC_BUS_MSG_EVENT,	NPC_BUS_MSG_START,	NPC_BUS_MSG_END,};typedef struct {	char	option[32];	char	defaultmsg[128];}NPC_BUS_MSG;NPC_BUS_MSG		busmsg[] = {	{ "msg_gettingon",	"PAON!(你无法於中途加入我们唷!)"},	{ "msg_notparty",	"PAPAON!!无法以团队加入唷!"},	{ "msg_overparty",	"PAON!!人数已满。"},	{ "msg_denieditem",		"PAPAON!!我可不要这个道具!"},	{ "msg_allowitem",		"哇喔~(想要那个道具啊!)"},	{ "msglevel",		"PAPAON!!你的等级还不够唷!"},	{ "msg_stone",		"PAPAON!!金钱不足唷!"},	{ "msg_event",		"PAON!!你无法加入唷!"},	{ "msg_start",		"哇喔~(出发进行)"},	{ "msg_end",		"哇喔~(到罗)"}	};static int NPC_BusSetPoint( int meindex, char *argstr);static void NPC_BusSetDestPoint( int meindex, char *argstr);static BOOL NPC_BusCheckDeniedItem( int meindex, int charaindex, char *argstr);static BOOL NPC_BusCheckLevel( int meindex, int charaindex, char *argstr);static int NPC_BusCheckStone( int meindex, int charaindex, char *argstr);static void NPC_BusSendMsg( int meindex, int talkerindex, int tablenum);static int NPC_BusGetRoutePointNum( int meindex, char *argstr );static void NPC_Bus_walk( int meindex);#define		NPC_BUS_LOOPTIME		200/* 谨切凛棉犯白巧伙玄 */#define		NPC_BUS_WAITTIME_DEFAULT	180#define		NPC_BUS_WAITINGMODE_WAITTIME	5000/********************************** 赓渝质  *********************************/BOOL NPC_BusInit( int meindex ){	char	argstr[NPC_UTIL_GETARGSTR_BUFSIZE - 1024 * 20];	int i;	char	buf[256];	int	routenum;	int	waittime;	int seflg;		NPC_Util_GetArgStr( meindex, argstr, sizeof( argstr));	/* 卅仃木壬中仃卅中娄醒及民尼永弁 */	routenum = NPC_Util_GetNumFromStrWithDelim( argstr, "routenum");//行驶路线数量	if( routenum == -1 ) {		print( "npcbus:nothing routenum \n");		return FALSE;	}	CHAR_setWorkInt( meindex, NPC_WORK_ROUTEMAX, routenum);		for( i = 1; i <= routenum; i ++ ) {		char routetostring[64];		snprintf( routetostring, sizeof( routetostring), "routeto%d", i);		if( NPC_Util_GetStrFromStrWithDelim( argstr, routetostring,buf, sizeof(buf))			== NULL ) 		{			print( "npcbus:nothing route to \n");			return FALSE;		}	}	waittime = NPC_Util_GetNumFromStrWithDelim( argstr, "waittime");	if( waittime == -1 ) waittime = NPC_BUS_WAITTIME_DEFAULT;	CHAR_setWorkInt( meindex, NPC_WORK_WAITTIME, waittime);	seflg = NPC_Util_GetNumFromStrWithDelim( argstr, "seflg");	if( seflg == -1 ) seflg = TRUE;	CHAR_setWorkInt( meindex, NPC_WORK_SEFLG, seflg);        CHAR_setInt( meindex , CHAR_WHICHTYPE , CHAR_TYPEBUS );		CHAR_setWorkInt( meindex, NPC_WORK_MODE, 0);	CHAR_setWorkInt( meindex, NPC_WORK_ROUTEPOINT, 2);	CHAR_setWorkInt( meindex, NPC_WORK_ROUNDTRIP, 0);	CHAR_setWorkInt( meindex, NPC_WORK_CURRENTROUTE, 0);				CHAR_setInt( meindex, CHAR_LOOPINTERVAL, 						NPC_BUS_WAITINGMODE_WAITTIME);        /* 蜇箕及凛棉毛本永玄 */    CHAR_setWorkInt( meindex, NPC_WORK_CURRENTTIME, NowTime.tv_sec);    for( i = 0; i < CHAR_PARTYMAX; i ++) {    	CHAR_setWorkInt( meindex, CHAR_WORKPARTYINDEX1 + i, -1);    }		/* 伙□玄瑁烂允月 */{	int rev;	int r = CHAR_getWorkInt( meindex, NPC_WORK_ROUTEMAX);	CHAR_setWorkInt( meindex, NPC_WORK_CURRENTROUTE, RAND( 1, r));	//print( "route:%d\n",CHAR_getWorkInt( meindex, NPC_WORK_CURRENTROUTE));	/*   欠旦正□玄 */	rev = NPC_Util_GetNumFromStrWithDelim( argstr, "reverse");	if( rev == 1 ) {		int num = NPC_BusGetRoutePointNum( meindex, argstr);		if( num <= 0 ) {			print( "npcbus:真奇怪!\n");			return FALSE;		}		CHAR_setWorkInt( meindex, NPC_WORK_ROUTEPOINT, num-1);		CHAR_setWorkInt( meindex, NPC_WORK_ROUNDTRIP, 1);	}	/* 伙□玄毛本永玄允月 */	NPC_BusSetPoint( meindex, argstr);	/* 垫五燮毛  憎允月 */	NPC_BusSetDestPoint( meindex, argstr);}    return TRUE;}/**********************************   仄井仃日木凶凛及质  *********************************/void NPC_BusTalked( int meindex , int talkerindex , char *szMes ,                     int color ){    int i;    int	partyflg = FALSE;	    /* 皿伊奶乩□卞覆仄化分仃  杀允月 */    if( CHAR_getInt( talkerindex , CHAR_WHICHTYPE ) != CHAR_TYPEPLAYER ) {    	return;    }	/* 愤坌及由□  奴  昙菸  井升丹井譬屯月 */	for( i = 0; i < CHAR_PARTYMAX; i ++ ) {		int index = CHAR_getWorkInt( meindex, CHAR_WORKPARTYINDEX1+i);		if( CHAR_CHECKINDEX(index)){			if( index == talkerindex) {				partyflg = TRUE;			}		}	}	if( !partyflg ) {		//NPC_BusCheckJoinParty( meindex, talkerindex, TRUE);	}	else {		if( CHAR_getWorkInt( meindex, NPC_WORK_MODE) == 0 ) {			int i;	//		#define NPC_BUS_DEBUGROUTINTG	"routingtable:"			if( strstr( szMes, "出发" )  ||				strstr( szMes, "出发" )  ||				strstr( szMes, "Go" )  ||				strstr( szMes, "go" ))			{				CHAR_setWorkInt( meindex, NPC_WORK_MODE,1);								/* 伙□皿楮醒及裟请仄毛汹仁簧蘸卞允月 */	 			CHAR_setInt( meindex, CHAR_LOOPINTERVAL, NPC_BUS_LOOPTIME);				/* SE   日允  穴件乒旦及陲太   */				if( CHAR_getWorkInt( meindex, NPC_WORK_SEFLG )) {					CHAR_sendSEoArroundCharacter( 									CHAR_getInt( meindex, CHAR_FLOOR),									CHAR_getInt( meindex, CHAR_X),									CHAR_getInt( meindex, CHAR_Y),									60,									TRUE);				}				/* 请  允月凛及丢永本□斥*/				for( i = 1; i < CHAR_PARTYMAX; i ++ ) {					int partyindex = CHAR_getWorkInt( meindex, CHAR_WORKPARTYINDEX1+i);					if( CHAR_CHECKINDEX( partyindex)) {						NPC_BusSendMsg( meindex, partyindex, NPC_BUS_MSG_START);					}				}			}		}	}}/************************************** * 伙□皿楮醒 **************************************/void NPC_BusLoop( int meindex){	int	i;	switch( CHAR_getWorkInt( meindex, NPC_WORK_MODE )) {	  case 0:	    /* 谨切乒□玉及凛]凛棉毛民尼永弁允月 */		/* 凛棉互烦匀凶及匹]请  允月 */		if( CHAR_getWorkInt( meindex, NPC_WORK_CURRENTTIME) 			+ CHAR_getWorkInt( meindex, NPC_WORK_WAITTIME) 			< NowTime.tv_sec)		{			/* SE   日允  穴件乒旦及陲太   */			if( CHAR_getWorkInt( meindex, NPC_WORK_SEFLG )) {				CHAR_sendSEoArroundCharacter( 								CHAR_getInt( meindex, CHAR_FLOOR),								CHAR_getInt( meindex, CHAR_X),								CHAR_getInt( meindex, CHAR_Y),								60,								TRUE);			}			/* 请  允月凛及丢永本□斥*/			for( i = 1; i < CHAR_PARTYMAX; i ++ ) {				int partyindex = CHAR_getWorkInt( meindex, CHAR_WORKPARTYINDEX1+i);				if( CHAR_CHECKINDEX( partyindex)) {					NPC_BusSendMsg( meindex, partyindex, NPC_BUS_MSG_START);				}			}						CHAR_setWorkInt( meindex, NPC_WORK_MODE,1);			/* 伙□皿楮醒及裟请仄毛汹仁簧蘸卞允月 */			CHAR_setInt( meindex, CHAR_LOOPINTERVAL, NPC_BUS_LOOPTIME);		}		return;	  case 1:	  	/* 汹仁 */	  	NPC_Bus_walk( meindex);	  case 2:		/* 鞅引匀化中月乒□玉 */		/* 凛棉互烦匀凶及匹]请  允月 */		if( CHAR_getWorkInt( meindex, NPC_WORK_CURRENTTIME) 			+ (CHAR_getWorkInt( meindex, NPC_WORK_WAITTIME) /3)			< NowTime.tv_sec)		{			CHAR_setWorkInt( meindex, NPC_WORK_MODE,1);			/* 伙□皿楮醒及裟请仄毛汹仁簧蘸卞允月 */			CHAR_setInt( meindex, CHAR_LOOPINTERVAL, NPC_BUS_LOOPTIME);				}		return;	  case 3:		/* 谗邋仄化手]弁仿奶失件玄及  樟谨切及啃卞]		 * 剂仄仇仇匹它尼奶玄毛中木化支月		 */		if( CHAR_getWorkInt( meindex, NPC_WORK_CURRENTTIME) + 3			< NowTime.tv_sec)		{			char	argstr[NPC_UTIL_GETARGSTR_BUFSIZE - 1024 * 20];			NPC_Util_GetArgStr( meindex, argstr, sizeof( argstr));			/* 伙□皿楮醒及裟请仄毛赞仁允月 */			CHAR_setInt( meindex, CHAR_LOOPINTERVAL, 						NPC_BUS_WAITINGMODE_WAITTIME);						/* 伙□玄瑁烂允月 */			{				int r = CHAR_getWorkInt( meindex, NPC_WORK_ROUTEMAX);				CHAR_setWorkInt( meindex, NPC_WORK_CURRENTROUTE, RAND( 1, r));				//print( "route:%d\n",CHAR_getWorkInt( meindex, NPC_WORK_CURRENTROUTE));			}			/* 垫五窖曰白仿弘  凳 */			CHAR_setWorkInt( meindex, NPC_WORK_ROUNDTRIP, 							CHAR_getWorkInt( meindex, NPC_WORK_ROUNDTRIP)^1);			/* 戚禾奶件玄及譬濡 */			/* 窖曰反  溃质   */			if( CHAR_getWorkInt( meindex, NPC_WORK_ROUNDTRIP) == 1)  {				/* 公及伙□玄及  嫖禾奶件玄醒毛  月 */				int num = NPC_BusGetRoutePointNum( meindex, argstr);				CHAR_setWorkInt( meindex, NPC_WORK_ROUTEPOINT, num-1);			}			else {				CHAR_setWorkInt( meindex, NPC_WORK_ROUTEPOINT, 							CHAR_getWorkInt( meindex, NPC_WORK_ROUTEPOINT) +1);			}			/* 戚及禾奶件玄及甄  毛本永玄允月 */			NPC_BusSetPoint( meindex, argstr);			/* 垫五燮毛  憎允月 */			NPC_BusSetDestPoint( meindex, argstr);			/* 由□  奴  仃月质  毛允月 */			CHAR_DischargeParty( meindex, 0);		    /* 蜇箕及凛棉毛本永玄 */		    CHAR_setWorkInt( meindex, NPC_WORK_CURRENTTIME, NowTime.tv_sec);			/* 乒□玉弁伉失 */			CHAR_setWorkInt( meindex, NPC_WORK_MODE, 0);		}		return;	  default:	    break;	}}/************************************** * 汹仁[ **************************************/static void NPC_Bus_walk( int meindex){		POINT	start, end;	int dir;	int ret;	int i;	/* 汹仁楮溢 */	/* 谗邋仄凶凛及质   */	start.x = CHAR_getInt( meindex, CHAR_X);	start.y = CHAR_getInt( meindex, CHAR_Y);	end.x = CHAR_getWorkInt( meindex, NPC_WORK_ROUTETOX);	end.y = CHAR_getWorkInt( meindex, NPC_WORK_ROUTETOY);		/* 谗邋仄凶及匹戚及禾奶件玄卞 */	if( start.x == end.x && start.y == end.y ) {		int add = 1;		char	argstr[NPC_UTIL_GETARGSTR_BUFSIZE - 1024 * 20];		NPC_Util_GetArgStr( meindex, argstr, sizeof( argstr));		if( CHAR_getWorkInt( meindex, NPC_WORK_ROUNDTRIP ) == 1 ) {			add *= -1;		}		CHAR_setWorkInt( meindex, NPC_WORK_ROUTEPOINT, 						CHAR_getWorkInt( meindex, NPC_WORK_ROUTEPOINT) +add);		if( NPC_BusSetPoint( meindex, argstr) == FALSE ) {			/*     卞谗邋*/			/* 谨切乒□玉卞允月 */			CHAR_setWorkInt( meindex, NPC_WORK_MODE,3);						/* SE   日允  穴件乒旦及陲太   */			if( CHAR_getWorkInt( meindex, NPC_WORK_SEFLG )) {				CHAR_sendSEoArroundCharacter( 								CHAR_getInt( meindex, CHAR_FLOOR),								CHAR_getInt( meindex, CHAR_X),								CHAR_getInt( meindex, CHAR_Y),

⌨️ 快捷键说明

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