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

📄 lottosystem.cpp

📁 国内著名网络游戏dragon的服务端完整源码 内附完整数据库结构
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// LottoSystem.cpp: implementation of the CLottoSystem class.
//
//////////////////////////////////////////////////////////////////////

#include "..\stdafx.h"
#include "LottoSystem.h"
#include "..\LowerLayers\servertable.h"
#include "CItem.h"
#include "UserManager.h"
#include <direct.h>

#define		ARENA_MAP_PORT	5570
#define		BROADCAST_TIME	1200000 //规价 矫埃篮 20盒 埃拜捞促.
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CLottoSystem* CLottoSystem::m_pClass = NULL;
CLottoSystem::CLottoSystem()
{
	Clear();
	srand(timeGetTime());
	m_pClass = this;

	m_nLottoNumberCount = 4;// 捞蔼篮 抛捞喉俊辑 佬绢 柯促.
//	m_nGiveItemNumber = SADONIX_NO;//扁夯篮 荤靛 坷葱胶甫 霖促. 窍瘤父 抛捞喉俊辑 佬绢柯促.
	memset(m_anItemCount4Grade,0,sizeof(int)*5);//殿荐喊肺 瘤鞭登绰 酒捞袍 肮荐.
	memset(m_anWinNumberCount4Grade,0,sizeof(int)*5);//割俺狼 锅龋啊 嘎酒具 割殿牢啊..
	memset(m_anGiveItemNumber,0,sizeof(int)*5);//殿荐喊肺 瘤鞭登绰 酒捞袍 锅龋.
	m_nLottoPay = 10000; //叼弃飘绰 10000 农复捞促.//叼厚俊 历厘 登绢 乐绰 蔼阑 肺靛秦具 茄促.

	memset(&m_LotteryStart,0,sizeof(DATECHECK));
	memset(&m_LotteryEnd,0,sizeof(DATECHECK));

	mkdir("LotteryItem");
	m_bWinnerChecking = false;		// BBD 040127	肺肚 犬牢吝牢瘤狼 敲贰弊
}

CLottoSystem::~CLottoSystem()
{
	Clear();
}

//汗鼻 矫胶袍篮 妮肺辑胶 酒饭唱俊辑 茄锅父 父甸绢廉具 茄促.
bool CLottoSystem::Create()
{
	if(m_pClass || ::g_pServerTable->GetOwnServerData()->wPort != ARENA_MAP_PORT )return false;
	new CLottoSystem;
	return true;
}

int CLottoSystem::CreateOneNumber()
{
	int nNumber = 0;
	while(1)
	{
		nNumber = RandomNumber();
		if(!IsMember(nNumber))break;
	}
	
	return nNumber;
}

int CLottoSystem::RandomNumber()
{
	int	nNumber = rand()%MAX_MAXIMUM_NUMBER + 1;
	return nNumber;
}

bool CLottoSystem::IsMember(int nNumber)
{
	for(int i = 0;i < 6;i++)
	{
		if(m_anNumbers[i] == nNumber) return true;
	}

	return false;
}

void CLottoSystem::Generate6Number()
{
	for(int i = 0;i < m_nLottoNumberCount;i++)
	{
		m_anNumbers[i] = CreateOneNumber();
	}

	Sort(m_anNumbers,m_nLottoNumberCount);

	m_bGenNumbers = true; // 锅龋甫 茄锅 父甸菌促.
}




int CLottoSystem::Check6Number(int an6Numbers[])
{
	int nCount = 0;
	for(int i = 0; i < m_nLottoNumberCount;i++)
	{
		if(IsMember(an6Numbers[i]))
			nCount++;
	}

	return nCount;
}


int CLottoSystem::SetLottoID(int nID)
{
	m_nRunID = nID; //1捞惑捞 甸绢啊具 肺肚啊 柳青登绊 乐绰吝捞促.

	return m_nRunID;
}


void CLottoSystem::Sort(int aNumbers[], int size)
{
	if(size > 0)
	{
		int nMin = this->GetMinNumber(aNumbers,size);
		for(int i = 0;i < size;i++)
		{
			if(nMin == aNumbers[i]) break;			
		}

		int nTemp = aNumbers[i];
		aNumbers[i] = aNumbers[0];
		aNumbers[0] = nTemp;
		Sort(aNumbers + 1,size - 1);
	}
}

int CLottoSystem::GetMinNumber(int aNumbers[], int size)
{
	int nMin = 46;
	for(int i = 0;i < size;i++)
	{
		nMin = __min(aNumbers[i],nMin);
	}

	return nMin;
}

bool CLottoSystem::LoadTable(HDBC hDragonDB)
{
	HSTMT		hStmt = NULL;
	RETCODE		retCode;
	SDWORD		cbValue;
	char		szQuerry[512];

	sprintf(szQuerry, "SELECT * FROM Lotto_Setting");
	SQLAllocStmt(hDragonDB, &hStmt);
	retCode = SQLExecDirect(hStmt, (UCHAR *)szQuerry, SQL_NTS);

	if (!SQLOK(retCode))
	{
		MyLog(0,"Lotto_Setting Table ....Loading Error!!!!");
		SQLFreeStmt(hStmt, SQL_DROP);
		return 0;
	}
	retCode = SQLFetch(hStmt);
	if (!SQLOK(retCode))
	{
		MyLog(0,"Lotto_Setting Table ....No Data!!!!");
		SQLFreeStmt(hStmt, SQL_DROP);
		return 0;
	}
	SQLGetData(hStmt,1,SQL_C_LONG,&m_nLottoNumberCount,0,&cbValue);

	SQLGetData(hStmt,2,SQL_C_LONG,&m_anGiveItemNumber[0],0,&cbValue);
	SQLGetData(hStmt,3,SQL_C_LONG,&m_anGiveItemNumber[1],0,&cbValue);
	SQLGetData(hStmt,4,SQL_C_LONG,&m_anGiveItemNumber[2],0,&cbValue);
	SQLGetData(hStmt,5,SQL_C_LONG,&m_anGiveItemNumber[3],0,&cbValue);
	SQLGetData(hStmt,6,SQL_C_LONG,&m_anGiveItemNumber[4],0,&cbValue);

	SQLGetData(hStmt,7,SQL_C_LONG,&m_anItemCount4Grade[0],0,&cbValue);
	SQLGetData(hStmt,8,SQL_C_LONG,&m_anItemCount4Grade[1],0,&cbValue);
	SQLGetData(hStmt,9,SQL_C_LONG,&m_anItemCount4Grade[2],0,&cbValue);
	SQLGetData(hStmt,10,SQL_C_LONG,&m_anItemCount4Grade[3],0,&cbValue);
	SQLGetData(hStmt,11,SQL_C_LONG,&m_anItemCount4Grade[4],0,&cbValue);

	SQLGetData(hStmt,12,SQL_C_LONG,&m_anWinNumberCount4Grade[0],0,&cbValue);
	SQLGetData(hStmt,13,SQL_C_LONG,&m_anWinNumberCount4Grade[1],0,&cbValue);
	SQLGetData(hStmt,14,SQL_C_LONG,&m_anWinNumberCount4Grade[2],0,&cbValue);
	SQLGetData(hStmt,15,SQL_C_LONG,&m_anWinNumberCount4Grade[3],0,&cbValue);
	SQLGetData(hStmt,16,SQL_C_LONG,&m_anWinNumberCount4Grade[4],0,&cbValue);

	SQLGetData(hStmt,17,SQL_C_LONG,&m_nLottoPay,0,&cbValue);


	SQLFreeStmt(hStmt, SQL_DROP);


	

	sprintf(szQuerry, "SELECT * FROM Lottery_Date");
	SQLAllocStmt(hDragonDB, &hStmt);
	retCode = SQLExecDirect(hStmt, (UCHAR *)szQuerry, SQL_NTS);

	if (!SQLOK(retCode))
	{
		MyLog(0,"Lottery_Date Table ....Loading Error!!!!");
		SQLFreeStmt(hStmt, SQL_DROP);
		return 0;
	}	
	retCode = SQLFetch(hStmt);
	if (!SQLOK(retCode))
	{
		MyLog(0,"Lottery_Date Table ....No Data!!!!");		
		SQLFreeStmt(hStmt, SQL_DROP);
		return 0;
	}
	
	while(SQLOK(retCode))
	{
		SQLGetData(hStmt,2,SQL_C_LONG,&m_LotteryStart.nDay,0,&cbValue);
		SQLGetData(hStmt,3,SQL_C_LONG,&m_LotteryStart.nHour,0,&cbValue);
		SQLGetData(hStmt,4,SQL_C_LONG,&m_LotteryStart.nMin,0,&cbValue);
		SQLGetData(hStmt,5,SQL_C_LONG,&m_LotteryEnd.nDay,0,&cbValue);
		SQLGetData(hStmt,6,SQL_C_LONG,&m_LotteryEnd.nHour,0,&cbValue);
		SQLGetData(hStmt,7,SQL_C_LONG,&m_LotteryEnd.nMin,0,&cbValue);

		stLOTTERY_DATE	Lottery_date;
		Lottery_date.stLotteryStart = m_LotteryStart;
		Lottery_date.stLotteryEnd	= m_LotteryEnd;

		this->m_vtLottery_date.push_back(Lottery_date);
				
		retCode = SQLFetch(hStmt);
	}

	SQLFreeStmt(hStmt, SQL_DROP);



	sprintf(szQuerry, "SELECT * FROM Lotto_Event");
	SQLAllocStmt(hDragonDB, &hStmt);
	retCode = SQLExecDirect(hStmt, (UCHAR *)szQuerry, SQL_NTS);

	if (!SQLOK(retCode))
	{
		SQLFreeStmt(hStmt, SQL_DROP);
		return 0;
	}	
	
	retCode = SQLFetch(hStmt);

	LOTTO_EVENT_INFO	Lotto_Info;
	memset(&Lotto_Info,0,sizeof(Lotto_Info));

	int nLine = 1;

	if(!SQLOK(retCode))//抛捞喉俊 郴侩捞 绝促.卿. 父甸绢具瘤.
	{
		SQLFreeStmt(hStmt, SQL_DROP);
		MyLog(0,"CLottoSystem::LoadTable() No data!!!!!.....Please Make One Data");
		return true;
	}

	while (SQLOK(retCode))
	{		
		memset(&m_Lotto_Info,0,sizeof(m_Lotto_Info));
		
		SQLGetData(hStmt, 1, SQL_C_LONG, &m_Lotto_Info.nLottoID, 0, &cbValue);//LottoID 付瘤阜 雀瞒狼 肺肚 酒捞叼啊 肺靛 等促.
		SQLGetData(hStmt, 2, SQL_C_LONG, &m_Lotto_Info.StartDate.tm_year, 0, &cbValue);
		SQLGetData(hStmt, 3, SQL_C_LONG, &m_Lotto_Info.StartDate.tm_mon, 0, &cbValue);
		SQLGetData(hStmt, 4, SQL_C_LONG, &m_Lotto_Info.StartDate.tm_wday, 0, &cbValue);
		SQLGetData(hStmt, 5, SQL_C_LONG, &m_Lotto_Info.LotteryDate.tm_year, 0, &cbValue);
		SQLGetData(hStmt, 6, SQL_C_LONG, &m_Lotto_Info.LotteryDate.tm_mon, 0, &cbValue);
		SQLGetData(hStmt, 7, SQL_C_LONG, &m_Lotto_Info.LotteryDate.tm_wday, 0, &cbValue);
		SQLGetData(hStmt, 8, SQL_C_LONG, &m_Lotto_Info.nWinNumCount, 0, &cbValue);

		SQLGetData(hStmt, 9, SQL_C_LONG, &m_Lotto_Info.anWinNumbers[0], 0, &cbValue);
		SQLGetData(hStmt, 10, SQL_C_LONG, &m_Lotto_Info.anWinNumbers[1], 0, &cbValue);
		SQLGetData(hStmt, 11, SQL_C_LONG, &m_Lotto_Info.anWinNumbers[2], 0, &cbValue);
		SQLGetData(hStmt, 12, SQL_C_LONG, &m_Lotto_Info.anWinNumbers[3], 0, &cbValue);
		SQLGetData(hStmt, 13, SQL_C_LONG, &m_Lotto_Info.anWinNumbers[4], 0, &cbValue);
		SQLGetData(hStmt, 14, SQL_C_LONG, &m_Lotto_Info.anWinNumbers[5], 0, &cbValue);
		SQLGetData(hStmt, 15, SQL_C_LONG, &m_Lotto_Info.anWinNumbers[6], 0, &cbValue);
		SQLGetData(hStmt, 16, SQL_C_LONG, &m_Lotto_Info.anWinNumbers[7], 0, &cbValue);
		SQLGetData(hStmt, 17, SQL_C_LONG, &m_Lotto_Info.anWinNumbers[8], 0, &cbValue);
		SQLGetData(hStmt, 18, SQL_C_LONG, &m_Lotto_Info.anWinNumbers[9], 0, &cbValue);
	
		retCode = SQLFetch(hStmt);		
	}
	
	
	SQLFreeStmt(hStmt, SQL_DROP);
	

	return true;	
}

void CLottoSystem::Clear()
{
	memset(&m_Lotto_Info,0,sizeof(m_Lotto_Info));
	memset(m_anNumbers,0,sizeof(int)*10);
	m_pClass = NULL;
	m_EventStatus = EVENT;
	m_bGenNumbers = false;
	m_dwBroadCastTime = 0;//soto-HK030924
}

//< soto_LottoADD
void CLottoSystem::RunProc()
{
	tm	CurDate = GetCurDate();

	if(m_EventStatus == LOTTERIED)//眠梅捞 等扁埃捞促.
	{
		if(timeGetTime() - m_dwBroadCastTime >= BROADCAST_TIME)
		{
			m_dwBroadCastTime = timeGetTime();
			BroadCastLotteryMsg();//皋技瘤甫 傈颇 窍磊.
		}
		
		int nEventCount = this->m_vtLottery_date.size();
		for(int i = 0; i < nEventCount;++i)
		{
			DATECHECK LotteryEnd = this->m_vtLottery_date[i].stLotteryEnd;

			if(CurDate.tm_wday == LotteryEnd.nDay)//眠梅 场朝 老捞尔 鞍栏搁.
			{
				if(CurDate.tm_hour == LotteryEnd.nHour)//眠梅 场朝 矫埃捞尔 鞍阑锭.
				{
					if(CurDate.tm_min == LotteryEnd.nMin)//货 捞亥飘狼 锭啊 登菌促.
					{
						SendDBNewEvent();//货 捞亥飘甫 柳青窍磊.
						break;
					}				
				}
			}
		}
	}
	else//汗鼻 殿废 扁埃捞促.
	{
		int nEventCount = this->m_vtLottery_date.size();
		
		for(int i = 0; i < nEventCount;++i)
		{
			DATECHECK LotteryStart = this->m_vtLottery_date[i].stLotteryStart;
			DATECHECK LotteryEnd = this->m_vtLottery_date[i].stLotteryEnd;		// BBD 040211 眠梅辆丰矫埃
			if(CurDate.tm_wday == LotteryStart.nDay)//眠梅 矫累老捞尔 鞍栏搁.
			{
				if(CurDate.tm_hour >= LotteryStart.nHour &&
					CurDate.tm_hour <= LotteryEnd.nHour)	// BBD 040211 眠梅扁埃 荤捞(矫埃) 捞搁
				{
					if(CurDate.tm_min >= LotteryStart.nMin &&
						CurDate.tm_min < LotteryEnd.nMin)	// BBD 040211 眠梅扁埃 荤捞(盒) 捞搁
					{
						if(m_Lotto_Info.nLottoID)
						{
							SendDBLottery();//眠梅窍磊.
							break;
						}
					}
				}
			}
		}
	}
}

tm CLottoSystem::GetCurDate()
{
	tm	Time;
	time_t	LongTime;
	time(&LongTime);
	Time = *localtime(&LongTime);

	return Time;
}


void CLottoSystem::SendDBLottery()
{
	t_packet p; 
	p.h.header.type = CMD_LOTTERY_INFO;
	p.h.header.size = sizeof(LOTTO_EVENT_INFO);

	LOTTO_EVENT_INFO	Info;
	memcpy(&Info,&m_Lotto_Info,sizeof(LOTTO_EVENT_INFO));
	
	if(!m_bGenNumbers)Generate6Number(); //茄锅父 父电促.

	Info.nWinNumCount = m_nLottoNumberCount;
	memcpy(&Info.anWinNumbers,&m_anNumbers,sizeof(int)*this->m_nLottoNumberCount);
	Info.LotteryDate = GetCurDate();
			
	memcpy(&p.u.Lotto_Info,&Info,sizeof(LOTTO_EVENT_INFO));

	QueuePacket(connections,DB_DEMON,&p,1);
}

⌨️ 快捷键说明

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