378 lines
14 KiB
C
378 lines
14 KiB
C
#pragma once
|
||
|
||
|
||
|
||
|
||
//技能配置表
|
||
#define MAX_SECRET_SAUCE_COUNT_ONE_SKILL 4 //一个技能最大的秘笈数量
|
||
#define MAX_SKILL_LEVEL 20 //技能的最大的等级
|
||
#define SKILLCON_PARAM 5 //技能筛选69,70参数
|
||
|
||
//技能的中心点的类型
|
||
enum enSkillCerterPosType
|
||
{
|
||
stSkillTargetCenter = 0, //以目标为中心
|
||
stSkillActorCenter = 1, //以主角为中心
|
||
stSkillSpellPointCenter = 2, //以施法点为中心
|
||
stSkillActorCenterDir = 3, //以主角瞬时坐标方向为中心
|
||
};
|
||
|
||
//范围的分类
|
||
enum enSkillRangeType
|
||
{
|
||
stSkillRangeSingle, //无范围,仅针对目标的单体技能(单体)
|
||
stSkillRangeRotationSingle, //线性旋转(单体)
|
||
stSkillRangeRotationGroup, //线性范围(群体)
|
||
stSkillRangeGroup, //范围(群体)
|
||
stSkillRangeAccurateRotation, //矢量精确旋转,以中心点与鼠标的位置的连线作为旋转轴旋转,比线性旋转更精确,用于法师的火球术
|
||
stSkillRangePointCenter, //施法点中心范围(群体), 与范围(群体)不同的是传递给PointSkillResult的是施法点中心坐标
|
||
stSkillRangeNoTarget, //无目标的
|
||
};
|
||
|
||
enum enSkillType
|
||
{
|
||
stPassiveSkill = 0, //被动技能
|
||
stPhysicAttackSkill = 1, //物理攻击技能
|
||
stMagicAttackSkill = 2, //魔法攻击技能
|
||
stTransferSkill = 3, //传送技能
|
||
stLifeSkill = 4, //生活技能
|
||
stOtherSpecialSkill = 5, //其他特殊的技能,比如队伍buff,通过技能实现的
|
||
};
|
||
|
||
enum enSkillClass
|
||
{
|
||
scSkillClassVocBasic = 1, //职业基本技能
|
||
scSkillClassMonster = 2, //怪物技能
|
||
scSkillCriticalBlow = 3, //必杀
|
||
scSkillDig = 4, //挖矿技能 TO DELETE
|
||
scSkillHideAttach = 5, //隐藏的附加技能(烈火剑法,逐日剑法,不检查)
|
||
scSkillRide = 6, //座驾技能
|
||
|
||
scSkillClassGuild = 11, //行会技能,展示在行会面板上的技能(保存于人物的技能列表中)
|
||
};
|
||
|
||
//技能的释放结果的ID
|
||
enum enSkillResultID
|
||
{
|
||
srSkillResultError = 0, //占位
|
||
srSkillResultPhysicAttack = 1, //物理攻击
|
||
srSkillResultMagicAttack = 2, //法术攻击
|
||
srSkillResulWizardAttack = 3, //道术攻击
|
||
srSkillResultAddBuff = 4, //增加buff
|
||
srSkillResultDelBuff = 5, //删除buff
|
||
srSkillCatchMonster = 6, //抓怪
|
||
srSkillResultBeatBack = 7, //击退
|
||
srSkillResultMobFire = 8, //召唤火墙
|
||
srSkillResultMobPet = 9, //召唤宠物
|
||
srSkillResultGoAhead = 10, //往前跑若干格
|
||
srSkillResultGoBack = 11, //向后退若干格
|
||
srSkillResultLastSafeAreaRTransfer = 12, //上一个安全区随机传送
|
||
srSkillResultChangeProperty = 13, //被动技能
|
||
srSkillResultCure = 14, //瞬间治疗
|
||
srSkillResultHolyAttack = 15, //神圣攻击
|
||
srSkillResultMoveToTarget = 16, //瞬移到目标旁
|
||
srSkillResultMoveBackHome = 17, //瞬移回巢
|
||
srSkillResultTransfer = 18, //指定场景地点传送
|
||
srSkillResultSceneTransfer = 19, //本场景随机传送
|
||
srSkillResultLastSafeAreaTransfer = 20, //上一个安全区传送
|
||
|
||
srSkillResultDeleteEffect = 21, //删除特效
|
||
srSkillResulIgnoreDefence = 22, //忽视目标的防御
|
||
srSkillResulCatchTarget = 23, //把目标抓到自己身边
|
||
srSkillResultSetAttackTarget = 24, //设置攻击目标
|
||
srSkillResultMobEntity = 25, //刷怪
|
||
srSkillResultChargeAttack = 26, //冲锋
|
||
srSkillResultSelfHpCureTarget = 27, //自身的HP的百分比治疗目标
|
||
srSkillResultLostTarget = 28, //丢弃目标
|
||
srSkillResultChangEquipDua = 29, //改变装备的耐久
|
||
srSkillResultDropMonsterItem = 30, //按怪物的掉率掉落东西
|
||
srSkillResultScreenShake = 15, //振屏
|
||
srSkillResultChangeFubenProgress = 32, //改变副本进度
|
||
srSkillResultChangeModel = 33, //改变外形
|
||
srSkillResultRateChangeProperty = 34, //百分比改属性
|
||
srSkillResultDeleteSkillCd = 35, //删除技能的CD
|
||
srSkillResultGiveAward = 36, //给奖励
|
||
srSkillResultBeatFly = 37, //击飞
|
||
srSkillResultPlayGuide = 38, //客户端播放引导性特
|
||
srSkillResultIgnoreMaxDropHp = 39, //忽略每次最大伤害限制
|
||
srSkillResultPointMove = 40, //把目标移动到地图一个点
|
||
srSkillResultSelfPointMove = 41, //自己移动到范围内的鼠标指定的点
|
||
srSkillResultTargetRapidMove = 42, //向某目标冲撞
|
||
srSkillResultRemovePet = 43, //删除宠物
|
||
srSkillResultChangeMonsterAttacked = 44, //改变怪物是否能被攻击
|
||
srSkillResultFastSelfCurHp = 45, //瞬回血
|
||
srSkillResultTargetPointMove = 46, //把目标移动到范围内的鼠标指定的点
|
||
|
||
};
|
||
|
||
//技能的训练或者释放条件ID
|
||
enum enSkillTrainCondition
|
||
{
|
||
/// 释放条件
|
||
scSkillConditonHP =1, //消耗命
|
||
scSkillConditonMP =2, //消耗蓝
|
||
scSkillConditionWithoutBuff =3, //不存在buff
|
||
scSkillConditionTargetDistance =4,//和目标的距离
|
||
|
||
/// 旧的
|
||
|
||
scSkillConditonLevel =1, //等级必须大于等于一定的级别
|
||
scSkillConditonMoney =2, //金钱
|
||
scSkillConditonItem =3, //物品
|
||
scSkillConditonExp =4, //经验
|
||
scSkillConditonXiuwei =5, //修为
|
||
scSkillConditonVocation =6, //职业需求
|
||
//scSkillConditonHP =7, //消耗命
|
||
//scSkillConditonMP =8, //消耗蓝
|
||
scSkillConditionTargetExist =9, //目标存在
|
||
scSkillConditionPetCount =10, //存在宠物的数量
|
||
scSkillConditionWithBuff =11, //存在buff
|
||
//scSkillConditionWithoutBuff =12,// 身上必须没有指定类型的buff
|
||
//scSkillConditionTargetDistance =13,//和目标的距离
|
||
scSkillConditionTargetOverLap =14,//和目标重叠
|
||
|
||
scSkillConditionFaceTarget =15, ////需要面向目标
|
||
scSkillConditionOneDirTarget =16,//需要和目标的方向
|
||
scSkillConditionMountExpLimited=17,//坐骑经验不够
|
||
scSkillConditionHpRateBelow=18,//自身的血的百分比必须低于一定的值
|
||
|
||
scSkillConditionSpecialTarget =19, //需要特定的目标
|
||
scSkillConditionTargetCanAttack =20, //目标可攻击
|
||
scSkillConditionEfficiency = 21, //需要生活技能的熟练度
|
||
scSkillConditionJumpPoweer =22, //轻功不够
|
||
scSkillConditinBindCoin =23, //绑定银两的消耗
|
||
scSkillConditinCampTitle =24, //阵营的职位的条件
|
||
scSkillConditionBrotherCount =25, //结拜的数目
|
||
|
||
scSkillConditionTargetDis =26, //需要目标,并且和目标的y轴的绝对距离少于等于value
|
||
scSkillConditioOnlineBrotherCount =27, //队伍里的在线的结拜好友的数量 >= value,不包括自己
|
||
|
||
scSkillConditionBaseMpRate =28, //消耗基础蓝的万分比 value表示基础蓝的万分比,比如8500表示85%,玩家的基础蓝表示等级带来的MaxMp,不包括buff,装备等附加的
|
||
scSkillConditionBaseHpRate=29, //消耗基础血的万分比 value表示基础血的万分比,比如8500表示85%,玩家的基础血表示等级带来的MaxHp,不包括buff,装备等附加的
|
||
scSkillConditionBattleState =30, //在与玩家的战斗状态,value 1表示是 0表示否
|
||
|
||
scSkillConditionGuildCont=31,
|
||
scSkillConditionSkillLevel =32,
|
||
scSkillConditionXpValue=33,
|
||
scSkillConditionMetiralDura =34, //装备材料的耐久消耗
|
||
scSkillConditionTargetLine =35, //和目标一条直线上
|
||
|
||
scSkillConditionDigTool =36, //挖矿工具
|
||
scSkillConditionAnger =37, //怒气值
|
||
scSkillConditionArea = 38, //需要特定的区域类型,value表示区域的属性类型
|
||
scSkillConditionCircle =39, //转数的限制
|
||
|
||
};
|
||
|
||
|
||
//技能的效果类型
|
||
enum enSkillEffectType
|
||
{
|
||
stSkillEffectTypeNone = 0, //无效果
|
||
stSkillEffectTypeSwing = 1, //挥洒
|
||
stSkillEffectTypeCast = 2, //投掷与爆炸一样(暂时未用)
|
||
stSkillEffectTypeFly = 3, //飞行
|
||
stSkillEffectTypeExplode = 4, //爆炸 与投掷一样 上层
|
||
stSkillEffectTypeFootAlways = 5, //脚下持续
|
||
stSkillEffectTypeAlways = 6, //持续 只能人物使用
|
||
stSkillEffectDirByActor = 7, //只能人物使用,按方向
|
||
stSkillEffectTypeExplodeFloor = 8, //爆炸 下层
|
||
};
|
||
|
||
enum enSkillPropertyValueType
|
||
{
|
||
ptValueTypeInt=0, //属性的数值类型是整数
|
||
ptValueTypeFloat =1,//属性的数值类型是浮点数
|
||
ptValueTypeBuffRate = 2,//被动技能触发添加buff的概率
|
||
ptValueTypeBuffId =3,//被动技能触发添加buff的Id
|
||
ptValueTypeSkillAddBuff =4,//学习/遗忘技能时添加/删除buff
|
||
};
|
||
|
||
|
||
//技能在特殊的buff下是否能用,包括封、断、晕眩
|
||
enum enSkillSpecialBuffCondition
|
||
{
|
||
stSkillSpecialBuffNone =0, //都不能用
|
||
stSkillSpecialBuffFengDuan, //在封断的时候能够使用
|
||
stSkillSpecialBuffDizzy, //在晕眩的时候可以使用
|
||
stSkillSpecialBuffAll, //在封断的时候都能够使用
|
||
};
|
||
|
||
//伤害类型,用于技能命中和一些攻击、防御时判定
|
||
enum enSkillHitType
|
||
{
|
||
htDefault = 0, //默认
|
||
htFire, //火墙
|
||
htBuff, //buf伤害
|
||
};
|
||
|
||
//技能升级或者释放的条件,分表表示条件的ID,value,是否消耗,用在条件的判断上
|
||
typedef struct tagSkillTrainSpellCondition
|
||
{
|
||
BYTE nConditionID; //条件ID
|
||
BYTE bConsumed; //是否要消耗
|
||
BYTE bReserve; //保留
|
||
int nCount; //数量
|
||
INT64 nValue; //值
|
||
} SKILLTRAINSPELLCONDITION,*PSKILLTRAINSPELLCONDITION;
|
||
|
||
//技能的秘籍数据
|
||
typedef struct tagSkillMiji
|
||
{
|
||
WORD nMijiId; //秘籍的ID
|
||
WORD nMinLevel; //可以学习该秘籍的最低的技能等级
|
||
}SKILLMIJI,*PSKILLMIJI;
|
||
|
||
|
||
//Buff条件需要单独判断
|
||
/*
|
||
typedef struct tagBuffCondition
|
||
{
|
||
BYTE nType; // buff的类型
|
||
BYTE nCount; //数量
|
||
WORD nID; // buff的id
|
||
} BUFFCONDITION, *PBUFFCONDITION;
|
||
*/
|
||
|
||
|
||
//技能目标选择的筛选条件
|
||
typedef struct tagTargetSelCondition
|
||
{
|
||
int nKey; //条件ID
|
||
GAMEATTRVALUE value; //条件的值
|
||
}TARGETSELCONDITION,*PTARGETSELCONDITION;
|
||
|
||
|
||
//特效的配置
|
||
typedef struct tagSpecialEffect
|
||
{
|
||
BYTE nType; //特效的类型
|
||
BYTE nAlways; //是否总是生效
|
||
int nID; //特效的ID
|
||
int nKeepTime;//持续时间
|
||
int nDelayTime; //延迟生效时间
|
||
BYTE nSceneEffect;
|
||
int nTotalCount;//特效总帧数
|
||
int nTotalDirCount;//总方向数
|
||
} SPECIALEFFECT,*PSPECIALEFFECT;
|
||
|
||
//技能的释放结果
|
||
typedef struct tagSkillResult
|
||
{
|
||
int nId;
|
||
int nValue;
|
||
int nDelay;
|
||
int nParam1;
|
||
int nParam2;
|
||
int nParam3;
|
||
int nParam4;
|
||
int nParam5;
|
||
int nParam6;
|
||
int nResultType;
|
||
BYTE btHitType;
|
||
BYTE ignoreTargetDis; //忽视和目标的距离(例如:道士技能:虚空黑洞)
|
||
BYTE bBuffType; //bufftype
|
||
/*
|
||
BYTE nResultType; //效果的类型ID
|
||
BYTE bVt; //值的类型 (浮点等)
|
||
WORD wMjID; //秘笈的ID,如果是0表示是一个普通的技能效果
|
||
BYTE bLevel; //使用技能的等级(用于特殊技能)
|
||
|
||
BYTE alwaysTakeEffect; //就算施法者下线了也要生效
|
||
BYTE bRateType; //属性比例是相对于哪个数值,0表示物理攻击,1表示法术攻击,2表示道术攻击,。。。后面可以扩展
|
||
BYTE timeAddType; //时间是基于哪个属性的比例提高,0表示物理攻击,1表示魔法攻击,2表示道术攻击,3表示等级,其他可以增加
|
||
BYTE intervalAddType; //buff的时间间隔是基于哪个属性的比例提高,0表示物理攻击,1表示魔法攻击,2表示道术攻击,3表示等级,其他可以增加
|
||
int nId;
|
||
int nInterval;
|
||
int nDelay; //延迟,单位是毫秒
|
||
int nTimes; //作用的次数
|
||
int nValue; //值
|
||
int valueRate; //值的万分比
|
||
int timeRate; //时间的万分比
|
||
int intervalRate; // buff的时间的万分比
|
||
WORD maxTime; //buff最大的作用次数
|
||
WORD maxDur; //buff最大的作用间隔
|
||
int nEffectId; //特效的ID
|
||
int nEffectType; //特效的类型
|
||
int nAiId; //召唤宝宝的aiId
|
||
int nColorPriority; //添加buff的时候的优先级,从1开始,优先级高的将顶替优先级低的
|
||
int nColor; //添加buff的时候给添加的颜色,主要是道士的毒,麻痹的毒
|
||
BYTE ignoreTargetDis; //忽视和目标的距离,用于野蛮冲撞这样的技能,撞开的时候依然有效
|
||
BYTE btHitType; //伤害类型,用于技能命中伤害时判定 1:火墙
|
||
byte nParam;
|
||
*/
|
||
tagSkillResult()
|
||
{
|
||
memset(this,0,sizeof(*this) );
|
||
}
|
||
|
||
}SKILLRESULT,*PSKILLRESULT;
|
||
|
||
|
||
//技能的等级信息
|
||
typedef struct tagSkillAction
|
||
{
|
||
int nTargetType ; //目标的类型
|
||
DataList<SKILLRESULT> skillResults; //技能释放结果
|
||
DataList<SPECIALEFFECT> specialEffect; //升级的特效
|
||
DataList<TARGETSELCONDITION> targetConditions; //目标选择的条件
|
||
}SKILLACTION ,*PSKILLACTION;
|
||
|
||
|
||
//在一个特定范围里的技能的效果
|
||
typedef struct tagSkillOneRange
|
||
{
|
||
int nStartX; //x左边的点
|
||
int nEndX; //x右边的点
|
||
int nStartY; //y上面的点
|
||
int nEndY; //y下面的点
|
||
int rangeType; // 范围的类型
|
||
int rangeCenter; //范围的中心
|
||
int nDelay; //延迟目标选择
|
||
int nForceHitTargetDis;//非指向的群体技能可以强制打中已选目标的距离(主要是处理跑动的目标打不中的问题)
|
||
DataList<SKILLRESULT> skillResults; //技能释放结果
|
||
DataList<TARGETSELCONDITION> targetConditions; //目标选择的条件
|
||
//DataList<SKILLACTION> actions; //技能在这个范围内的效果
|
||
}SKILLONERANGE,*PSKILLONERANGE;
|
||
|
||
|
||
typedef struct tagSkillOneLevel
|
||
{
|
||
unsigned int nLevel;
|
||
//DataList<SKILLONERANGE> ranges; //技能在每一个范围里的效果
|
||
DataList<PSKILLONERANGE> pranges; //技能在每一个范围里的效果
|
||
DataList<SKILLTRAINSPELLCONDITION> trainConditions; //训练条件
|
||
DataList<SKILLTRAINSPELLCONDITION> spellConditions;//技能的使用需求
|
||
unsigned int nSingTime; //吟唱时间
|
||
unsigned int nCooldownTimes; //CD时间
|
||
int nAttrIdx;
|
||
int nHitId;
|
||
int nMaxPet;
|
||
bool isSceneEffect = false;
|
||
}SKILLONELEVEL,*PSKILLONELEVEL;
|
||
|
||
|
||
|
||
/*一个技能的数据*/
|
||
struct OneSkillData
|
||
{
|
||
char sSkillName[60]; //技能名字
|
||
WORD nSkillID; //技能ID
|
||
BYTE nSkillType; //技能的类型,近身攻击之类
|
||
BYTE bSpecialBuffCond; //技能在封断、晕眩的时候是否能够使用
|
||
BYTE bSkillClass; //技能的分类0职业被动技能,1职业主动技能,2阵营技能,3结拜技能,4侠侣技能,5职业绝学,6江湖绝学,7通用技能,8其他技能
|
||
BYTE bIsSwitch; //是否手动开关
|
||
BYTE bPriority; //技能的优先级
|
||
bool bIsAutoLearn;//是否自动学
|
||
BYTE bVocation; //职业
|
||
bool bBeedCalPassiveProperty; //是否需要计算被动属性,某些主动技能也需要按被动技能计算属性
|
||
bool bSingleEmptyEffect;
|
||
int nCommonCdTime; //技能使用的时候公共cd时间
|
||
int nAutoLearnSkillLvl; //自动学习技能的等级
|
||
DataList<SKILLONELEVEL> levels ; // 技能的等级
|
||
BYTE btClientDir; //使用客户端方向
|
||
WORD wAttrId; //对应的属性id
|
||
bool boIsDelete; //是否删除
|
||
};
|
||
|