paysystem.cpp

来自「天之炼狱1服务器端源文件游戏服务端不完整」· C++ 代码 · 共 1,151 行 · 第 1/3 页

CPP
1,151
字号
//---------------------------------------------------------------------------// Filename   : PaySystem.h// Written by : sigi// Description : //---------------------------------------------------------------------------// 酒流 备泅 救等 巴 ://   PC规 荤侩 矫埃 滑 锭.. 巢篮 荤侩 矫埃捞 60盒*UserLimit焊促 利篮 版快俊//   弊 鸥捞怪俊 霸烙规俊辑 UserLimit鳖瘤 促~ 立加窍搁//   弥措 60盒*(UserLimit-1疙)鳖瘤狼 矫埃阑 歹 play且 荐 乐霸 等促.//   // 秦搬 规过 ://   霸烙规牢 版快绰 UserLimit甫 绊妨秦辑//   矫埃捞 60盒*UserLimit焊促 利栏搁//   矫埃 眉农 鸥捞怪阑 60盒/UserLimit肺 秦具瞪鳖? -_-//   粱 歹 瓤啦利牢霸 绝唱?//   老窜篮 辑厚胶肺 巢败笛鳖?//// --> updatePayPlayTime()俊辑 贸府沁促.//---------------------------------------------------------------------------#include "PaySystem.h"#include "database/DB.h"#include "Thread.h"#include "Properties.h"//---------------------------------------------------------------------------// 割 檬付促 眉农且 巴牢啊?//---------------------------------------------------------------------------const int DELAY_PAY_TIME_UPDATE = 3600;	// 1矫埃 = 60盒//const int DELAY_PAY_TIME_UPDATE = 10;	// 10檬付促 - 抛胶飘侩const int MINUTE_PAY_TIME_DECREASE = DELAY_PAY_TIME_UPDATE/60;//const int MINUTE_PAY_TIME_DECREASE = 60;//---------------------------------------------------------------------------// 沥樊力牢 版快.. '割 矫 鳖瘤' 荤侩啊瓷窍促绊 且 锭.. // 割盒阑 辑厚胶肺 力傍茄促.//---------------------------------------------------------------------------//const int PLUS_DEADLINE_MIN 	= 10;const int PLUS_DEADLINE_SECOND	= 59;//---------------------------------------------------------------------------//// constructor / destructor////---------------------------------------------------------------------------PaySystem::PaySystem(){	// 俺牢夸陛瘤阂眉拌俊 措茄 汲沥..捞扼绊 杭 荐 乐促. 函荐疙 官层具等寸 -_-;	m_bSetPersonValue = false;	m_PayPlayType = PAY_PLAY_TYPE_PERSON;        		// 俺牢/白规..	m_PayType = PAY_TYPE_FREE;          		// 公丰/矫埃/扁埃/扁鸥..	m_PayIPType = PAY_IP_TYPE_ALL;        		// 霸烙规牢 版快狼 IP type	m_PayPlayStartTime.tv_sec = 0;	m_PayPlayStartTime.tv_usec = 0;	m_PayPlayAvailableHours = 0;	m_PayPlayFlag = 0;	m_PCRoomID = 0;	m_UserLimit = 0;	m_UserMax = 0;	m_bPremiumPlay = false;	m_bPCRoomPlay = false;	m_bFamilyPayAvailable = false;	m_FamilyPayPartyType = FAMILY_PAY_PARTY_TYPE_NONE;}PaySystem::~PaySystem(){}//---------------------------------------------------------------------------// set Pay PlayAvailable DateTime//---------------------------------------------------------------------------void PaySystem::setPayPlayAvailableDateTime(const string& pat) 	throw (Error){	__BEGIN_TRY		// 0123456789012345678	// YYYY-MM-DD HH:MM:SS	if (pat.size()==19)	{		int year  = atoi( pat.substr(0,4).c_str() );		int month = atoi( pat.substr(5,2).c_str() );		int day   = atoi( pat.substr(8,2).c_str() );		int hour  = atoi( pat.substr(11,2).c_str() );		int min   = atoi( pat.substr(14,2).c_str() );		//int sec   = atoi( pat.substr(10,2).c_str() );		// play啊瓷茄 茄拌 矫埃阑 瘤沥秦敌促.		m_PayPlayAvailableDateTime.setDate( VSDate(year, month, day) );		m_PayPlayAvailableDateTime.setTime( VSTime(hour, min, PLUS_DEADLINE_SECOND) );	}	else	{		// 立加 阂啊 惑怕肺 汲沥		m_PayPlayAvailableDateTime.setDate( VSDate(2002, 1, 1) );		m_PayPlayAvailableDateTime.setTime( VSTime(12, 10, 0) );	}	__END_CATCH}//---------------------------------------------------------------------------// set Family Pay PlayAvailable DateTime//---------------------------------------------------------------------------void PaySystem::setFamilyPayPlayAvailableDateTime(const string& pat) 	throw (Error){	__BEGIN_TRY	// 0123456789012345678	// YYYY-MM-DD HH:MM:SS	if (pat.size()==19)	{		int year  = atoi( pat.substr(0,4).c_str() );		int month = atoi( pat.substr(5,2).c_str() );		int day   = atoi( pat.substr(8,2).c_str() );		int hour  = atoi( pat.substr(11,2).c_str() );		int min   = atoi( pat.substr(14,2).c_str() );		//int sec   = atoi( pat.substr(10,2).c_str() );		// play啊瓷茄 茄拌 矫埃阑 瘤沥秦敌促.		m_FamilyPayPlayAvailableDateTime.setDate( VSDate(year, month, day) );		m_FamilyPayPlayAvailableDateTime.setTime( VSTime(hour, min, PLUS_DEADLINE_SECOND) );	}	else	{		// 立加 阂啊 惑怕肺 汲沥		m_FamilyPayPlayAvailableDateTime.setDate( VSDate(2002, 1, 1) );		m_FamilyPayPlayAvailableDateTime.setTime( VSTime(12, 10, 0) );	}	__END_CATCH}//---------------------------------------------------------------------------// set Pay StartAvailable DateTime//---------------------------------------------------------------------------void PaySystem::setPayStartAvailableDateTime(const string& pat) 	throw (Error){	__BEGIN_TRY		// 0123456789012345678	// YYYY-MM-DD HH:MM:SS	if (pat.size()==19)	{		int year  = atoi( pat.substr(0,4).c_str() );		int month = atoi( pat.substr(5,2).c_str() );		int day   = atoi( pat.substr(8,2).c_str() );		int hour  = atoi( pat.substr(11,2).c_str() );		int min   = atoi( pat.substr(14,2).c_str() );		//int sec   = atoi( pat.substr(10,2).c_str() );		// play啊瓷茄 茄拌 矫埃阑 瘤沥秦敌促.		m_PayStartAvailableDateTime.setDate( VSDate(year, month, day) );		m_PayStartAvailableDateTime.setTime( VSTime(hour, min, PLUS_DEADLINE_SECOND) );	}	else	{		// 矫累 阂啊 惑怕肺 汲沥		m_PayStartAvailableDateTime.setDate( VSDate(2099, 1, 1) );		m_PayStartAvailableDateTime.setTime( VSTime(0, 0, 0) );	}	__END_CATCH}//---------------------------------------------------------------------------// is Pay PlayAvailable//---------------------------------------------------------------------------bool PaySystem::checkPayPlayAvailable(){	if (m_PayType!=PAY_TYPE_FREE && m_PayType!=PAY_TYPE_POST)	{		VSDateTime currentDateTime(VSDate::currentDate(), VSTime::currentTime());		// 菩剐府 夸陛力 荤侩啊瓷茄瘤 眉农茄促.		if ( m_PayPlayAvailableDateTime != m_FamilyPayPlayAvailableDateTime			&& currentDateTime <= m_FamilyPayPlayAvailableDateTime )		{			m_PayPlayAvailableDateTime = m_FamilyPayPlayAvailableDateTime;			m_bFamilyPayAvailable = true;		}		// PC规牢 版快父 StartDate甫 眉农茄促.		bool bAvailable = (m_PayPlayType!=PAY_PLAY_TYPE_PCROOM || currentDateTime >= m_PayStartAvailableDateTime)							&& currentDateTime <= m_PayPlayAvailableDateTime;		//cout << "checkPayPlay: " << currentDateTime.toString() << " <= " << m_PayPlayAvailableDateTime.toString() << endl;		// 沥樊力 夸陛		if (bAvailable)		{			m_PayType = PAY_TYPE_PERIOD;		}		else		{ 			bAvailable = m_PayPlayAvailableHours > 0;			// 辆樊力 夸陛			if (bAvailable)			{				m_PayType = PAY_TYPE_TIME;			}		}		return bAvailable;	}	else if (m_PayType == PAY_TYPE_POST)	{		VSDateTime currentDateTime(VSDate::currentDate(), VSTime::currentTime());		if (currentDateTime <= m_PayPlayAvailableDateTime)			return true;		else			return false;	}	/*	switch (m_PayType)	{		case PAY_TYPE_PERIOD :		{			VSDateTime currentDateTime(VSDate::currentDate(), VSTime::currentTime());			return currentDateTime <= m_PayPlayAvailableDateTime;		}		case PAY_TYPE_TIME :		{			return m_PayPlayAvailableHours > 0;		}		default : break;	}	*/	return true;}//---------------------------------------------------------------------------// set PayPlayValue//---------------------------------------------------------------------------void PaySystem::setPayPlayValue(PayType payType,								const string& payPlayDate, int payPlayHours, uint payPlayFlag, const string& familyPayPlayDate){	setPayType( payType );	setPayPlayAvailableDateTime( payPlayDate );	setPayPlayAvailableHours( payPlayHours );	setPayPlayFlag( payPlayFlag );	setFamilyPayPlayAvailableDateTime( familyPayPlayDate );	m_bSetPersonValue = true;}//---------------------------------------------------------------------------// update Pay PlayTime//---------------------------------------------------------------------------bool PaySystem::updatePayPlayTime(const string& playerID, const VSDateTime& currentDateTime, const Timeval& currentTime)	throw (ProtocolException, Error){	__BEGIN_TRY	switch (m_PayType)	{		//-----------------------------------------		// 扁埃力 荤侩磊牢 版快		//-----------------------------------------		case PAY_TYPE_PERIOD :		{			// 茄 矫埃 沥档俊 茄 锅究 眉农茄促.			// 扁埃力 荤侩磊牢 版快绰 1矫埃 沥档 辑厚胶登绢档 巩力 绝促绊 夯促			if (currentTime.tv_sec >= m_PayPlayStartTime.tv_sec + DELAY_PAY_TIME_UPDATE)			{				m_PayPlayStartTime.tv_sec = currentTime.tv_sec;				//cout << "[PAY_TYPE_PERIOD] " << endl;				//cout << "CurrentDateTime = " << currentDateTime.toString().c_str() << endl;				//cout << "PayPlayAvaiable = " << m_PayPlayAvailableDateTime.toString().c_str() << endl << endl;				// 矫埃捞 瘤车栏搁.. 楼弗促.				if (currentDateTime > m_PayPlayAvailableDateTime)				{					//throw ProtocolException("荤侩矫埃捞 促灯促.");					m_PayPlayStartTime.tv_sec = 0;					m_bPremiumPlay = false;					return false;				}			}		}		break;		//-----------------------------------------		// 矫埃力 荤侩磊牢 版快		//-----------------------------------------		case PAY_TYPE_TIME :		{			int elapsedSec = currentTime.tv_sec - m_PayPlayStartTime.tv_sec;			int remainSec = m_PayPlayAvailableHours*60;			int UserMax = m_UserMax;			// 夸陛阑 临捞绰 版快..			if (m_PayPlayStartTime.tv_sec != 0					// [1] 1矫埃付促 DB甫 update 矫挪促.				&& (currentTime.tv_sec >= m_PayPlayStartTime.tv_sec + DELAY_PAY_TIME_UPDATE					// [2] 荤侩矫埃捞 1矫埃档 救 巢疽促搁.. 官肺 眉农..					|| m_PayPlayAvailableHours < MINUTE_PAY_TIME_DECREASE						&& elapsedSec > remainSec					// [3] PC规 夸陛捞绊 					//      巢篮 矫埃捞 1矫埃*UserMax 焊促 利绊, 					// 		荤侩矫埃*UserMax啊 巢篮 矫埃焊促 农搁.. (UserMax绰 1~12肺 力茄:呈公 磊林 眉农窍瘤 臼霸窍扁 困秦辑)					//        肚绰, 巢篮 minute啊 荤侩磊荐焊促 累栏搁(1盒究档 给 敬促搁), 1盒付促 眉农茄促.					|| m_PayPlayType==PAY_PLAY_TYPE_PCROOM 						//&& elapsedSec <= DELAY_PAY_TIME_UPDATE						&& m_PayPlayAvailableHours < MINUTE_PAY_TIME_DECREASE*UserMax						&& (elapsedSec * (min(12, max(1, (int)m_UserMax))) > remainSec							|| elapsedSec>=60 && m_PayPlayAvailableHours <= UserMax)					)				)			{				// 盒窜困肺 官槽促.				int decreaseMin = (currentTime.tv_sec - m_PayPlayStartTime.tv_sec)/60;				// 促浆 1矫埃阑 扁促肤促.				if (decreaseMin > 0)				{					m_PayPlayStartTime.tv_sec = currentTime.tv_sec;								switch (m_PayPlayType)					{						case PAY_PLAY_TYPE_PERSON :							// DB俊辑 荤侩磊 矫埃阑 1矫埃 哗霖促.							//m_PayPlayAvailableHours -= 60;							// DB俊 历厘秦具茄促.							decreasePayPlayTime(playerID, decreaseMin);//MINUTE_PAY_TIME_DECREASE);						break;						case PAY_PLAY_TYPE_PCROOM :							// DB俊辑 霸烙规 矫埃阑 1矫埃 哗霖促.							//m_PayPlayAvailableHours -= 60;							// 咯矾疙捞辑 且 荐 乐栏骨肺.. 							// 促矫 DB俊辑 巢篮 矫埃阑 佬绢柯促.							decreasePayPlayTimePCRoom(decreaseMin);//MINUTE_PAY_TIME_DECREASE);						break;						default : break;					}				}				if (m_PayPlayAvailableHours <= 0)				{					//throw ProtocolException("荤侩矫埃捞 促灯促.");					m_PayPlayStartTime.tv_sec = 0;					m_bPremiumPlay = false;					return false;				}			}		}		break;		default : break;	}	return true;	__END_CATCH}//---------------------------------------------------------------------------// login Pay PlayPCRoom IP

⌨️ 快捷键说明

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