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

📄 npc_janken.c

📁 石器时代3.0源代码 2008.08.27最新版 完全可编译开服!
💻 C
字号:
#include "version.h"#include <string.h>#include "common.h"#include "char_base.h"#include "npc_janken.h"#include "npcutil.h"#include "char.h"#include "lssproto_serv.h"#include "buf.h"#include "function.h"#include "readmap.h"#include "object.h"#include "log.h"/* *元扎氏仃氏 */static void NPC_Janken_selectWindow( int meindex, int talker, int num);void NPC_JnakenJudge(int meindex,int talker,int sel);BOOL NPC_JankenEntryItemCheck(int talker,char *buf);BOOL NPC_JankenEntryItemDel(int talker,char *buf);void NPC_WarpPointGet(int meindex,int talker,int *fl,int *x,int *y,int judge);/********************************** 赓渝质  *********************************/BOOL NPC_JankenInit( int meindex ){	//正奶皿毛本永玄    CHAR_setInt( meindex , CHAR_WHICHTYPE , CHAR_TYPEJANKEN );		return TRUE;}/**********************************   仄井仃日木凶凛及质  *********************************/void NPC_JankenTalked( int meindex , int talkerindex , char *szMes ,					 int color ){	/* 皿伊奶乩□卞覆仄化分仃  杀允月 */	if( CHAR_getInt( talkerindex , CHAR_WHICHTYPE ) != CHAR_TYPEPLAYER ) {		return;	}		/* ㄠ弘伉永玉动  及心 */	if( NPC_Util_CharDistance( talkerindex, meindex ) > 1) return;	NPC_Janken_selectWindow(meindex, talkerindex, 0);		}/****************************** *	公木冗木及质  卞坌仃月 ******************************/static void NPC_Janken_selectWindow( int meindex, int talker, int num){	char token[1024];	char buf[32];	int fd = getfdFromCharaIndex( talker);	int buttontype=0;	int windowtype=0;	int windowno=0;   	char argstr[NPC_UTIL_GETARGSTR_BUFSIZE];		/*--它奶件玉它正奶皿丢永本□斥互云云中及匹燮卞涩烂--*/  	windowtype=WINDOW_MESSAGETYPE_MESSAGE;	/*--涩烂白央奶伙毛  心  心--*/	if(NPC_Util_GetArgStr( meindex, argstr, sizeof(argstr))==NULL){		print("NPC_janken Init: GetArgStrErr");		return ;	}	switch( num)	{	  case 0:	  	/*-- 旦正□玄及丢永本□斥互  仃木壬巨仿□  憎 --*/		if(NPC_Util_GetStrFromStrWithDelim( argstr, "MainMsg", token, sizeof( token))	== NULL)		{			print("Janken:MainMsg:%s", CHAR_getChar( meindex, CHAR_NAME));			return ;		}  		/*--蓟      --*/	  	buttontype = WINDOW_BUTTONTYPE_YESNO;	  	windowtype = WINDOW_MESSAGETYPE_MESSAGE;	  	windowno = CHAR_WINDOWTYPE_JANKEN_START; 	  	break;			case 1:				//失奶  丞及民尼永弁		if(NPC_Util_GetStrFromStrWithDelim( argstr, "EntryItem", buf, sizeof( buf))!= NULL) {				if(NPC_JankenEntryItemCheck(talker,buf) == FALSE)			{				NPC_Janken_selectWindow(meindex, talker, 3);			}			//巨件玄伉迕及失奶  丞毛绰轮			if(NPC_JankenEntryItemDel(talker,buf) == FALSE){				print("元扎氏仃氏ERR:失奶  丞壅仄卞仄匀天中");			}		}		/*--蓟      --*/		sprintf(token,"              剪刀石头布!!\n"			      "\n\n               《  石头  》"			      "\n\n               《  剪刀  》"				  "\n\n               《  布  》"		);		buttontype=WINDOW_BUTTONTYPE_NONE;		windowtype=WINDOW_MESSAGETYPE_SELECT;	  	windowno=CHAR_WINDOWTYPE_JANKEN_MAIN; 	  break;	case 2:		/*--丐中仇蓟      --*/		//sprintf(token,"              丐中仇匹″″\n"		sprintf(token,"              平手再来!!\n"			      "\n\n               《  石头  》"			      "\n\n               《  剪刀  》"				  "\n\n               《  布  》"		);	  	buttontype=WINDOW_BUTTONTYPE_NONE;	  	windowtype=WINDOW_MESSAGETYPE_SELECT; 		windowno=CHAR_WINDOWTYPE_JANKEN_MAIN; 	  	break;  	case 3:	  	/*-- 旦正□玄及丢永本□斥互  仃木壬巨仿□  憎 --*/		NPC_Util_GetStrFromStrWithDelim( argstr, "NoItem", token, sizeof( token));	  	buttontype=WINDOW_BUTTONTYPE_OK;	  	windowtype=WINDOW_MESSAGETYPE_MESSAGE;  		windowno=CHAR_WINDOWTYPE_JANKEN_END;   	break;	}//	makeEscapeString( token, escapedname, sizeof(escapedname));	/*-仇仇匹霜耨允月--*/	lssproto_WN_send( fd, windowtype, 					buttontype, 					windowno,					CHAR_getWorkInt( meindex, CHAR_WORKOBJINDEX),					token);}/********************************** 它奴件玉它丢永本□斥卞覆允月质  *********************************/void NPC_JankenWindowTalked( int meindex, int talkerindex, 								int seqno, int select, char *data){	/* ㄠ弘伉永玉动  及心 */	if( NPC_Util_CharDistance( talkerindex, meindex ) > 1) return;	switch( seqno){	  case CHAR_WINDOWTYPE_JANKEN_START:		  	if(select==WINDOW_BUTTONTYPE_YES){			NPC_Janken_selectWindow(meindex, talkerindex, 1);		}		break;			case CHAR_WINDOWTYPE_JANKEN_MAIN:		if (atoi(data) >= 3){			NPC_JnakenJudge(meindex,talkerindex,atoi(data) );		}		break;	}}/* *斥乓件弗件及  烂 */void NPC_JnakenJudge(int meindex,int talker,int sel){	int player=-1;	int jankenman;	char j_char[3][8]={" 石头 "," 剪刀 ","  布  "};	char token[1024];	int shouhai = 0;	int fd = getfdFromCharaIndex( talker);	int fl=0,x=0,y=0;			if(sel == 3) player = 0; //弘□	if(sel == 5) player = 1; //民亦平	if(sel == 7) player = 2; //由□	jankenman = rand()%3;	switch(jankenman){		case 0:			if(player == 2){				shouhai = 1;			}else if(player == 1){				shouhai = 2;			}		break;				case 1:			if(player == 0){				shouhai = 1;			}else if(player == 2){				shouhai = 2;			}		break;				case 2:			if(player == 1){				shouhai = 1;			}else if(player == 0){				shouhai = 2;			}		break;	}	if(shouhai == 1){		//Change add 玩家猜胜了给的道具		NPC_JankenItemGet( meindex, talker, "WinItem" );		 NPC_WarpPointGet(meindex, talker, &fl, &x, &y, 0);				snprintf( token, sizeof( token ) ,						"              ~ 结  果 ~      \n\n"						"  %16s      %-16s\n"						"        [%s]    VS    [%s]\n\n\n"						"      %-16s 胜利",						 CHAR_getChar(meindex,CHAR_NAME),CHAR_getChar(talker,CHAR_NAME),						 j_char[jankenman],j_char[player],						 CHAR_getChar(talker,CHAR_NAME)						);//			    CHAR_talkToCli( talker , -1 ,token , CHAR_COLORCYAN );				//伐□皿			    CHAR_warpToSpecificPoint(talker, fl, x, y);			    			    //  匀凶午五反>减少=及失弁扑亦件毛允月[			    CHAR_sendWatchEvent( CHAR_getWorkInt( talker, CHAR_WORKOBJINDEX),	CHAR_ACTPLEASURE,NULL,0,TRUE);				CHAR_setWorkInt( talker, CHAR_WORKACTION, CHAR_ACTPLEASURE);	}else if(shouhai == 2){		//Change add 玩家猜输了给的道具		NPC_JankenItemGet( meindex, talker, "LoseItem" );		 NPC_WarpPointGet(meindex, talker, &fl, &x, &y, 1);		snprintf( token, sizeof( token ) ,						"              ~ 结  果 ~      \n\n"						"  %16s      %-16s\n"						"        [%s]    VS    [%s]\n\n\n"						"      %-16s 输了",						 CHAR_getChar(meindex,CHAR_NAME),CHAR_getChar(talker,CHAR_NAME),						 j_char[jankenman],j_char[player],						 CHAR_getChar(talker,CHAR_NAME)						);//			    CHAR_talkToCli( talker , -1 ,token , CHAR_COLORCYAN );				//伐□皿				CHAR_warpToSpecificPoint(talker, fl, x, y);				//  仃凶午五反>  仄中=失弁扑亦件毛允月			    CHAR_sendWatchEvent( CHAR_getWorkInt( talker, CHAR_WORKOBJINDEX),	CHAR_ACTSAD,NULL,0,TRUE);				CHAR_setWorkInt( talker, CHAR_WORKACTION, CHAR_ACTSAD);	}else{		//仇仇卞仁月午丐中仇		NPC_Janken_selectWindow( meindex, talker, 2);		return;	}		//霜耨	lssproto_WN_send( fd, WINDOW_MESSAGETYPE_MESSAGE, 					WINDOW_BUTTONTYPE_OK, 					CHAR_WINDOWTYPE_JANKEN_END,					CHAR_getWorkInt( meindex, CHAR_WORKOBJINDEX),					token);	}/* *伐□皿燮毛GET允月[ */void NPC_WarpPointGet(int meindex,int talker,int *fl,int *x,int *y,int judge){   	char argstr[NPC_UTIL_GETARGSTR_BUFSIZE];	char *strbuf[2] = {"WinWarp","LoseWarp"};	char buf[64];	char buf2[32];	/*--涩烂白央奶伙毛  心  心--*/	if(NPC_Util_GetArgStr( meindex, argstr, sizeof(argstr))==NULL){		print("NPC_janken Init: GetArgStrErr");		return ;	}	/*--伐□皿燮毛潸  --*/	NPC_Util_GetStrFromStrWithDelim( argstr, strbuf[judge], buf, sizeof( buf));	getStringFromIndexWithDelim(buf,",",1,buf2,sizeof(buf2));	*fl=atoi(buf2);	getStringFromIndexWithDelim(buf,",",2,buf2,sizeof(buf2));	*x=atoi(buf2);	getStringFromIndexWithDelim(buf,",",3,buf2,sizeof(buf2));	*y=atoi(buf2);		}/* *--失奶  丞及民尼永弁分仃毛垫丹 */BOOL NPC_JankenEntryItemCheck(int talker,char *buf){	char buf2[512];	char buf3[256];	int id=0;	BOOL flg = FALSE;	int i;	int itemindex;	int itemno;	int kosuu;	int cnt=0;	int k=1;		while(getStringFromIndexWithDelim(buf , "," , k, buf2, sizeof(buf2))	 !=FALSE )	{		flg = FALSE;		k++;				if(strstr(buf2,"*") != NULL){			cnt = 0;			getStringFromIndexWithDelim(buf2,"*",1,buf3,sizeof(buf3));			itemno = atoi(buf3);			getStringFromIndexWithDelim(buf2,"*",2,buf3,sizeof(buf3));			kosuu = atoi(buf3);					for( i=0 ; i < CHAR_MAXITEMHAVE;i++ ){				itemindex = CHAR_getItemIndex( talker , i );				if( ITEM_CHECKINDEX(itemindex) ){					id = ITEM_getInt(itemindex ,ITEM_ID );					if(itemno == id){						cnt++;						if(cnt == kosuu){							flg = TRUE;							break;						}					}				}			}			if(flg == FALSE)			{				return FALSE;				}		}else{			itemno = atoi(buf2);						for( i=0 ; i < CHAR_MAXITEMHAVE;i++ ){				itemindex = CHAR_getItemIndex( talker , i );				if( ITEM_CHECKINDEX(itemindex) ){					id = ITEM_getInt(itemindex ,ITEM_ID );					if(itemno == id){						flg = TRUE;						break;					}				}			}				if(flg == FALSE)			{				return FALSE;			}		}	}	return TRUE;}BOOL NPC_JankenEntryItemDel(int talker,char *buf){	int i = 1, j = 1,k = 1;	char buff3[128];	char buf2[32];	int itemindex;	while(getStringFromIndexWithDelim(buf , "," , k, buff3, sizeof(buff3)) !=FALSE ){		k++;		if(strstr(buff3, "*") !=NULL){			int itemno;			int kosuu;			int id;			int cnt=0;			getStringFromIndexWithDelim(buff3,"*",1,buf2,sizeof(buf2));			itemno = atoi(buf2);			getStringFromIndexWithDelim(buff3,"*",2,buf2,sizeof(buf2));			kosuu = atoi(buf2);				for( i =0 ; i < CHAR_MAXITEMHAVE ; i++ ){				itemindex = CHAR_getItemIndex( talker , i );				if( ITEM_CHECKINDEX(itemindex) ){					id=ITEM_getInt(itemindex ,ITEM_ID );					if(itemno==id){						cnt++;						LogItem(							CHAR_getChar( talker, CHAR_NAME ), /* 平乓仿   */							CHAR_getChar( talker, CHAR_CDKEY ),#ifdef _add_item_log_name  // WON ADD 在item的log中增加item名称							itemindex,#else							ITEM_getInt( itemindex, ITEM_ID),  /* 失奶  丞  寞 */#endif							"QuizDelItem(猜谜->交出道具)",							CHAR_getInt( talker, CHAR_FLOOR),							CHAR_getInt( talker, CHAR_X ), 							CHAR_getInt( talker, CHAR_Y ),							ITEM_getChar( itemindex, ITEM_UNIQUECODE),							ITEM_getChar( itemindex, ITEM_NAME),							ITEM_getInt( itemindex, ITEM_ID)						);						CHAR_DelItem( talker, i);						if(cnt == kosuu){							break;						}					}				}			}				}else{			/*--蓟氏分  寞及失奶  丞毛蓟请---*/			for( j = 0 ;  j < CHAR_MAXITEMHAVE ; j++){				itemindex = CHAR_getItemIndex( talker ,j);				if( ITEM_CHECKINDEX(itemindex) ){					if( atoi( buff3) == ITEM_getInt(itemindex,ITEM_ID)){						LogItem(							CHAR_getChar( talker, CHAR_NAME ), /* 平乓仿   */							CHAR_getChar( talker, CHAR_CDKEY ),#ifdef _add_item_log_name  // WON ADD 在item的log中增加item名称							itemindex,#else							ITEM_getInt( itemindex, ITEM_ID),  /* 失奶  丞  寞 */#endif							"QuizDelItem(猜谜->交出道具)",							CHAR_getInt( talker,CHAR_FLOOR),							CHAR_getInt( talker,CHAR_X ),							CHAR_getInt( talker,CHAR_Y ),							ITEM_getChar( itemindex, ITEM_UNIQUECODE),							ITEM_getChar( itemindex, ITEM_NAME),							ITEM_getInt( itemindex, ITEM_ID)						);						CHAR_DelItem( talker, j);					}				}			}		}	}	return TRUE;}BOOL NPC_JankenItemGet(int meindex,int talker, char *wl){	char argstr[NPC_UTIL_GETARGSTR_BUFSIZE];	char buf[64];	/*--涩烂白央奶伙毛  心  心--*/	if(NPC_Util_GetArgStr( meindex, argstr, sizeof(argstr))==NULL){		print("NPC_janken ItemGet: GetArgStrErr");		return FALSE;	}	if(NPC_Util_GetStrFromStrWithDelim( argstr, wl, buf, sizeof( buf) ) !=NULL){			NPC_EventAddItem( meindex, talker, buf);	}}

⌨️ 快捷键说明

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