#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 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 *: 洗资质的配置的指针 */ DataList * 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 *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 m_petData; CDataAllocator m_dataAllocator; //内存分配器 DataList< DataList > m_petExp; DataList > m_petMergePropRate; };