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

124 lines
3.1 KiB
C++

#pragma once
typedef struct
{
int nCount;
PGAMEATTR pAttrs; //属性表
}Attris;
//英雄阶配置
typedef struct tagHeroStage
{
int nModel; //模型ID
int nWeapon; //武器模型
int nMaxLevel; //最大等级
int nMaxBless; //最大祝福值
int nGiveForce; //升阶时系统自动给予体力值
bool boEveryDayClearBless; //是否跨天清除祝福值
}HEROSTAGE,*PHEROSTAGE;
//英雄等级配置
typedef struct tagHeroLevel
{
unsigned int nLevelUpExp; //升级经验
Attris attri;//属性
}HEROLEVEL,*PHEROLEVEL;
//英雄配置
typedef struct tagHeroConfig
{
int nId; //ID
char name[32]; //名字
int nOpenLevel; //开放等级
int nMaxLevel; //最大等级
int nMaxForce; //最大体力值
int nAddForce; //定时恢复体力值
int nOfflineAddForce; //离线定时恢复体力值
int nBattleForce; //出战体力值
float fExpRate; //获得人物经验比例
DataList<HEROSTAGE> stages; //阶列表
DataList<HEROLEVEL> levels; //等级列表
tagHeroConfig()
{
memset(this,0,sizeof(*this));
}
}HEROCONFIG,*PHEROCONFIG;
class CHeroProvider :
public CCustomLogicLuaConfig
//public CFileReader<CHeroProvider>
{
public:
typedef CCustomLogicLuaConfig Inherited;
//typedef CFileReader<CHeroProvider> InheritedReader;
typedef CObjectAllocator<char> CDataAllocator;
inline int GetHeroMaxCount(){return m_nMaxHeroCount;}
inline int GetHeroAddTime(){return m_nAddTime;}
inline int GetHeroAI() { return m_nHeroAI;}
inline int GetHeroAttackSpeed (){return m_nDefaultAttackSpeed;}
inline int GetBuffGroup(){return m_nBuffGroup;}
//获取英雄配置
inline const PHEROCONFIG GetHeroData(const int nHeroId) const
{
if(nHeroId <= 0 || nHeroId > m_herosData.count())
return NULL;
else return &m_herosData[nHeroId -1];
}
//获取英雄等级配置
inline const PHEROLEVEL GetHeroLevel(const int nHeroId, const int nLevel)
{
PHEROCONFIG pHero = GetHeroData(nHeroId);
if(pHero)
{
if(nLevel <= 0 || nLevel > pHero->levels.count )
{
return NULL;
}
return &pHero->levels[nLevel-1];
}else
{
return NULL;
}
}
//获取英雄阶配置
inline const PHEROSTAGE GetHeroStage(const int nHeroId, const int nStage)
{
PHEROCONFIG pHero = GetHeroData(nHeroId);
if(pHero)
{
if(nStage <= 0 || nStage > pHero->stages.count )
{
return NULL;
}
return &pHero->stages[nStage -1];
}else
{
return NULL;
}
}
public:
~CHeroProvider();
CHeroProvider();
bool LoadConfig(LPCTSTR sFilePath);
protected:
//以下函数为覆盖父类的相关数据处理函数
void showError(LPCTSTR sError);
private:
bool ReadAllHero();
bool ReadOneHero(CDataAllocator &dataAllocator,PHEROCONFIG pHero, int nHeroId);
bool LoadAttri( PGAMEATTR pAttr);
private:
CVector<HEROCONFIG> m_herosData;
int m_nHeroAI; //英雄AI
int m_nMaxHeroCount;
int m_nAddTime; //离线体力计算时长
CDataAllocator m_dataAllocator; //内存分配器
int m_nDefaultAttackSpeed; //默认攻击速度
int m_nBuffGroup; //英雄Buff组
};