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 + -
显示快捷键?