📄 lottosystem.cpp
字号:
// 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 + -