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

266 lines
7.9 KiB
C
Raw Permalink Normal View History

2025-01-09 17:45:40 +08:00
#pragma once
class CAttrCalc;
using namespace wylib::container;
#define MAX_DROP_GROUP_COUNT 8 //最大的掉落组的ID
static const char *szBossDigServerCount = "szBossDigServerCount";
//怪物的爆出的配置,1个配置项
typedef struct tagOneDropData
{
char bAwardType; //奖励类型
char bStrong; // 强化等级
WORD wItemID; //物品的ID
char bBind; // 绑定属性
char bMinStrong; //最小的强化
char bMinQuality; //最小的品质
char bBroadCastType; //怪物广播的类型 0:不广播 1附近 2场景 3副本 4世界 5同阵营广播, 10:发给自己
char bBroadCast; //自定义广播1挖boss 广播
int nMinCount; //最小数量(用于随机奖励数量)
int nMaxCount; //最大数量(用于随机奖励数量)
int nCount; //数量
int nPropability; //概率万分之1
bool bTriggerEvent; //是否触发脚本
char bReserver;
char bQuality; // 品质
WORD nQualityDataIndex; //生成极品属性
BYTE bGroupId; //组的ID
int nSeed; //掉落的种子,第几个怪物死亡的时候掉落
int nDeadTimes; //该怪物已经死亡的次数
int nTime; // 物品剩余的存在时间秒为单位。0表示不限时间默认为0
BYTE bAuxParam; //辅助参数
char bSex; //需要的性别
char bJob; //需要的职业
int nLootTime; //掉落在地上可以拾取的时间 单位秒 默认为0
int nExpireTime; //掉落在地上的存活时间 默认为全局配置里的时间,这里是针对需要特殊处理的 单位秒
byte nGrowLv; //
BYTE nGrowLvMax; //
unsigned int nStartDate; //开始时间
unsigned int nEndDate; //结束时间
} ONEDROPDATA,*PONEDROPDATA;
//掉落组
typedef struct tagDropGroup
{
DataList<ONEDROPDATA> data;
BYTE groupNextHitIndex[MAX_DROP_GROUP_COUNT]; //掉落下次掉落的那个index
BYTE groupMemberCount[MAX_DROP_GROUP_COUNT]; //掉落组一个组里的物品的种类
}DROPGROUP, *PDROPGROUP;
//怪物的技能
/*
typedef struct tagMonsterSkill
{
WORD nSkillID;
WORD nSkillLevel;
}MONSTERSKILL,*PMONSTERSKILL;
*/
//怪物被挖记录
typedef struct tagMonsterActorDig
{
unsigned int nActorId;
BYTE nHadDigCount;
}MONSTERACTORDIG;
//仇恨(选择攻击目标用)
typedef struct tagMonsterHatred
{
unsigned int nActorId; //玩家id
BYTE nEntityType; //攻击实体类型(actor,hero,pet单独计算)
INT_PTR nDamageValue;//累计伤害值
unsigned int nLastAttackTime;//上次攻击时间
tagMonsterHatred()
{
memset(this,0, sizeof(*this));
}
}MONSTERHATRED;
typedef enum BossDropDigFlag
{
bdfCantDrop = 0, //不是挖出物品
bdfDropNormol = 1, //可挖出的普通物品
bdfDropRare = 2, //可挖出的珍稀物品
};
typedef enum MonsterSayType
{
mstInvalid = -1,
mstIdle,
mstFoundTarget,
mstAttack,
mstAttacked,
mstDead,
mstHpLow,
mstCreate,
mstDisappear,
mstMax,
};
// 怪物发言(每条发言的配置数据)
typedef struct tagMonsterSayInfo
{
int nType; // 发言类型和MonsterSayType对应
int nRate; // 发言概率。 nRate=0表明不发言
int nParam; // 发言参数。如果是血量低于多少的发言,这里配置血量百分比
int nCount; // 发言数量
MonsterSayBCType nBCType; // 广播类型
int nTipType; // 发言提示类型
char** pMsgList; // 发言内容
int nLimitLev; // 发言显示等级限制
bool bTransmit; // 是否添加速传
int nLimitTime; // 速传有效时间
int nPosX; // 速传坐标X
int nPosY; // 速传坐标Y
}MonsterSayInfo;
// 每一类怪物发言配置
typedef struct tagMonsterSayTypeConfig
{
int nCount; // 此类发言配置数量
MonsterSayInfo* pMonsterSayCfg; // 怪物每类发言配置数据
}MonsterSayTypeConfig;
// 怪物发言列表配置
typedef struct tagMonsterSayList
{
int nLowerInterval; // 随机发言时间下限
int nUpperInterval; // 随机发言时间上限
MonsterSayTypeConfig vecSayTypeInfo[mstMax]; // 发言类型列表
}MonsterSayList;
// 怪物优先攻击目标怪物列表
typedef struct tagPriorAttackTarget
{
int nCount; // 列表数量
int *pTargetIDList; // 怪物ID列表
}PriorAttackTarget;
typedef struct tagMonsterSkill
{
WORD wSkillID; //技能的ID
BYTE bSkillLevel; //技能的等级
BYTE bEvent;// 在什么事件下触发,0表示普通的战斗1表示死亡
bool bAutoCDWhenEnterCombat; // 技能是否在进入战斗立即CD
//BYTE bCount; //使用的次数
//unsigned int nInterval; //技能的使用间隔,单位ms
}MONSTERSKILL,*PMONSTERSKILL;
typedef struct tagMonsterConfig
//public CREATUREDATA
{
public:
enum tagMonsterType
{
mtCommon = 1, //普通怪
mtElite = 2, //精英怪
mtToumu = 3, //头目
mtBoss = 4, //boss
mtKungfu = 6, //练功师怪
mtHumanoid = 7, //人形怪
mtWorldBoss = 8, //世界boss
mtGirl = 9, //仙女采集怪
mtFubenCollect = 10, //副本中采集怪,先扣物品
mtCollectOnce = 11, //只能采集一次
mtMax,
};
tagMonsterConfig()
{
memset(this,0,sizeof(*this));
}
CAttrCalc cal; //使用计算器存储,初始化的时候将初始化完毕实体的计算器
int nOriginalLevel ;//原始的等级
int nLevel; //等级
int nCircle; //转生
int nDeadTimes; //死亡次数
int nMaxDeadTimes; //升到下一级级最大死亡次数
int nEntityId; //怪物的di
ACTORNAME szName;
int nModelId; //模型的ID
//unsigned int nAttackSpeed; //攻击速度
unsigned int nExp ; //怪物掉落的基础经验
unsigned int nInnerExp; //DELETE
BYTE btMonsterType; //怪物的类型
//用于人形怪外观
WORD nWeaponId; //武器外观ID
WORD nSwingId; //翅膀外观ID
int nMaxDropHp ; //最大的掉血量如果为0就是没有限制按正常流程如果配置了每次掉的血最多这个数
//公式 An*n + Bn + c
int nMaxHardLv; //最大boss难度等级
float fLevelA; //计算boss升到下一等级需死亡次数系数A
float fLevelB; //计算boss升到下一等级需死亡次数系数B
float fLevelC; //计算boss升到下一等级需死亡次数系数C
float fPropA; //计算boss在升级后的属性加成系数A
float fPropB; //计算boss在升级后的属性加成系数B
float fPropC; //计算boss在升级后的属性加成系数C
WORD wAiConfigId; //怪物的ai配置的ID
BYTE bCamp; //怪物的阵营
int nAttackInterval ; // 怪物的攻击间隔比如使用技能或者肉搏后需要间隔多长时间才能使用默认是500
int nattackLevel; //攻击等级,用于决定怪物被攻击的优先等级,玩家是100等级越高的越容易被攻击数值没有上限
int maxDropHp; //
DROPGROUP drops; //怪物的掉落
int bAttackMusicId; //攻击声音的id
int bDieMusicId; //死亡声音的id
int bTargetMusicId; //发现目标声音的id
int bDamageMusicId; //伤害声音的id
BYTE bAttackMusicRate; //攻击声音的概率
BYTE bDieMusicRate; //死亡声音的概率
BYTE bTargetMusicRate; //发现目标声音的概率
BYTE bDamageMusicRate; //伤害声音的概率
bool bCreateRank; //创建怪物是否创建排行榜
WORD wReSelTargetRate; // 怪物重新选择敌人的概率。百分比默认为0
BYTE btAttackType; // 怪物攻击类型
BYTE btEntityType; // 实体类型
unsigned int nMonsterColor; // 怪物颜色
MonsterSayList monsterSayList; // 怪物发言配置
PriorAttackTarget priorAttackTarget; // 怪物优先攻击列表
EntityFlags* pflags; //怪物的属性标志位
BYTE btDir; //怪物初始朝向
WORD wDamageSkill; //只能被特定技能伤害
int nGatherLevel; //采集等级限制
bool bRecordKillTime; //需要记录最近一次被击杀的时间(自从服务器启动)
int nDropid; //掉落组
int nFlagId; //标志组id
int nMonLog;//是否统计
DataList<MONSTERSKILL> skills;
int nAscriptionOpen;//非活动副本Boss归属描述开关
} MONSTERCONFIG,*PMONSTERCONFIG;