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

📄 npc_warpman.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 "saacproto_cli.h"#include "npc_warpman.h"#include "map_deal.h"#include "readmap.h"#include "battle.h"#include "npc_exchangeman.h"#include "log.h"#include "enemy.h"#include "handletime.h"#include "npc_eventaction.h"static void NPC_WarpMan_selectWindow( int meindex, int toindex, int num,int select);//ANDY_ENDBOOL NPC_GetDuelPointCheck(int meindex,int talker);BOOL NPC_PARTY_CHAECK( int meindex, int talkerindex);void NPC_ERR_DiSP(int meindex,int talker,int errNO);BOOL NPC_BigSmallLastCheck(int point1,int mypoint,int flg);//BOOL NPC_ItemCheck(int meindex,int talker,int itemNo,int flg);int NPC_FloorUse(int talker,int floor);BOOL NPC_WarpMsg(int meindex,int talker,char *buf);BOOL NPC_NpcWarpMsg(int meindex,int talker,char *arg);int NPC_FloorUseOtherFloor(int charaindex, char *buf);#define WARPMAN_STANDBY 3000#define WARPMAN_WAIT 150//ANDY_ADDint CheckWarpMsg( int meindex, int talkerindex,char *npcarg ,char *TalkStr);#ifdef _TREASURE_BOXBOOL NPC_TreasureEventRunMsg( int meindex);#endifBOOL NPC_TreasureRandItemGet(int meidex,int talker,int rand_j,char *buf);enum {	NPC_WORK_CURRENTTIME = CHAR_NPCWORKINT1,	NPC_TIME_BORN = CHAR_NPCWORKINT2,	NPC_TIME_DEAD = CHAR_NPCWORKINT3,	NPC_TIME_MODE = CHAR_NPCWORKINT4,	NPC_TIME_EVENTMODE = CHAR_NPCWORKINT6,// 1	NPC_TIME_EVENTTIME = CHAR_NPCWORKINT7,	NPC_TIME_EVENONBBI = CHAR_NPCWORKINT8,	NPC_TIME_EVENOFFDBBI = CHAR_NPCWORKINT9,	NPC_TIME_EVENTNUM = CHAR_NPCWORKINT10,};enum{	NPC_EVENTMODE_NONE,	NPC_EVENTMODE_OPEN,	NPC_EVENTMODE_EVENT,};#ifdef _NEW_WARPMANstatic void NPC_NewWarpMan_selectWindow( int meindex, int toindex, int num,int select,char *TalkStr);enum	{	WARP_MAN=0,	NEW_WARPMAN,	NEW_WARPMAN_END	};#endif#define TIMECHECKLOOP 20// Robin 0518//BOOL checkend = FALSE;BOOL NPC_WarpManInit( int meindex ){	char npcarg[NPC_UTIL_GETARGSTR_BUFSIZE - 1024 * 20];	char buff2[256];	char buf[1024];	int fl,x,y;			if(NPC_Util_GetArgStr( meindex, npcarg, sizeof(npcarg))==NULL){		print("WarpMan:GetArgStrErr");		return FALSE;	}   	CHAR_setInt( meindex , CHAR_WHICHTYPE , CHAR_TYPEWARPMAN );#ifdef _NEW_WARPMAN	if( strstr( npcarg,"NEWWARPMAN") )      {			//timeman 功能			CHAR_setWorkInt( meindex, NPC_TIME_MODE, 1);			if(NPC_Util_GetStrFromStrWithDelim( npcarg, "NEWTIME", buff2, sizeof( buff2)) != NULL ){				CHAR_setInt( meindex, CHAR_LOOPINTERVAL, 60*1000);			}#ifdef _TREASURE_BOX			CHAR_setWorkInt( meindex, NPC_TIME_EVENTMODE, NPC_EVENTMODE_NONE);			if(NPC_Util_GetStrFromStrWithDelim( npcarg, "TREASURE_BOX", buff2, sizeof( buff2)) != NULL ){				if( strstr( buff2, "ON") != NULL ){					CHAR_setWorkInt( meindex, NPC_TIME_EVENTMODE, NPC_EVENTMODE_EVENT);					CHAR_setWorkInt( meindex, NPC_TIME_EVENTTIME, NowTime.tv_sec);					if(NPC_Util_GetStrFromStrWithDelim( npcarg, "TREASURE_ONBBI", buff2, sizeof( buff2)) != NULL )						CHAR_setWorkInt( meindex, NPC_TIME_EVENONBBI, atoi( buff2));					if(NPC_Util_GetStrFromStrWithDelim( npcarg, "TREASURE_OFFDBBI", buff2, sizeof( buff2)) != NULL )						CHAR_setWorkInt( meindex, NPC_TIME_EVENOFFDBBI, atoi( buff2));					CHAR_setWorkInt( meindex, NPC_TIME_EVENTNUM, 0 );				}			}#endif			return TRUE;	}else{#endif		if(NPC_Util_GetStrFromStrWithDelim( npcarg, "WARP", buf, sizeof( buf))==NULL){			char filename[256];			 if( NPC_Util_CheckAssignArgFile( meindex, filename) != NULL )				 print("\n Warpman Err -> file:%s", filename);			return FALSE;		}		getStringFromIndexWithDelim(buf,",",1,buff2,sizeof(buff2));		fl=atoi(buff2);		getStringFromIndexWithDelim(buf,",",2,buff2,sizeof(buff2));		x=atoi(buff2);		getStringFromIndexWithDelim(buf,",",3,buff2,sizeof(buff2));		y=atoi(buff2);		if( MAP_IsValidCoordinate( fl,x,y )== FALSE ){			char filename[256];			NPC_Util_CheckAssignArgFile( meindex, filename);			print( "\nWarp NPC: filename:%s\n 3.Invalid warpman ERR %d %d %d" , filename, fl , x , y );			return FALSE;		}#ifdef _NEW_WARPMAN	}#endif	return TRUE;}void NPC_WarpManTalked( int meindex , int talkerindex , char *szMes ,int color ){	char npcarg[NPC_UTIL_GETARGSTR_BUFSIZE - 1024 * 20];	char token[256];	int RunType=-1;		CHAR_setWorkInt( talkerindex, CHAR_WORKWARPCHECK, FALSE );	if( CHAR_getInt( talkerindex , CHAR_WHICHTYPE ) != CHAR_TYPEPLAYER ) {		return;	}	if(NPC_Util_isFaceToFace( meindex ,talkerindex ,2)==FALSE){		if(NPC_Util_isFaceToChara(talkerindex,meindex,1 )==FALSE) return;	}	if(NPC_Util_GetArgStr( meindex, npcarg, sizeof(npcarg))==NULL){		print("GetArgStrErr");		return ;	}#ifdef _NEW_WARPMAN	if( strstr( npcarg,"NEWWARPMAN") )      {#ifdef _TREASURE_BOX		if( CHAR_getWorkInt( meindex, NPC_TIME_EVENTMODE) == NPC_EVENTMODE_OPEN )			return;#endif		NPC_NewWarpMan_selectWindow( meindex ,talkerindex, 0, -1, szMes);		return;	}else	{		if(NPC_PARTY_CHAECK( meindex, talkerindex) == FALSE)	{//有组队			NPC_ERR_DiSP( meindex, talkerindex, 1);			return;		}						RunType = CheckWarpMsg( meindex, talkerindex, npcarg , szMes);		if( RunType !=0 )	{			if( RunType == 1 )	{				if( NPC_Util_GetStrFromStrWithDelim( npcarg, "nomal_msg", token, sizeof(token)) != NULL)	{					CHAR_talkToCli( talkerindex, meindex,token,CHAR_COLORWHITE);				}			}			return;		}	}#else			if(NPC_PARTY_CHAECK( meindex, talkerindex) == FALSE)	{//有组队		NPC_ERR_DiSP( meindex, talkerindex, 1);		return;	}	RunType = CheckWarpMsg( meindex, talkerindex, npcarg , szMes);	if( RunType !=0 )	{		if( RunType == 1 )	{			if( NPC_Util_GetStrFromStrWithDelim( npcarg, "nomal_msg", token, sizeof(token)) != NULL)	{				CHAR_talkToCli( talkerindex, meindex,token,CHAR_COLORWHITE);			}		}		return;	}#endif		CHAR_setWorkInt( talkerindex, CHAR_WORKSHOPRELEVANT, 0);	CHAR_setWorkInt( talkerindex , CHAR_WORKSHOPRELEVANTTRD , 0 );	if(strstr(npcarg,"DR")!=NULL)	{		CHAR_setWorkInt( talkerindex , CHAR_WORKSHOPRELEVANTSEC , -1 );		if(NPC_GetDuelPointCheck(meindex,talkerindex)==FALSE)	return;	}else{		NPC_WarpMan_selectWindow( meindex, talkerindex,0,-1);	}}static void NPC_WarpMan_selectWindow( int meindex, int toindex, int num,int select){		char npcarg[NPC_UTIL_GETARGSTR_BUFSIZE - 1024 * 20];	char token[1024];	char buf[256];	char buf2[1024];	char buf3[256];	int fl=0	;	int money=100	;	int fd = getfdFromCharaIndex( toindex);	char tmp[64];	if(NPC_Util_GetArgStr( meindex, npcarg, sizeof(npcarg))==NULL){		print("GetArgStrErr");		CHAR_setWorkInt( toindex, CHAR_WORKSHOPRELEVANT, 0);		return ;	}        if(NPC_PARTY_CHAECK( meindex, toindex) == FALSE)	{		    NPC_ERR_DiSP( meindex, toindex, 1);		    return;		}	if( CHAR_getWorkInt( toindex, CHAR_WORKSHOPRELEVANT) != 0 )	{		return;	}else	{		CHAR_setWorkInt( toindex, CHAR_WORKSHOPRELEVANT, 1);	}	if(strstr(npcarg,"%4d")!=NULL){		int flwork = 0;		int work;		NPC_Util_GetStrFromStrWithDelim( npcarg, "WARP", buf, sizeof( buf));		getStringFromIndexWithDelim(buf,",",1,buf3,sizeof(buf3));		work = atoi( buf3);		fl = NPC_FloorUse( toindex, atoi(buf3));				if(NPC_Util_GetStrFromStrWithDelim( npcarg, "Floor", buf3, sizeof( buf3)) != NULL){			flwork = NPC_FloorUseOtherFloor(work, buf3);		}		fl = fl +flwork;	}	NPC_Util_GetStrFromStrWithDelim( npcarg, "FREE", buf, sizeof( buf));	if( (NPC_ActionPassCheck(meindex,toindex,buf)==TRUE) || (strstr(buf,"ALLFREE")!=NULL) ){		if(NPC_Util_GetStrFromStrWithDelim( npcarg, "FreeMsg", buf2, sizeof( buf2))==NULL) return;		      CONNECT_set_pass(fd,TRUE);		      CONNECT_set_first_warp(fd,TRUE);		if(strstr(buf2,"%4d") != NULL){			sprintf(token,buf2,fl);		}else{			strcpy(token,buf2);		}		CHAR_setWorkInt( toindex , CHAR_WORKSHOPRELEVANTTRD , -1 );		CHAR_setWorkInt( toindex, CHAR_WORKSHOPRELEVANT, 2);	}else	{		if(NPC_Util_GetStrFromStrWithDelim( npcarg, "PayMsg", buf2, sizeof( buf2)) != NULL){		       CONNECT_set_pass(fd,FALSE);		       CONNECT_set_first_warp(fd,FALSE);			if(strstr(buf2,"%8d") != NULL){				NPC_Util_GetStrFromStrWithDelim( npcarg, "MONEY", tmp, sizeof( tmp));				if(strstr(tmp,"LV")!=NULL){					int level;					char buff2[32];											level = CHAR_getInt(toindex,CHAR_LV);					getStringFromIndexWithDelim(tmp,"*",2,buff2,sizeof(buff2));					money = level*atoi(buff2);				}else{					money=atoi(tmp);				}				if(strstr(buf2,"%4d") != NULL){					sprintf(token,buf2,fl,money);				}else{					sprintf(token,buf2,money);				}			}else if(strstr(buf2,"%4d") != NULL){				sprintf(token,buf2,fl);				NPC_Util_GetStrFromStrWithDelim( npcarg, "MONEY", tmp, sizeof( tmp));				if( strstr( tmp,"-" ) != NULL){					money=10000001;					lssproto_WN_send( fd, WINDOW_MESSAGETYPE_MESSAGE,								WINDOW_BUTTONTYPE_OK,								CHAR_WINDOWTYPE_WINDOWWARPMAN_MAIN, 								CHAR_getWorkInt( meindex, CHAR_WORKOBJINDEX),								token);					return ;				}			}else{				strcpy(token,buf2);				NPC_Util_GetStrFromStrWithDelim( npcarg, "MONEY", tmp, sizeof( tmp));				if( strstr( tmp,"-" ) != NULL){					money=10000001;					lssproto_WN_send( fd, WINDOW_MESSAGETYPE_MESSAGE,								WINDOW_BUTTONTYPE_OK,								CHAR_WINDOWTYPE_WINDOWWARPMAN_MAIN, 								CHAR_getWorkInt( meindex, CHAR_WORKOBJINDEX),								token);					return ;				}else{					money = atoi(tmp);				}			}			if(CHAR_getInt(toindex,CHAR_FLOOR)==117){			   money=CHAR_getInt(toindex,CHAR_GOLD);			   if (money>=10) money*=0.9; 			   else if( money == 0 ) {				   CHAR_warpToSpecificPoint(toindex,117,225,13);				   return;			   }			}			CHAR_setWorkInt( toindex , CHAR_WORKSHOPRELEVANTTRD , money );			CONNECT_set_pass(fd,TRUE);			CONNECT_set_first_warp(fd,TRUE);				}else if(NPC_Util_GetStrFromStrWithDelim( npcarg, "NomalMsg", token,sizeof(token)) !=NULL){			CHAR_setWorkInt( toindex , CHAR_WORKSHOPRELEVANTTRD , -2 );			CHAR_setWorkInt( toindex, CHAR_WORKSHOPRELEVANT, -1);			lssproto_WN_send( fd, WINDOW_MESSAGETYPE_MESSAGE,								WINDOW_BUTTONTYPE_OK,								CHAR_WINDOWTYPE_WINDOWWARPMAN_MAIN, 								CHAR_getWorkInt( meindex, CHAR_WORKOBJINDEX),								token);		}	}	lssproto_WN_send( fd, WINDOW_MESSAGETYPE_MESSAGE,						WINDOW_BUTTONTYPE_YESNO,						CHAR_WINDOWTYPE_WINDOWWARPMAN_MAIN, 						CHAR_getWorkInt( meindex, CHAR_WORKOBJINDEX),						token);}void NPC_WarpManWindowTalked( int meindex, int talkerindex, 								int seqno, int select, char *data){	char npcarg[NPC_UTIL_GETARGSTR_BUFSIZE - 1024 * 20];	char buf[NPC_UTIL_GETARGSTR_BUFSIZE - 1024 * 20];#ifdef _NEW_WARPMAN	BOOL checkp=TRUE;	char buf1[1024];	int talkNo = 1;	BOOL tenflg=FALSE;#else	int fl,x,y;#endif	char buff2[256];	int fd = getfdFromCharaIndex( talkerindex );	if( NPC_Util_CharDistance( talkerindex, meindex ) > 2)		return;	if(NPC_Util_GetArgStr( meindex, npcarg, sizeof(npcarg))==NULL){		print("GetArgStrErr");		return ;	}	if( CHAR_getWorkInt( talkerindex, CHAR_WORKSHOPRELEVANT) < 1 )	{		CHAR_setWorkInt( talkerindex, CHAR_WORKSHOPRELEVANT, -1);		return;	}#ifdef _NEW_WARPMAN	if( seqno == NEW_WARPMAN )    {		int eqnum=0;		eqnum = CHAR_getWorkInt( talkerindex, CHAR_WORKSHOPRELEVANT);		sprintf(buf1,"%s", "NOFREE");		if( eqnum >= 0 )	{			sprintf(buf1,"TALKEVENT%d", eqnum);		}		CHAR_setWorkInt( talkerindex, CHAR_WORKSHOPRELEVANT, 0);		while( getStringFromIndexWithDelim( npcarg,"OVER",talkNo,buf,sizeof( buf)) != FALSE){			if( strstr(buf, buf1) != NULL)	{				strcpy( npcarg , buf);				tenflg = TRUE;				break;			}			talkNo++;		}		if( tenflg == FALSE )	{			CHAR_setWorkInt( talkerindex, CHAR_WORKSHOPRELEVANT, -1);			return;		}	}else {#endif    		if( select != WINDOW_BUTTONTYPE_YES )	{			CHAR_setWorkInt( talkerindex, CHAR_WORKSHOPRELEVANT, -1);			return;		}		    if(NPC_PARTY_CHAECK( meindex, talkerindex) == FALSE){			    NPC_ERR_DiSP( meindex, talkerindex, 1);			    return;			}#ifdef _NEW_WARPMAN		}#else	NPC_Util_GetStrFromStrWithDelim( npcarg, "WARP", buf, sizeof( buf));	GetRand_WarpPoint( buf, &fl, &x, &y );#endif#ifdef _NEW_WARPMAN	  switch( seqno)	{  case WARP_MAN:	if( select != WINDOW_BUTTONTYPE_YES )		return;	    if( NPC_PARTY_CHAECK( meindex, talkerindex) == FALSE ){		    NPC_ERR_DiSP( meindex, talkerindex, 1);		    return;		}		#else	if( select != WINDOW_BUTTONTYPE_YES) return;	    if( NPC_PARTY_CHAECK( meindex, talkerindex) == FALSE)		    return;#endif#ifdef _NEW_WARPMAN  break;  case NEW_WARPMAN:		if( select != WINDOW_BUTTONTYPE_YES ){			CHAR_setWorkInt( talkerindex, CHAR_WORKSHOPRELEVANT, -1);			if( NPC_Util_GetStrFromStrWithDelim( npcarg, "CancelMsg", buff2, sizeof( buff2) ) != NULL)	{				CHAR_talkToCli( talkerindex, meindex, buff2, CHAR_COLORYELLOW);			}			return;		}	  checkp=TRUE;	  if( NPC_Util_GetStrFromStrWithDelim( npcarg, "CHECKPARTY", buff2, sizeof( buff2) ) != NULL)	{		  if( strstr( buff2, "FALSE") != NULL )	{			checkp = FALSE;		}	  }	  if( checkp==TRUE && NPC_PARTY_CHAECK( meindex, talkerindex) == FALSE )	{		      NPC_ERR_DiSP( meindex, talkerindex, 1);		      CHAR_setWorkInt( talkerindex, CHAR_WORKSHOPRELEVANT, -1);		      return;	  }		  break;  case NEW_WARPMAN_END:	  return;  break;  }#endif	if( Action_RunDoEventAction( meindex, talkerindex, npcarg) == FALSE ){		CHAR_setWorkInt( talkerindex, CHAR_WORKSHOPRELEVANT, -1);		return;	}		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( CHAR_getWorkInt( CONNECT_getCharaindex(fd), CHAR_WORKBATTLEMODE) != BATTLE_CHARMODE_NONE){	            return ;		}		if(CHAR_getWorkInt( talkerindex , CHAR_WORKSHOPRELEVANTTRD) <= 0){				CHAR_setWorkInt( talkerindex, CHAR_WORKWARPCHECK, FALSE );#ifdef _NEW_WARPMAN					NPC_WarpMsg( meindex, talkerindex, npcarg);#else				if( fl == 0 && x == 0 && y == 0 )		{				}else	{					CHAR_warpToSpecificPoint(talkerindex, fl, x,y);				}#endif		}else	{			if(CHAR_getInt(talkerindex,CHAR_GOLD) <	                  CHAR_getWorkInt(talkerindex,CHAR_WORKSHOPRELEVANTTRD)){				NPC_ERR_DiSP( meindex, talkerindex, 2);				return ;			}			CHAR_DelGold( talkerindex, CHAR_getWorkInt(talkerindex,CHAR_WORKSHOPRELEVANTTRD ));				CHAR_setWorkInt( talkerindex, CHAR_WORKWARPCHECK, FALSE );#ifdef _NEW_WARPMAN					NPC_WarpMsg( meindex, talkerindex, npcarg);#else				if( fl == 0 && x == 0 && y == 0 )		{				}else	{                        CHAR_warpToSpecificPoint(talkerindex, fl, x,y);				}#endif		}#ifdef _NEW_WARPMAN		NPC_NpcWarpMsg( meindex, talkerindex, npcarg);#else	}#endif}BOOL NPC_BigSmallLastCheck(int point1,int mypoint,int flg){	if(flg==0){		if(point1==mypoint) {			return TRUE;		}			}else if(flg==1){		if(mypoint < point1) {			return TRUE;		}		

⌨️ 快捷键说明

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