📄 serverdlg.cpp
字号:
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 + -