📄 resourcemanager.cpp
字号:
// GameResourceManager.cpp: implementation of the CGameResourceManager class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "ResourceManager.h"
GLOBALTON(CGameResourceManager);
CGameResourceManager::CGameResourceManager()
{
m_ItemInfoList.Initialize(MAX_ITEM_NUM);
m_SkillInfoList.Initialize(5000);
m_KyunggongInfoList.Initialize(50);
m_AbilityInfoList.Initialize(64);
m_NpcList.Initialize(50);
m_MonsterList.Initialize(300);
m_QuestStringTable.Initialize( 100 );
m_MapNameTable.Initialize( 100 );
}
CGameResourceManager::~CGameResourceManager()
{
char* pData = NULL;
m_MapNameTable.SetPositionHead();
while( pData = m_MapNameTable.GetData() )
delete pData;
m_MapNameTable.RemoveAll();
CQuestString* pQuestString = NULL;
m_QuestStringTable.SetPositionHead();
while( pQuestString = m_QuestStringTable.GetData() )
delete pQuestString;
m_QuestStringTable.RemoveAll();
ITEM_INFO * pItemInfo = NULL;
m_ItemInfoList.SetPositionHead();
while(pItemInfo = m_ItemInfoList.GetData())
delete pItemInfo;
m_ItemInfoList.RemoveAll();
SKILLINFO * pSkillInfo = NULL;
m_SkillInfoList.SetPositionHead();
while(pSkillInfo = m_SkillInfoList.GetData())
delete pSkillInfo;
m_SkillInfoList.RemoveAll();
KYUNGGONG_INFO * pKInfo = NULL;
m_KyunggongInfoList.SetPositionHead();
while(pKInfo = m_KyunggongInfoList.GetData())
delete pKInfo;
m_KyunggongInfoList.RemoveAll();
CAbilityInfo* pAInfo;
m_AbilityInfoList.SetPositionHead();
while(pAInfo = m_AbilityInfoList.GetData())
delete pAInfo;
m_AbilityInfoList.RemoveAll();
NPC_LIST* pNInfo;
m_NpcList.SetPositionHead();
while(pNInfo = m_NpcList.GetData())
delete pNInfo;
m_NpcList.RemoveAll();
MONSTEREX_LIST* pMInfo;
m_MonsterList.SetPositionHead();
while(pMInfo = m_MonsterList.GetData())
{
delete pMInfo->AttackIndex;
delete pMInfo->AttackRate;
delete pMInfo->SkillInfo;
delete pMInfo;
}
m_MonsterList.RemoveAll();
}
BOOL CGameResourceManager::Init()
{
if( !LoadExpPoint() )
return FALSE;
if( !LoadItemList() )
return FALSE;
if( !LoadSkillInfoList() )
return FALSE;
if( !LoadKyunggongInfoList() )
return FALSE;
if( !LoadAbilityInfoList() )
return FALSE;
if( !LoadNpcList() )
return FALSE;
if( !LoadMonsterList() )
return FALSE;
LoadQuestString();
LoadMapNameList();
return TRUE;
}
BOOL CGameResourceManager::LoadExpPoint()
{
char filename[64];
CMHFile file;
#ifdef _FILE_BIN_
sprintf(filename,"Resource/characterExpPoint.bin");
if(!file.Init(filename, "rb"))
return FALSE;
#else
sprintf(filename,"Resource/characterExpPoint.txt");
if(!file.Init(filename, "rt"))
return FALSE;
#endif
int idx =0;
while(1)
{
if(idx > MAX_CHARACTER_LEVEL_NUM-1) break;
if(file.IsEOF())
break;
file.GetWord(); // 饭骇
m_CharacterExpPoint[idx] = file.GetExpPoint(); // 版氰摹
idx++;
}
file.Release();
return TRUE;
}
BOOL CGameResourceManager::LoadItemList()
{
CMHFile file;
#ifdef _FILE_BIN_
if(!file.Init("Resource/ItemList.bin", "rb"))
return FALSE;
#else
if(!file.Init("Resource/ItemList.txt", "rt"))
return FALSE;
#endif
ITEM_INFO * pInfo = NULL;
while(1)
{
if(file.IsEOF())
break;
ASSERT(!pInfo);
pInfo = new ITEM_INFO;
pInfo->ItemIdx = file.GetWord();
strcpy(pInfo->ItemName, file.GetString());
pInfo->ItemTooltipIdx = file.GetWord();
pInfo->Image2DNum = file.GetWord();
pInfo->ItemKind = file.GetWord();
pInfo->BuyPrice = file.GetDword();
pInfo->SellPrice = file.GetDword();
pInfo->Rarity = file.GetWord();
pInfo->WeaponType = file.GetWord();
pInfo->GenGol = file.GetWord();
pInfo->MinChub = file.GetWord();
pInfo->CheRyuk = file.GetWord();
pInfo->SimMek = file.GetWord();
pInfo->Life = file.GetDword();
pInfo->Shield = file.GetDword();
pInfo->NaeRyuk = file.GetWord();
pInfo->AttrRegist.SetElement_Val(ATTR_FIRE,file.GetFloat());
pInfo->AttrRegist.SetElement_Val(ATTR_WATER,file.GetFloat());
pInfo->AttrRegist.SetElement_Val(ATTR_TREE,file.GetFloat());
pInfo->AttrRegist.SetElement_Val(ATTR_IRON,file.GetFloat());
pInfo->AttrRegist.SetElement_Val(ATTR_EARTH,file.GetFloat());
pInfo->LimitJob = file.GetWord();
pInfo->LimitGender = file.GetWord();
pInfo->LimitLevel = file.GetLevel();
pInfo->LimitGenGol = file.GetWord();
pInfo->LimitMinChub = file.GetWord();
pInfo->LimitCheRyuk = file.GetWord();
pInfo->LimitSimMek = file.GetWord();
pInfo->ItemGrade = file.GetWord();
pInfo->RangeType = file.GetWord();
pInfo->EquipKind = file.GetWord();
pInfo->Part3DType = file.GetWord();
pInfo->Part3DModelNum = file.GetWord();
pInfo->MeleeAttackMin = file.GetWord();
pInfo->MeleeAttackMax = file.GetWord();
pInfo->RangeAttackMin = file.GetWord();
pInfo->RangeAttackMax = file.GetWord();
pInfo->CriticalPercent = file.GetWord();
pInfo->AttrAttack.SetElement_Val(ATTR_FIRE,file.GetFloat());
pInfo->AttrAttack.SetElement_Val(ATTR_WATER,file.GetFloat());
pInfo->AttrAttack.SetElement_Val(ATTR_TREE,file.GetFloat());
pInfo->AttrAttack.SetElement_Val(ATTR_IRON,file.GetFloat());
pInfo->AttrAttack.SetElement_Val(ATTR_EARTH,file.GetFloat());
pInfo->PhyDef = file.GetWord();
pInfo->Plus_MugongIdx = file.GetWord();
pInfo->Plus_Value = file.GetWord();
pInfo->AllPlus_Kind = file.GetWord();
pInfo->AllPlus_Value = file.GetWord();
pInfo->MugongNum = file.GetWord();
pInfo->MugongType = file.GetWord();
pInfo->LifeRecover = file.GetWord();
pInfo->LifeRecoverRate = file.GetFloat();
pInfo->NaeRyukRecover = file.GetWord();
pInfo->NaeRyukRecoverRate = file.GetFloat();
pInfo->ItemType = file.GetWord();
ASSERT(m_ItemInfoList.GetData(pInfo->ItemIdx) == FALSE);
m_ItemInfoList.Add(pInfo, pInfo->ItemIdx);
pInfo = NULL;
}
file.Release();
return TRUE;
}
BOOL CGameResourceManager::LoadSkillInfoList()
{
CMHFile file;
#ifdef _FILE_BIN_
if(!file.Init("Resource/SkillList.bin","rb"))
return FALSE;
#else
if(!file.Init("Resource/SkillList.txt","rt"))
return FALSE;
#endif
while(1)
{
if(file.IsEOF() != FALSE)
break;
SKILLINFO* pInfo = new SKILLINFO;
pInfo->SkillIdx = file.GetWord();
file.GetString(pInfo->SkillName);
pInfo->SkillTooltipIdx = file.GetWord();
pInfo->RestrictLevel = file.GetWord();
pInfo->LowImage = file.GetInt();
pInfo->HighImage = file.GetInt();
pInfo->SkillKind = file.GetWord();
pInfo->WeaponKind = file.GetWord();
pInfo->SkillRange = file.GetWord();
pInfo->TargetKind = file.GetWord();
pInfo->TargetRange = file.GetWord();
pInfo->TargetAreaIdx = file.GetWord();
pInfo->TargetAreaPivot = file.GetWord();
pInfo->TargetAreaFix = file.GetWord();
pInfo->MoveTargetArea = file.GetWord();
pInfo->MoveTargetAreaDirection = file.GetWord();
pInfo->MoveTargetAreaVelocity = file.GetFloat();
pInfo->Duration = file.GetDword();
pInfo->Interval = file.GetWord();
pInfo->DelaySingleEffect = file.GetWord();
pInfo->ComboNum = file.GetWord();
pInfo->Life = file.GetWord();
pInfo->BindOperator = file.GetWord();
pInfo->EffectStartTime = file.GetWord();
file.GetString();
file.GetString();
file.GetString();
file.GetString();
file.GetString();
pInfo->DelayTime = file.GetWord();
pInfo->FatalDamage = file.GetWord();
for(int n=0;n<12;++n)
pInfo->NeedExp[n] = file.GetExpPoint();
file.GetWord(pInfo->NeedNaeRyuk,12);
pInfo->Attrib = file.GetWord();
pInfo->NegativeResultTargetType = file.GetWord();
pInfo->TieUpType = file.GetWord();
pInfo->ChangeSpeedType = file.GetWord();
pInfo->ChangeSpeedRate = file.GetWord();
pInfo->Dispel = file.GetWord();
pInfo->PositiveResultTargetType = file.GetWord();
pInfo->Immune = file.GetWord();
pInfo->AIObject = file.GetWord();
pInfo->MineCheckRange = file.GetWord();
pInfo->MineCheckStartTime = file.GetWord();
pInfo->CounterDodgeKind = file.GetWord();
file.GetString();
WORD AdditiveAttr;
WORD temp[12];
for(n=0;n<6;++n)
{
AdditiveAttr = file.GetWord();
ySWITCH(AdditiveAttr)
yCASE(0) file.GetWord(temp,12);
yCASE(11) file.GetFloat(pInfo->FirstPhyAttack,12);
yCASE(12) file.GetFloat(pInfo->UpPhyAttack,12);
yCASE(13) file.GetWord(pInfo->FirstAttAttackMin,12);
yCASE(14) file.GetWord(pInfo->FirstAttAttackMax,12);
yCASE(15) file.GetWord(pInfo->ContinueAttAttack,12);
yCASE(20) file.GetFloat(pInfo->CounterPhyAttack,12);
yCASE(21) file.GetFloat(pInfo->CounterAttAttack,12);
yCASE(22) file.GetFloat(pInfo->UpPhyDefence,12);
yCASE(23) file.GetFloat(pInfo->UpAttDefence,12);
yCASE(24) file.GetWord(pInfo->UpMaxNaeRyuk,12);
yCASE(25) file.GetWord(pInfo->UpMaxLife,12);
yCASE(26) file.GetWord(pInfo->ContinueRecoverNaeRyuk,12);
yCASE(27) file.GetWord(pInfo->FirstRecoverNaeRyuk,12);
yCASE(28) file.GetWord(pInfo->ContinueRecoverLife,12);
yCASE(29) file.GetWord(pInfo->FirstRecoverLife,12);
yCASE(30) file.GetFloat(pInfo->CounterDodgeRate,12);
yCASE(31) file.GetFloat(pInfo->CriticalRate,12);
yCASE(32) file.GetFloat(pInfo->StunRate,12);
yCASE(33) file.GetWord(pInfo->StunTime,12);
yCASE(34) file.GetWord(pInfo->UpMaxShield,12);
yCASE(35) file.GetWord(pInfo->AmplifiedPowerPhy,12);
yCASE(36) file.GetFloat(pInfo->VampiricLife,12);
yCASE(37) file.GetFloat(pInfo->VampiricNaeryuk,12);
yCASE(38) file.GetFloat(pInfo->RecoverStateAbnormal,12);
yCASE(39) file.GetFloat(pInfo->DispelAttackFeelRate,12);
yCASE(41) file.GetWord(pInfo->DownMaxLife,12);
yCASE(42) file.GetWord(pInfo->DownMaxNaeRyuk,12);
yCASE(43) file.GetWord(pInfo->DownMaxShield,12);
yCASE(44) file.GetFloat(pInfo->DownPhyDefence,12);
yCASE(45) file.GetFloat(pInfo->DownAttDefence,12);
yCASE(46) file.GetFloat(pInfo->DownPhyAttack,12);
yCASE(47) file.GetDword(pInfo->SkillAdditionalTime,12);
yCASE(48) file.GetWord(pInfo->AmplifiedPowerAtt,12);
yCASE(49) file.GetFloat(pInfo->AmplifiedPowerAttRate,12);
yCASE(50) file.GetFloat(pInfo->FirstAttAttack,12);
yCASE(51) file.GetFloat(pInfo->ContinueAttAttackRate,12);
yENDSWITCH
}
// ASSERT(m_SkillInfoList.GetData(pInfo->SkillIdx) == NULL);
m_SkillInfoList.Add(pInfo, pInfo->SkillIdx);
}
return TRUE;
}
BOOL CGameResourceManager::LoadKyunggongInfoList()
{
CMHFile file;
#ifdef _FILE_BIN_
if(file.Init("Resource/KyungGongInfo.bin","rb") == FALSE)
return FALSE;
#else
if(file.Init("Resource/KyungGongInfo.txt","rt") == FALSE)
return FALSE;
#endif
while(1)
{
if(file.IsEOF() != FALSE)
break;
KYUNGGONG_INFO* pInfo = new KYUNGGONG_INFO;
pInfo->KyungGongIdx = file.GetWord(); //公傍 index
file.GetString(pInfo->KyungGongName); //版傍捞抚
pInfo->NeedNaeRyuk = file.GetWord(); //家葛 郴仿
pInfo->MoveType = file.GetWord(); //捞悼 鸥涝
pInfo->Speed = file.GetFloat(); //捞悼 加档
pInfo->ChangeTime = file.GetWord(); //版傍 葛靛 傈券 矫埃
pInfo->StartEffect = file.GetWord(); //版傍 荤侩 楷免
pInfo->IngEffect = file.GetWord(); //版傍 楷免 颇老
pInfo->EndEffect = file.GetWord(); //版傍 场 楷免
ASSERT(m_KyunggongInfoList.GetData(pInfo->KyungGongIdx) == FALSE);
m_KyunggongInfoList.Add(pInfo, pInfo->KyungGongIdx);
}
return TRUE;
}
BOOL CGameResourceManager::LoadAbilityInfoList()
{
CMHFile file;
#ifdef _FILE_BIN_
if(!file.Init("./Resource/AbilityBaseInfo.bin", "rb"))
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -