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

📄 npc_gamblemaster.c

📁 石器时代2.0完整版源代码.已经加入新功能. 在REDHAT9下GCC3.4编译成功.
💻 C
📖 第 1 页 / 共 2 页
字号:
	return;}void NPC_Gamble_MasterLoop( int meindex){	int	objmeindex = -1;	int full_time;	//int Master_Stone = 0;	int timeNum = 0;	//int time_run=0;	//int act;	objmeindex = CHAR_getWorkInt( meindex, CHAR_WORKOBJINDEX);	switch( CHAR_getWorkInt( meindex, NPC_WORK_MODE )) {	  case 0:	// 等待		  full_time = ROULETTE_STANDBY1;		  timeNum = CHAR_getWorkInt( meindex, NPC_WORK_MASTERFLG );		  if( ( CHAR_getWorkInt( meindex, NPC_WORK_SYSTIME) + full_time) < NowTime.tv_sec )	{			  if( timeNum == 30 )	{	//倒数20秒				//0 null 1 准备 2 跑 3 停				CHAR_setWorkInt( meindex, NPC_WORK_GAMEFLG, 1);				showString( meindex, "下注时间剩下20秒。", 0);			  }else	if( timeNum == 10 )	{					  showString( meindex, "standby_msg", 0);	//广播				  SetCasinoMap( meindex, 0, 0);	//设定地图不可下注			  }else	if( timeNum <= 6 )	{	//开始				  //0 null 1 准备 2 跑 3 停				  CHAR_setWorkInt( meindex, NPC_WORK_GAMEFLG, 2);				  CHAR_setWorkInt( meindex, NPC_WORK_MODE, 1);				  showString( meindex, "start_msg", 0);	//广播			  }			  CHAR_setWorkInt( meindex, NPC_WORK_MASTERFLG, timeNum - 2 );		  }		break;	  case 1:	// GAME START		  if( CHAR_getWorkInt( meindex, NPC_WORK_GAMEFLG) == 3 )	{			  CHAR_setWorkInt( meindex, NPC_WORK_MODE, 2);		  }		break;	  case 2:	// GAME END			CHAR_setWorkInt( meindex, NPC_WORK_MODE, 3);			defPlayerGold( meindex , TRUE);	//计算输赢			CHAR_setWorkInt( meindex, NPC_WORK_ENDPOINT, 0);			NPC_MAPCLEANGOLD( meindex , CHAR_getInt( meindex, CHAR_FLOOR ));			LogGamble(				CHAR_getChar( meindex, CHAR_NAME ), "master",				"ROULETTE",	CHAR_getInt( meindex, CHAR_FLOOR),				CHAR_getInt( meindex, CHAR_X ),				CHAR_getInt( meindex, CHAR_Y ) ,				CHAR_getWorkInt( meindex, NPC_WORK_MASTERSTONE), 0, 0, 0, 2			);		break;	  case 3:		  CHAR_setWorkInt( meindex, NPC_WORK_MODE, 0);		  CHAR_setWorkInt( meindex, NPC_WORK_GAMEFLG, 0);		  showString( meindex, "end_msg", 0);	//广播		  SetCasinoMap( meindex, 0, 1);	//设定地图可下注		  CHAR_setWorkInt( meindex, NPC_WORK_MASTERFLG, 30 );		  CHAR_setWorkInt( meindex, NPC_WORK_SYSTIME, NowTime.tv_sec);		break;	  default:		  NPC_GAMBLEMASTER_RESET( meindex);	    break;	}}void defPlayerGold( int meindex , int flg){	int X,Y;	int endpoint;	int End_type = 0;	int toindex=0, i, master_floor;	int player_type;	int gamble_num;	//float def;	char token[256], buff[256];	char buf1[56],buf2[56];	BOOL GAMBLE_YES = FALSE;	endpoint = CHAR_getWorkInt( meindex, NPC_WORK_ENDPOINT);		X = (endpoint >> 16 );	Y = (endpoint & 0xffff);	for( End_type = 0; End_type < arraysizeof(EndTypedef) ; End_type++ )	{		if( (X == EndTypedef[ End_type].m_fx) && (Y == EndTypedef[ End_type].m_fy ))	{			break;		}	}	if( End_type == arraysizeof(EndTypedef) )	{		print("\n\n **********GAMBLE MASTER ERROR !! **************");		print("\n NOT FOUND : X=%d Y=%d EndTypedef[I] !!", X, Y);		return;	}/*Log=====================================	{	//记录用		FILE *fp;		int kp=0,pn=0;;		fp = fopen("./data/npc/roulette/lookgamble.txt","w+");		if( fp != NULL )	{			if( EndTypedef[ End_type].m_nums < 10000 )				EndTypedef[ End_type].m_nums = EndTypedef[ End_type].m_nums+1;			for( kp=0; kp<arraysizeof( EndTypedef)-1; kp++ )	{				if( EndTypedef[ kp].m_nums > 0 && EndTypedef[ kp].m_type > 0 )	{					fprintf( fp," %s 中奖次数 [%d] ", EndTypedef[ kp].str_type, EndTypedef[ kp].m_nums );					if( (pn+1)%2 == 0 )	{						fprintf( fp," \n");					}					pn ++;				}			}			fclose( fp);		}	}//========================================*/	if( EndTypedef[ End_type].m_type <= 0 )	{		showString( meindex, "号码X,通杀!", 0);	}else	{		sprintf( token ,"中奖号码 : %s ", EndTypedef[End_type].str_type );		showString( meindex, token, 0 );	}	if( EndTypedef[ End_type].m_EO == roulette43 )	{		sprintf( buf1,"单");	}else	{		sprintf( buf1,"双");	}	if( EndTypedef[ End_type].m_RG == roulette41 )	{		sprintf( buf2,"红");	}else	{		sprintf( buf2,"绿");	}	//找在场的人	toindex = -1;	master_floor = CHAR_getInt( meindex , CHAR_FLOOR);	while( toindex < 10000 )	{		toindex++;		if( !CHAR_CHECKINDEX( toindex) )			continue;		if( CHAR_getInt( toindex , CHAR_WHICHTYPE ) != CHAR_TYPEPLAYER )			continue;		if( master_floor != CHAR_getInt( toindex, CHAR_FLOOR ) )	//是否在赌场			continue;		if( CHAR_getWorkInt( toindex, CHAR_WORKSTAKEFLAG) == FALSE )	//是否有下注			continue;		//是否赌中		GAMBLE_YES = FALSE;		CHAR_setWorkInt( toindex, CHAR_WORKSTAKEFLAG, FALSE);		for( i=0; i<5; i++)	{			player_type = CHAR_getWorkInt( toindex, i+CHAR_WORKSTAKETYPE1);			gamble_num = 0;			if( player_type > 0 )	{				if( player_type == EndTypedef[End_type].m_type )	{	//中了号码					if( EndTypedef[End_type].m_type == roulette45 )	{						gamble_num += 40;					}else	{						gamble_num += 20;					}					GAMBLE_YES = TRUE;					//算钱					Codef_Gold( meindex, toindex, gamble_num, 0, EndTypedef[End_type].str_type );				}else if( player_type == EndTypedef[End_type].m_RG )    {	//中了红绿					gamble_num += 1;					GAMBLE_YES = TRUE;					Codef_Gold( meindex, toindex, gamble_num, 0, buf2 );				}else if( player_type == EndTypedef[End_type].m_EO )	{	//中了单双					gamble_num += 1;					GAMBLE_YES = TRUE;					Codef_Gold( meindex, toindex, gamble_num, 0, buf1 );				}else if( player_type == EndTypedef[End_type].m_SI   )	{	//横列										gamble_num += 2;					GAMBLE_YES = TRUE;					sprintf( token,"%s%d", "横列", EndTypedef[End_type].m_SI-100 );					Codef_Gold( meindex, toindex, gamble_num, 0, token );				}else if( player_type == EndTypedef[End_type].m_IN   )	{	//1-10 11-20					gamble_num += 1;					GAMBLE_YES = TRUE;					if( (EndTypedef[End_type].m_IN - 100 ) == 11 )	{						snprintf( buff, sizeof( buff),"1-10");					}else if( (EndTypedef[End_type].m_IN - 100 ) == 12 )	{						snprintf( buff, sizeof( buff),"11-20");					}					sprintf( token,"%s%s", "范围", buff );					Codef_Gold( meindex, toindex, gamble_num, 0, token );				}else	{	//没中	扣积分					if( (player_type>>16) == EndTypedef[End_type].m_type || 						(player_type&0xffff) == EndTypedef[End_type].m_type						)	{	//中双号						gamble_num += 10;						GAMBLE_YES = TRUE;						sprintf( token,"%s%s", "双号-", EndTypedef[End_type].str_type );						Codef_Gold( meindex, toindex, gamble_num, 0, token );					}else if( player_type > 0 ) {	//72 73 74 75 没中	扣积分						strcpy( token, "\0");						if( player_type >= roulette41 && player_type <= roulette44 )	{	//红绿单双							sprintf( token,"%s", "押注 红绿单双 没中");						}else if( player_type == roulette45 )	{	//数字00							sprintf( token,"%s", "押注 数字00 没中");						}else if( player_type >= roulette51 && player_type <= roulette53 )	{	//横列							sprintf( token,"%s", "押注 横列 没中");						}else if( player_type >= roulette61 && player_type <= roulette62 )	{	//范围							sprintf( token,"%s", "押注 范围 没中");						}else if( player_type > (1<<16) )	{	//双号							sprintf( token,"%s", "押注 双号 没中");						}else	{	//数字							sprintf( token,"%s", "押注 数字 没中");						}						gamble_num -= 1;						Codef_Gold( meindex, toindex, gamble_num, 1, token );					}				}			}			//清空			CHAR_setWorkInt( toindex, i+CHAR_WORKSTAKETYPE1, 0);		}		if( CHAR_getInt( toindex, CHAR_GAMBLENUM) < 0 )	{			CHAR_setInt( toindex, CHAR_GAMBLENUM, 0 );		}else if( CHAR_getInt( toindex, CHAR_GAMBLENUM) > 10000 )	{			CHAR_setInt( toindex, CHAR_GAMBLENUM, 10000 );		}		sprintf( token, "你的游乐场积分累计为%d分。", CHAR_getInt( toindex, CHAR_GAMBLENUM));		CHAR_talkToCli( toindex, meindex, token,  CHAR_COLORYELLOW);		if( GAMBLE_YES == FALSE )	{			sprintf( token, "你所有押注都没中奖!");			CHAR_talkToCli( toindex, meindex, token,  CHAR_COLORYELLOW);		            continue;		}	}	return;}void Codef_Gold( int meindex, int toindex, int stone,int flg, char *token){	char buf1[256];	int dnum=-1;	int Master_gnum=0;	Master_gnum = CHAR_getWorkInt( meindex, NPC_WORK_MASTERSTONE);	Master_gnum += stone;	if( !flg )	{		sprintf( buf1,"恭喜你中了:%s,可拿得 %d 点积分", token, stone);		CHAR_talkToCli( toindex, meindex, buf1,  CHAR_COLORYELLOW);#ifdef _FIX_GAMBLENUM		stone += 1;	//加上一开始下注扣的积分#endif		CHAR_setInt( toindex, CHAR_GAMBLENUM, CHAR_getInt( toindex, CHAR_GAMBLENUM) + stone);	}else	{		dnum = stone;		if( stone < 0 )	{			dnum = (dnum*(-1));		}		sprintf( buf1,"%s,扣 %d 点积分", token, dnum);		CHAR_talkToCli( toindex, meindex, buf1,  CHAR_COLORYELLOW);#ifdef _FIX_GAMBLENUM#else		CHAR_setInt( toindex, CHAR_GAMBLENUM, CHAR_getInt( toindex, CHAR_GAMBLENUM) + stone);#endif	}		LogGamble(		CHAR_getChar( toindex, CHAR_NAME ),		CHAR_getChar( toindex, CHAR_CDKEY ),		"ROULETTE",		CHAR_getInt( toindex, CHAR_FLOOR),		CHAR_getInt( toindex, CHAR_X ),		CHAR_getInt( toindex, CHAR_Y ),		CHAR_getInt( toindex, CHAR_GOLD),		stone,		0,		CHAR_getInt( toindex, CHAR_GAMBLENUM ),		1	);		//纪录盈亏	if( Master_gnum > 5000000 )	Master_gnum = 5000000;	if( Master_gnum < 0 ) Master_gnum = 0;	CHAR_setWorkInt( meindex, NPC_WORK_MASTERSTONE, Master_gnum);	return;}//重置 错误处理void NPC_GAMBLEMASTER_RESET( int meindex){	//错误处理	print("\n 错误处理");	CHAR_setWorkInt( meindex, NPC_WORK_GAMEFLG, 0);//0 null 1 准备 2 跑	CHAR_setWorkInt( meindex, NPC_WORK_MODE, 0);	showString( meindex, "本回合不算!等5分钟後重新开始!!", 1);	NPC_MAPCLEANGOLD( meindex , CHAR_getInt( meindex, CHAR_FLOOR ));	//defPlayerGold( meindex , FALSE);	CHAR_setWorkInt( meindex, NPC_WORK_SYSTIME, NowTime.tv_sec + ROULETTE_ERRTIME);}#endif

⌨️ 快捷键说明

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