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