|
|
- %%%------------------------------------------------
- %%% @author huangyongxing@yeah.net
- %%% @doc 战斗相关公共定义
- %%%------------------------------------------------
- -ifndef(BATTLE_HRL).
- -define(BATTLE_HRL, ok).
-
- -define(BATTLE_ATT_TYPE_SRD, 0). % 近程攻击
- -define(BATTLE_ATT_TYPE_RD, 1). % 远程攻击
-
- -define(HURT_TYPE_NORMAL, 0). % 普通
- -define(HURT_TYPE_MISS, 1). % 闪避
- -define(HURT_TYPE_CRIT, 2). % 暴击
- -define(HURT_TYPE_IMMUE, 3). % 免疫伤害(无敌)
- -define(HURT_TYPE_HEART, 4). % 会心
- -define(HURT_TYPE_PARRY, 5). % 格挡
- -define(HURT_TYPE_SHIELD, 6). % 护盾免伤
-
- %% 战斗对象定义
- -define(BATTLE_SIGN_MON, 1). %% 怪
- -define(BATTLE_SIGN_PLAYER, 2). %% 人
- -define(BATTLE_SIGN_DUMMY, 5). %% 假人
- -define(BATTLE_SIGN_PARTNER, 7). %% 伙伴AI娘
- -define(BATTLE_SIGN_CHILD, 15). %% 宝宝
- -define(BATTLE_SIGN_WEAPON, 16). %% 宝具/圣物
- -define(BATTLE_SIGN_PET, 25). %% 宠物
- -define(BATTLE_SIGN_FAKE, 100). %% 100: 伪造的攻击对象(只在战斗使用)
-
- %% 战斗时机定义
- -define(BATTLE_MOMENT_ATTACK, 1). %% 攻击时
- -define(BATTLE_MOMENT_DEFENCE, 2). %% 防守时
-
- %% -------------------------------------------------------------------
- %% 战斗中的特殊效果 BUFF
- %% XXX 特别注意:
- %% 由于项目中经常采用技能系统来投放属性,意味着属性这边的id,
- %% 与战斗中的特殊效果id必须是无冲突的。
- %% 其他情况可参见attr.hrl中的说明
- %% -------------------------------------------------------------------
- -define(SPBUFF_DIZZY, 301). % 眩晕
- -define(SPBUFF_SILENCE, 302). % 沉默
- -define(SPBUFF_IMMOBILIZE, 303). % 定身:skill
- -define(SPBUFF_SHIELD, 304). % 护盾(时间)
- -define(SPBUFF_SHIELD_COUNT, 305). % 护盾(次数)
- -define(SPBUFF_IMMUNE, 306). % 无敌
- -define(SPBUFF_UNHURT, 307). % 免伤
- -define(SPBUFF_SUPERARMOR, 308). % 霸体
- -define(SPBUFF_UNSPEED, 309). % 减速免疫
- -define(SPBUFF_UNDIZZY, 310). % 眩晕免疫
- -define(SPBUFF_UNBLEED, 311). % 流血免疫
- -define(SPBUFF_SUCK_BLOOD, 314). % 吸血
- -define(SPBUFF_REBOUND, 315). % 反弹
- -define(SPBUFF_RESUME, 316). % 回血
- -define(SPBUFF_BLEED, 317). % 流血
- -define(SPBUFF_CLEAN_BUFF, 318). % 清除负面控制buff
- -define(SPBUFF_KILL, 319). % 斩杀
- -define(SPBUFF_RATIO_UNHURT, 320). % 概率免伤
- -define(SPBUFF_SLOW, 321). % 减速
- -define(SPBUFF_FIRING, 322). % 灼烧
- -define(SPBUFF_MINUS_CD, 323). % 减CD
- -define(SPBUFF_BASE_ATTR_ADD_RATIO, 326). % 全属性提升
- -define(SPBUFF_RESUME_ADD_RATIO, 327). % 回血效果提升
- -define(SPBUFF_BERESUME_ADD_RATIO, 328). % 被回血效果提升
- -define(SPBUFF_UNRESUME, 329). % 回血免疫-禁疗
- -define(SPBUFF_FEAR, 330). % 恐惧
- -define(SPBUFF_NO_BATTLE, 331). % 远离战斗:既不能攻击别人,也不能攻击别人
- -define(SPBUFF_COMBO, 332). % 连击buff
- -define(SPBUFF_SKILL_HURT, 333). % 技能伤害
- -define(SPBUFF_PROHIBED_JUMP, 399). % 禁跳(被禁止执行跳跃)
-
- %% 最大选择攻击对象数量
- -define(MAX_ATTACK_NUM, 30).
-
- %% 发起战斗错误码
- -define(ERR_TOO_FAST, 2). % 技能CD问题
- -define(ERR_ATTACKER, 3). % 攻击方异常(无血、数据丢失)
- -define(ERR_CD, 5). % 技能CD问题
- -define(ERR_CONF, 6). % 错误配置
- -define(ERR_SKILL_INVALID, 8). % 技能无效(非主动或转生替换后不可再使用等)
- -define(ERR_ANGER_NO_ENOUGH, 10). % 怒气不足
- -define(ERR_GOD_SKILL, 13). % 式神技能释放错误(变身时可能多余,前端方便隐藏)
- -define(ERR_SKILL_STAGE, 14). % 多段技能施放的技能阶段错误
- -define(ERR_DIZZY, 21). % 眩晕中
- -define(ERR_SILENCE, 22). % 沉默
- -define(ERR_FEAR, 23).
- -define(ERR_COMBO, 30).
- -define(ERR_ANY_MON_NOT_EXISTS, 41). % 攻击目标部分怪物不存在
- -define(ERR_OTHER_BUFF, 42).
-
- %% -------------------------------------------------------------------
-
- %% 战斗主体
- -record(battle_status, {
- id = 0 % 角色/怪物id
- ,server_id = 0 % 来源服务器id
- ,node = none % 来源节点
- ,figure = undefined % 形象
- ,battle_attr=undefined % 战斗通用属性 #battle_attr{} (attr.hrl)
- ,config_id=0 % 场景对象配置id
- ,mid = 0 % 怪物配置id
- ,kind = 0 % 怪物类型
- ,boss = 0 % boss类型
- ,att_type = 0 % 攻击类型(0近程,1远程)
- ,online = 0 % 在线标识:怪物为在线
- ,scene = 0 % 所属场景
- ,copy_id = 0 % 所属副本
- ,x = 0 % X
- ,y = 0 % y
- ,att_area = 0 % 攻击范围
- ,pid = none % 玩家/怪物进程
- ,sid = none
- ,sign = 0 % 标示是怪还是人 1:怪, 2:人
- ,skill = [] % 技能
- ,skill_cd = [] % 技能cd记录
- ,skill_minus_cd = [] % 技能减cd列表
- ,skill_combo = [] % 技能连接(连技/多段)
- ,shaking_skill = 0 % 正在释放前摇的技能
- ,skill_owner = undefined % #skill_owner{}
- ,guild_id = 0 % 帮派id
- ,protect_end_time=0 % 保护时间
- ,team_id = 0 % 队伍id
- ,team_leader_name="" % 队伍队长名字
- ,team_skill = 0 % 队伍临时技能(被动)荆棘之心
- ,team_skill_num = 0 % 荆棘之心的叠加层数
- ,group = 0 % 战场阵营分组
- ,is_main = 0 % 是否主要攻击对象
- ,is_armor = 0 % 是否霸体
- ,is_be_atted = 1 % 是否可被攻击
- ,skill_passive = [] % 玩家被动技能
- ,skill_pet_passive = [] % 巫女被动战斗触发技能
- ,att_list = [] % 正在攻击我的怪物列表
- ,boss_tired = 0 % 世界BOSS疲劳值
- ,deserted_boss_tired = [] % 废都boss疲劳值
- ,unite_buffs = #{} % 联合BUFF
- ,att_tired = 0 % 攻击概率,100为上限,不能造成伤害
- ,can_att_list = [] % 可攻击对象 [{对象类型, 对象列表}] eg:[{?BATTLE_SIGN_MON, [怪物配置Id]}, {?BATTLE_SIGN_PLAYER, [玩家ID: 空则表示所有]}]
- ,cannot_beatt_list = [] % 不可被攻击对象 [{对象类型, 对象列表}]
- ,owner = 0 % 怪物归属玩家,只有该玩家可以打我。如果增加队伍功能,需要增加字段表明类型
- ,owner_name = ""
- ,act_label = [] % 活动标识列表 [{K,V}]
- ,personality = 0 % 个性编号
- ,boss_crush_r = 0 % boss碾压参数
- ,entity_attr = 0 % 战斗实体的属性#attr{}。例如:伙伴/宝具的属性
- ,motion_no_injury = 0 % 运动无敌状态结束时间
-
- ,support_id = 0 % 协助玩家id
- ,support_name = "" % 协助玩家名字
- ,support_team = 0 % 协助玩家队伍id
- ,support_team_name = "" % 协助玩家队长名字
- ,support_content = [] % 协助玩家简要信息
-
- ,badge = [] % 持有BOSS战斗伤害影响徽章
- ,god_fighting = [] % 召唤出来的式神[#god_fighting{}|_]
- ,origin_hp = 0 % 式神变身时,保存玩家变身前的hp
- ,triggers_passive = [] % 当前触发的被动技能[{skill_id, cd}]
- }).
-
- %% skill_combo 列表中的元素
- -record(skill_combo, {
- main_skill_id = 0, % 主技能id
- main_skill_lv = 1, % 主技能等级
- main_skill_cd = 0, % 主技能cd
- is_set_cd = 0, % 是否设置cd
- next_time = 0, % 释放下个combo技能时间间隔
- combo_list = [] % 剩余combo技能
- }).
-
- %% 战斗信息回传
- -record(battle_return, {
- hp = 0 % 防守方hp
- ,mp = 0 % 防守方mp
- ,anger = 0 % 防守方怒气
- ,hurt = 0 % 防守方受到的伤害
- ,move_x = 0 % 防守方x位移
- ,move_y = 0 % 防守方y位移
- ,attr_buff_list = [] % 防守方属性buff列表
- ,other_buff_list = [] % 防守方其他buff列表
- ,sign = 0 % 攻击方类型
- ,hit_list = [] % 助攻列表
- ,is_calc_hurt = 1 % 是否计算伤害(0不算,1算)
- ,atter = [] % 攻击方数据 #battle_return_player{} | #battle_return_mon{}
- ,beattack_num = 0 % 受击次数
- ,skill_cd = [] % 技能cd
- ,god_id = 0 % 唤神id >0 唤神变身中
- }).
-
- %% 攻击方信息
- -record(battle_return_atter, {
- sign = 0 % 攻击者类型 如果有所属,此为所属者类型
- ,id = 0 % 攻击者id 如果有所属,此为所属者id
- ,real_sign = 0 % 如果有所属,此为真实类型,没有所属和sign一致
- ,real_id = 0 % 如果有所属,此为真实id,没有所属和id一致
- ,real_name = [] % 如果有所属,此为真实名字,没有所属和name一致
- ,server_id = 0 % 攻击者所在服务器id
- ,node = none % 攻击者所在节点
- ,group = 0 % 攻击者分组
- ,mid = 0 % 怪物资源id
- ,kind = 0 % 怪物类型:14:原型怪
- ,pid = none % 攻击者进程id
- ,name = [] % 攻击者名字
- ,team_id = 0 % 攻击者队伍id
- ,team_leader_name = "" % 攻击者队长名字
- ,att_time = 0 % 攻击者攻击时刻
- ,guild_id = 0 % 帮派id
- ,guild_name = 0 % 帮派名字
- ,flag = 0 % 社团旗帜
- ,lv = 0 % 攻击者等级
- ,career = 0 % 职业
- ,power = 0 % 战力
- ,hp = 0 % 血量
- ,online = 0 % 在线标识
- ,x = 0 % 攻击者所在x坐标
- ,y = 0 % 攻击者所在y坐标
- ,hide = 0 % 攻击方是否隐身
- ,att_type = 0 % 攻击类型(0近程,1远程)
- ,attr_skill_id = 0 % 攻击方使用的技能id
-
- ,support_id = 0 % 协助玩家id
- ,support_name = "" % 协助玩家名字
- ,support_team = 0 % 协助玩家队伍id
- ,support_team_name = "" % 协助玩家队长名字
-
- ,badge = [] % 社团徽章
-
- ,anger = 0 % 怒气
- ,anger_lim = 0 % 怒气上限
- }).
-
- %% 攻击额外的参数
- -record(battle_args, {
- att_key = undefined % 攻击者key
- ,att_user = undefined % 攻击者的数据
- ,sign = 0 % 宠物攻击字段有效
- ,mon_list = [] % 被攻击怪物列表:[MonId,...]第一个为锁定目标
- ,player_list = [] % 被攻击的玩家列表:[UserKey, ...]第一个为锁定目标
- ,der_list = [] % 所有防御对象列表(包含玩家)
- ,is_combo = 0 % 是否连续技
- ,skill_id = 0 % 技能id
- ,skill_lv = 1 % 技能等级(默认1)
- ,att_x = 0 % 攻击点x
- ,att_y = 0 % 攻击点y
- ,att_angle = 0 % 攻击角度
- ,att_object_id = 0 % 攻击方对象ID
- ,now_time = 0 % 现在的时间
- ,skill_adjust = [] % 技能配置数据调整参数
- ,skill_stage = 1 % 多段技能的阶段值
- ,main_type = 0 % 主目标是人或怪(0人1怪,辅助定位主目标,对应防守方列表第一位)
- ,guard_dun_buff = false
- }).
-
- %% 被动技能额外的参数
- -record(battle_passive_args, {
- aer = undefined % 攻击者
- ,der = undefined % 受击者
- ,trigger_time = 0 % 被动触发点
- ,hp = 0 % 血量(攻击者或者被攻击)
- ,hurt_type = 0 % 伤害类型
- ,hurt = 0 % 伤害值
- ,skill_id = 0 % 技能id
- ,is_trigger = 0 % 是否触发(初始化时不要赋值)
- }).
-
- %% 怪物继承父类的属性记录
- -record(skill_owner, {
- id=0 % 玩家id
- ,node=none % 玩家节点
- ,pid=none % 玩家进程id
- ,team_id=0 % 队伍id
- ,guild_id=0 % 公会id
- ,guild_name="" % 公会名
- ,sign=0 % 类型 ?BATTLE_SIGN_MON | ?BATTLE_SIGN_PLAYER...
- }).
-
- %% 场景对象返回必要的属性到进程
- -record(assist_return, {
- skill_cd = []
- ,skill_combo = []
- }).
-
- %% 保存在怪物进程里,使用技能信息 cast的时候使用
- -record(selected_skill, {
- att_time % 攻击时间
- ,skill_id % 技能id
- ,spell_time % 吟唱时间
- ,is_refind_t % 是否重新选择目标
- ,link_info % 连接技能
- }).
-
- %% 使用技能后返回
- -record(skill_return, {
- used_skill % 使用的技能
- ,rx % 使用技能前的x坐标
- ,ry % 使用技能前的y坐标
- ,tx % 技能作用的x坐标
- ,ty % 技能作用的y坐标
- ,aer_info % 使用技能后攻击方的一些数据
- ,main_skill % 主技能
- ,radian % 技能角度(弧度)
- }).
-
- %% 技能造成的中间属性
- %% 应该分离出需要保存和不需要保存的状态两大类
- -record(skill_effect, {
- superarmor = 0, % 免疫控制
- immue = 0, % 免疫伤害
- un_speed = 0, % 免疫减速
- rebound = 0, % 反弹
- suck_blood = 0, % 吸血
- shield_count = 0, % 次数盾
- interrupt = 0, % 是否打断
- un_die = 0, % 致死触发标记
- current_un_dizzy = 0, % 免疫当前眩晕
- killed = 0, % 斩杀
- unresume = 0, % 回血免疫
- no_battle = 0 % 既不能攻击别人也不能被攻击
- }).
-
- %% 战斗battle_status中记录的战斗buff
- %% 一般以 BuffId + SkillId 来确定BuffList中的唯一一条BUFF(key字段),
- %% 而BuffKey则可能同时存在多个(有的Buff只能存在一个,具体看Buff类型)
- -record(battle_buff, {
- key = {0, 0} % {BuffId, Skillid}
- ,skill_lv = 0 % 技能等级
- ,stack = 0 % 堆叠数
- ,param_int = 0 % 技能相关整数或运算后参数
- ,param_float = 0 % 技能相关浮点数或运算后参数
- ,time_end = 0 % 结束时间
- ,effect_id = 0 % 效果id
- ,attr_id = 0 % 属性id(某些效果的运算需要关联到人物属性id)
- }).
-
- -endif.
|