?? mapserver.cpp
字號:
// MapServer.cpp : Implementation of WinMain
//
//
//
//
// Note: Proxy/Stub Information
// To build a separate proxy/stub DLL,
// run nmake -f MapServerps.mk in the project directory.
////////////////////////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "resource.h"
#include <initguid.h>
#include "MapServer.h"
#include <windows.h>
#include <initguid.h>
#include <ole2.h>
#include <mstask.h>
#include <msterr.h>
#include <wchar.h>
#include "MapServer_i.c"
#include <stdio.h>
#include "MapServerSocket.h"
#include "DBSocket.h"
#include "CUdpSocket.h"
#include "CLog.h"
#include "ServerMem.h"
#include "QuestEngine.h"
#include "Param_MapServer.h"
#ifdef DEF_AZIT
#include "AzitManager.h"
#endif
#ifdef DEF_UNIQUEITEM
#include "UniqueManager.h"
#endif
////////////////////////////////////////////////////////////////////////////////////////
// Global Function
////////////////////////////////////////////////////////////////////////////////////////
BOOL CALLBACK MainDlgProc(HWND hDlg,UINT iMessage,WPARAM wParam,LPARAM lParam);
extern void GetMapServerVersion() ;
void UserLog(_LPSOCKET_FD p, const char *pszParam, ...); //Jason 2004-07-22
////////////////////////////////////////////////////////////////////////////////////////
// Global Value
////////////////////////////////////////////////////////////////////////////////////////
ServerMem *g_pServerMem; // Server儈 Memory包訪
CQuestEngine *g_pQuestEngine; // Quest Engine
MapServerSocket *g_pServer;
_LPDBSOCK g_lpDBSock ;
_LPUDPSOCKET g_lpUdpSock ;
_LPCLOGMANAGER g_lpLog ;
extern BaseData g_Base; // Data Base 包訪
extern Map *g_pMap; // MAP 包府 (User撈悼)
extern SafeList * g_AIMsgList[MAX_MAPLAYER]; // AI貿府儈 Msg (NPC 儈)
HWND g_MainHwnd;
HINSTANCE g_hInstance;
int g_MapIndex = 0; // 泅犁 急琶等 MAP ID
////////////////////////////////////////////////////////////////////////////////////////
// Debug Window Message Loop
////////////////////////////////////////////////////////////////////////////////////////
BOOL CALLBACK MainDlgProc(HWND hDlg,UINT iMessage,WPARAM wParam,LPARAM lParam)
{
g_MainHwnd = hDlg;
HDC hdc;
PAINTSTRUCT ps;
static HANDLE hTimer;
switch(iMessage)
{
case WM_INITDIALOG:
{
// ------------------------------------------------------------------------
// Read Registery
// ------------------------------------------------------------------------
BOOL bRun = _Module.ReadRegisteryValue();
if( !bRun ) return FALSE;
// ------------------------------------------------------------------------
// Map Server 角青
// ------------------------------------------------------------------------
bRun = _Module.Run_MapServer();
if( !bRun )
{
MessageBox( NULL, "Map Server Run_MapServer error", "Map Server", MB_OK );
_Module.Clean_MapServer();
EndDialog( hDlg, 0);
return FALSE;
}
SetDlgItemText( hDlg, IDC_COUNT, _T("0") );
// Timer甫 Setting矯糯
// hTimer = (HANDLE)SetTimer( g_MainHwnd, 1,30000, NULL );
}
break;
case WM_COMMAND:
switch ( LOWORD(wParam) )
{
case IDOK:
{
g_pServer->Server_Stop(); // 立加吝牢 葷儈磊甫 立加 輛豐 矯糯
EndDialog( hDlg, 0 );
WSACleanup();
return TRUE;
}
break;
case RESET:
{
InvalidateRect( g_MainHwnd, NULL, TRUE );
}
break;
// ----------------------------------------------------------------------------
// 秦寸 VIEW甫 refresh矯糯
// ----------------------------------------------------------------------------
case VIEW0 : g_MapIndex = 0; InvalidateRect( g_MainHwnd, NULL, TRUE ); break;
case VIEW1 : g_MapIndex = 1; InvalidateRect( g_MainHwnd, NULL, TRUE ); break;
case VIEW2 : g_MapIndex = 2; InvalidateRect( g_MainHwnd, NULL, TRUE ); break;
case VIEW3 : g_MapIndex = 3; InvalidateRect( g_MainHwnd, NULL, TRUE ); break;
case VIEW4 : g_MapIndex = 4; InvalidateRect( g_MainHwnd, NULL, TRUE ); break;
case VIEW5 : g_MapIndex = 5; InvalidateRect( g_MainHwnd, NULL, TRUE ); break;
case VIEW6 : g_MapIndex = 6; InvalidateRect( g_MainHwnd, NULL, TRUE ); break;
case VIEW7 : g_MapIndex = 7; InvalidateRect( g_MainHwnd, NULL, TRUE ); break;
case VIEW8 : g_MapIndex = 8; InvalidateRect( g_MainHwnd, NULL, TRUE ); break;
case VIEW9 : g_MapIndex = 9; InvalidateRect( g_MainHwnd, NULL, TRUE ); break;
case VIEW10 : g_MapIndex = 10; InvalidateRect( g_MainHwnd, NULL, TRUE ); break;
case VIEW11 : g_MapIndex = 11; InvalidateRect( g_MainHwnd, NULL, TRUE ); break;
case VIEW12 : g_MapIndex = 12; InvalidateRect( g_MainHwnd, NULL, TRUE ); break;
case VIEW13 : g_MapIndex = 13; InvalidateRect( g_MainHwnd, NULL, TRUE ); break;
case VIEW14 : g_MapIndex = 14; InvalidateRect( g_MainHwnd, NULL, TRUE ); break;
case VIEW15 : g_MapIndex = 15; InvalidateRect( g_MainHwnd, NULL, TRUE ); break;
// ----------------------------------------------------------------------------
// 扁檬 DB單撈鷗甫 促矯 Load竊
// ----------------------------------------------------------------------------
case RELOAD:
{
g_Base.LoadDBData(); // DB俊輯 扁檬 瀝焊甫 掘瀾
}
}
return FALSE;
////////////////////////////////////////////////////////////
// 泅犁 惑怕甫 免仿 矯糯
////////////////////////////////////////////////////////////
/*
case WM_TIMER:
{
InvalidateRect( g_MainHwnd, NULL, TRUE );
}
break;
*/
case WM_PAINT:
{
hdc = BeginPaint( g_MainHwnd, &ps );
int nX = 210;
int nY = 25;
// ----------------------------------------------------------------------------
// 秦寸 Map File Index棺 撈撫闌 免仿 矯糯
// ----------------------------------------------------------------------------
// DrawText Function欄肺 免仿 矯糯
// ----------------------------------------------------------------------------
// Map狼 Object棺 PC/NPC甫 免仿 矯糯
// ----------------------------------------------------------------------------
for( int i=0; i<512 ;i++)
{
for( int j=0; j<512; j++ )
{
switch( g_pMap->MapView( g_MapIndex, i , j ) )
{
// --------------------------------------------------------------------
// 哎薦 絕綽 版快
// --------------------------------------------------------------------
case -1 :
{
SetPixel( hdc, nX+i , nY+j , RGB(0,0,0) );
}
break;
// --------------------------------------------------------------------
// PC啊 困摹茄 版快
// --------------------------------------------------------------------
case MAP_PC :
{
SetPixel( hdc, nX+i , nY+j , RGB(0,255,0) );
}
break;
// --------------------------------------------------------------------
// NPC
// --------------------------------------------------------------------
case MAP_NPC :
{
SetPixel( hdc, nX+i , nY+j, RGB(255,0,0) );
}
break;
// --------------------------------------------------------------------
// 家券 閣膠磐
// --------------------------------------------------------------------
case MAP_SUMMONNPC :
{
SetPixel( hdc, nX+i, nY+j, RGB(0,0,255));
}
break;
// --------------------------------------------------------------------
// 閣膠磐
// --------------------------------------------------------------------
case MAP_MONSTER :
{
SetPixel( hdc, nX+i, nY+j, RGB(0,0,255));
}
break;
default : break;
}
}
}
EndPaint( g_MainHwnd, &ps );
}
break;
// ------------------------------------------------------------------------------------
// Clean Memory
// ------------------------------------------------------------------------------------
case WM_DESTROY:
{
_Module.Clean_MapServer();
}
break;
}
return FALSE;
}
////////////////////////////////////////////////////////////////////////////////////////
// Error Msg免仿
////////////////////////////////////////////////////////////////////////////////////////
void ErrorMsg(const char *pszParam, ...)
{
char buf[1024];
va_list va;
va_start(va, pszParam);
vsprintf(buf, pszParam, (va_list)va);
va_end(va);
// --------------------------------------------------------------------------------
// Debug Message免仿
// --------------------------------------------------------------------------------
#if defined(_DEBUG) || defined(DEF_BUGTRACE)
SendDlgItemMessage( g_MainHwnd, IDC_MESSAGE_LIST, LB_ADDSTRING, 0, (LPARAM)buf );
TRACE("(X) Error[%s] \n", buf) ;
#endif
// --------------------------------------------------------------------------------
// Log File扁廢
// - 眠饒 LOG SERVER客 楷悼 矯糯
// --------------------------------------------------------------------------------
//CTime nowTime = CTime::GetCurrentTime(); //泅犁 朝磊甫 備竊.
//Jason Added
static CTime nowTime = 0;
CTime tempTime = CTime::GetCurrentTime();
static FILE* f = NULL;
static char strFile[200];
static int nCounter = 0;
if(nCounter++ > 10)
{
fflush(f);
nCounter = 0;
}
if(nowTime.GetDay() != tempTime.GetDay() || f == NULL)
{
sprintf( strFile, "%s%s/log/%s-%02d%02d.log", _Module.m_szDrv, _Module.m_szPath, _Module.m_szFname, tempTime.GetMonth(), tempTime.GetDay() );
if(f != NULL) fclose(f);
f = fopen( strFile ,"a+t");
nowTime = tempTime;
}
if(f != NULL)
{
int ret = fprintf(f,"%2d:%2d:%2d - %s\r\n",
tempTime.GetHour() ,
tempTime.GetMinute() ,
tempTime.GetSecond() ,
buf
);
if(ret < 0)
{
sprintf( strFile, "%s%s/log/%s-%02d%02d.log", _Module.m_szDrv, _Module.m_szPath, _Module.m_szFname, tempTime.GetMonth(), tempTime.GetDay() );
f = fopen( strFile ,"a+t");
if(f)
{
fprintf(f,"%2d:%2d:%2d - %s\r\n",
tempTime.GetHour() ,
tempTime.GetMinute() ,
tempTime.GetSecond() ,
buf
);
}
}
}
}
////////////////////////////////////////////////////////////////////////////////////////
// User Log免仿
// Jason 2004-07-22
// 概鍋 頗老 凱絆 摧綽單 坷滾慶靛啊 樂欄骨肺 薦瀝秦具 茄促.
////////////////////////////////////////////////////////////////////////////////////////
void UserLog(_LPSOCKET_FD p, const char *pszParam, ...)
{
if(false == p->bLog)
return;
char buf[1024];
va_list va;
va_start(va, pszParam);
vsprintf(buf, pszParam, (va_list)va);
va_end(va);
// --------------------------------------------------------------------------------
// Debug Message免仿
// --------------------------------------------------------------------------------
#if defined(_DEBUG) || defined(DEF_BUGTRACE)
SendDlgItemMessage( g_MainHwnd, IDC_MESSAGE_LIST, LB_ADDSTRING, 0, (LPARAM)buf );
#endif
// --------------------------------------------------------------------------------
// Log File扁廢
// - 眠饒 LOG SERVER客 楷悼 矯糯
// --------------------------------------------------------------------------------
CTime nowTime = CTime::GetCurrentTime(); //泅犁 朝磊甫 備竊.
char strFile[MAX_PATH];
sprintf( strFile, "%s%s\\user log\\%s-%02d%02d.log", _Module.m_szDrv, _Module.m_szPath, p->pPlayer->m_strPlayerID, nowTime.GetMonth(), nowTime.GetDay() );
FILE* f = NULL;
f = fopen( strFile ,"a+t");
if( f == NULL ) return;
fprintf(f,"[%2d:%2d:%2d] - %s\r\n",
nowTime.GetHour() ,
nowTime.GetMinute() ,
nowTime.GetSecond() ,
buf
);
fflush(f);
fclose(f);
}
////////////////////////////////////////////////////////////////////////////////////////
// Log Msg 免仿
////////////////////////////////////////////////////////////////////////////////////////
void MapLog(const char *pszParam, ...)
{
char buf[200];
va_list va;
va_start(va, pszParam);
vsprintf(buf, pszParam, (va_list)va);
va_end(va);
_LPUDPPACKET lpUdpPacket = g_lpUdpSock->m_pUDPIOPool->Alloc();
char * cp = lpUdpPacket->strPacket ;
memcpy(cp,& _Module.m_nMapSeq,sizeof(DWORD)) ;
cp += sizeof(DWORD) ;
strcpy(cp,buf) ;
cp += strlen(buf) ;
lpUdpPacket->dwCommand = ZC_LOG_MAPSERVER ;
lpUdpPacket->dwSize = cp - lpUdpPacket->strPacket ;
g_lpUdpSock->SendToLogPacket(lpUdpPacket);
}
////////////////////////////////////////////////////////////////////////////////////////
// Message Debug Window俊 免仿矯糯
////////////////////////////////////////////////////////////////////////////////////////
void MessagePrint(const char *pszParam, ...)
{
#if defined(_DEBUG) || defined(DEF_BUGTRACE)
char buf[1024];
va_list va;
va_start(va, pszParam);
vsprintf(buf, pszParam, (va_list)va);
va_end(va);
SendDlgItemMessage( g_MainHwnd, IDC_MESSAGE_LIST, LB_ADDSTRING, 0, (LPARAM)buf );
#endif
}
////////////////////////////////////////////////////////////////////////////////////////
// 立加 Client箭磊甫 釬矯竊
////////////////////////////////////////////////////////////////////////////////////////
void MessageCount( CString pMessage )
{
SetDlgItemText( g_MainHwnd, IDC_COUNT,pMessage );
}
////////////////////////////////////////////////////////////////////////////////////////
// Purpose: 啊吝 備埃藹闌 撈儈茄 啊吝 罰待藹闌 備茄促. 惑困 藹老 薦廢 撤籃 犬伏肺 唱咳
// Input : iSpan -
////////////////////////////////////////////////////////////////////////////////////////
int iHeavyWeightSegementRandom(int iSpan)
{
if( iSpan <= 0 ) return 0;
int k = 0 ;
k = rand() % ((iSpan)*(iSpan+1) / 2) ;
int idx = sqrt(2 *k + 1/4) - 1/2 ;
return ( MIN( MAX(iSpan - idx,0), iSpan ) ) ;
}
////////////////////////////////////////////////////////////////////////////////////////
// Purpose: 啊吝 備埃藹闌 撈儈茄 啊吝 罰待藹闌 備茄促. 惑困 藹老 薦廢 撤籃 犬伏肺 唱咳
// Input : iSpan -
////////////////////////////////////////////////////////////////////////////////////////
int iWeightSegementRandom(int iSpan ,int iSegWeight)
{
int k = rand() % iSpan ;
// 備埃藹
int iSeg = k / iSegWeight ;
int idx = 0 ;
if (iSeg == 0 )
{
idx = k ;
}
else
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -