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

📄 gameresourcemanager.cpp

📁 墨香最新私服
💻 CPP
📖 第 1 页 / 共 4 页
字号:
// GameResourceManager.cpp: implementation of the CGameResourceManager class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"


#ifndef _MURIMNET_

#include "GameResourceManager.h"
#include "MHFile.h"
#include "TacticManager.h"
#include "SkillInfo.h"
#ifdef _MHCLIENT_
#include "SkillManager_client.h"
#include "./Audio/MHAudioManager.h"
#else
#include "SkillManager_server.h"
#endif
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
GLOBALTON(CGameResourceManager);

BOOL g_bTESTSERVER = FALSE;


CGameResourceManager::CGameResourceManager()
{
	m_bNpcRegenLoad = FALSE;
	m_bMonsterListLoad = FALSE;
	m_bNpcListLoad = FALSE;
	m_bMonsterDropItem = FALSE;

	m_TotalNpcGroupCount = 0;
	m_MaxNpcRegenCount = 0;

	m_SMonsterListTable.Initialize(100);
	
	
#ifdef _SERVER_RESOURCE_FIELD_

#else
	m_PreLoadDataTable.Initialize(4);	

#endif //_SERVER_RESOURCE_FIELD_
	
}

CGameResourceManager::~CGameResourceManager()
{
	SAFE_DELETE_ARRAY(m_NpcChxList);	

	ResetMonsterList();
#ifdef _CLIENT_RESOURCE_FIELD_
	DeletePreLoadData();
#endif
}

BOOL CGameResourceManager::LoadDeveloperInfo()
{
	char filename[256];
	char value[256];
	CMHFile file;

#ifdef _MHCLIENT_
	FILE* fp = fopen("./AutopatchOption.opt","rb");

	if( fp != NULL )
	{	
		BOOL bWindowMode = FALSE;
		fscanf( fp, "%d", &bWindowMode );
		fclose(fp);	
		
		if( bWindowMode == TRUE)
			m_GameDesc.dispInfo.dispType = WINDOW_WITH_BLT;
		else
			m_GameDesc.dispInfo.dispType = /*FULLSCREEN_WITH_FLIP;//*/FULLSCREEN_WITH_BLT;
	}
#endif

	sprintf(filename,"../DeveloperWorking/Developer.ini");
	if(!file.Init(filename, "rt", MHFILE_FLAG_DONOTDISPLAY_NOTFOUNDERROR))
		return FALSE;

	while(1)
	{
		if(file.IsEOF())
			break;

		strcpy(value,strupr(file.GetString()));
		if(strcmp(value,"*WINDOWMODE") == 0)
		{
#ifdef _MHCLIENT_
			if( file.GetBool() )
				m_GameDesc.dispInfo.dispType = WINDOW_WITH_BLT;
			else
				m_GameDesc.dispInfo.dispType = /*FULLSCREEN_WITH_FLIP;//*/FULLSCREEN_WITH_BLT;
#endif
		}
		else if(strcmp(value,"*ASSERTMSGBOX") == 0)
		{
			g_bAssertMsgBox = file.GetBool();
		}
		else if(strcmp(value,"*TESTSERVER") == 0)
		{
			g_bTESTSERVER = file.GetBool();
		}
	}
	file.Release();

	return TRUE;
}

void CGameResourceManager::ResetMonsterList()
{
	BASE_MONSTER_LIST * pInfo = NULL;
	m_SMonsterListTable.SetPositionHead();
	while(pInfo = m_SMonsterListTable.GetData())
	{
		delete [] pInfo->AttackIndex;
		delete [] pInfo->AttackRate;
		delete [] pInfo->SkillInfo;
		
		pInfo->AttackIndex = NULL;
		pInfo->AttackRate = NULL;
		pInfo->SkillInfo = NULL;
		delete pInfo;
		pInfo = NULL;
	}
	m_SMonsterListTable.RemoveAll();
}
void CGameResourceManager::LoadSMonsterList()
{
	CMHFile file;
#ifdef _FILE_BIN_
	if(!file.Init("./Resource/SMonsterList.bin", "rb"))
		return;
#else
	if(!file.Init("./Resource/SMonsterList.txt", "rt"))
		return;
#endif

	SMONSTER_LIST * pSMonsterList = NULL;
	int num = file.GetInt();
	for( int i = 0 ; i < num ; ++i )
	{
		file.GetInt();
#ifndef _FILE_BIN_
		file.Seek(1);
#endif		
		LoadSMonsterInfo(i, file.GetString());
	}
}
BASE_MONSTER_LIST * CGameResourceManager::GetMonsterListInfo(int idx)
{
	return m_SMonsterListTable.GetData(idx);
}

int CGameResourceManager::GetMonsterIndexForName( char* pStrName )
{
	m_SMonsterListTable.SetPositionHead();
	BASE_MONSTER_LIST* pList;
	while( pList = m_SMonsterListTable.GetData() )
	{
		if( strcmp( pList->Name, pStrName ) == 0 )
			return pList->MonsterKind;
	}

	return 0;
}

void CGameResourceManager::LoadSMonsterInfo( int idx, char * fileName )
{
	SMONSTER_LIST * pList = new SMONSTER_LIST;
	memset(pList, 0, sizeof(SMONSTER_LIST));

	CMHFile fp;
	char buff[255];
#ifdef _FILE_BIN_
	sprintf(buff, "./Resource/%s", fileName);
	if(!fp.Init(buff, "rb"))
		return;
#else
	sprintf(buff, "./Resource/%s", fileName);
	if(!fp.Init(buff, "rt"))
		return;
#endif

	WORD aidx=0;
	WORD anum=0;
	DWORD ridx=0;
	DWORD attackIdx = 0;
	while(1)
	{
		fp.GetString(buff);
		if(fp.IsEOF())
			break;
		if(buff[0] == '@')
		{
			fp.GetLineX(buff, 256);
			continue;
		}
		else if(buff[0] == '{' || buff[0] == '}')
		{
			continue;
		}
		CMD_ST(buff)
		CMD_CS("#MONSTERKIND")
			pList->MonsterKind = fp.GetWord();
		CMD_CS("#NAME")
			strcpy( pList->Name, fp.GetStringInQuotation() );
		CMD_CS("#ENGNAME")
			strcpy( pList->EngName, fp.GetStringInQuotation() );
		CMD_CS("#LEVEL")
			pList->Level = fp.GetLevel();
		CMD_CS("#SCALE")
			pList->Scale = fp.GetFloat();
		CMD_CS("#GRAVITY")
			pList->Gravity = fp.GetDword();
		CMD_CS("#WEIGHT")
			pList->Weight = fp.GetFloat();
		CMD_CS("#MONSTERRADIUS")
			pList->MonsterRadius = fp.GetDword();
		CMD_CS("#LIFE")
			pList->Life = fp.GetDword();
		CMD_CS("#SHIELD")
			pList->Shield = fp.GetDword();
		CMD_CS("#EXPPOINT")
			pList->ExpPoint = fp.GetExpPoint();
		CMD_CS("#TALL")
			pList->Tall = fp.GetWord();
		CMD_CS("#CHXNAME")
			fp.GetString(pList->ChxName);

		CMD_CS("#ATTACKPHYSICALMIN")
			pList->AttackPhysicalMin = fp.GetWord();
		CMD_CS("#ATTACKPHYSICALMAX")
			pList->AttackPhysicalMax = fp.GetWord();
		CMD_CS("#CRITICAL")
			pList->CriticalPercent = fp.GetWord();
		CMD_CS("#PHYSICALDEFENSE")
			pList->PhysicalDefense = fp.GetWord();
		CMD_CS("#PROPERTYRESIST1")
			pList->AttribResist.SetElement_Val(ATTR_FIRE,fp.GetFloat());
		CMD_CS("#PROPERTYRESIST2")
			pList->AttribResist.SetElement_Val(ATTR_WATER,fp.GetFloat());
		CMD_CS("#PROPERTYRESIST3")
			pList->AttribResist.SetElement_Val(ATTR_TREE,fp.GetFloat());
		CMD_CS("#PROPERTYRESIST4")
			pList->AttribResist.SetElement_Val(ATTR_IRON,fp.GetFloat());
		CMD_CS("#PROPERTYRESIST5")
			pList->AttribResist.SetElement_Val(ATTR_EARTH,fp.GetFloat());

		CMD_CS("#WALKMOVE")
			pList->WalkMove = fp.GetWord();
		CMD_CS("#RUNMOVE")
			pList->RunMove = fp.GetWord();
		CMD_CS("#RUNAWAYMOVE")
			pList->RunawayMove = fp.GetWord();
		
		CMD_CS("#STANDTIME")
			pList->StandTime = fp.GetDword();
		CMD_CS("#STANDRATE")
			pList->StandRate = fp.GetByte();
		CMD_CS("#DOMAINRANGE")
			pList->DomainRange = fp.GetDword();
		CMD_CS("#PURSUITFORGIVETIME")
			pList->PursuitForgiveTime = fp.GetDword();
		CMD_CS("#PURSUITFORGIVEDISTANCE")
			pList->PursuitForgiveDistance = fp.GetDword();
		CMD_CS("#FOREATTACK")
			pList->bForeAttack = fp.GetBool();
		CMD_CS("#SEARCHPERIODICTIME")
			pList->SearchPeriodicTime = fp.GetDword();
		CMD_CS("#TARGETSELECT")
			pList->TargetSelect = fp.GetWord();
		CMD_CS("#SEARCHRANGE")
			pList->SearchRange = fp.GetDword();
		CMD_CS("#SEARCHANGLE")
			pList->SearchAngle = fp.GetDword();
		CMD_CS("#TARGETCHANGE")
			pList->TargetChange = fp.GetWord();

		// 荐沥 登绢具 且 何盒
		CMD_CS("#MOVEDRAMANUM")
			pList->MoveDramaNum = FindEffectNum(fp.GetString());
		CMD_CS("#MOTIONID");
			pList->MotionID = fp.GetDword();
		CMD_CS("#DAMAGE1DRAMANUM")
			pList->Damage1DramaNum = FindEffectNum(fp.GetString());
		CMD_CS("#DIE1DRAMANUM")
			pList->Die1DramaNum = FindEffectNum(fp.GetString());
		CMD_CS("#DIE2DRAMANUM")
			pList->Die2DramaNum = FindEffectNum(fp.GetString());


		CMD_CS("#ATTACKNUM")
			pList->AttackNum = fp.GetDword();
	
			pList->AttackIndex = new DWORD[pList->AttackNum];
			pList->AttackRate = new DWORD[pList->AttackNum];
			pList->SkillInfo = new CSkillInfo*[pList->AttackNum];
			for(DWORD i = 0 ; i < pList->AttackNum ; ++i)
			{
				pList->AttackIndex[i] = 0;
				pList->AttackRate[i] = 0;
				pList->SkillInfo[i] = 0;
			}
		CMD_CS("#ATTACKKIND")
			pList->AttackKind = fp.GetWord();
		CMD_CS("#ATTACK")
			attackIdx =  fp.GetDword();
			ASSERT( attackIdx < pList->AttackNum );
		CMD_CS("#ATTACKINDEX")
			pList->AttackIndex[attackIdx] = fp.GetDword();
			pList->SkillInfo[attackIdx] = SKILLMGR->GetSkillInfo((WORD)pList->AttackIndex[attackIdx]);
			ASSERT(pList->SkillInfo[attackIdx]);
		CMD_CS("#ATTACKRATE")
			pList->AttackRate[attackIdx] = fp.GetDword();
		
		// ATTACK PATTERN INFO
		CMD_CS("#ATTACKPATTERNNUM")
			pList->AttackPatternClass.Init(fp.GetWord());
		CMD_CS("#ATTACKPATTERN")
			aidx = fp.GetWord();
			anum = fp.GetWord();
		CMD_CS("#ATTACKPATTERNINDEX")
			pList->AttackPatternClass.InitPattern(aidx, anum);
			for(int i = 0 ; i < anum ; ++i )
				pList->AttackPatternClass.SetVal(aidx, i, fp.GetWord());
		
		//RECALL INFOMATION
		CMD_CS("#RECALLNUM")
			pList->RecallInfoClass.Init(fp.GetDword());
		CMD_CS("#RECALL")
			ridx = fp.GetDword();
		CMD_CS("#RECALLTYPE")
			pList->RecallInfoClass.SetRecallType(ridx, fp.GetDword());
		CMD_CS("#RECALLID")
			pList->RecallInfoClass.SetRecallID(ridx, fp.GetDword());
		CMD_CS("#RECALLMONSTERNUM")
			pList->RecallInfoClass.SetRecallMonsterNum(ridx, fp.GetDword());
		CMD_CS("#RECALLRANGE")
			pList->RecallInfoClass.SetRecallRange(ridx, fp.GetDword());
			
		//HELP
		CMD_CS("#INITHELPTYPE")
			pList->InitHelpType = fp.GetWord();
		CMD_CS("#HEARING")
			pList->bHearing = fp.GetBool();
		CMD_CS("#HEARINGDISTANCE")
			pList->HearingDistance = fp.GetDword();

		CMD_EN
	}

	ASSERT(m_SMonsterListTable.GetData(pList->MonsterKind) == NULL);
	m_SMonsterListTable.Add(pList, pList->MonsterKind);
}

BOOL CGameResourceManager::LoadMonsterList()
{
	char filename[64];
	char value[64] = {0,};
	CMHFile file;

#ifdef _FILE_BIN_
	sprintf(filename,"./Resource/MonsterList.bin");	
	if(!file.Init(filename, "rb"))
		return FALSE;
#else
	sprintf(filename,"./Resource/MonsterList.txt");	
	if(!file.Init(filename, "rt"))
		return FALSE;
#endif

	int n =0;
	MONSTEREX_LIST * pList = NULL;
	while(1)
	{
		if(n == MAX_MONSTER_NUM)
			break;

		if(file.IsEOF())
			break;
		pList = new MONSTEREX_LIST;
		memset(pList, 0, sizeof(MONSTEREX_LIST));
		pList->MonsterKind				= file.GetWord();		// 锅龋
		file.GetString(pList->Name);						// 阁胶磐捞抚	
		file.GetString(pList->EngName);						// 康绢捞抚
		pList->Level					= file.GetLevel();		// 阁胶磐饭骇	
		pList->MoveDramaNum				= FindEffectNum(file.GetString());	
		pList->MotionID					= file.GetDword();	
		file.GetString(pList->ChxName);
		pList->Scale					= file.GetFloat();// 阁胶磐 农扁	
		pList->Gravity					= file.GetDword();
		pList->Weight					= file.GetFloat();// 阁胶磐 公霸
		pList->MonsterRadius			= file.GetWord();// 阁胶磐 	
		pList->Life						= file.GetDword();
		pList->Shield					= file.GetDword();
		pList->ExpPoint					= file.GetExpPoint();// 版氰摹
		pList->Tall						= file.GetWord();

		pList->AttackPhysicalMin		= file.GetWord();// 傍拜 弥家拱府 傍拜仿	
		pList->AttackPhysicalMax		= file.GetWord();// 傍拜 弥措拱府 傍拜仿	
		pList->CriticalPercent			= file.GetWord();// 农府萍拿 欺季飘
		pList->PhysicalDefense			= file.GetWord();// 拱府 规绢仿	
		pList->AttribResist.SetElement_Val(ATTR_FIRE,file.GetFloat());// 加己历亲仿(拳)% 	
		pList->AttribResist.SetElement_Val(ATTR_WATER,file.GetFloat());// 加己历亲仿(荐)% 	
		pList->AttribResist.SetElement_Val(ATTR_TREE,file.GetFloat());// 加己历亲仿(格)% 	
		pList->AttribResist.SetElement_Val(ATTR_IRON,file.GetFloat());// 加己历亲仿(陛)% 	
		pList->AttribResist.SetElement_Val(ATTR_EARTH,file.GetFloat());// 加己历亲仿(配)% 

		pList->WalkMove					= file.GetWord();// 阁胶磐叭扁捞悼仿	
		pList->RunMove					= file.GetWord();// 阁胶磐顿扁捞悼仿	
		pList->RunawayMove				= file.GetWord();// 阁胶磐档噶捞悼仿
		
		pList->Damage1DramaNum			= FindEffectNum(file.GetString());// 嘎澜 1 楷免 锅龋	
		pList->Die1DramaNum				= FindEffectNum(file.GetString());// 磷澜 1 楷免 锅龋	
		pList->Die2DramaNum				= FindEffectNum(file.GetString());// 磷澜 2 楷免 锅龋	

		pList->StandTime				= file.GetDword();
		pList->StandRate				= file.GetByte();
		pList->WalkRate					= file.GetByte();
		pList->RunRate					= file.GetByte();
		pList->DomainRange				= file.GetDword();		// 康开 裹困 : 馆瘤抚
		pList->PursuitForgiveTime		= file.GetDword();
		pList->PursuitForgiveDistance	= file.GetDword();
		
		pList->bForeAttack				= file.GetBool();					// 急傍拜
		pList->SearchPeriodicTime		= file.GetDword();				// 沤祸 林扁
		pList->TargetSelect				= file.GetWord();					// 鸥百 急琶 : FIND_CLOSE, FIND_FIRST
		pList->SearchRange				= file.GetWord();
		pList->SearchAngle				= file.GetByte();
		pList->TargetChange				= file.GetWord();

		pList->AttackNum				= file.GetWord();
		pList->AttackIndex				= new DWORD[2];

⌨️ 快捷键说明

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