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

📄 newbieguide.cpp

📁 墨香最新私服
💻 CPP
字号:
// NewbieGuide.cpp: implementation of the CNewbieGuide class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "NewbieGuide.h"

#include "MHFile.h"
#include "HelperManager.h"
#include "ObjectManager.h"
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CNewbieGuide::CNewbieGuide()
{
	m_NewbieData.Initialize( 96 );
	m_dwFlag1 = m_dwFlag2 = m_dwFlag3 = 0;
}

CNewbieGuide::~CNewbieGuide()
{
	NEWBIEDATA* pData = NULL;
	m_NewbieData.SetPositionHead();
	while( pData = m_NewbieData.GetData() )
	{
		delete pData;
		pData = NULL;
	}
	m_NewbieData.RemoveAll();
}

void CNewbieGuide::LoadNewbieGuide( char* filename )
{
	CMHFile file;
#ifdef _FILE_BIN_
	if( !file.Init( filename, "rb") )
		return;
#else
	if( !file.Init( filename, "rt") )
		return;
#endif

	char buf[256];
	DWORD dwKey = 0;
	while( !file.IsEOF() )
	{
		file.GetString( buf );
		if( buf[0] == '}' )
			break;
		if( buf[0] == '#' )
		{
			strcpy( buf, (buf+1) );
			dwKey = (DWORD)atoi( buf );
			m_NewbieData.Add( LoadNewbieGuideData( &file, dwKey ), dwKey );
		}
	}
}

#define IF( buf, str, kind, data )	\
		if( strcmp(buf, str) == 0 )	\
		{							\
			data = kind;			\
		}														
#define ELSEIF( buf, str, kind, data )		\
		else if( strcmp(buf, str) == 0 )	\
		{									\
			data = kind;					\
		}				
NEWBIEDATA* CNewbieGuide::LoadNewbieGuideData( CMHFile* pfile, DWORD dwBitFlag )
{
	NEWBIEDATA* pData = new NEWBIEDATA;
	pData->m_dwBitFlag = dwBitFlag;
	
	char buf[256];	
	pfile->GetString( buf );

	IF( buf, "&CHAR",			eGameEvent_CharInterface, pData->m_dwKind )
	ELSEIF( buf, "&INVEN",		eGameEvent_InvenInterface, pData->m_dwKind )
	ELSEIF( buf, "&MUGONG",		eGameEvent_MugongInterface, pData->m_dwKind )
	ELSEIF( buf, "&QUEST",		eGameEvent_QuestInterface, pData->m_dwKind )
	ELSEIF( buf, "&JIDO",		eGameEvent_MapInterface, pData->m_dwKind )
	ELSEIF( buf, "&MUNPA",		eGameEvent_MunpaInterface, pData->m_dwKind )
	ELSEIF( buf, "&FRIEND",		eGameEvent_FriendInterface, pData->m_dwKind )
	ELSEIF( buf, "&NOTE",		eGameEvent_NoteInterface, pData->m_dwKind )
	ELSEIF( buf, "&OPTION",		eGameEvent_OptionInterface, pData->m_dwKind )
	ELSEIF( buf, "&EXIT",		eGameEvent_ExitInterface, pData->m_dwKind )
	ELSEIF( buf, "&PK",			eGameEvent_PKInterface, pData->m_dwKind )
	ELSEIF( buf, "&HUNT",		eGameEvent_Hunt, pData->m_dwKind )
	ELSEIF( buf, "&DIE",		eGameEvent_Die, pData->m_dwKind )
	ELSEIF( buf, "&DIEAFTER5",	eGameEvent_DieAfter5, pData->m_dwKind )
	ELSEIF( buf, "&NPCCLICK",	eGameEvent_NpcClick, pData->m_dwKind )
	ELSEIF( buf, "&DIEFROMPK",	eGameEvent_DieFromPK, pData->m_dwKind )
	ELSEIF( buf, "&KILLPK",		eGameEvent_KillPK, pData->m_dwKind )
	ELSEIF( buf, "&OBTAINITEM",	eGameEvent_ObtainItem, pData->m_dwKind )
	ELSEIF( buf, "&ITEMSETTING",eGameEvent_ItemSetting, pData->m_dwKind )
	ELSEIF( buf, "&LOGINPOINT",	eGameEvent_LoginPoint, pData->m_dwKind )
	ELSEIF( buf, "&MUGONG0",	eGameEvent_Mugong0, pData->m_dwKind )
	ELSEIF( buf, "&MUGONG1",	eGameEvent_Mugong1, pData->m_dwKind )
	ELSEIF( buf, "&ABILITY",	eGameEvent_Ability, pData->m_dwKind )
	ELSEIF( buf, "&LEVEL",		eGameEvent_LevelUp, pData->m_dwKind )
	ELSEIF( buf, "&MAP",		eGameEvent_MapChange, pData->m_dwKind )
	
	if( strcmp(buf, "&ABILITY") == 0 || strcmp(buf, "&LEVEL") == 0 || strcmp(buf, "&MAP") == 0 )
	{
		pData->m_dwParam = pfile->GetDword();
		pData->m_dwPage = pfile->GetDword();
	}
	else 
	{
		pData->m_dwPage = pfile->GetDword();
	}

	return pData;
}

void CNewbieGuide::SetFlag( DWORD dwBit )
{
	DWORD count = dwBit/32;
	DWORD bit = dwBit%32;
	DWORD value = 1;

	switch( count )
	{
	case 0:
		m_dwFlag1 = m_dwFlag1 | ( value << (31-bit) );
		break;
	case 1:
		m_dwFlag2 = m_dwFlag2 | ( value << (31-bit) );
		break;
	case 2:
		m_dwFlag3 = m_dwFlag3 | ( value << (31-bit) );
		break;
	default:
		return;
	}

	// network send
	SEND_QUEST_IDX msg;
	msg.Category = MP_QUEST;
	msg.Protocol = MP_QUEST_CHANGESTATE;
	msg.dwObjectID = HERO->GetID();
	msg.MainQuestIdx = 0;
	msg.dwFlag = m_dwFlag1;
	msg.dwData = m_dwFlag2;
	msg.dwTime = m_dwFlag3;
	NETWORK->Send(&msg, sizeof(msg));
}

BOOL CNewbieGuide::IsComplete( DWORD dwBit )
{
	DWORD count = dwBit/32;
	DWORD bit = dwBit%32;
	DWORD value = 1;

	switch( count )
	{
	case 0:
		return ( m_dwFlag1 & ( value << (31-bit) ) ) ? TRUE : FALSE;
	case 1:
		return ( m_dwFlag2 & ( value << (31-bit) ) ) ? TRUE : FALSE;
	case 2:
		return ( m_dwFlag3 & ( value << (31-bit) ) ) ? TRUE : FALSE;
	default:
		return TRUE;
	}
}

void CNewbieGuide::CheckEvent( GAMEEVENT* pGE )
{
	switch( pGE->bEventKind )
	{
	case eGameEvent_CharInterface:		CheckElse( eGameEvent_CharInterface );		break;
	case eGameEvent_InvenInterface:		CheckElse( eGameEvent_InvenInterface );		break;
	case eGameEvent_MugongInterface:	CheckElse( eGameEvent_MugongInterface );	break;	
	case eGameEvent_QuestInterface:		CheckElse( eGameEvent_QuestInterface );		break;
	case eGameEvent_MapInterface:		CheckElse( eGameEvent_MapInterface );		break;
	case eGameEvent_MunpaInterface:		CheckElse( eGameEvent_MunpaInterface );		break;
	case eGameEvent_FriendInterface:	CheckElse( eGameEvent_FriendInterface );	break;
	case eGameEvent_NoteInterface:		CheckElse( eGameEvent_NoteInterface );		break;
	case eGameEvent_OptionInterface:	CheckElse( eGameEvent_OptionInterface );	break;
	case eGameEvent_ExitInterface:		CheckElse( eGameEvent_ExitInterface );		break;
	case eGameEvent_PKInterface:		CheckElse( eGameEvent_PKInterface );		break;

	case eGameEvent_Hunt:				CheckElse( eGameEvent_Hunt );				break;
	case eGameEvent_Die:				CheckElse( eGameEvent_Die );				break;
	case eGameEvent_DieAfter5:			CheckElse( eGameEvent_DieAfter5 );			break;
	case eGameEvent_NpcClick:			CheckElse( eGameEvent_NpcClick );			break;
	case eGameEvent_DieFromPK:			CheckElse( eGameEvent_DieFromPK );			break;
	case eGameEvent_KillPK:				CheckElse( eGameEvent_KillPK );				break;
	case eGameEvent_ObtainItem:			CheckElse( eGameEvent_ObtainItem );			break;
	case eGameEvent_ItemSetting:		CheckElse( eGameEvent_ItemSetting );		break;
	case eGameEvent_LoginPoint:			CheckElse( eGameEvent_LoginPoint );			break;
	case eGameEvent_Mugong0:			CheckElse( eGameEvent_Mugong0 );			break;
	case eGameEvent_Mugong1:			CheckElse( eGameEvent_Mugong1 );			break;
		
	case eGameEvent_Ability:			CheckAbility( pGE->dwData );				break;
	case eGameEvent_LevelUp:			CheckLevelUp( pGE->dwData );				break;
	case eGameEvent_MapChange:			CheckMapChange( pGE->dwData );				break;		
	}
}

void CNewbieGuide::CheckLevelUp( DWORD dwLevel )
{
	NEWBIEDATA* pData = NULL;
	m_NewbieData.SetPositionHead();
	while( pData = m_NewbieData.GetData() )
	{
		if( pData->m_dwKind == eGameEvent_LevelUp && pData->m_dwParam == dwLevel )
		{
			if( !IsComplete( pData->m_dwBitFlag ) )
			{
				SetFlag( pData->m_dwBitFlag );
				HELPERMGR->ShowRespect( pData->m_dwPage );
				return;
			}
			else
				return;
		}
	}
}

void CNewbieGuide::CheckMapChange( DWORD dwMapNum )
{
	NEWBIEDATA* pData = NULL;
	m_NewbieData.SetPositionHead();
	while( pData = m_NewbieData.GetData() )
	{
		if( pData->m_dwKind == eGameEvent_MapChange && pData->m_dwParam == dwMapNum )
		{
			if( !IsComplete( pData->m_dwBitFlag ) )
			{
				SetFlag( pData->m_dwBitFlag );
				HELPERMGR->ShowRespect( pData->m_dwPage );
				return;
			}
			else
				return;
		}
	}
}

void CNewbieGuide::CheckAbility( DWORD dwAbilityNum )
{
	NEWBIEDATA* pData = NULL;
	m_NewbieData.SetPositionHead();
	while( pData = m_NewbieData.GetData() )
	{
		if( pData->m_dwKind == eGameEvent_Ability && pData->m_dwParam == dwAbilityNum )
		{
			if( !IsComplete( pData->m_dwBitFlag ) )
			{
				SetFlag( pData->m_dwBitFlag );
				HELPERMGR->ShowRespect( pData->m_dwPage );
				return;
			}
			else
				return;
		}
	}
}

void CNewbieGuide::CheckElse( DWORD dwEventKind )
{
	NEWBIEDATA* pData = NULL;
	m_NewbieData.SetPositionHead();
	while( pData = m_NewbieData.GetData() )
	{
		if( pData->m_dwKind == dwEventKind )
		{
			if( !IsComplete( pData->m_dwBitFlag ) )
			{
				SetFlag( pData->m_dwBitFlag );
				HELPERMGR->ShowRespect( pData->m_dwPage );
				return;
			}
			else
				return;
		}
	}
}

⌨️ 快捷键说明

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