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

📄 npc_gamblebank.c

📁 石器时代2.0完整版源代码.已经加入新功能. 在REDHAT9下GCC3.4编译成功.
💻 C
📖 第 1 页 / 共 2 页
字号:
#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 "configfile.h"#ifdef _GAMBLE_BANK#include "npc_gamblebank.h"static void NPC_GambleBank_selectWindow( int meindex, int toindex, int num, int flg);int NPC_GambleBank_DoGold( int meindex, int toindex, int Gold, int flg);BOOL NPC_GambleBank_AddItem( int meindex, int toindex, int itemId, int count);enum	{	GAMBLE_START = 0,	GAMBLE_SELET,	GAMBLE_MAN_BANK,	GAMBLE_MAN_CHANG1,	GAMBLE_MAN_CHANG2,	GAMBLE_END,};enum {	NPC_WORK_INDEX = CHAR_NPCWORKINT1,	NPC_WORK_WORKTYPE = CHAR_NPCWORKINT2,	// 0,-1 = NULL 2 = 银行 3 = 换币 4 = BOTH	NPC_WORK_CURRENTTIME = CHAR_NPCWORKINT3,	NPC_WORK_PAGE = CHAR_NPCWORKINT4,/*	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,*/};#define _GAMBLEBANK_U_NOLOCK	//同时对多人#define GAMBLEBANK_LOOPTIME 80#define GAMBLEBANK_STANDBY	5000 #define GAMBLEBANK_DEF		3	//手续费 / 100#define GAMBLEBANK_GETMAX	1000000#define GAMBLEBANK_GETMIN	100#define LIST_PAGE 7BOOL NPC_GambleBankInit( int meindex ){	char npcarg[NPC_UTIL_GETARGSTR_BUFSIZE];	char buf1[256];    CHAR_setInt( meindex , CHAR_WHICHTYPE , CHAR_GAMBLEBANK );#ifdef _GAMBLEBANK_U_NOLOCK	CHAR_setInt( meindex, CHAR_LOOPINTERVAL, GAMBLEBANK_STANDBY);	CHAR_setWorkInt( meindex, NPC_WORK_CURRENTTIME, NowTime.tv_sec);#endif	CHAR_setWorkInt( meindex , NPC_WORK_INDEX, -1);	if(NPC_Util_GetArgStr( meindex, npcarg, sizeof(npcarg)) == NULL)	{		print("GambleBank:GetArgStrErr");		return FALSE;	}	if(NPC_Util_GetStrFromStrWithDelim( npcarg,"GAMBLE_TYPE", buf1,sizeof( buf1) ) == NULL) {		print("GAMBLE_TYPE err !");		return FALSE;	}	CHAR_setWorkInt( meindex, NPC_WORK_WORKTYPE, atoi( buf1) );    return TRUE;}//CHAR_send_P_StatusString( charaindex, CHAR_P_STRING_GOLD);void NPC_GambleBankLoop( int meindex){#ifdef _GAMBLEBANK_U_NOLOCK	int fulltime = GAMBLEBANK_LOOPTIME;	if( ( CHAR_getWorkInt( meindex, NPC_WORK_CURRENTTIME) + fulltime) >= NowTime.tv_sec )		return;	CHAR_setWorkInt( meindex, NPC_WORK_CURRENTTIME, NowTime.tv_sec);	CHAR_setWorkInt( meindex , NPC_WORK_INDEX, -1);#endif	return;}void NPC_GambleBankTalked( int meindex , int talkerindex , char *szMes ,int color ){	char buf1[256];	char npcarg[NPC_UTIL_GETARGSTR_BUFSIZE];	int work_type;	if( !CHAR_CHECKINDEX( talkerindex) || !CHAR_CHECKINDEX( meindex) )		return;	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("GambleBank:GetArgStrErr");		return;	}#ifdef _FIX_GAMBLENUM	if( CHAR_getInt( talkerindex, CHAR_GAMBLENUM) < 0 )	{		CHAR_setInt( talkerindex, CHAR_GAMBLENUM, 0);	}#endif	if(NPC_Util_GetStrFromStrWithDelim( npcarg,"GAMBLE_TYPE", buf1,sizeof( buf1) ) == NULL) {		print("GAMBLE_TYPE err !");		return;	}	CHAR_setWorkInt( meindex, NPC_WORK_WORKTYPE, atoi( buf1) );	work_type = CHAR_getWorkInt( meindex, NPC_WORK_WORKTYPE);	if( work_type < 1 || work_type > 4 )	{	// 0 or -1		strcpy( buf1,"暂时停止服务。");		CHAR_talkToCli( talkerindex, meindex, buf1,  CHAR_COLORYELLOW);		CHAR_setWorkInt( meindex , NPC_WORK_INDEX, -1);		return;	}#ifdef _GAMBLEBANK_U_NOLOCK#else	if( CHAR_getWorkInt( meindex , NPC_WORK_INDEX) >= 0 )	{			strcpy( buf1,"我正忙着!");			CHAR_talkToCli( talkerindex, meindex, buf1,  CHAR_COLORYELLOW);		return;	}else	{		CHAR_setWorkInt( meindex , NPC_WORK_INDEX, talkerindex);		CHAR_setWorkInt( meindex, NPC_WORK_CURRENTTIME, NowTime.tv_sec);	}#endif	CHAR_setWorkInt( talkerindex, CHAR_WORKSHOPRELEVANT, 1);	NPC_GambleBank_selectWindow( meindex, talkerindex, GAMBLE_START, 1);}static void NPC_GambleBank_selectWindow( int meindex, int toindex, int num, int flg){	char token[256];	char buf1[256],buf2[256];	char npcarg[NPC_UTIL_GETARGSTR_BUFSIZE];	int buttontype = 0, windowtype = 0, windowno = 0;	int fd = getfdFromCharaIndex( toindex);	int i;	int page=-1;	//flg <= 0 错误 1 正常 flg = 2 钱不够  3 = 个人存款将满	//		4 = 个人银行将满 5 = 提领上限 6 = 提领下限	char Gamble_End[][56] = {		"error_msg", "end_msg", "money_msg", "full_msg1",		"full_msg2","getmax_msg","getmin_msg",	};	if(NPC_Util_GetArgStr( meindex, npcarg, sizeof(npcarg))==NULL){		print("GambleBank:GetArgStrErr");		return;	}  	windowtype = WINDOW_MESSAGETYPE_MESSAGE;	switch( num)	{	case GAMBLE_START:		if( NPC_Util_GetStrFromStrWithDelim( npcarg,"gamble_start", token, sizeof( token) ) == NULL) {			print("gamble_start msg err !");			return;		}		buttontype = WINDOW_BUTTONTYPE_YESNO;		windowno = NPC_GambleBank_START;	break;			case GAMBLE_SELET:		i = 1;		strcpy( token, "\0");		sprintf( buf2,"%s%d", "gamble_msg0", i);		while( NPC_Util_GetStrFromStrWithDelim( npcarg, buf2, buf1, sizeof( buf1) ) != NULL )	{			if( strstr( buf1, "NULL" ) == NULL )	{				strcat( token , buf1);				strcat( token, "\n");			}else	{				strcat( token, "\n");			}			i++;			sprintf( buf2,"%s%d", "gamble_msg0", i);		}	  	windowtype=WINDOW_MESSAGETYPE_SELECT;	  	windowno = NPC_GambleBank_SELECT; 		break;		case GAMBLE_MAN_BANK:	//银行		sprintf( token,"%d", CHAR_getInt( toindex, CHAR_PERSONAGOLD ) );		windowtype = WINDOW_MESSAGETYPE_BANK;		windowno = NPC_GambleBank_BANK;	break;	case GAMBLE_MAN_CHANG1:	//换物			{			char snum[256];			page = CHAR_getWorkInt( toindex, CHAR_WORKSHOPRELEVANT);			strcpy( token, "换物");			sprintf( token, "你有%d积分,想换哪一个奖品呢?\n", CHAR_getInt( toindex, CHAR_GAMBLENUM));			for( i=(page*LIST_PAGE);i<(page*LIST_PAGE+LIST_PAGE);i++)	{				if( i>=arraysizeof( GB_ITEMS))	{					break;				}				if( !strcmp( GB_ITEMS[i].name,"NEXT") )	{					strcat( token, "               下一页");					break;				}				if( !strcmp( GB_ITEMS[i].name,"END") )	{					strcat( token, "               取消\n");					break;				}				sprintf( snum,"%s%d\t%s",								"积分:", GB_ITEMS[i].Gnum,								GB_ITEMS[i].name);				snum[36] = 0;				strcat( token, snum);				strcat( token,"\n");				strcpy( snum, "\0");			}			windowtype = WINDOW_MESSAGETYPE_SELECT;			buttontype = WINDOW_BUTTONTYPE_NONE;	  		windowno = NPC_GambleBank_CHANG1;		}	break;	case GAMBLE_END:		CHAR_send_P_StatusString( toindex, CHAR_P_STRING_GOLD);		if( flg < 0  || flg > 6)	{			flg = 0;		}		if( NPC_Util_GetStrFromStrWithDelim( npcarg, Gamble_End[flg], token, sizeof( token) ) == NULL) {			print("Gamble_End[%d] noe found !", flg);			return;		}		CHAR_setWorkInt( toindex, CHAR_WORKSHOPRELEVANT, -1);#ifdef _GAMBLEBANK_U_NOLOCK#else		CHAR_setWorkInt( meindex , NPC_WORK_INDEX, -1);#endif		windowno = NPC_GambleBank_END;		buttontype = WINDOW_BUTTONTYPE_OK;	break;	}	lssproto_WN_send( fd, windowtype, 					buttontype, 

⌨️ 快捷键说明

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