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