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

📄 npc_petshop.c.bak

📁 石器时代2.0完整版源代码.已经加入新功能. 在REDHAT9下GCC3.4编译成功.
💻 BAK
📖 第 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 "pet_skill.h"#include "readmap.h"#include "battle.h"#include "log.h"/* 丢永本□斥及enum */enum {	NPC_PETSHOP_MSG_OVER,	NPC_PETSHOP_MSG_MAIN,	NPC_PETSHOP_MSG_REALY,	NPC_PETSHOP_MSG_THANKS,	NPC_PETSHOP_MSG_COST,	NPC_PETSHOP_MSG_POOLTHANKS,	NPC_PETSHOP_MSG_POOLFULL,	NPC_PETSHOP_MSG_GETFULL,};typedef struct {	char	option[32];	char	defaultmsg[128];}NPC_PETSHOP_MSG;NPC_PETSHOP_MSG		shopmsg[] = {	{ "over_msg",		"钱用完罗!没问题吗?"},	{ "main_msg",		"欢迎"},	{ "realy_msg",		"真的可以吗?"},	{ "thanks_msg",		"谢谢!"},	{ "cost_msg",		"钱不够喔!"},	{ "pooltanks_msg",	"谢谢!"},	{ "poolfull_msg",	"超过的无法处理喔"},	{ "getfull_msg",	"你不是有很多宠物吗"}	};#define PETCOST	10void NPC_PetDate(int meindex,int toindex,int select,char *token);void NPC_PetDate2(int meindex,int talker,int select,char *token);void NPC_PetDate3(int meindex,int talker,int select,char *token);void NPC_PetDel2( int meindex, int talker, int select, char *token);void NPC_PetDel3( int meindex, int talker, int select, char *token);void NPC_getDrawPet( int meindex, int toindex, char *token, int *buttontype, int select);static void NPC_PetShop_selectWindow( int meindex, int toindex, int num,int select);int NPC_GetCost(int meindex,int talker,int petindex);void NPC_PetDel(int meindex, int toindex,int select,char* token);void NPC_MaxGoldOver(int meindex,int toindex,int select,char *token);void NPC_DepotPet_CheckRepeat_del( int charaindex, int petindex);//   仃  木嗯喊煌遥挚#define		NPC_GETPOOLCOST( talker)		( 50 + CHAR_getInt( talker, CHAR_LV)*4)//   仃  木嗯犯白巧伙玄#define		NPC_PETSHOP_POOLCOST_DEFAULT	200/*--伐□弁    及割忡--*/enum {	CHAR_WORK_NOMALRATE	= CHAR_NPCWORKINT1,	CHAR_WORK_SPECIALRATE	= CHAR_NPCWORKINT2,	CHAR_WORK_POOLCOST	= CHAR_NPCWORKINT3,	CHAR_WORK_POOLFLG	= CHAR_NPCWORKINT4,};/********************************** 赓渝质  *********************************/BOOL NPC_PetShopInit( int meindex ){	char npcarg[NPC_UTIL_GETARGSTR_BUFSIZE - 1024 * 20];	char buf[256];	double rate;	int intrate;//	int cost;	int tmp;	/*--正奶皿涩烂--*/   	CHAR_setInt( meindex , CHAR_WHICHTYPE , CHAR_TYPESTONESHOP );	if( NPC_Util_GetArgStr( meindex, npcarg, sizeof( npcarg)) == NULL){		print("GetArgStrErr");		return FALSE;	}	/*--伊□玄毛铵户卞筏盛今六化云仁*/	if( NPC_Util_GetStrFromStrWithDelim( npcarg, "nomal_rate", buf, sizeof( buf)) != NULL){		rate = atof( buf);				intrate = ( int)( rate *1000);		   		CHAR_setWorkInt( meindex , CHAR_WORK_NOMALRATE ,intrate );	}else{		CHAR_setWorkInt( meindex , CHAR_WORK_NOMALRATE ,1000 );	}			/*--旦矢扑乓伙伊□玄手筏盛今六化云仁--*/	if(NPC_Util_GetStrFromStrWithDelim( npcarg, "special_rate", buf, sizeof( buf))!=NULL)	{		rate = atof( buf);				intrate = ( int)( rate *1000);		   		CHAR_setWorkInt( meindex , CHAR_WORK_SPECIALRATE ,intrate );	}else{		CHAR_setWorkInt( meindex , CHAR_WORK_SPECIALRATE ,1200 );	}		//   仃  木嗯筏盛	//cost = NPC_Util_GetNumFromStrWithDelim( npcarg, "pool_cost");	//if( cost == -1 ) cost = NPC_PETSHOP_POOLCOST_DEFAULT;	//CHAR_setWorkInt( meindex, CHAR_WORK_POOLCOST, cost);			//   仃  木互请  月井升丹井毛筏盛	tmp = NPC_Util_GetNumFromStrWithDelim( npcarg, "pool_flg");	if( tmp != 1 ) tmp = 0;	CHAR_setWorkInt( meindex, CHAR_WORK_POOLFLG, tmp);        return TRUE;}/**********************************   仄井仃日木凶凛及质  *********************************/void NPC_PetShopTalked( int meindex , int talkerindex , char *szMes ,int color ){    /* 皿伊奶乩□卞覆仄化分仃  杀允月 */    if( CHAR_getInt( talkerindex , CHAR_WHICHTYPE ) != CHAR_TYPEPLAYER ) {    	return;    }		/*--  及蟆卞中月井升丹井"--*/	if(NPC_Util_isFaceToFace(talkerindex,meindex,2 )==FALSE){		/* ㄠ弘伉永玉动  及心 */		if( NPC_Util_CharDistance( talkerindex, meindex ) > 1) return;	}	/*--伐□弁及赓渝祭--*/	CHAR_setWorkInt(talkerindex,CHAR_WORKSHOPRELEVANT,0);	/*-反元户及蓟      --*/	NPC_PetShop_selectWindow( meindex, talkerindex,0,-1);}/********************************** 苇日木凶凛及质  *********************************/void NPC_PetShopLooked( int meindex , int lookedindex){    /* 皿伊奶乩□卞覆仄化分仃  杀允月 */    if( CHAR_getInt( lookedindex , CHAR_WHICHTYPE ) != CHAR_TYPEPLAYER ) {    	return;    }	/* ㄠ弘伉永玉动  及心 */	if( NPC_Util_CharDistance( lookedindex, meindex ) > 2) return;	/*--伐□弁及赓渝祭--*///	CHAR_setWorkInt(lookedindex,CHAR_WORKSHOPRELEVANT,0);//	NPC_PetShop_selectWindow( meindex, lookedindex,0,-1);}static void NPC_PetShop_selectWindow( int meindex, int toindex, int num,int select){	char token[1024];	int buttontype=0,windowtype=0,windowno=0;	char buf[256];	int fd = getfdFromCharaIndex( toindex);		//print("\n NPC_PetShop_selectWindow num:%d select:%d  ", num, select);	if( fd == -1 ) {		fprint( "getfd err\n");		return;	}	token[0] = '\0';	switch(num){      //   赓及它奴件玉它	  case 0:		NPC_MaxGoldOver( meindex, toindex, NPC_PETSHOP_MSG_MAIN, buf);				if( !CHAR_getWorkInt( meindex, CHAR_WORK_POOLFLG)) {			sprintf(token, "4\n      ☆宠物商店☆"							"%s"							"\n"							"\n       《 卖宠物 》"							"\n"							"\n             《 离开 》",							buf);		}else {			sprintf(token, "4\n      ☆宠物商店☆"							"%s"							"\n            《 寄放宠物 》"							"\n            《 领取宠物 》"							"\n       《 卖宠物 》"							"\n              《 离开 》",							buf);		}		buttontype=WINDOW_BUTTONTYPE_NONE;		windowtype=WINDOW_MESSAGETYPE_SELECT;		windowno=CHAR_WINDOWTYPE_WINDOWPETSHOP_START; 		break;	  case 1:	  buttontype=WINDOW_BUTTONTYPE_CANCEL;	  windowtype=WINDOW_MESSAGETYPE_PETSELECT;		windowno=CHAR_WINDOWTYPE_WINDOWPETSHOP_PETSELECT; 		break;	  case 2:		NPC_PetDate(meindex,toindex,select,token);		buttontype=WINDOW_BUTTONTYPE_YESNO;	  	windowtype=WINDOW_MESSAGETYPE_MESSAGE;		windowno=CHAR_WINDOWTYPE_WINDOWPETSHOP_MAIN; 		break;	  case 3:		if( (CHAR_getInt(toindex,CHAR_GOLD)+CHAR_getWorkInt(toindex,CHAR_WORKSHOPRELEVANTSEC))			> CHAR_getMaxHaveGold( toindex) ){			NPC_MaxGoldOver( meindex, toindex, NPC_PETSHOP_MSG_OVER, token);			windowno=CHAR_WINDOWTYPE_WINDOWPETSHOP_GOLDOVER; 			buttontype=WINDOW_BUTTONTYPE_YESNO;		}else{			NPC_PetDel(meindex,toindex,select,token);			buttontype=WINDOW_BUTTONTYPE_OK;			windowno=CHAR_WINDOWTYPE_WINDOWPETSHOP_END; 		}	  	windowtype=WINDOW_MESSAGETYPE_MESSAGE;		break;	  case 4:	 	NPC_PetDel(meindex,toindex,select,token);		buttontype=WINDOW_BUTTONTYPE_OK;		windowno=CHAR_WINDOWTYPE_WINDOWPETSHOP_END; 		windowtype=WINDOW_MESSAGETYPE_MESSAGE;		break;	  case 5: // 领取寄放宠列表	  	if( CHAR_getWorkInt( meindex, CHAR_WORK_POOLFLG ) != 1 )	  		return;	  	buttontype=WINDOW_BUTTONTYPE_CANCEL;	  	windowtype=WINDOW_MESSAGETYPE_PETSELECT;		windowno=CHAR_WINDOWTYPE_WINDOWPETSHOP_PETSELECT2; 		break;	  case 6:		if( CHAR_getInt( toindex, CHAR_GOLD) 			< NPC_GETPOOLCOST( toindex)) 		{		  	NPC_MaxGoldOver(meindex, toindex, NPC_PETSHOP_MSG_COST, token);			buttontype = WINDOW_BUTTONTYPE_OK;		}		else {			NPC_PetDate2( meindex, toindex, select, token);			buttontype = WINDOW_BUTTONTYPE_YESNO;		}	  	windowtype = WINDOW_MESSAGETYPE_MESSAGE;		windowno = CHAR_WINDOWTYPE_WINDOWPETSHOP_MAIN2; 	    break;	  	  case 7:	  	if( CHAR_getWorkInt( meindex, CHAR_WORK_POOLFLG ) != 1 )	  		return;	    		if( CHAR_getInt( toindex, CHAR_GOLD) < NPC_GETPOOLCOST( toindex)){		  	NPC_MaxGoldOver(meindex, toindex, NPC_PETSHOP_MSG_COST, token);		}else {			NPC_PetDel2( meindex, toindex, select, token);		}		buttontype = WINDOW_BUTTONTYPE_OK;	  	windowtype = WINDOW_MESSAGETYPE_MESSAGE;		windowno = CHAR_WINDOWTYPE_WINDOWPETSHOP_END; 	    break;	  //   仃  木  互域  	  case 8:	  	NPC_MaxGoldOver( meindex, toindex, NPC_PETSHOP_MSG_POOLFULL, token);		buttontype = WINDOW_BUTTONTYPE_OK;	  	windowtype = WINDOW_MESSAGETYPE_MESSAGE;		windowno = CHAR_WINDOWTYPE_WINDOWPETSHOP_END; 	    break;	  // 娄五潸曰矢永玄域  它奴件玉它	  case 9: // 取出寄放宠列表	  	if( CHAR_getWorkInt( meindex, CHAR_WORK_POOLFLG) != 1 )	  		return;	  	NPC_getDrawPet( meindex, toindex, token, &buttontype, select);	  	windowtype = WINDOW_MESSAGETYPE_SELECT;		windowno = CHAR_WINDOWTYPE_WINDOWPETSHOP_DRAWSELECT; 		break;	  // 娄五潸曰    "	  case 10:		NPC_PetDate3( meindex, toindex, select, token);		buttontype = WINDOW_BUTTONTYPE_YESNO;	  	windowtype = WINDOW_MESSAGETYPE_MESSAGE;		windowno = CHAR_WINDOWTYPE_WINDOWPETSHOP_ASKDRAW;	    break;	  // 忒允	  case 11:	  	if( CHAR_getWorkInt( meindex, CHAR_WORK_POOLFLG ) != 1 )	  		return;	  		NPC_PetDel3( meindex, toindex, select, token);		buttontype = WINDOW_BUTTONTYPE_OK;	  	windowtype = WINDOW_MESSAGETYPE_MESSAGE;		windowno = CHAR_WINDOWTYPE_WINDOWPETSHOP_END; 	    break;	  // 矢永玄  互域  	  case 12:	  	NPC_MaxGoldOver( meindex, toindex, NPC_PETSHOP_MSG_GETFULL, token);		buttontype = WINDOW_BUTTONTYPE_OK;	  	windowtype = WINDOW_MESSAGETYPE_MESSAGE;		windowno = CHAR_WINDOWTYPE_WINDOWPETSHOP_END; 	    break;	  // CoolFish: Add 2001/7/4	  default:	    break;		}		/*--巨旦弗□皿--*/	//makeEscapeString( token, escapedname, sizeof(escapedname));			/*--霜耨--*/	lssproto_WN_send( fd, windowtype, 				buttontype, 				windowno,				CHAR_getWorkInt( meindex, CHAR_WORKOBJINDEX),				token);}void NPC_PetShopWindowTalked( int meindex, int talkerindex, 								int seqno, int select, char *data){	int datanum = -1;	if( NPC_Util_CharDistance( talkerindex, meindex ) > 2) {		return;	}	//print("\n NPC_PetShopWindowTalked: data:%s seq:%d sel:%d ", data, seqno, select);	makeStringFromEscaped( data);		datanum = atoi( data);	switch( seqno){	case CHAR_WINDOWTYPE_WINDOWPETSHOP_START:		{			int poolflg = CHAR_getWorkInt( meindex, CHAR_WORK_POOLFLG);			if( ( datanum == 3 && poolflg) || // 卖宠物				( datanum == 2 && !poolflg ) ){	// 领取宠物				NPC_PetShop_selectWindow( meindex, talkerindex, 1, -1 );			}else if( datanum == 1 && poolflg) { // 寄放宠物 				if( CHAR_getCharPoolPetElement( talkerindex) != -1 ) {					NPC_PetShop_selectWindow( meindex, talkerindex, 5, -1 );				}				else {					NPC_PetShop_selectWindow( meindex, talkerindex, 8, -1 );				}			}else if( datanum == 2 && poolflg ) { // 领取宠物				if( CHAR_getCharPetElement( talkerindex) != -1 ) {					CHAR_setWorkInt( talkerindex, CHAR_WORKSHOPRELEVANT, 0);					NPC_PetShop_selectWindow( meindex, talkerindex, 9, 0);				}else {					NPC_PetShop_selectWindow( meindex, talkerindex, 12, -1 );				}			}		}		break;	  case CHAR_WINDOWTYPE_WINDOWPETSHOP_PETSELECT:		if(select==WINDOW_BUTTONTYPE_CANCEL){			NPC_PetShop_selectWindow( meindex, talkerindex, 0,-1 );					}else{			NPC_PetShop_selectWindow( meindex, talkerindex, 2, datanum );		}		break;	  case CHAR_WINDOWTYPE_WINDOWPETSHOP_PETSELECT2:		if(select==WINDOW_BUTTONTYPE_CANCEL){			NPC_PetShop_selectWindow( meindex, talkerindex, 0,-1 );		}else{			NPC_PetShop_selectWindow( meindex, talkerindex, 6, datanum );		}		break;	  case CHAR_WINDOWTYPE_WINDOWPETSHOP_MAIN:		if(select==WINDOW_BUTTONTYPE_YES){			NPC_PetShop_selectWindow( meindex, talkerindex, 3,-1 );		}else{			NPC_PetShop_selectWindow( meindex, talkerindex,1,-1);	  	}	  	break;	  case CHAR_WINDOWTYPE_WINDOWPETSHOP_MAIN2:		if(select==WINDOW_BUTTONTYPE_YES){			NPC_PetShop_selectWindow( meindex, talkerindex, 7,-1 );		}else {			NPC_PetShop_selectWindow( meindex, talkerindex,5,-1);	  	}	  	break;	  case CHAR_WINDOWTYPE_WINDOWPETSHOP_ASKDRAW:		if( select == WINDOW_BUTTONTYPE_YES){			if( CHAR_getCharPetElement( talkerindex) != -1 ) {				NPC_PetShop_selectWindow( meindex, talkerindex, 11,-1 );			}else {				NPC_PetShop_selectWindow( meindex, talkerindex, 12, -1 );			}		}else {			CHAR_setWorkInt( talkerindex, CHAR_WORKSHOPRELEVANT, 0);			NPC_PetShop_selectWindow( meindex, talkerindex, 9, 0);	  	}	  	break;	  case CHAR_WINDOWTYPE_WINDOWPETSHOP_GOLDOVER:		if( select == WINDOW_BUTTONTYPE_YES){			NPC_PetShop_selectWindow( meindex, talkerindex, 4,-1 );		}else{			NPC_PetShop_selectWindow( meindex, talkerindex, 0,-1 );		}	  	break;	  case CHAR_WINDOWTYPE_WINDOWPETSHOP_DRAWSELECT:		if( select == WINDOW_BUTTONTYPE_PREV){			NPC_PetShop_selectWindow( meindex, talkerindex, 9, -1);		}else if( select == WINDOW_BUTTONTYPE_NEXT) {			NPC_PetShop_selectWindow( meindex, talkerindex, 9, 1);		}else if( select != WINDOW_BUTTONTYPE_CANCEL) {			if( CHAR_getCharPetElement( talkerindex) != -1 ) {				NPC_PetShop_selectWindow( meindex, talkerindex, 10, datanum);			}else {				NPC_PetShop_selectWindow( meindex, talkerindex, 12, -1 );			}		}else {			NPC_PetShop_selectWindow( meindex, talkerindex, 0,-1 );		}		break;	  case CHAR_WINDOWTYPE_WINDOWPETSHOP_END:		if( select == WINDOW_BUTTONTYPE_OK){			NPC_PetShop_selectWindow( meindex, talkerindex, 0,-1 );		}	  	break;	  // CoolFish: Add 2001/7/4	  default:	  	break;	}}void NPC_PetDate(int meindex,int talker,int select,char *token){		int petindex;	int cost;	char *petname;	char buf[1024];	/*--伐□弁及赓渝祭--*/	CHAR_setWorkInt(talker,CHAR_WORKSHOPRELEVANT,select);	petindex = CHAR_getCharPet( talker, select-1);           if( !CHAR_CHECKINDEX(petindex) ) return;  	NPC_MaxGoldOver( meindex, talker, NPC_PETSHOP_MSG_REALY, buf);	cost=NPC_GetCost(meindex,talker,petindex);	petname = CHAR_getUseName( petindex);

⌨️ 快捷键说明

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