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