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

163 lines
5.8 KiB
C
Raw Permalink 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
//玩家的职业配置
#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:是女的1男的0
* @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;