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

📄 mapserver.cpp

📁 韩国英雄王座倒闭后流出来部分源代码
💻 CPP
📖 第 1 页 / 共 3 页
字号:
//	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 + -