⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 zoneplayermanager.cpp

📁 天之炼狱1服务器端源文件游戏服务端不完整
💻 CPP
📖 第 1 页 / 共 3 页
字号:
							{								ZONE_COORD zoneCoord;								Assert( pCreature->isPC() );								PlayerCreature* pPC = dynamic_cast<PlayerCreature*>(pCreature);								Assert( pPC != NULL );								// 努扼捞攫飘俊 蜡丰 荤侩捞 场车促绰 皋矫瘤甫 免仿窍档废茄促.								// 老窜 公丰粮栏肺 捞悼窍霸 登骨肺 瘤陛 焊郴拎辑绰 家侩捞 绝促.								// 货肺款 粮俊 甸绢啊辑 皋矫瘤甫 罐档废 茄促.								Statement* pStmt = NULL;								BEGIN_DB								{									uint strID = STRID_END_PAY_PLAY;									// 菩剐府 夸陛力 秦力肺 牢茄 公丰粮 捞悼矫 皋矫瘤									if ( pTempPlayer->isFamilyFreePassEnd() )										strID = STRID_FAMILY_FREE_PLAY_END;									pStmt = g_pDatabaseManager->getConnection( "DARKEDEN" )->createStatement();									pStmt->executeQuery( "INSERT INTO Messages ( Receiver, Message ) VALUES ( '%s', '%s')", pPC->getName().c_str(), g_pStringPool->c_str( strID ) );																		if ( pCreature->isFlag( Effect::EFFECT_CLASS_LOGIN_GUILD_MESSAGE ) )										pCreature->removeFlag( Effect::EFFECT_CLASS_LOGIN_GUILD_MESSAGE );									SAFE_DELETE(pStmt);								}								END_DB(pStmt)															// 公丰粮栏肺 颗变促.								if ( g_pResurrectLocationManager->getRaceDefaultPosition( pPC->getRace(), zoneCoord ) )								{									transportCreature(pCreature, zoneCoord.id, zoneCoord.x, zoneCoord.y, true);								}								else								{									// 酒, 厚惑捞村...									throw Error("Critical Error : ResurrectInfo is not established!1");								}							}						#elif defined(__PAY_SYSTEM_FREE_LIMIT__) || defined(__PAY_SYSTEM_LOGIN__) 							//cout << "Pay timeout" << endl;							//throw DisconnectException();							PlayerCreature* pPC = dynamic_cast<PlayerCreature*>(pCreature);							Assert(pPC!=NULL);							if (pPC->isPayPlayAvaiable())							{								// 蜡丰粮老 版快 公丰粮栏肺 颗变促.								if (pZone->isPayPlay())								{									ZONE_COORD zoneCoord;									Assert( pCreature->isPC() );									PlayerCreature* pPC = dynamic_cast<PlayerCreature*>(pCreature);									Assert( pPC != NULL );																		if ( g_pResurrectLocationManager->getRaceDefaultPosition( pPC->getRace(), zoneCoord ) )									{										transportCreature(pCreature, zoneCoord.id, zoneCoord.x, zoneCoord.y, true);									}									else									{										// 酒, 厚惑捞村...										throw Error("Critical Error : ResurrectInfo is not established!1");									}								}								else								{									GCSystemMessage gcSystemMessage;									gcSystemMessage.setMessage( g_pStringPool->getString( STRID_EXPIRE_PREMIUM_SERVICE ) );									pTempPlayer->sendPacket( &gcSystemMessage );								}							}							else							{								pTempPlayer->kickPlayer( 30, KICK_MESSAGE_PAY_TIMEOUT );/*								EventKick* pEventKick = new EventKick(pTempPlayer);								pEventKick->setDeadline(30*10);								pTempPlayer->addEvent(pEventKick);								// 割 檬饶俊 漏赴促..绊 焊郴霖促.								GCKickMessage gcKickMessage;								gcKickMessage.setType( KICK_MESSAGE_PAY_TIMEOUT );								gcKickMessage.setSeconds( 30 );								pTempPlayer->sendPacket( &gcKickMessage ); */							}						#endif						}						// 菩剐府 夸陛力 利侩捞 场车促搁, 促矫 眉农窍瘤 臼霸 窍扁困俊 鸥涝阑 官层霖促.						if ( pTempPlayer->isFamilyFreePassEnd() )						{							pTempPlayer->setFamilyPayPartyType( FAMILY_PAY_PARTY_TYPE_NONE );						}#ifdef __CONNECT_CBILLING_SYSTEM__						if ( !pTempPlayer->isPayPlayer() )						{							// 蜡丰 矫埃 场车澜. 楼弗促.							pTempPlayer->kickPlayer( 30, KICK_MESSAGE_PAY_TIMEOUT );						}						else						{							// 蜡丰 荤侩磊狼 版快 pay info 甫 酒流 救 焊郴玲促搁 焊郴霖促.							if ( pTempPlayer->isCBillingVerified() && !pTempPlayer->isCBShowPayInfo() )							{								pTempPlayer->sendCBillingPayInfo();								pTempPlayer->setCBShowPayInfo();							}						}#endif					}				} 				catch (ProtocolException & pe) 				{					pTempPlayer->setPenaltyFlag(PENALTY_TYPE_KICKED);					pTempPlayer->setItemRatioBonusPoint(11);					try					{						CGLogoutHandler::execute( NULL, pTempPlayer );					}					catch ( DisconnectException& de )					{						filelog( "DIFF_ZG.log", "%s ZPM+PC+PE", de.toString().c_str() );						deletePlayer( pTempPlayer->getSocket()->getSOCKET() );						pushOutPlayer( pTempPlayer );					}					// by sigi. 2002.12.30					if (IsPayPlayEnd)					{						// by sigi. 2002.12.30						UserGateway::getInstance()->passUser( UserGateway::USER_OUT_ZPM_COMMAND_PAYPLAY_END );					}					else					{						// by sigi. 2002.12.30						UserGateway::getInstance()->passUser( UserGateway::USER_OUT_ZPM_COMMAND_ERROR );					}					/*					try 					{						// 免仿 滚欺甫 敲矾矫茄促.						pTempPlayer->disconnect(UNDISCONNECTED);					} 					catch (Throwable & t) 					{						filelog("ZonePlayerManagerBug.txt", "%s : %s", "ZonePlayerManager::processCommands(4)", t.toString().c_str());					}					deletePlayer(i);					deleteQueuePlayer(pTempPlayer);					// 敲饭捞绢 按眉甫 昏力茄促.					delete pTempPlayer;					*/				}			}		}	}//	__ENTER_CRITICAL_SECTION(m_Mutex)/*	if (m_MinFD == -1 && m_MaxFD == -1) {	// no player exist		m_Mutex.unlock();		return;	}	for (int i = m_MinFD ; i <= m_MaxFD ; i ++) {		if (m_pPlayers[i] != NULL) {			Assert (m_pPlayers[i] != NULL);			if (m_pPlayers[i]->getSocket()->getSockError()) {				try {				// 捞固 楷搬捞 辆丰登菌栏骨肺, 免仿 滚欺甫 敲矾矫秦辑绰 救等促.				m_pPlayers[i]->disconnect(DISCONNECTED);				} catch (Throwable & t) {				}				// 敲饭捞绢 按眉甫 昏力茄促.				delete m_pPlayers[i];					// 敲饭捞绢 概聪历俊辑 敲饭捞绢 器牢磐甫 昏力茄促.//				deletePlayer_NOBLOCKED(i);				deletePlayer(i);			} else {				try {					m_pPlayers[i]->processCommand();				} catch (ProtocolException & pe) {	//				LOG1("INVALID PROTOCOL %s (%s)\n", m_pPlayers[i]->getID().c_str() , pe.toString().c_str());					try {					// 免仿 滚欺甫 敲矾矫茄促.					m_pPlayers[i]->disconnect(UNDISCONNECTED);					} catch (Throwable & t) {					}					// 敲饭捞绢 按眉甫 昏力茄促.					delete m_pPlayers[i];					// 敲饭捞绢 概聪历俊辑 敲饭捞绢 器牢磐甫 昏力茄促.//					deletePlayer_NOBLOCKED(i);					deletePlayer(i);				}			}		}	}*///	__LEAVE_CRITICAL_SECTION(m_Mutex)	__END_DEBUG	__END_CATCH}////////////////////////////////////////////////////////////////////////// process all players' outputs////////////////////////////////////////////////////////////////////////void ZonePlayerManager::processOutputs () 	throw (IOException , Error){	__BEGIN_TRY	//__ENTER_CRITICAL_SECTION(m_Mutex)	if (m_MinFD == -1 && m_MaxFD == -1) // no player exist	{			//m_Mutex.unlock();		return;	}	//copyPlayers();	for (int i = m_MinFD ; i <= m_MaxFD ; i ++) 	{		if (FD_ISSET(i , &m_WriteFDs[1])) 		{			if (m_pPlayers[i] != NULL) 			{				GamePlayer* pTempPlayer = dynamic_cast<GamePlayer*>(m_pPlayers[i]);				Assert (pTempPlayer);				Assert (m_pPlayers[i] != NULL);				if (pTempPlayer->getSocket()->getSockError()) 				{						pTempPlayer->setPenaltyFlag(PENALTY_TYPE_KICKED);					pTempPlayer->setItemRatioBonusPoint(12);					try					{						CGLogoutHandler::execute( NULL, pTempPlayer );					}					catch ( DisconnectException& de )					{						filelog( "DIFF_ZG.log", "%s ZPM+PO+SOCKERR", de.toString().c_str() );						deletePlayer( pTempPlayer->getSocket()->getSOCKET() );						pushOutPlayer( pTempPlayer );					}					// by sigi. 2002.12.30					UserGateway::getInstance()->passUser( UserGateway::USER_OUT_ZPM_OUTPUT_ERROR );					/*					try 					{						// 捞固 楷搬捞 辆丰登菌栏骨肺, 免仿 滚欺甫 敲矾矫秦辑绰 救等促.						pTempPlayer->disconnect(DISCONNECTED);					} 					catch (Throwable & t) 					{						filelog("ZonePlayerManagerBug.txt", "%s : %s", "ZonePlayerManager::processOutput(1)", t.toString().c_str());					}					deletePlayer(i);					deleteQueuePlayer(pTempPlayer);					// 敲饭捞绢 按眉甫 昏力茄促.					delete pTempPlayer;					*/				} 				else 				{					try 					{						pTempPlayer->processOutput();					} 					catch (ConnectException & ce) 					{						pTempPlayer->setPenaltyFlag(PENALTY_TYPE_KICKED);						pTempPlayer->setItemRatioBonusPoint(13);						try						{							CGLogoutHandler::execute( NULL, pTempPlayer );						}						catch ( DisconnectException& de )						{							filelog( "DIFF_ZG.log", "%s ZPM+PO+CE", de.toString().c_str() );							deletePlayer( pTempPlayer->getSocket()->getSOCKET() );							pushOutPlayer( pTempPlayer );						}						// by sigi. 2002.12.30						UserGateway::getInstance()->passUser( UserGateway::USER_OUT_ZPM_OUTPUT_DISCONNECT );						/*						try 						{							// 捞固 楷搬捞 辆丰登菌栏骨肺, 免仿 滚欺甫 敲矾矫秦辑绰 救等促.							pTempPlayer->disconnect(DISCONNECTED);						} 						catch (Throwable & t) 						{							filelog("ZonePlayerManagerBug.txt", "%s : %s", "ZonePlayerManager::processOutput(4)", t.toString().c_str());						}						deletePlayer(i);						deleteQueuePlayer(pTempPlayer);						// 敲饭捞绢 按眉甫 昏力茄促.						delete pTempPlayer;						*/					} 					catch (ProtocolException & cp) 					{						pTempPlayer->setPenaltyFlag(PENALTY_TYPE_KICKED);						pTempPlayer->setItemRatioBonusPoint(14);						try						{							CGLogoutHandler::execute( NULL, pTempPlayer );						}						catch ( DisconnectException& de )						{							filelog( "DIFF_ZG.log", "%s ZPM+PO+PE", de.toString().c_str() );							deletePlayer( pTempPlayer->getSocket()->getSOCKET() );							pushOutPlayer( pTempPlayer );						}						// by sigi. 2002.12.30						UserGateway::getInstance()->passUser( UserGateway::USER_OUT_ZPM_OUTPUT_DISCONNECT2 );						/*						// 捞固 楷搬捞 辆丰登菌栏骨肺, 免仿 滚欺甫 敲矾矫秦辑绰 救等促.						try 						{							pTempPlayer->disconnect(DISCONNECTED);						} 						catch (Throwable & t) 						{							filelog("ZonePlayerManagerBug.txt", "%s : %s", "ZonePlayerManager::processOutput(7)", t.toString().c_str());						}						deletePlayer(i);						deleteQueuePlayer(pTempPlayer);						// 敲饭捞绢 按眉甫 昏力茄促.						delete pTempPlayer;						*/					}				}			}		}	}	//__LEAVE_CRITICAL_SECTION(m_Mutex)	__END_CATCH}////////////////////////////////////////////////////////////////////////// process all players' exceptions//// 泅犁鳖瘤绰 OOB 单捞鸥甫 傈价且 拌裙篮 绝促.// 蝶扼辑, 父距 OOB啊 难廉 乐促搁 俊矾肺 埃林窍绊 立加阑 犬 漏扼 滚赴促.////////////////////////////////////////////////////////////////////////void ZonePlayerManager::processExceptions () 	throw (IOException , Error){	__BEGIN_TRY	//__ENTER_CRITICAL_SECTION(m_Mutex)	if (m_MinFD == -1 && m_MaxFD == -1) // no player exist	{			//m_Mutex.unlock();		return;	}	//	copyPlayers();	for (int i = m_MinFD ; i <= m_MaxFD ; i ++) 	{		if (FD_ISSET(i , &m_ExceptFDs[1])) 		{			if (m_pPlayers[i] != NULL && m_pPlayers[i] == m_pPlayers[i]) 			{				GamePlayer* pTempPlayer = dynamic_cast<GamePlayer*>(m_pPlayers[i]);				Assert (pTempPlayer != NULL);				Assert (m_pPlayers[i] != NULL);				pTempPlayer->setPenaltyFlag(PENALTY_TYPE_KICKED);				pTempPlayer->setItemRatioBonusPoint(15);				try				{					CGLogoutHandler::execute( NULL, pTempPlayer );				}				catch ( DisconnectException& de )				{					filelog( "DIFF_ZG.log", "%s ZPM+PE", de.toString().c_str() );					deletePlayer( pTempPlayer->getSocket()->getSOCKET() );					pushOutPlayer( pTempPlayer );				}				// by sigi. 2002.12.30				UserGateway::getInstance()->passUser( UserGateway::USER_OUT_ZPM_EXCEPTION );				/*				try 				{					// 免仿 滚欺甫 敲矾矫茄促.					m_pPlayers[i]->disconnect(UNDISCONNECTED);				} 				catch (Throwable & t) 				{					filelog("ZonePlayerManagerBug.txt", "%s : %s", "ZonePlayerManager::processException(1)", t.toString().c_str());				}				deletePlayer(i);				deleteQueuePlayer(pTempPlayer);				// 敲饭捞绢 按眉甫 昏力茄促.				delete pTempPlayer;				*/			}		}	}	//__LEAVE_CRITICAL_SECTION(m_Mutex)	__END_CATCH}	//////////////////////////////////////////////////////////////////////// 漂沥 敲饭捞绢甫 概聪历俊 眠啊茄促.//////////////////////////////////////////////////////////////////////void ZonePlayerManager::addPlayer (GamePlayer* pGamePlayer) 	throw (DuplicatedException , Error){	__BEGIN_TRY	__ENTER_CRITICAL_SECTION(m_Mutex)	PlayerManager::addPlayer(pGamePlayer);	SOCKET fd = pGamePlayer->getSocket()->getSOCKET();	// m_MinFD , m_MaxFD 甫 犁炼沥茄促.	if (m_MinFD == -1 && m_MaxFD == -1) 	{		// 弥檬狼 敲饭捞绢狼 版快		m_MinFD = m_MaxFD = fd;	} 	else 	{		m_MinFD = min(fd , m_MinFD);		m_MaxFD = max(fd , m_MaxFD);	}	// 葛电 fd_set 俊 fd 厚飘甫 on 矫挪促.	// m_XXXFDs[1] 篮 促澜锅俊 贸府秦林搁 等促.	FD_SET(fd , &m_ReadFDs[0]);	FD_SET(fd , &m_WriteFDs[0]);	FD_SET(fd , &m_ExceptFDs[0]);	__LEAVE_CRITICAL_SECTION(m_Mutex)	__END_CATCH}//////////////////////////////////////////////////////////////////////// 漂沥 敲饭捞绢甫 概聪历俊 眠啊茄促.//////////////////////////////////////////////////////////////////////void ZonePlayerManager::addPlayer_NOBLOCKED (GamePlayer* pGamePlayer) 	throw (DuplicatedException , Error){	__BEGIN_TRY	PlayerManager::addPlayer(pGamePlayer);	SOCKET fd = pGamePlayer->getSocket()->getSOCKET();	// m_MinFD , m_MaxFD 甫 犁炼沥茄促.	if (m_MinFD == -1 && m_MaxFD == -1) 	{

⌨️ 快捷键说明

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