clloginhandler.cpp

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

CPP
1,033
字号
					int affectedRowCount = pStmt->getAffectedRowCount();										// 弥辟 立加 IP甫 5俺鳖瘤 巢变促. IP Table篮 喊档肺 扁废茄促.					// LoginPlayerData 俊 IP甫 巢扁骨肺 鞘夸绝促. by bezz 2003.04.21					//pStmt->executeQuery("UPDATE PlayerIPList SET IP1=IP2, Date1=Date2, IP2=IP3, Date2=Date3, IP3=IP4, Date3=Date4, IP4=IP5, Date4=Date5, IP5='%s', Date5=now() WHERE PlayerID='%s'",connectIP.c_str(),  ID.c_str());					//if (pStmt->getAffectedRowCount()==0)					//{					//	pStmt->executeQuery("INSERT IGNORE INTO PlayerIPList (PlayerID) Values('%s')",					//							ID.c_str());					//}				    // LogOn捞 LOGOFF啊 酒聪芭唱.					// PlayerID啊 绝芭唱.. -_-					if (affectedRowCount==0)					{						// 促弗 LoginServer俊 捞固 立加登绢 乐绰瘤 犬牢窍绊						// 捞固 乐促搁 弊 Player甫 kick窍绊						// 咯扁辑 立加且 荐 乐霸 汲沥秦具 茄促.						// 老窜 促 阜绰促. 购啊 巩力啊 乐绢辑 LogOn 惑怕绰 倾侩矫难初篮巴 鞍篮单						// 巩力啊 积扁搁 促矫 乾促. by bezz 2003.07.07						// LogOn 惑怕绰 老窜 倾侩矫难 夯促.						//pStmt->executeQuery("UPDATE Player SET LoginIP = '%s', CurrentLoginServerID=%d, LastLoginDate=now() WHERE PlayerID = '%s' AND LogOn='LOGON'",connectIP.c_str(), g_pConfig->getPropertyInt("LoginServerID"), ID.c_str());						//if (pStmt->getAffectedRowCount()==0)						//{							LCLoginError lcLoginError;							//lcLoginError.setMessage("already connected");								lcLoginError.setErrorID(ALREADY_CONNECTED);								pLoginPlayer->sendPacket(&lcLoginError);							SAFE_DELETE(pStmt);							pLoginPlayer->setPlayerStatus(LPS_BEGIN_SESSION);														return;						//}						// LogOn惑怕肺 login捞 倾侩等 惑怕					}				/*				}				*/				__END_DEBUG				// 老窜 牢刘捞 登菌栏骨肺, 酒捞叼甫 肺弊牢 敲饭捞绢 按眉俊 历厘茄促.				pLoginPlayer->setID(ID);				// loginserver 俊辑 billing 何盒 哗扁肺 茄促.				// 局靛呼 夸没. by bezz 2003.04.22//#ifdef __CONNECT_BILLING_SYSTEM__			// by sigi. 2002.11.21			//pLoginPlayer->setBillingSession();			//pLoginPlayer->sendBillingLogin();//#endif#ifdef __CONNECT_CBILLING_SYSTEM__				// 吝惫 呼傅 辑滚俊 肺弊牢 窍扼绊 舅赴促.				g_pCBillingPlayerManager->sendLogin( pLoginPlayer );#endif				// 肺弊牢 傈俊绰 公炼扒 霸烙辑滚俊 捞 菩哦 焊郴辑 				// 立加秦 乐瘤父 DB 俊 肋给 扁废登 吝汗 肺变捞 登绰 巴阑 阜绰促 //				pLoginPlayer->sendLGKickCharacter();				// 肺弊牢 己傍阑 舅妨霖促.				LCLoginOK lcLoginOK;				lcLoginOK.setFamily( false );				if (!bFreePass)	// by sigi. 2002.10.23				{					// 茄惫 					if ( strstr(SSN.c_str(), "-") != NULL )					{						bAdult = isAdultByBirthday( SSN.substr(0, 6) );					}					// 吝惫					else 					{#ifdef __CHINA_SERVER__						// 吝惫篮 公炼扒 己牢						bAdult = true;#else						if (SSN.size() == 15)						{							bAdult = isAdultByBirthday( SSN.substr(6, 12) );						}						else if (SSN.size() == 18)						{							bAdult = isAdultByBirthday( SSN.substr(8, 14) );						}						else						{							// 捞繁 版快绰 绝促绊 窍绰单 -_-a							bAdult = false;						}#endif					}				}				if (g_pConfig->getPropertyInt("IsNetMarble")==1)					bAdult = pPacket->isAdult();				lcLoginOK.setAdult( bAdult );#ifndef __CONNECT_BILLING_SYSTEM__#ifdef __CHINA_SERVER__				lcLoginOK.setLastDays( 0xffff );#else//				if ( pLoginPlayer->getPayType() == 0 || pLoginPlayer->isFamilyPayAvailable() ) 				if ( pLoginPlayer->getPayType() == 0 ) 					lcLoginOK.setLastDays( 0xfffe );				else				{					int lastDays = VSDateTime::currentDateTime().daysTo( pLoginPlayer->getPayPlayAvailableDateTime() );					int lastSecs = VSDateTime::currentDateTime().secsTo( pLoginPlayer->getPayPlayAvailableDateTime() );					int familyLastDays = VSDateTime::currentDateTime().daysTo( pLoginPlayer->getFamilyPayPlayAvailableDateTime() );					int familyLastSecs = VSDateTime::currentDateTime().secsTo( pLoginPlayer->getFamilyPayPlayAvailableDateTime() );					if ( lastSecs < 0 && familyLastSecs < 0 )					{						if ( pLoginPlayer->getPayPlayAvailableHours() > 0 ) lcLoginOK.setLastDays( 0xfffe );						else lcLoginOK.setLastDays( 0xfffe );					}					else 					{						if ( lastSecs < familyLastSecs )						{							lcLoginOK.setFamily( true );							lcLoginOK.setLastDays( familyLastDays );							cout << "Family 夸陛力" << endl;						}						else 						{							lcLoginOK.setFamily( false );							lcLoginOK.setLastDays( lastDays );							cout << "Premium 夸陛力" << endl;						}					}				}				cout << lcLoginOK.getLastDays() << "老 巢疽嚼聪促." << endl;				if ( lcLoginOK.getLastDays() > 1000 )					filelog("PayPlayDateLog.txt", "UserID : %s , LastDays : %ld", ID.c_str() ,lcLoginOK.getLastDays());#endif#endif				/*				// 辑滚 弊缝 捞抚阑 悸泼茄促.				// 辑滚 酒捞叼肺 辑滚狼 弊缝酒捞叼甫 茫篮 促澜 辑滚 弊缝 沥焊甫 茫绰促.				lcLoginOK.setGroupName(g_pGameServerGroupInfoManager->getGameServerGroupInfo(pLoginPlayer->getServerGroupID())->getGroupName());				lcLoginOK.setStat(SERVER_FREE);				UserInfo * pUserInfo = g_pUserInfoManager->getUserInfo( pLoginPlayer->getServerGroupID() );				BYTE UserModify = 0;				if( CurrentServerGroupID == 0 || CurrentServerGroupID == 1 || CurrentServerGroupID == 2 || CurrentServerGroupID == 7 ) {//					UserModify = 200;				}				if (pUserInfo->getUserNum() < 100 + UserModify ) 				{					lcLoginOK.setStat(SERVER_FREE);				} 				else if (pUserInfo->getUserNum() < 250 + UserModify ) 				{					lcLoginOK.setStat(SERVER_NORMAL);				} 				else if (pUserInfo->getUserNum() < 400 + UserModify ) 				{					lcLoginOK.setStat(SERVER_BUSY);				} 				else if (pUserInfo->getUserNum() < 500 + UserModify ) 				{					lcLoginOK.setStat(SERVER_VERY_BUSY);				} 				else if (pUserInfo->getUserNum() >= 500 + UserModify ) 				{					lcLoginOK.setStat(SERVER_FULL);				} 				else 				{					lcLoginOK.setStat(SERVER_DOWN);				}				*/				pLoginPlayer->sendPacket(&lcLoginOK);				pLoginPlayer->setPlayerStatus(LPS_WAITING_FOR_CL_GET_PC_LIST);			}		} // end of if (pResult->getRowCount() == 0) else		SAFE_DELETE(pStmt);	} 	catch (SQLQueryException & sqe) 	{		SAFE_DELETE(pStmt);		throw Error(sqe.toString());	}	// 促弗 镑俊辑档 鞘夸茄 内靛扼辑. 窃荐肺 化寸. by sigi. 2002.5.8	addLoginPlayerData( ID, connectIP, SSN, zipcode );#endif			__END_DEBUG_EX __END_CATCH}////////////////////////////////////////////////////////////////////////////////// YYMMDD 肺 己牢 魄喊////////////////////////////////////////////////////////////////////////////////boolisAdultByBirthday(const string& birthday){	StringStream AdultSSN;	time_t daytime = time(0);	tm Timec;	localtime_r( &daytime, &Timec );	AdultSSN << Timec.tm_year - 18;	// tm_mon - range 0 to 11	if ( (Timec.tm_mon+1) < 10 ) AdultSSN << "0";	AdultSSN << (Timec.tm_mon+1);	if ( Timec.tm_mday < 10 ) AdultSSN << "0";	AdultSSN << Timec.tm_mday;	cout << "SSN = " << birthday.c_str() << " ADULTSSN = " << AdultSSN.toString().c_str() << endl;	// 己牢牢瘤 酒囱瘤 林刮殿废 锅龋 眉农	if (atoi(birthday.c_str()) <= atoi(AdultSSN.toString().c_str()))	{		//cout << "绢弗" << endl;		return true;	}			//cout << "局甸" << endl;	return false;}////////////////////////////////////////////////////////////////////////////////// add LoginPlayerdata//// 立加磊 烹拌甫 困秦辑 // UserInfo DB狼 LoginPlayerData俊 Login茄 荤侩磊甫 眠啊茄促.////////////////////////////////////////////////////////////////////////////////voidaddLoginPlayerData(const string& ID, const string& ip, const string& SSN, const string& zipcode){#ifdef __LOGIN_SERVER__	Statement* pStmt2 = NULL;	// [全芒毫扼]	// 关俊波 富绊..	// UPDATE Player Set LoginFlagDay=1, LoginFlagWeek=1, LoginFlagMonth=1 WHERE PlayerID='%s'	// 捞 沥档肺父 秦出档 宝满瘤 臼阑鳖.. 	// 矫埃阑 持绢辑 镜 鞘夸啊 乐绰瘤 犬牢捞 鞘夸窍摆瘤?	// 穿备狼 弥辟 立加 矫埃 鞍篮吧 UserInfo俊辑 惶酒辑 静绰啊?	// 辟单 捞芭 SSN篮 恐 持畴? 唱捞 烹拌档 惶唱?	// 臂绊. DARKEDEN捞尔 DB绰 盒府等盲肺 滴绰霸 唱阑鳖?	// 辟公矫埃捞 促福聪 翠翠窍焙.	// 蜡历 烹拌 包访 沥焊甫 涝仿茄促.	BEGIN_DB	{		// 刚历 泅犁 矫埃阑 掘绢辰促.		int year, month, day, hour, minute, second;		getCurrentTimeEx(year, month, day, hour, minute, second);		string currentDT = VSDateTime::currentDateTime().toDateTime();		StringStream sql;		/*		sql << "INSERT INTO LoginPlayerData (Year,Month,Day,Hour,Minute,Second,PlayerID,SSN,ZipCode,Date,Time) VALUES ("			<< year << "," << month << "," << day << "," << hour << "," << minute << "," << second << ",'"			<< ID << "','" << SSN << "','" << zipcode << "','"			<< currentDT.substr( 0, 10 ).c_str() << "','" << currentDT.substr( 11 ).c_str() << "')";		*/		sql << "INSERT INTO LoginPlayerData (PlayerID,IP,SSN,ZipCode,Date,Time) VALUES ('"			<< ID << "','" << ip << "','" << SSN << "','" << zipcode << "','"			<< currentDT.substr( 0, 10 ).c_str() << "','" << currentDT.substr( 11 ).c_str() << "')";		pStmt2 = g_pDatabaseManager->getUserInfoConnection()->createStatement();		pStmt2->executeQuery(sql.toString());		SAFE_DELETE(pStmt2);	// 2002.1.16 by sigi	}	END_DB(pStmt2)#endif}bool CLLoginHandler::checkNetMarbleClient (CLLogin* pPacket , Player* pPlayer)	     throw (ProtocolException , Error){    __BEGIN_TRY __BEGIN_DEBUG_EX#ifdef __LOGIN_SERVER__	bool isNetmarble = pPacket->isNetmarble();	if (isNetmarble)	// by sigi. 2002.10.23	{		LoginPlayer* pLoginPlayer = dynamic_cast<LoginPlayer*>(pPlayer);		bool bFreePass = checkFreePass(pPacket, pPlayer);		if (!bFreePass)		{			LCLoginError lcLoginError;			lcLoginError.setErrorID(INVALID_ID_PASSWORD);				pLoginPlayer->sendPacket(&lcLoginError);			return false;		}		// 老何 眉农俊辑.. FreePass肺 逞绢啊霸 等促.		pLoginPlayer->setFreePass(true);		//cout << "NetMarble Login OK" << endl;	}#endif	__END_DEBUG_EX __END_CATCH	return true;}bool CLLoginHandler::checkFreePass (CLLogin* pPacket , Player* pPlayer)	     throw (ProtocolException , Error){    __BEGIN_TRY __BEGIN_DEBUG_EX#ifdef __LOGIN_SERVER__    Assert(pPacket != NULL);    Assert(pPlayer != NULL);	//LoginPlayer* pLoginPlayer = dynamic_cast<LoginPlayer*>(pPlayer);	// key_code甫 盒籍秦辑	// DB狼 弊 ID狼 key_code客 厚背茄促.	// 鞍栏搁 true	Statement* pStmt = NULL;		try {	BEGIN_DB	{		pStmt = g_pDatabaseManager->getConnection("DARKEDEN")->createStatement();		Result* pResult = NULL;				pResult = pStmt->executeQuery(			"SELECT Password FROM Player WHERE PlayerID = '%s'", 			pPacket->getID().c_str());		if (pResult->next())		{			string password = pResult->getString(1);						if (password==pPacket->getPassword())			{				//cout << "password OK" << endl;				SAFE_DELETE(pStmt);				return true;			}			else			{				//cout << "password wrong: " << password << " != " << pPacket->getPassword().c_str() << endl;			}		}		else		{			//cout << "ID wrong: " << pPacket->getID().c_str() << endl;			// 盔贰绰 救登绰扒单..			// 货 荤侩磊绰 公炼扒 眠啊茄促绊 齿付喉秦辑 弊贰 窍扼匙. 擎~~~			cout << "NetMarble New Player: " << pPacket->getID().c_str() << endl;			// 咯扁鳖瘤 坷搁 公炼扒 齿付喉捞扼绊 夯促.			// SpecialEventCount 漠烦篮 2肺 技泼秦霖促. 溜, 捞亥飘 酒捞袍阑 捞固霖吧肺 积阿			// 抗距啊涝 茄 逞甸 茄抛父 酒捞袍 霖促.			// 2003.04.30 by bezz, DEW			pStmt->executeQuery("INSERT IGNORE INTO Player (PlayerID, Password, Name, SSN, SpecialEventCount, Event, creation_date) Values ('%s', '%s', '%s', '123456-1122339', 2, 0, CURDATE())",								pPacket->getID().c_str(), 								pPacket->getPassword().c_str(), 								pPacket->getID().c_str());			//string  connectIP  = pPlayer->getSocket()->getHost();			// LoginPlayerData 俊 IP 沥焊甫 巢扁骨肺 鞘夸绝促. by bezz 2003.04.21			//pStmt->executeQuery("INSERT IGNORE INTO PlayerIPList (PlayerID) Values('%s')",			//						pPacket->getID().c_str());			return true;		}		SAFE_DELETE(pStmt);	}	END_DB(pStmt)	} catch (Throwable& t) {		return false;	}#endif	__END_DEBUG_EX __END_CATCH	return false;}bool isBlockIP(const string& ip){#ifdef __LOGIN_SERVER__	Statement* pStmt = NULL;	BEGIN_DB	{		uint i = ip.find_first_of('.',0);		uint j = ip.find_first_of('.',i+1);		uint k = ip.find_first_of('.',j+1);		/*		 * ip = 61.78.53.228		 * classA = 61		 * classB = 61.78		 * classC = 61.78.53		 */		string classA = ip.substr(0, i);		string classB = ip.substr(0, j);		string classC = ip.substr(0, k);//		int classD    = atoi(ip.substr(k+1, ip.size()-k-1).c_str());		pStmt = g_pDatabaseManager->getConnection("DARKEDEN")->createStatement();		Result* pResult = pStmt->executeQuery(			"SELECT class, first, last FROM IPBlockInfo WHERE			(IP = '%s' AND class=1) OR			(IP = '%s' AND class=2) OR			(IP = '%s')",			classA.c_str(), classB.c_str(), classC.c_str() );		while ( pResult->next() )		{			int ipClass = pResult->getInt(1);			int first = pResult->getInt(2);			int last = pResult->getInt(3);			int index;			switch ( ipClass )			{				// classC 啊 嘎绊 裹困啊 瘤沥等 版快				case 0:					index = atoi(ip.substr(k+1, ip.size()-k-1).c_str());					break;				// classA 啊 嘎绊 裹困啊 瘤沥等 版快				case 1:					index = atoi(ip.substr(i+1, j-i-1).c_str());					break;				// classB 啊 嘎绊 裹困啊 瘤沥等 版快				case 2:					index = atoi(ip.substr(j+1, k-j-1).c_str());					break;				default:					index = -1;					break;			}			if ( index < 0 ) return true;			if ( index >= first && index <= last )				return true;/*			if ( ipClass == 0 )			{				if ( classD >= first && classD <= last )				{					return true;				}			}			else			{				return true;			}*/		}		SAFE_DELETE(pStmt); // 2002.1.16 by sigi	}	END_DB(pStmt)	return false;#endif}

⌨️ 快捷键说明

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