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

📄 npc_newnpcman.c

📁 石器时代2.0完整版源代码.已经加入新功能. 在REDHAT9下GCC3.4编译成功.
💻 C
📖 第 1 页 / 共 3 页
字号:
#include "version.h"#include <string.h>#include <math.h>#include "char.h"#include "object.h"#include "char_base.h"#include "npcutil.h"#include "lssproto_serv.h"#include "enemy.h"#include "log.h"#include "battle.h"#include "readmap.h"#include "handletime.h"#include "npc_eventaction.h"#include "npc_newnpcman.h"#include "pet.h"#define NEWNPCMAN_STANDBY	5000#define NEWNPCMAN_WAITTIME	150enum {	WINDOW_START=1,	WINDOW_SELECT1,	WINDOW_SELECT2,	WINDOW_SELECT3,	WINDOW_SELECTLOSTPET,	WINDOW_DEFIND,	WINDOW_WARP,	WINDOW_END,	NPC_PROGRAMEGINEER_START=1,	NPC_PROGRAMEGINEER_SELECT1,	NPC_PROGRAMEGINEER_SELECT2,	NPC_PROGRAMEGINEER_SELECT3,	NPC_PROGRAMEGINEER_SELECTLOSTPET,	NPC_PROGRAMEGINEER_DEFIND,	NPC_PROGRAMEGINEER_END,};enum {	NPC_WORK_CURRENTTIME = 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,*/};/*char UserBBIs[12][256]={	"小矮子",	"赛亚人",	"辫子男孩",	"酷哥",			"熊皮男",	"大个",	"小矮妹",	"熊皮妹",	"帽子妹",	"短法发夹妹",	"手套女",	"辣妹" };char PetBBIs[4][256]={//格鲁西斯 贝鲁卡 金格萨贝鲁 贝鲁伊卡	"格鲁西斯-红虎",	"贝鲁卡-绿虎",	"金格萨贝鲁-金虎",	"贝鲁伊卡-黄虎" };int PlayerBBI[6*2][4]={		{ 100000, 100005, 100010, 100015 },	//小矮子		{ 100025, 100030, 100035, 100020 },	//赛亚人		{ 100055, 100050, 100045, 100040 },	//辫子男孩		{ 100060, 100065, 100070, 100075 },	//酷哥		{ 100095, 100085, 100090, 100080 },	//熊皮男		{ 100100, 100115, 100110, 100115 },	//大个		{ 100135, 100120, 100125, 100130 },	//小矮妹		{ 100145, 100140, 100150, 100155 },	//熊皮妹		{ 100165, 100170, 100160, 100175 },	//帽子妹		{ 100190, 100195, 100185, 100180 },	//短发发夹妹		{ 100200, 100210, 100215, 100205 },	//手套女		{ 100230, 100225, 100220, 100235 }	//辣妹	};*/static int checkPc[48][3];static void NPC_NewNpcMan_selectWindow( int meindex, int toindex, int num, int flg);void NPC_reCheckMyPetUnusual( int meindex, int toindex);//检查宠物异常BOOL CHECK_ReplacePET( int toindex); //更换宠物void NPC_reCheckItemPilenum( int meindex, int toindex);//还原铁枪三堆叠BOOL CHECK_ITEMEQUIT( int toindex);//更换灵力铠BOOL CHECK_PETBBI( int toindex);//修正宠物图号#ifdef _PET_LOSTPETBOOL NPC_reFindMyLostPet( int meindex, int toindex, char *buf);BOOL NPC_getLostPetString( int meindex, int toindex);BOOL NPC_backupLostPetString( int toindex);static char petstring[7][2048]={"","","","","","",""};#endifBOOL NPC_NewNpcManInit( int meindex ){	char npcarg[NPC_UTIL_GETARGSTR_BUFSIZE];			if(NPC_Util_GetArgStr( meindex, npcarg, sizeof(npcarg))==NULL){		print("TRANSER_MAN: GetArgStrErr!!");		return FALSE;	}	{		int i;		for( i=0; i<48; i++){			if( i == 0 ){				checkPc[i][0]=30000;				checkPc[i][1]=30024;				checkPc[i][2]=100000;			}else{				checkPc[i][0] = checkPc[i-1][0] + 25;				checkPc[i][1] = checkPc[i-1][1] + 25;				checkPc[i][2] = checkPc[i-1][2] + 5;			}//			print("ANDY checkPc:%d[%d,%d,%d]\n", i, checkPc[i][0], checkPc[i][1],	checkPc[i][2]);		}	}   	CHAR_setInt( meindex, CHAR_WHICHTYPE, CHAR_NEWNPCMAN);	CHAR_setWorkInt( meindex, NPC_WORK_CURRENTTIME, NowTime.tv_sec);	return TRUE;}void NPC_NewNpcManLoop( int meindex){}void NPC_NewNpcManTalked( int meindex , int talkerindex , char *msg , int color ){	char npcarg[NPC_UTIL_GETARGSTR_BUFSIZE];	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("TRANSER_MAN: GetArgStrErr!!");		return;	}	CHAR_setWorkInt( talkerindex, CHAR_WORKSHOPRELEVANT, 0);	if( CHAR_getInt( talkerindex, CHAR_BASEBASEIMAGENUMBER) != 101578 ){		NPC_NewNpcMan_selectWindow( meindex, talkerindex, WINDOW_SELECT1, 0);		return;	}	NPC_NewNpcMan_selectWindow( meindex, talkerindex, WINDOW_START, 0);}static void NPC_NewNpcMan_selectWindow( int meindex, int toindex, int num, int flg){	char npcarg[NPC_UTIL_GETARGSTR_BUFSIZE];	char token[256];	int buttontype = 0, windowtype = 0, windowno = 0;	int fd = getfdFromCharaIndex( toindex);	windowtype = WINDOW_MESSAGETYPE_MESSAGE;	if(NPC_Util_isFaceToFace( meindex ,toindex , 2) == FALSE) {		if(NPC_Util_isFaceToChara( toindex, meindex, 1) == FALSE)			return;	}	memset( npcarg, 0, sizeof( npcarg));	if(NPC_Util_GetArgStr( meindex, npcarg, sizeof(npcarg))==NULL){		return;	}	memset( token, 0, sizeof( token));	switch( num)	{	case WINDOW_START:		if( NPC_Util_GetStrFromStrWithDelim( npcarg, "START_MSG", token, sizeof( token) ) == NULL) {			return;		}		buttontype = WINDOW_BUTTONTYPE_YESNO;		windowno = NPC_PROGRAMEGINEER_DEFIND;		break;	case WINDOW_SELECT1:		sprintf(token,"              请选择"			      "\n             《修正宠物异常》"				  "\n             《修正宠物图号》"			      "\n              《更换灵力铠》"#ifdef _PET_LOSTPET				  "\n             《领回遗失宠物》"#endif//				  "\n            《还原铁枪三堆叠》"				  );		windowtype = WINDOW_MESSAGETYPE_SELECT;		buttontype = WINDOW_BUTTONTYPE_CANCEL;		windowno = NPC_PROGRAMEGINEER_SELECT2;		break;	case WINDOW_SELECT2:		switch( flg){		case 1://修正宠物异常			NPC_reCheckMyPetUnusual( meindex, toindex);			CHAR_talkToCli( toindex, -1, "身上宠物检查完毕!", CHAR_COLORYELLOW);			return;			break;		case 2://修正宠物图号			CHECK_PETBBI( toindex);			return;			break;		case 3://更换灵力铠			if( CHECK_ITEMEQUIT( toindex) == TRUE ){				CHAR_talkToCli( toindex, -1, "检查完毕!", CHAR_COLORYELLOW);			}			return;			break;		case 4:#ifdef _PET_LOSTPET			if( NPC_reFindMyLostPet( meindex, toindex, token) == FALSE ){				CHAR_talkToCli( toindex, -1, "查无资料!", CHAR_COLORYELLOW);				return;			}			windowtype = WINDOW_MESSAGETYPE_SELECT;			buttontype = WINDOW_BUTTONTYPE_CANCEL;			windowno = NPC_PROGRAMEGINEER_SELECTLOSTPET;#endif			break;		case 5: //还原铁枪三堆叠//			NPC_reCheckItemPilenum( meindex, toindex);			return;			break;		}		break;/*	case WINDOW_SELECT3:			{				int petnum, petindex;				petnum = atoi( data)-1;				if( petnum >= CHAR_MAXPETHAVE || petnum < 0 ) return;				petindex = CHAR_getCharPet( talker, petsel);				if( !CHAR_CHECKINDEX(petindex) ) return;				break;			}*/	case WINDOW_SELECTLOSTPET:#ifdef _PET_LOSTPET		{			int ret, i, ti, ltime, cost;			Char ch;			char msgbuf[256];			char petstring1[2048];			int havepetelement = CHAR_getCharPetElement( toindex);			ti = flg;			if( havepetelement < 0 ){				CHAR_talkToCli( toindex, -1, "宠物栏位已满!", CHAR_COLORYELLOW);				return;			}			if( NPC_getLostPetString( meindex, toindex) == FALSE ) {				CHAR_talkToCli( toindex, -1, "领取宠物失败!", CHAR_COLORYELLOW);				return;			}			if( getStringFromIndexWithDelim( petstring[ti-1], "#", 2, petstring1, sizeof( petstring1)) == FALSE ){				CHAR_talkToCli( toindex, -1, "领取宠物失败!", CHAR_COLORYELLOW);				return;				}else{				char buf1[256];				if( getStringFromIndexWithDelim( petstring[ti-1], "|", 6, buf1, sizeof( buf1)) == FALSE ) return;					ltime = atoi(buf1);					ltime = time( NULL) - ltime;					ltime = ltime/(60*60*24);				if( getStringFromIndexWithDelim( petstring[ti-1], "|", 4, buf1, sizeof( buf1)) == FALSE ) return;					cost = atoi( buf1);				cost = cost + (ltime*10000);				if( CHAR_getInt( toindex, CHAR_GOLD) < cost ) {					sprintf( buf1, "宠物已寄放%d天,共需%d石币才可领回。", ltime, cost);					CHAR_talkToCli( toindex, meindex, buf1, CHAR_COLORYELLOW);					return;					}			}			ret = CHAR_makePetFromStringToArg( petstring1, &ch, -2);			strcpy( petstring[ti-1], "");			if( ret ) {				char buf1[256];				int petindex = PET_initCharOneArray( &ch );				if( !CHAR_CHECKINDEX( petindex) ){					CHAR_talkToCli( toindex, -1, "领取宠物失败!", CHAR_COLORYELLOW);					return;				}				print("ANDY petindex:%d[%s]\n", petindex, CHAR_getChar( petindex, CHAR_NAME) );				CHAR_complianceParameter( petindex );				CHAR_setInt( petindex, CHAR_HP, CHAR_getWorkInt( petindex, CHAR_WORKMAXHP));				CHAR_setWorkInt( petindex, CHAR_WORKPLAYERINDEX, toindex);				CHAR_setCharPet( toindex, havepetelement, petindex);				CHAR_setChar( petindex, CHAR_OWNERCDKEY,							CHAR_getChar( toindex, CHAR_CDKEY));				CHAR_setChar( petindex, CHAR_OWNERCHARANAME,							CHAR_getChar( toindex, CHAR_NAME));				if( NPC_backupLostPetString( toindex) == FALSE ){					print("ANDY err backup petstring !!\n");					return;				}								sprintf( buf1, "LostPGet:%d", cost);				LogPet(					CHAR_getChar( toindex, CHAR_NAME ),					CHAR_getChar( toindex, CHAR_CDKEY ),					CHAR_getChar( petindex, CHAR_NAME),					CHAR_getInt( petindex, CHAR_LV),					buf1,					CHAR_getInt( toindex,CHAR_FLOOR),					CHAR_getInt( toindex,CHAR_X ),					CHAR_getInt( toindex,CHAR_Y ),					CHAR_getChar( petindex, CHAR_UNIQUECODE)   // shan 2001/12/14				);				sprintf( buf1, "领取宠物%s。", CHAR_getUseName( petindex));				CHAR_talkToCli( toindex, meindex, buf1, CHAR_COLORYELLOW);				for( i = 0; i < CHAR_MAXPETHAVE; i++){					int petindex = CHAR_getCharPet( toindex, i);					if( !CHAR_CHECKINDEX( petindex) )						continue;					CHAR_complianceParameter( petindex );					snprintf( msgbuf, sizeof( msgbuf ), "K%d", i );					CHAR_sendStatusString( toindex, msgbuf );					snprintf( msgbuf, sizeof( msgbuf ), "W%d", i );					CHAR_sendStatusString( toindex, msgbuf );				}				CHAR_DelGold( toindex, cost);			}else{					CHAR_talkToCli( toindex, -1, "领取宠物失败!", CHAR_COLORYELLOW);					return;			}			return; 		}#endif		return;		break;	case WINDOW_DEFIND:		{			int i;			int face = CHAR_getInt( toindex, CHAR_FACEIMAGENUMBER);			if( NPC_Util_GetStrFromStrWithDelim( npcarg, "CHECK_MSG", token, sizeof( token) ) == NULL) {				return;			}			for( i=0; i<48; i++){				if( face >= checkPc[i][0] && face < checkPc[i][1] )					break;			}			if( i >= 48 )return;			CHAR_setWorkInt( toindex, CHAR_WORKNPCMETAMO, meindex);			CHAR_setInt( toindex, CHAR_BASEIMAGENUMBER, checkPc[i][2]);			CHAR_complianceParameter( toindex );			CHAR_sendCToArroundCharacter( CHAR_getWorkInt( toindex , CHAR_WORKOBJINDEX ));			CHAR_send_P_StatusString( toindex , CHAR_P_STRING_BASEBASEIMAGENUMBER);			buttontype = WINDOW_BUTTONTYPE_YESNO;			windowno = NPC_PROGRAMEGINEER_END;		}		break;	case WINDOW_END:		{			CHAR_setWorkInt( toindex, CHAR_WORKNPCMETAMO, -1);			CHAR_setInt( toindex, CHAR_BASEBASEIMAGENUMBER,				CHAR_getInt( toindex, CHAR_BASEIMAGENUMBER) );			CHAR_complianceParameter( toindex );			CHAR_sendCToArroundCharacter( CHAR_getWorkInt( toindex , CHAR_WORKOBJINDEX ));			CHAR_send_P_StatusString( toindex , CHAR_P_STRING_BASEBASEIMAGENUMBER);			return;		}		break;	}	lssproto_WN_send( fd, windowtype, buttontype, windowno,		CHAR_getWorkInt( meindex, CHAR_WORKOBJINDEX), token);}void NPC_NewNpcManWindowTalked( int meindex, int talkerindex, int seqno, int select, char *data){	if(NPC_Util_isFaceToFace( meindex ,talkerindex , 2) == FALSE) {		if(NPC_Util_isFaceToChara( talkerindex, meindex, 1) == FALSE)			return;	}	if( select == WINDOW_BUTTONTYPE_CANCEL || select == WINDOW_BUTTONTYPE_NO){		CHAR_setWorkInt( talkerindex, CHAR_WORKSHOPRELEVANT, 0);		CHAR_setWorkInt( talkerindex, CHAR_WORKNPCMETAMO, -1);		return;	}	switch( seqno)	{	case NPC_TRANSERMAN_START:		break;	case NPC_PROGRAMEGINEER_SELECT1:		NPC_NewNpcMan_selectWindow( meindex, talkerindex, WINDOW_SELECT1, atoi( data));

⌨️ 快捷键说明

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