266 lines
7.9 KiB
C++
266 lines
7.9 KiB
C++
#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;
|
||
|