175 lines
3.6 KiB
C++
175 lines
3.6 KiB
C++
#pragma once
|
||
|
||
|
||
|
||
|
||
typedef struct tagPetLevelConfig
|
||
{
|
||
unsigned int color;
|
||
CAttrCalc cal;
|
||
|
||
}PETLEVELCONFIG,*PPETLEVELCONFIG;
|
||
|
||
//宠物的配置
|
||
typedef struct tagPetConfig
|
||
{
|
||
int id; //宠物的ID
|
||
char name[32]; //宠物的名字
|
||
int icon; //图标
|
||
int nModel; //模型的id
|
||
|
||
PETLEVELCONFIG levels [MAX_PET_LEVEL_COUNT];
|
||
|
||
//int defaultSkill; //默认的技能
|
||
int aiId; //宠物的ai的iD
|
||
tagPetConfig()
|
||
{
|
||
memset(this,0,sizeof(*this));
|
||
}
|
||
|
||
//获取一个等级的数据
|
||
PPETLEVELCONFIG GetLevelData(int nLevel)
|
||
{
|
||
if(nLevel <=0 || nLevel > MAX_PET_LEVEL_COUNT) return NULL;
|
||
return &levels[nLevel -1];
|
||
}
|
||
}PETCONFIG,*PPETCONFIG;
|
||
|
||
typedef struct tagPetMergePropRate
|
||
{
|
||
WORD wType;
|
||
float fRate;
|
||
}PetMergePropRate;
|
||
|
||
|
||
class CPetProvider :
|
||
public CCustomLogicLuaConfig
|
||
{
|
||
public:
|
||
|
||
typedef CCustomLogicLuaConfig Inherited;
|
||
typedef CObjectAllocator<char> CDataAllocator;
|
||
|
||
public:
|
||
|
||
~CPetProvider();
|
||
CPetProvider();
|
||
|
||
/*
|
||
* Comments:通过ID返回宠物数据
|
||
* Param const INT_PTR nId:宠物ID
|
||
* @Return const PPETCONFIG*: 宠物的数据指针
|
||
*/
|
||
inline const PPETCONFIG GetPetData(const INT_PTR nId) const
|
||
{
|
||
//ID为0的
|
||
if ( nId <0 || nId >= m_petData.count() )
|
||
return NULL;
|
||
else return &m_petData[nId];
|
||
}
|
||
|
||
|
||
/*
|
||
* Comments:获取宠物数量
|
||
* @Return INT_PTR:
|
||
*/
|
||
inline INT_PTR GetPetCount() const{ return m_petData.count(); }
|
||
|
||
|
||
/*
|
||
* Comments: 从文件里装载宠物的数据
|
||
* Param LPCTSTR sFilePath: 路径的名称
|
||
* @Return bool: 失败返回false
|
||
*/
|
||
bool LoadPets(LPCTSTR sFilePath);
|
||
|
||
|
||
|
||
|
||
//装载宠物的经验的数据
|
||
bool LoadPetExp(LPCTSTR sFilePath);
|
||
|
||
|
||
/*
|
||
* Comments:通过宠物的洗资质的id获取洗资质的数据指针
|
||
* Param INT_PTR nSmithId: 洗资质的ID
|
||
* @Return DataList<RANDOMATTRTERM> *: 洗资质的配置的指针
|
||
*/
|
||
DataList<RANDOMATTRTERM> * GetSmithData(INT_PTR nSmithId);
|
||
|
||
|
||
/*
|
||
* Comments: 通过宠物的名字返回宠物的ID
|
||
* Param LPCTSTR name:宠物的名字
|
||
* @Return INT_PTR: 成功返回宠物的ID,否则返回-1
|
||
*/
|
||
inline INT_PTR GetPetIdByName(LPCTSTR name)
|
||
{
|
||
for(INT_PTR i=1; i< m_petData.count(); i++)
|
||
{
|
||
if(strcmp(m_petData[i].name,name) ==0)
|
||
{
|
||
return m_petData[i].id;
|
||
}
|
||
}
|
||
return -1;
|
||
}
|
||
|
||
inline unsigned int GetMaxExp(INT_PTR nLevel,INT_PTR nCircle)
|
||
{
|
||
if(nCircle >=0 && nCircle < m_petExp.count)
|
||
{
|
||
if(nLevel >=1 && nLevel <= m_petExp[nCircle].count)
|
||
{
|
||
return *(m_petExp[nCircle].pData + (nLevel -1));
|
||
}
|
||
|
||
}
|
||
return 100000000; //返回一个很大的数,表示出错了
|
||
}
|
||
|
||
inline DataList<PetMergePropRate> *GetPetMergePropRate(const INT_PTR nLevel)
|
||
{
|
||
//nLevel不为0的
|
||
if (nLevel <= 0 || nLevel > m_petMergePropRate.count)
|
||
return NULL;
|
||
else return m_petMergePropRate.GetDataPtr(nLevel-1);
|
||
}
|
||
|
||
|
||
protected:
|
||
//以下函数为覆盖父类的相关数据处理函数
|
||
void showError(LPCTSTR sError);
|
||
|
||
private:
|
||
|
||
//读取所有的宠物的配置
|
||
bool ReadAllPet();
|
||
|
||
|
||
/*
|
||
* Comments:读取一个宠物的数据
|
||
* Param CDataAllocator & dataAllocator:内存分配器
|
||
* Param PPETCONFIG pPet: 宠物的指针
|
||
* Param INT_PTR nPetId:宠物的id
|
||
* @Return bool:成功返回true,否则false
|
||
*/
|
||
bool ReadOnePet(CDataAllocator &dataAllocator,PPETCONFIG pPet,INT_PTR nPetId);
|
||
|
||
bool ReadTable(char *sName, int *pAddr,int nMaxCount);
|
||
|
||
//读取宠物的升级经验
|
||
bool ReadPetExp();
|
||
|
||
//读取宠物附身属性
|
||
bool ReadPetMergePropRate();
|
||
|
||
private:
|
||
CVector<PETCONFIG> m_petData;
|
||
CDataAllocator m_dataAllocator; //内存分配器
|
||
|
||
DataList< DataList<unsigned int> > m_petExp;
|
||
|
||
DataList<DataList<PetMergePropRate> > m_petMergePropRate;
|
||
|
||
}; |