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

📄 npc_npcenemy.c

📁 石器时代2.0完整版源代码.已经加入新功能. 在REDHAT9下GCC3.4编译成功.
💻 C
📖 第 1 页 / 共 3 页
字号:
#include "version.h"#include <string.h>#include "char.h"#include "object.h"#include "char_base.h"#include "npcutil.h"#include "npc_npcenemy.h"#include "battle.h"#include "enemy.h"#include "readmap.h"#include "encount.h"#include "lssproto_serv.h"#include "configfile.h"#include "anim_tbl.h"#include "handletime.h"#include "npc_eventaction.h"enum {	CHAR_WORK_ENCOUNTTYPE	= CHAR_NPCWORKINT1,	/* 巨件市它件玄及酷   */	CHAR_WORK_DIEACT		= CHAR_NPCWORKINT2,	/* 韶氏分凛升丹允月井 */	CHAR_WORK_WARP_FLOOR	= CHAR_NPCWORKINT3,	/* 伐□皿允月白夫失*/	CHAR_WORK_WARP_X		= CHAR_NPCWORKINT4,	/* 伐□皿允月X */	CHAR_WORK_WARP_Y		= CHAR_NPCWORKINT5,	/* 伐□皿允月Y */	CHAR_WORK_ONEBATTLE 	= CHAR_NPCWORKINT6,	/* 域勾仄井爵  仄卅中 */	NPC_TIME_MODE			= CHAR_NPCWORKINT7, 	CHAR_WORK_BASEIMGBAK	= CHAR_NPCWORKINT8, /* 手午及  飓  寞 */	CHAR_WORK_DIETIME		= CHAR_NPCWORKINT9, /* 韶氏分凛棉 */	CHAR_WORK_REVIVALTIME	= CHAR_NPCWORKINT10, /* 戏五忒月凛棉 */	CHAR_WORK_BATTLETYPE	= CHAR_NPCWORKINT11,};#define		NPC_ENEMY_REVIVALTIMA_DEFAULT	120static int gymbody[] = {	SPR_001em,SPR_011em,SPR_021em,SPR_031em,SPR_041em,SPR_051em,	SPR_061em,SPR_071em,SPR_081em,SPR_091em,SPR_101em,SPR_111em,	SPR_002em,SPR_012em,SPR_022em,SPR_032em,SPR_042em,SPR_052em,	SPR_062em,SPR_072em,SPR_082em,SPR_092em,SPR_102em,SPR_112em,	SPR_003em,SPR_013em,SPR_023em,SPR_033em,SPR_043em,SPR_053em,	SPR_063em,SPR_073em,SPR_083em,SPR_093em,SPR_103em,SPR_113em,	SPR_004em,SPR_014em,SPR_024em,SPR_034em,SPR_044em,SPR_054em,	SPR_064em,SPR_074em,SPR_084em,SPR_094em,SPR_104em,SPR_114em,};#ifdef _NEW_WARPMANstatic BOOL NPC_NPCEnemy_CheckFree( int  meindex, int toindex, BOOL *Party);BOOL NPC_WarpAllMsg(int meindex,int toindex );BOOL NPCEnemy_CheckFree( int meindex, int talker, char *buf);BOOL NPCEnemy_BSCheck(int meindex,int talker,char* buf);BOOL NPCEnemy_FreeIfCheck(int meindex,int talker,char* buf,int kosuu,int flg, int temp);BOOL NPCEnemy_WarpManReduce(int meindex,int talker,char *buf);BOOL NPCEnemy_BigSmallLastCheck(int point1,int mypoint,int flg);BOOL NPCEnemy_CheckTrans(int meindex,int talker,int trans,int flg);BOOL NPCEnemy_LevelCheck(int meindex,int talker,int level,int flg);BOOL NPCEnemy_CheckMyPet( int meindex, int talker, int petLv, int flg, int petid);BOOL NPCEnemy_ItemCheck(int meindex,int talker,int itemNo,int flg);#endif#ifdef _NPC_REPLACEMENTvoid Check_EnemyWarpMe( int meindex, char *args );#endifstatic int NPC_NPCEnemy_StealItem( char *argstr, int meindex, int charaindex);BOOL NPC_NPCEnemyInit( int meindex ){	char	argstr[NPC_UTIL_GETARGSTR_BUFSIZE];	char	buf[64];	int		tmp, gym;	if( NPC_Util_GetArgStr( meindex, argstr, sizeof( argstr)) == NULL )	{		print("Can't GetArgStr !!");		return FALSE;	}	if( NPC_Util_GetStrFromStrWithDelim( argstr, "sktype", buf, sizeof( buf)) != NULL ){		CHAR_setWorkInt( meindex, CHAR_WORK_BATTLETYPE, atoi( buf));	}else{		CHAR_setWorkInt( meindex, CHAR_WORK_BATTLETYPE, 0);	}	if( NPC_Util_GetStrFromStrWithDelim( argstr, "enemyno", buf, sizeof( buf)) == NULL ){		char filename[256];		NPC_Util_CheckAssignArgFile( meindex, filename);		print( "NPCEnemy: nothing parameter [enemyno]:\n%s\n", filename);		return FALSE;	}else {		int		i;		for( i = 0; i < NPC_ENEMY_ENEMYNUMBER; i ++ ) {			int		curEnemy;			char	data[128];			int		ret;			ret = getStringFromIndexWithDelim( buf,",", i + 1, data, sizeof(data));			if( ret == FALSE)				break;			curEnemy = ENEMY_getEnemyArrayFromId( atoi( data));			if( !ENEMY_CHECKINDEX( curEnemy) ) {				char filename[256];				NPC_Util_CheckAssignArgFile( meindex, filename);				print( "NPCEnemy: invalid param [enemyno:%d data:%s curEnemy:%d]\nfile:%s\n",i+1, data, curEnemy, filename );				return FALSE;			}		}	}		if( NPC_Util_GetStrFromStrWithDelim( argstr, "steal", buf, sizeof( buf)) != NULL ) {		if( NPC_Util_GetStrFromStrWithDelim( argstr, "item", buf, sizeof( buf)) == NULL ) {			print( "NPCEnemy:有指定steal而没有指定item,很奇怪\n");			return FALSE;		}	}	gym = NPC_Util_GetNumFromStrWithDelim( argstr, "gym");	if( gym > 0 ){		CHAR_setInt( meindex, CHAR_BASEBASEIMAGENUMBER,			gymbody[RAND( 0, arraysizeof( gymbody ) - 1)] );		CHAR_setInt( meindex, CHAR_BASEIMAGENUMBER,			CHAR_getInt( meindex, CHAR_BASEBASEIMAGENUMBER ) );		CHAR_setInt( meindex, CHAR_LV, gym );	}	tmp = NPC_Util_GetNumFromStrWithDelim( argstr, "dieact");	if( tmp != 1 ) 		tmp = 0;	CHAR_setWorkInt( meindex, CHAR_WORK_DIEACT, tmp);	if( strstr( argstr, "NEWNPCENEMY") != 0 )	{		CHAR_setWorkInt( meindex, CHAR_WORK_WARP_FLOOR, 0 );		CHAR_setWorkInt( meindex, CHAR_WORK_WARP_Y, 0 );		CHAR_setWorkInt( meindex, CHAR_WORK_WARP_X, 0 );	}else	{		if( CHAR_getWorkInt( meindex, CHAR_WORK_DIEACT) == 1 ) {			char buff1[256];			if( NPC_Util_GetStrFromStrWithDelim( argstr, "warpfl", buff1, sizeof( buff1) ) == NULL) {				print( "NPCENEMY: nothing warp_floor %s\n", buff1);				return FALSE;			}			tmp = atoi( buff1);			CHAR_setWorkInt( meindex, CHAR_WORK_WARP_FLOOR, tmp);			if( NPC_Util_GetStrFromStrWithDelim( argstr, "warpx", buff1, sizeof( buff1) ) == NULL) {				print( "NPCENEMY: nothing warp_x\n");				return FALSE;			}			tmp = atoi( buff1);			CHAR_setWorkInt( meindex, CHAR_WORK_WARP_X, tmp);			if( NPC_Util_GetStrFromStrWithDelim( argstr, "warpy", buff1, sizeof( buff1) ) == NULL) {				print( "NPCENEMY: nothing warp_y\n");				return FALSE;			}			tmp = atoi( buff1);			CHAR_setWorkInt( meindex, CHAR_WORK_WARP_Y, tmp);			if( MAP_IsValidCoordinate( CHAR_getWorkInt( meindex, CHAR_WORK_WARP_FLOOR),								CHAR_getWorkInt( meindex, CHAR_WORK_WARP_X),								CHAR_getWorkInt( meindex, CHAR_WORK_WARP_Y) ) == FALSE ){				char filename[256];				NPC_Util_CheckAssignArgFile( meindex, filename);				print( "NPCENEMY: %s: .\n %s.\nInvalid fl=%d,x=%d,y=%d\n", filename, argstr,					CHAR_getWorkInt( meindex, CHAR_WORK_WARP_FLOOR),					CHAR_getWorkInt( meindex, CHAR_WORK_WARP_X),					CHAR_getWorkInt( meindex, CHAR_WORK_WARP_Y) );				return FALSE;			}		}	}	//andy_end	tmp = NPC_Util_GetNumFromStrWithDelim( argstr, "entype");	if( tmp != 1 && tmp != 2)		tmp = 0;	CHAR_setWorkInt( meindex, CHAR_WORK_ENCOUNTTYPE, tmp);	tmp = NPC_Util_GetNumFromStrWithDelim( argstr, "onebattle");	if( tmp != 1 )		tmp = 0;	CHAR_setWorkInt( meindex, CHAR_WORK_ONEBATTLE, tmp);	tmp = NPC_Util_GetNumFromStrWithDelim( argstr, "time");	if( tmp == -1 )		tmp = NPC_ENEMY_REVIVALTIMA_DEFAULT;	CHAR_setWorkInt( meindex, CHAR_WORK_REVIVALTIME, tmp);	CHAR_setInt( meindex , CHAR_WHICHTYPE , CHAR_TYPENPCENEMY );	CHAR_setWorkInt( meindex, CHAR_WORKEVENTTYPE, CHAR_EVENT_ENEMY);	CHAR_setWorkInt( meindex, CHAR_WORK_BASEIMGBAK,						CHAR_getInt( meindex, CHAR_BASEIMAGENUMBER));	return TRUE;}void NPC_NPCEnemyTalked( int meindex , int talkerindex , char *szMes ,					 int color ){	char	npcarg[NPC_UTIL_GETARGSTR_BUFSIZE];	char	buf[256];	if( CHAR_getInt( talkerindex , CHAR_WHICHTYPE ) != CHAR_TYPEPLAYER ) {		return;	}	if( NPC_Util_GetArgStr( meindex, npcarg, sizeof( npcarg)) == NULL )	{		print("Can't GetArgStr !!");		return;	}	if( NPC_Util_GetStrFromStrWithDelim( npcarg, "NEWTIME", buf, sizeof( buf)) != NULL ){		if( CHAR_getWorkInt( meindex, NPC_TIME_MODE) <= 0 )	{			if( NPC_Util_GetStrFromStrWithDelim( npcarg, "Time_Msg", buf, sizeof( buf) ) != NULL)	{				CHAR_talkToCli( talkerindex, meindex, buf, CHAR_COLORYELLOW);			}			return;		}	}	if( !NPC_Util_charIsInFrontOfChar( talkerindex, meindex, 1 ))		return; 	if( CHAR_getWorkInt( meindex, CHAR_WORK_ENCOUNTTYPE) >= 1 ) {		NPC_NPCEnemy_Encount( meindex, talkerindex, 1);	}}int NPC_NPCEnemy_Encount( int meindex, int charaindex, int mode){	char	argstr[NPC_UTIL_GETARGSTR_BUFSIZE];	char	buf[512];	BOOL	flg = TRUE;	int		battlemax = getBattlenum();	int		i;	if( CHAR_getInt( meindex, CHAR_BASEIMAGENUMBER) == 0 ) {		return FALSE;	}	if( mode == 0 ) {		if( CHAR_getWorkInt( meindex, CHAR_WORK_ENCOUNTTYPE) == 1 ) {			flg = FALSE;		}	}else if( mode == 1 ) {		if( CHAR_getWorkInt( meindex, CHAR_WORK_ENCOUNTTYPE) == 0 ) {			flg = FALSE;		}	}	NPC_Util_GetArgStr( meindex, argstr, sizeof( argstr));	if( !flg) {		if( NPC_Util_GetStrFromStrWithDelim( argstr, "deniedmsg", buf, sizeof( buf)) != NULL )	{			CHAR_talkToCliAndParty( charaindex, meindex ,buf , CHAR_COLORYELLOW );		}		return FALSE;	}	flg = FALSE;	while( 1 ) {		char	buf[1024];		if( NPC_Util_GetStrFromStrWithDelim( argstr, "item", buf, sizeof( buf)) != NULL ) {			char	data[128];			BOOL	found = FALSE;			for( i = 0; i < CHAR_MAXITEMHAVE; i ++ ) {				int		j;				int		itemid;				int ret = getStringFromIndexWithDelim( buf,",", i + 1,data, sizeof(data));				if( ret == FALSE)					break;				found = FALSE;				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 ) {							found = TRUE;							break;						}					}				}				if( !found )					break;			}			if( !found )				break;		}#ifdef _ADD_NOITEM_BATTLE		if(NPC_Util_GetStrFromStrWithDelim(argstr,"noitem",buf,sizeof(buf)) != NULL){			char data[128];			BOOL found = FALSE;			for(i=0;i<CHAR_MAXITEMHAVE;i++){				int j;				int itemid;				int ret = getStringFromIndexWithDelim(buf,",",i + 1,data,sizeof(data));				if(ret == FALSE) break;				found = TRUE;				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){							found = FALSE;							break;						}					}				}				if(!found) break;			}			if(!found) break;		}#endif		{			char data[256];			BOOL Evflg=TRUE;			if( NPC_Util_GetStrFromStrWithDelim( argstr, "B_evend", buf, sizeof( buf)) != NULL ) {				int i=1, event=-1;;				while( getStringFromIndexWithDelim( buf,",", i, data, sizeof( data)) ){					i++;					event=atoi( data);					if( NPC_EventCheckFlg( charaindex, event) == FALSE )	{						Evflg = FALSE;						break;					}				}			}			if( Evflg == FALSE )				break;			i=1;			if( NPC_Util_GetStrFromStrWithDelim( argstr, "B_evnow", buf, sizeof( buf)) != NULL ) {				int i=1, event=-1;;				while( getStringFromIndexWithDelim( buf,",", i, data, sizeof( data)) ){					i++;					event=atoi( data);					if( NPC_NowEventCheckFlg( charaindex, event) == FALSE )	{						Evflg = FALSE;						break;					}				}			}			if( Evflg == FALSE )				break;		}		if( CHAR_getWorkInt( meindex, CHAR_WORK_ONEBATTLE ) == 1 ) {			for( i = 0; i < battlemax; i ++ ) {				if( BattleArray[i].use ) {					if( BattleArray[i].createindex == meindex ) {						break;					}				}			}			if( i != battlemax ) {				if( NPC_Util_GetStrFromStrWithDelim( argstr, "alreadymsg", buf, sizeof( buf))!= NULL )				{					CHAR_talkToCliAndParty( charaindex, meindex ,buf , CHAR_COLORYELLOW );				}				return FALSE;			}		}		flg = TRUE;		break;	}	if( flg ) {		/* 阂及凛反  骰允月 */		if( CHAR_getWorkInt( charaindex, CHAR_WORKPARTYMODE) != CHAR_PARTY_CLIENT) {			char	config[32];			snprintf( config, sizeof( config), "askbattlemsg1");			/* 爵  互铵引月蟆卞撙  丢永本□斥 */									if( NPC_Util_GetStrFromStrWithDelim( argstr, config,  buf, sizeof( buf))!= NULL )			{				int	len = strlen( buf);				char	escapebuf[1024];

⌨️ 快捷键说明

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