Files
mir_server/server/LogicServer/config/PetProvider.h
aixianling 5c9f1dae4a init
2025-01-09 17:45:40 +08:00

175 lines
3.6 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#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;
};