%%%------------------------------------------------ %%% @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.