Files
mir_server/server/LogicServer/config/VocationConfig.h

163 lines
5.8 KiB
C
Raw Normal View History

2025-01-09 17:45:40 +08:00
#pragma once
//玩家的职业配置
#define LEVEL_PROPERTY_COUNT 16 //对应生命值,魔法值, 最小物理攻击,最大物理攻击,最小魔法攻击,最大魔法攻击,最小道术攻击,最大道术攻击,最小物理防御,最大物理防御,最小魔法防御,最大魔法防御,准确,敏捷
//#define LEVEL_UP_PROPERTY_COUNT 9 //初始化属性随着等级的成长 外功攻击、内功攻击、外功防御、内功防御、生命值、内力值、命中值、闪避值、暴击值
#define MAX_CREATE_POSNUM 100 //最多的出生点
//2次方程参数配置都使用 value= a* level ^2 + b * level +c 的2次方程配置
//其中a,b,c是浮点型的数字
typedef struct tagQuadraticParams
{
float quadraticParam[LEVEL_PROPERTY_COUNT]; //二次方参数a,对应生命值,魔法值, 最小物理攻击,最大物理攻击,最小魔法攻击,最大魔法攻击,最小道术攻击,最大道术攻击,最小物理防御,最大物理防御,最小魔法防御,最大魔法防御,准确,敏捷
float linearParam[LEVEL_PROPERTY_COUNT]; //1次方参数b对应生命值魔法值, 最小物理攻击,最大物理攻击,最小魔法攻击,最大魔法攻击,最小道术攻击,最大道术攻击,最小物理防御,最大物理防御,最小魔法防御,最大魔法防御,准确,敏捷
float constantParam [LEVEL_PROPERTY_COUNT]; //常数参数c对应生命值魔法值, 最小物理攻击,最大物理攻击,最小魔法攻击,最大魔法攻击,最小道术攻击,最大道术攻击,最小物理防御,最大物理防御,最小魔法防御,最大魔法防御,准确,敏捷
}QUADRATICPARAMS, *PQUADRATICPARAMS;
////各职业每个等级的属性
//typedef struct tagEntityLevelProperty
//{
// int levelMin; //等级范围下限
// int levelMax; //等级范围上限
// QUADRATICPARAMS params; //2次方程参数
//}ENTITYLEVELPROPERTY,*PENTITYLEVELPROPERTY;
typedef struct tagEntityLevelProp
{
int levelProp[LEVEL_PROPERTY_COUNT];
}ENTITYLEVELPROPERTY, *PENTITYLEVELPROPERTY;
//创建玩家的出生点
typedef struct tagActorCreatePos
{
int nScenceID; //初始化的场景ID
int nPosX; //出生点的x
int nPosY; // 出生点的y
}ACTORCREATEPOS;
//每个职业的初始化属性
typedef struct tagVocationInitConfig
//public ENTITYLEVELPROPERTY
{
//unsigned nFbID; //初始化的副本ID
//unsigned nScenceID; //初始化的场景ID
//int nPosX; //出生点的x
//int nPosY; // 出生点的y
int nDefaultMaleModelID;//默认的男性模型ID
int nDefaultFemaleModelID;//-默认的女性职业的模型ID
int nNearAttackType; //普通攻击的攻击类型
int nNearAttackDis; //普通攻击的攻击距离默认是1格
int nManIcon; //男头像
int nFemaleIcon; //女头像
int nMaxAnger; //怒气的上限
int heroAiId; //英雄的ai ID
int heroDefaultSkill; //本职业英雄默认的技能,在创建的时候给英雄学会
int nFireDefenseRate; //抗火率 使用1点表示1万分之1
DataList<CStdItem::AttributeGroup> circleAddAttrs; //玩家转生属性加成表(同物品类似)
DataList<ENTITYLEVELPROPERTY> actorProps; //玩家的属性
//DataList<ENTITYLEVELPROPERTY> heroProps; //英雄的属性
//QUADRATICPARAMS heroMergeProp; //英雄附体的属性
//char maleHeroName[32]; //男英雄的默认名字
//char femaleHeroName[32]; //女英雄的默认名字
//int nPosCount; //出生点的的个数
//ACTORCREATEPOS nCreatePos[MAX_CREATE_POSNUM]; //出生点
} VOCATIONINITCONFIG,*PVOCATIONINITCONFIG;
//出生的副本配置
typedef struct tagCreateDefaultFb
{
int nToken;
int nFbId;
int nPosCount; //出生点的的个数
ACTORCREATEPOS nCreatePos[MAX_CREATE_POSNUM]; //出生点
}CRESTEDEFAULTFb;
/* 暴击几率(% = 攻击方暴击值 / 攻击方角色等级 * 100 这里的100的配置的是参数
% = / (*100) 100
% = / * 100 100
*/
typedef struct tagVocationInitTable
{
unsigned int nDefaultMoveSpeed; //玩家的默认速度
unsigned int nDefaultAttackSpeed; //默认的攻击速度
AttriGroup initAttrs;//属性
VOCATIONINITCONFIG vocationTable[enMaxVocCount];
CVector<CRESTEDEFAULTFb> nDefualtFb;
/*
* Comments: ID
* Param INT_PTR nVocation:id
* Param INT_PTR nIsFemale:10
* @Return int:ID
*/
inline int GetVocationDefaultModel(INT_PTR nVocation,INT_PTR nIsFemale)
{
if(nVocation >=0 && nVocation < enMaxVocCount )
{
if(nIsFemale)
{
return vocationTable[nVocation].nDefaultFemaleModelID;
}
else
{
return vocationTable[nVocation].nDefaultMaleModelID;
}
}
return 0;
}
//更据职业获取
inline int GetVocationMaxAnger(INT_PTR nVocation)
{
if(nVocation >=0 && nVocation < enMaxVocCount )
{
return vocationTable[nVocation].nMaxAnger;
}
return 0;
}
//获取等级属性参数
inline PENTITYLEVELPROPERTY GetVocationLevelPropParam(INT_PTR nEnityType, INT_PTR nVocation, INT_PTR nLevel)
{
if (nVocation < 0 || nVocation >= enMaxVocCount)
{
OutputMsg(rmError, _T("%s 不是有效的职业:%d"), __FUNCTION__, nVocation);
return NULL;
}
DataList<ENTITYLEVELPROPERTY> *pProps = NULL;
switch (nEnityType)
{
case enActor:
pProps = &(vocationTable[nVocation].actorProps);
break;
case enHero:
//pProps = &(vocationTable[nVocation].heroProps);
break;
}
if (pProps == NULL) return NULL;
if (nLevel > 0 && nLevel < pProps->count )
{
return &pProps->pData[nLevel];
}
return NULL;
}
} VOCATIONINITTABLE ,*PVOCATIONINITTABLE;