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

📄 serverdlg.cpp

📁 决战帝王1.5武神降临对喜爱决战的玩家共享研究用
💻 CPP
📖 第 1 页 / 共 5 页
字号:
	if(!GetEventItemNewTable())
	{
		EndDialog(IDCANCEL);
		return FALSE;
	}

	if(!GetEventBlockData())
	{
		EndDialog(IDCANCEL);
		return FALSE;
	}
/*
	//----------------------------------------------------------------------
	//	Royal Rumble Initialize
	//----------------------------------------------------------------------
	if( !GetRoyalRumbleData() )
	{
		EndDialog(IDCANCEL);
		return FALSE;
	}
*/
	//----------------------------------------------------------------------
	//	Catch Server Local IP Address...(218.50.5. bandwith)
	//----------------------------------------------------------------------
	if(!GetLocalIPAddress())
	{
		AfxMessageBox("Error GetLocalIPAddress()");
		EndDialog(IDCANCEL);
		return FALSE;
	}

	//----------------------------------------------------------------------
	//	To Remove Users In CURRENTUSER Table for revival Server
	//----------------------------------------------------------------------
	if(!RemoveSessionCurrentUser())
	{
		AfxMessageBox("Error 2");
		EndDialog(IDCANCEL);
		return FALSE;
	}

	g_dwItemSerial = 0;		// Item Logging

	g_dwFortressTime = 30;

	//----------------------------------------------------------------------
	//	Show current Server Setting ...
	//----------------------------------------------------------------------
	SetIndexText(nServerIndex);
	SetPortText(g_server[nServerIndex]->m_nPort);
	SetZoneText(szZone);

	//----------------------------------------------------------------------
	//	Start NPC THREAD
	//----------------------------------------------------------------------
	ResumeAI();

	//----------------------------------------------------------------------
	//	Start Accepting...
	//----------------------------------------------------------------------
//	do
//	{
//		if(g_TotalNPC == (g_CurrentNPC + g_CurrentNPCError)) break;
//
//	} while(TRUE);
//
//	TRACE("醚 %d NPC 吝 泅犁 %d NPC 檬扁拳啊 场车嚼聪促.\n", g_TotalNPC, g_CurrentNPC);
	
	//m_Com.StartAccepting();

	if( !InitBridgeServerConnection() )
	{
		AfxMessageBox( "Can't open to bridge server" );
		return FALSE;
	}

	m_nTimerID = SetTimer(10000, 1000*60, NULL);

	m_nEventItemTimerID = SetTimer( 10001, 60 * 1000, NULL );				// 捞亥飘 酒捞袍阑 谎府扁 困茄 鸥捞赣
	
	m_nBridgeTimerID = SetTimer( 10002, 1000, NULL );

	//track this instance so any other instances can find us.
	m_InstanceChecker.TrackFirstInstanceRunning();

	// 烹脚 胶饭靛 檬扁拳...
	InitThreads();

	// 荤侩磊 立加 檬扁拳...
	if ( !m_UserBase.Listen( g_server[nServerIndex]->m_nPort ) )  //PORT_ADD_ZERO
		return FALSE;
	//m_UserBase.m_bAcceptEnableFlag = TRUE;

	// 鸥捞赣 技泼...
	m_nAliveTimerID = SetTimer( ALIVE_FILL_TIMER, 30000, NULL );

	// 蜡历荐 墨款泼
	m_iUserCountCount = 0;

//	PostMessage(UM_START_SERVER,0,0);

	return TRUE;  // return TRUE  unless you set the focus to a control
}

////////////////////////////////////////////////////////////////////////////////////
//	Server Information DB Open & Load ...
//
BOOL CServerDlg::GetServerInfoData()
{
	SQLHSTMT		hstmt = NULL;
	SQLRETURN		retcode;
	TCHAR			szSQL[1024];

	int i, iNum = 0;
	int* pZone = NULL;

	SQLINTEGER	sInd;
	SQLSMALLINT sSid, sPort, sZone, sDBIndex;
	SQLCHAR		strAddr[16];

	::ZeroMemory(szSQL, sizeof(szSQL));
	::ZeroMemory(strAddr, sizeof(strAddr));

	sSid =sPort = sZone = 0;
	sDBIndex = -1;
	sInd = 0;

	_sntprintf(szSQL, sizeof(szSQL), TEXT("{call LOAD_SERVERINFO}"));

	int db_index = 0;
	CDatabase* pDB = g_DB[AUTOMATA_THREAD].GetDB( db_index );
	if( !pDB ) return FALSE;

	retcode = SQLAllocHandle( (SQLSMALLINT)SQL_HANDLE_STMT, pDB->m_hdbc, &hstmt );

	if( retcode != SQL_SUCCESS )
	{
		TRACE("Fail To Load Guild_Store Attack List Data !!\n");

//		g_DB[AUTOMATA_THREAD].ReleaseDB(db_index);
		return FALSE;
	}

	retcode = SQLExecDirect( hstmt, (unsigned char*)szSQL, SQL_NTS);

	if( retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO )
	{
		while(1)
		{
			retcode = SQLFetch( hstmt );
			if( retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO )
			{
				i = 1;

				SERVERINFO* pNewData = new SERVERINFO;

				SQLGetData( hstmt, i++, SQL_C_SSHORT, &sSid, sizeof(SQLSMALLINT), &sInd );
				SQLGetData( hstmt, i++, SQL_C_SSHORT, &sDBIndex, sizeof(SQLSMALLINT), &sInd );
				SQLGetData( hstmt, i++, SQL_C_CHAR,	  strAddr,sizeof(strAddr),	  &sInd );
				SQLGetData( hstmt, i++, SQL_C_SSHORT, &sPort, sizeof(SQLSMALLINT),&sInd );

				while(TRUE)
				{
					retcode = SQLGetData( hstmt,i++,SQL_C_SSHORT,&sZone,sizeof(SQLSMALLINT),&sInd );

					if( retcode != SQL_SUCCESS ) break;

					iNum = pNewData->m_zone.GetSize();
					if(iNum >= 1)
					{						
						if( sZone == *(pNewData->m_zone[iNum - 1]) ) break;
//						if( sZone == -1 ) break;
						if( sZone == -1 ) continue;

						if(i > 100) return FALSE;
					}
					
					pZone = new int;	
					*pZone = (int)sZone;
					pNewData->m_zone.Add(pZone);

					sZone = -1;
				};

				pNewData->m_sid		= sSid;			// Field 0
				pNewData->m_sDBIndex= sDBIndex;		// Field 1
				pNewData->m_szAddr	= strAddr;		// Field 2
				pNewData->m_nPort	= sPort;		// Field 3

				g_server.Add(pNewData);
			}
			else break;
		}
	}
	else
	{
		DisplayErrorMsg(hstmt);
		retcode = SQLFreeHandle( (SQLSMALLINT)SQL_HANDLE_STMT, hstmt);
//		BREAKPOINT();

		g_DB[AUTOMATA_THREAD].ReleaseDB(db_index);
		return FALSE;
	}

	retcode = SQLFreeHandle( (SQLSMALLINT)SQL_HANDLE_STMT, hstmt);
	g_DB[AUTOMATA_THREAD].ReleaseDB(db_index);

	return TRUE;
}

////////////////////////////////////////////////////////////////////////////////////
//	Zone Town Potal Information DB Open & Load ...
//
BOOL CServerDlg::GetZoneInfoData()
{
	CZoneInfoSet ZoneInfoSet;

	try 
	{
		if(ZoneInfoSet.IsOpen()) ZoneInfoSet.Close();
		if(!ZoneInfoSet.Open()) 
		{
			AfxMessageBox(_T("ZoneInfo DB Open Fail"));
			return FALSE;
		}
		if(ZoneInfoSet.IsBOF()) 
		{
			AfxMessageBox(_T("ZoneInfo DB Empty"));
			return FALSE;
		}
		
		g_WeatherZone.RemoveAll();
		
		while(!ZoneInfoSet.IsEOF())
		{
			ZONEINFO* pNewData = new ZONEINFO;
			
			pNewData->iSid = ZoneInfoSet.m_sSid;
			pNewData->iZone = ZoneInfoSet.m_sZone;
			pNewData->iPkMode = (int)ZoneInfoSet.m_tPkMode;
			pNewData->iPotalX = ZoneInfoSet.m_sPotalX;
			pNewData->iPotalY = ZoneInfoSet.m_sPotalY;
			pNewData->iPotalX1 = ZoneInfoSet.m_sPotalX1;
			pNewData->iPotalY1 = ZoneInfoSet.m_sPotalY1;
			pNewData->iPotalZone = ZoneInfoSet.m_sPotalZone;

			if(ZoneInfoSet.m_tWeather == 1) SetWeatherZone(ZoneInfoSet.m_sZone);

			g_TownPotal.Add(pNewData);
			ZoneInfoSet.MoveNext();
		}

		ZoneInfoSet.Close();
		return TRUE;
	}
	catch(CMemoryException * e)
	{
		e->ReportError();
		e->Delete();
	}
	catch(CDBException* e)
	{
		e->ReportError();
		e->Delete();
	}

	return FALSE;
}

///////////////////////////////////////////////////////////////////////////////////
//	皋葛府 沥府
//
BOOL CServerDlg::DestroyWindow() 
{

//	USER *pUser = NULL;
	int i, j, x, y;


	if(g_fpSpeedHack.m_hFile != CFile::hFileNull) g_fpSpeedHack.Close();
	if(g_fpBackServer.m_hFile != CFile::hFileNull) g_fpBackServer.Close();
	if(g_fpGuildHouseRank.m_hFile != CFile::hFileNull) g_fpGuildHouseRank.Close();
	if(g_fpEventItem.m_hFile != CFile::hFileNull) g_fpEventItem.Close();

	if(m_nTimerID) KillTimer(10000);
	if(m_nEventItemTimerID) KillTimer(10001);

	// Alive 鸥捞赣 瘤快扁...
	if(m_nAliveTimerID) KillTimer(ALIVE_FILL_TIMER);

	if( m_nBridgeTimerID ) KillTimer( 10002 );

	g_bNpcExit = TRUE;
	


	// RollBack Shared Memory 俊 沥惑 辆丰烙阑 扁废
	if(m_MemRollBack.m_hMapping != NULL)
	{
		TCHAR* pData = (TCHAR*)m_MemRollBack.m_lpData;
		*pData = 0;
	}

	// User DB Shared Memory 力芭
	for(i = 0; i < g_arSharedMemory.GetSize(); i++)
	{
		if( g_arSharedMemory[i] )
		{
			delete g_arSharedMemory[i];
		}
	}
	g_arSharedMemory.RemoveAll();

	for(i = 0; i < g_arStoreSharedMemory.GetSize(); i++)
	{
		if( g_arStoreSharedMemory[i] )
		{
			delete g_arStoreSharedMemory[i];
		}
	}
	g_arStoreSharedMemory.RemoveAll();

	for(i = 0; i < g_arFortressSharedMemory.GetSize(); i++)
	{
		if( g_arFortressSharedMemory[i] )
		{
			delete g_arFortressSharedMemory[i];
		}
	}
	g_arFortressSharedMemory.RemoveAll();

	for(i = 0; i < g_arGuildHouseSharedMemory.GetSize(); i++)
	{
		if( g_arGuildHouseSharedMemory[i] )
		{
			delete g_arGuildHouseSharedMemory[i];
		}
	}
	g_arGuildHouseSharedMemory.RemoveAll();

	for(i = 0; i < g_arNpcThread.GetSize(); i++)
	{
		WaitForSingleObject(g_arNpcThread.GetAt(i)->m_pThread->m_hThread, INFINITE);
	}

	for(i = 0; i < g_arEventNpcThread.GetSize(); i++)
	{
		WaitForSingleObject(g_arEventNpcThread.GetAt(i)->m_pThread->m_hThread, INFINITE);
	}

	// 皋老 俊捞傈飘 傍蜡皋葛府 秦力
	CloseMailQueue();

	// 酒捞袍 DB抛捞喉 昏力 2001.1.17
	for( i = 0; i < g_DBItemArray.GetSize(); i++)
	{
		if( g_DBItemArray[i] )
		{
			delete g_DBItemArray[i];
		}
	}
	g_DBItemArray.RemoveAll();

	// Item Table Array Delete ...
	for(i = 0; i < g_arItemTable.GetSize(); i++)
	{
		if(g_arItemTable[i]) 
		{
			delete g_arItemTable[i];
		}
	}
	g_arItemTable.RemoveAll();

	// Magic Item Table Array Delete ...
	for(i = 0; i < g_arMagicItemTable.GetSize(); i++)
	{
		if(g_arMagicItemTable[i]) 
		{
			delete g_arMagicItemTable[i];
		}
	}
	g_arMagicItemTable.RemoveAll();

	// EBody Table Array Delete ...
	for(i = 0; i < g_arEBodyTable.GetSize(); i++)
	{
		if(g_arEBodyTable[i]) 
		{
			delete g_arEBodyTable[i];
		}
	}
	g_arEBodyTable.RemoveAll();

	// EBody Upgrade Table Array Delete ...
	for(i = 0; i < g_arEBodyUpgradeTable.GetSize(); i++)
	{
		if(g_arEBodyUpgradeTable[i]) 
		{
			delete g_arEBodyUpgradeTable[i];
		}
	}
	g_arEBodyUpgradeTable.RemoveAll();

	// EBody Identify Table Array Delete ...
	for(i = 0; i < g_arEBodyIdentifyTable.GetSize(); i++)
	{
		if(g_arEBodyIdentifyTable[i]) 
		{
			delete g_arEBodyIdentifyTable[i];
		}
	}
	g_arEBodyIdentifyTable.RemoveAll();

	// Accessori Upgrade Table Array Delete ...
	for(i = 0; i < g_arAccessoriUpTable.GetSize(); i++)
	{
		if(g_arAccessoriUpTable[i]) 
		{
			delete g_arAccessoriUpTable[i];
		}
	}
	g_arAccessoriUpTable.RemoveAll();

	//
	// Remodeling Table Array Delete -----------------------------------------
	for(i = 0; i < g_arRemodelingTable1.GetSize(); i++)
	{
		if(g_arRemodelingTable1[i]) 
		{
			delete g_arRemodelingTable1[i];
		}
	}
	g_arRemodelingTable1.RemoveAll();

	for(i = 0; i < g_arRemodelingTable2.GetSize(); i++)
	{
		if(g_arRemodelingTable2[i]) 
		{
			delete g_arRemodelingTable2[i];
		}
	}
	g_arRemodelingTable2.RemoveAll();

	for(i = 0; i < g_arRemodelingTable3.GetSize(); i++)
	{
		if(g_arRemodelingTable3[i]) 
		{
			delete g_arRemodelingTable3[i];
		}
	}
	g_arRemodelingTable3.RemoveAll();

	g_arRemodelingRandomIndex1.RemoveAll();
	//-------------------------------------------------------------------------

	// Box Event Table Array Delete
	for(i = 0; i < g_arBoxEventTable.GetSize(); i++)
	{
		if(g_arBoxEventTable[i]) 
		{
			delete g_arBoxEventTable[i];
		}
	}
	g_arBoxEventTable.RemoveAll();

	// Summon Table Array Delete
	for(i = 0; i < g_arSummonTable.GetSize(); i++)
	{
		if(g_arSummonTable[i]) 
		{
			delete g_arSummonTable[i];
		}
	}
	g_arSummonTable.RemoveAll();
	
	// 荤侩磊俊霸 贸澜 酒捞袍阑 淋
	for(i = 0; i < g_arInitItem.GetSize(); i++)
	{
		if(g_arInitItem[i])
		{
			delete g_arInitItem[i];
		}
	}	
	g_arInitItem.RemoveAll();

	// Npc Chat Array Delete ...
	for( i = 0; i < g_arNpcChat.GetSize(); i++)
	{
		if( g_arNpcChat[i] )
		{
			if(g_arNpcChat[i]->m_strTalk != NULL)
			{
				delete [] g_arNpcChat[i]->m_strTalk;
				g_arNpcChat[i]->m_strTalk = NULL;
			}
			delete g_arNpcChat[i];
		}
	}
	g_arNpcChat.RemoveAll();

	// Skill Table Array Delete ...
	for(i = 0; i < g_arSkillTable.GetSize(); i++)
	{
		if(g_arSkillTable[i]) 
		{
			delete g_arSkillTable[i];
		}
	}
	g_arSkillTable.RemoveAll();

	// Psionic Table Array Delete ...
	for(i = 0; i < g_arPsiTable.GetSize(); i++)
	{
		if(g_arPsiTable[i]) 
		{
			delete g_arPsiTable[i];
		}
	}
	g_arPsiTable.RemoveAll();

	// Level Up Table Array Delete ...
	for(i = 0; i < g_arLevelUpTable.GetSize(); i++)
	{
		if(g_arLevelUpTable[i]) 
		{
			delete g_arLevelUpTable[i];
		}

⌨️ 快捷键说明

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