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

123 lines
3.0 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
class CSkillProvider :
public CVector<OneSkillData>,
protected CCustomLogicLuaConfig
{
public:
typedef CVector<OneSkillData> Inherited;
typedef CCustomLogicLuaConfig Inherited2;
typedef CObjectAllocator<char> CDataAllocator;
public:
CSkillProvider();
~CSkillProvider();
//转换为OneSkillData数组的类型转换函数
inline operator const OneSkillData* () const
{
CSkillProvider *pProvider = (CSkillProvider*)this;
return pProvider->Inherited::operator OneSkillData*();
}
/*
* Comments:通过技能ID返回技能数据
* Param const INT_PTR nSkillId:技能ID
* @Return const OneSkillData*: 技能指针
*/
inline const OneSkillData* GetSkillData(const INT_PTR nSkillId) const
{
//ID为0的
if ( nSkillId <= 0 || nSkillId >= Inherited::count() )
return NULL;
else return &(this->operator const OneSkillData*()[nSkillId]);
}
inline LPCSTR GetSkillNameById(const INT_PTR nSkillId) const
{
const OneSkillData* pSkill = GetSkillData(nSkillId);
return pSkill ? pSkill->sSkillName:"";
}
/*
* Comments: 获取一个技能一个等级的数据
* Param const INT_PTR nSkillId:技能ID
* Param const INT_PTR nLevel: 技能的等级
* @Return const SKILLONELEVEL *:返回技能等级的数据
*/
inline SKILLONELEVEL * GetSkillLevelData( INT_PTR nSkillId, INT_PTR nLevel)
{
const OneSkillData * pSkill = GetSkillData(nSkillId);
if(pSkill ==NULL) return NULL;
if ( nLevel <= 0 || nLevel >= pSkill->levels.count )
return NULL;
else return &(pSkill->levels.pData[nLevel]);
}
/*
* Comments:获取技能的数量
* @Return INT_PTR: 技能的数量
*/
inline INT_PTR count() const{ return Inherited::count(); }
/*
* Comments:通过技能的名字返回id
* Param char * pSkillName:技能的名字
* @Return INT_PTR:返回技能的id如果没有返回-1
*/
inline INT_PTR GetSkillIdByName(char * pSkillName)
{
for(INT_PTR i=0 ;i <Inherited::count(); i++ )
{
const OneSkillData * pData = &(this->operator const OneSkillData*()[i]);
if( 0== strcmp( pData->sSkillName, pSkillName) )
{
return pData->nSkillID ;
};
}
return -1;
}
/*
* Comments: 从文件里装载技能数据
* Param LPCTSTR sFilePath: 路径的名称
* @Return bool: 失败返回false
*/
bool LoadSkills(LPCTSTR sFilePath);
std::vector<OneSkillData*>& GetVocationSKills(int nVocation)
{
switch (nVocation)
{
case enVocWarrior:
return m_Warrior;
case enVocMagician:
return m_Magician;
case enVocWizard:
return m_Wizard;
default:
return m_None;
}
}
protected:
//以下函数为覆盖父类的相关数据处理函数
void showError(LPCTSTR sError);
private:
/*
* Comments:装载全部技能的数据
* @Return bool: 失败返回false
*/
bool ReadAllSkills();
private:
CDataAllocator m_DataAllocator;
std::vector<OneSkillData*> m_None;// 无职业技能
std::vector<OneSkillData*> m_Warrior;// 道士技能
std::vector<OneSkillData*> m_Magician;// 法师技能
std::vector<OneSkillData*> m_Wizard; //道士技能
};