%%% ----------------------------------------------------------------------------
%%% @doc 属性相关说明与映射关系
%%% ----------------------------------------------------------------------------
-ifndef(ATTR_HRL).
-define(ATTR_HRL, ok).

%% 人物属性相关数值
-define(SPEED_VALUE,                    500).   % 速度默认值
-define(ANGER_MAX,                      500).   % 怒气上限
-define(ANGER_ADD,                      5).     % 击杀怪物可获得5点怒气/只

%% 属性映射关系（与真实基础属性的差值）
-define(LV_ADD_ATTR_DIFF,                68).   % 等级加成百分比基础类属性

-define(PARTIAL_TYPE, [
        ?PARTIAL_ATT_ADD_RATIO,
        ?PARTIAL_HP_ADD_RATIO,
        % ?PARTIAL_WRECK_ADD_RATIO,
        ?PARTIAL_DEF_ADD_RATIO,
        ?PARTIAL_HIT_ADD_RATIO,
        ?PARTIAL_DODGE_ADD_RATIO,
        ?PARTIAL_CRIT_ADD_RATIO,
        ?PARTIAL_TEN_ADD_RATIO
    ]).

%% 局部加成属性对应的全局属性
-define(PARTIAL2GLOBAL_INTERVAL, 59). %% 局部属性映射到全局属性的差值
-define(PARTIAL2GLOBAL, fun(Type) ->
            case lists:member(Type, ?PARTIAL_TYPE) of
                true -> Type - ?PARTIAL2GLOBAL_INTERVAL;
                false -> false
            end
    end).

%% 装备加成百分比属性
-define(EQUIPMENT_ATTR_ADD_RATIO_TYPE, [
        ?WEAPON_ATT_ADD_RATIO,
        ?PROTECTION_HP_ADD_RATIO,
        ?PROTECTION_DEF_ADD_RATIO,
        ?JEWELRY_ATT_ADD_RATIO
    ]).

%% 等级加成百分比基础
-define(LV_ADD_RATIO_TYPE, [
        ?LV_ATT_ADD_RATIO,
        ?LV_HP_ADD_RATIO,
        % ?LV_WRECK_ADD_RATIO,
        ?LV_DEF_ADD_RATIO,
        ?LV_HIT_ADD_RATIO,
        ?LV_DODGE_ADD_RATIO,
        ?LV_CRIT_ADD_RATIO,
        ?LV_TEN_ADD_RATIO
    ]).

%% 基础的加固定值属性
% -define(BASE_ATTR_LIST, [?ATT, ?HP, ?WRECK, ?DEF, ?HIT, ?DODGE, ?CRIT, ?TEN]).
-define(BASE_ATTR_LIST, [?ATT, ?HP, ?DEF, ?HIT, ?DODGE, ?CRIT, ?TEN]).

%% -------------------------------------------------------------------
%% 属性类 - 第一部分

-define(ATT,       1).                  %% 攻击
-define(HP,        2).                  %% 气血
% -define(WRECK,     3).                  %% 破甲
-define(DEF,       4).                  %% 防御
-define(HIT,       5).                  %% 命中
-define(DODGE,     6).                  %% 闪避
-define(CRIT,      7).                  %% 暴击
-define(TEN,       8).                  %% 坚韧
-define(HURT_ADD_RATIO,   9).           %% 伤害加深
-define(HURT_DEL_RATIO,   10).          %% 伤害减免
-define(HIT_RATIO,        11).          %% 命中几率
-define(DODGE_RATIO,      12).          %% 闪避几率
-define(CRIT_RATIO,       13).          %% 暴击几率
-define(UNCRIT_RATIO,     14).          %% 抗暴几率
-define(FINAL_HURT_ADD,   15).          %% 最终伤害加成值
-define(FINAL_HURT_DEL,   16).          %% 最终伤害减免值
-define(SPEED,            18).          %% 移动速度
-define(ATT_ADD_RATIO,    19).          %% 攻击增加百分比
-define(HP_ADD_RATIO,     20).          %% 气血增加百分比
% -define(WRECK_ADD_RATIO,  21).          %% 破甲增加百分比
-define(EXP_ADD_RATIO,    21).          %% 经验加成百分比
-define(DEF_ADD_RATIO,    22).          %% 防御增加百分比
-define(HIT_ADD_RATIO,    23).          %% 命中增加百分比
-define(DODGE_ADD_RATIO,  24).          %% 闪避增加百分比
-define(CRIT_ADD_RATIO,   25).          %% 暴击增加百分比
-define(TEN_ADD_RATIO,    26).          %% 坚韧增加百分比
-define(SKILL_HURT_ADD_RATIO,     27).  %% 技能伤害加深百分比
-define(SKILL_HURT_DEL_RATIO,     28).  %% 受到技能伤害减免百分比
-define(FINAL_HURT_ADD_RATIO,     29).  %% 最终伤害加成属性 提升百分比
-define(FINAL_HURT_DEL_RATIO,     30).  %% 最终伤害减免属性 提升百分比

-define(PARRY_RATIO,              48).  %% 格挡
-define(STAB_RATIO,               49).  %% 穿透（相对于格挡）
-define(PVP_HURT_DEL_RATIO,       50).  %% PVP伤害减免%(角色对玩家造成伤害的减免值)
-define(PVP_HURT_ADD_RATIO,       51).  %% PVP伤害加成%(角色对玩家造成伤害的加成值)
-define(CRIT_HURT_ADD_RATIO,      52).  %% 暴伤加成%
-define(CRIT_HURT_DEL_RATIO,      53).  %% 暴伤减免%
-define(HEART_RATIO,              54).  %% 会心一击%(伤害的2倍)
-define(HEART_ADD_HURT,           55).  %% 会心伤害加深%
-define(HEART_RESIST_RATIO,       56).  %% 会心抵抗%
-define(HEART_DEL_HURT,           57).  %% 会心伤害减免%
-define(ATT_SPEED_ADD_RATIO,      58).  %% 攻速加成%
-define(SPEED_ADD_RATIO,          59).  %% 移动速度增加百分比

%% -------------------------------------------------------------------
%% 局部生效属性（会映射为对应基础属性）
-define(PARTIAL_ATT_ADD_RATIO,    60).  %% 局部攻击增加百分比(影响功能内部的基础属性)
-define(PARTIAL_HP_ADD_RATIO,     61).  %% 局部气血增加百分比(影响功能内部的基础属性)
% -define(PARTIAL_WRECK_ADD_RATIO,  62).  %% 局部破甲增加百分比(影响功能内部的基础属性)
-define(PARTIAL_DEF_ADD_RATIO,    63).  %% 局部防御增加百分比(影响功能内部的基础属性)
-define(PARTIAL_HIT_ADD_RATIO,    64).  %% 局部命中增加百分比(影响功能内部的基础属性)
-define(PARTIAL_DODGE_ADD_RATIO,  65).  %% 局部闪避增加百分比(影响功能内部的基础属性)
-define(PARTIAL_CRIT_ADD_RATIO,   66).  %% 局部暴击增加百分比(影响功能内部的基础属性)
-define(PARTIAL_TEN_ADD_RATIO,    67).  %% 局部坚韧增加百分比(影响功能内部的基础属性)
-define(PARTIAL_WHOLE_ADD_RATIO,  68).  %% 局部全属性增加百分比(影响功能内部的基础属性)

%% -------------------------------------------------------------------
%% 等级基础加成比例（）
-define(LV_ATT_ADD_RATIO,     ?ATT + ?LV_ADD_ATTR_DIFF).    % 等级攻击增加百分比(影响等级基础属性)
-define(LV_HP_ADD_RATIO,       ?HP + ?LV_ADD_ATTR_DIFF).    % 等级气血增加百分比(影响等级基础属性)
% -define(LV_WRECK_ADD_RATIO, ?WRECK + ?LV_ADD_ATTR_DIFF).    % 等级破甲增加百分比(影响等级基础属性)
-define(LV_DEF_ADD_RATIO,     ?DEF + ?LV_ADD_ATTR_DIFF).    % 等级防御增加百分比(影响等级基础属性)
-define(LV_HIT_ADD_RATIO,     ?HIT + ?LV_ADD_ATTR_DIFF).    % 等级命中增加百分比(影响等级基础属性)
-define(LV_DODGE_ADD_RATIO, ?DODGE + ?LV_ADD_ATTR_DIFF).    % 等级闪避增加百分比(影响等级基础属性)
-define(LV_CRIT_ADD_RATIO,   ?CRIT + ?LV_ADD_ATTR_DIFF).    % 等级暴击增加百分比(影响等级基础属性)
-define(LV_TEN_ADD_RATIO,     ?TEN + ?LV_ADD_ATTR_DIFF).    % 等级坚韧增加百分比(影响等级基础属性)

%% -------------------------------------------------------------------
%% 属性类 - 第二部分

-define(ICE_HURT,                 77).  %% 冰系伤害
-define(ICE_DEF,                  78).  %% 冰系防御
-define(THUNDER_HURT,             79).  %% 雷系伤害
-define(THUNDER_DEF,              80).  %% 雷系防御
-define(FIRE_HURT,                81).  %% 火系伤害
-define(FIRE_DEF,                 82).  %% 火系防御
-define(WIND_HURT,                83).  %% 风系伤害
-define(WIND_DEF,                 84).  %% 风系防御
-define(ICE_HURT_ADD_RATIO,       85).  %% 冰系伤害增加百分比
-define(ICE_DEF_ADD_RATIO,        86).  %% 冰系防御增加百分比
-define(THUNDER_HURT_ADD_RATIO,   87).  %% 雷系伤害增加百分比
-define(THUNDER_DEF_ADD_RATIO,    88).  %% 雷系防御增加百分比
-define(FIRE_HURT_ADD_RATIO,      89).  %% 火系伤害增加百分比
-define(FIRE_DEF_ADD_RATIO,       90).  %% 火系防御增加百分比
-define(WIND_HURT_ADD_RATIO,      91).  %% 风系伤害增加百分比
-define(WIND_DEF_ADD_RATIO,       92).  %% 风系防御增加百分比
-define(HP_RESUME,                93).  %% 回血属性：按固定值回复
-define(HP_RESUME_RATIO,          94).  %% 回血属性：按血量上限百分比回复
-define(SUCK_BLOOD,               95).  %% 吸血
-define(SUCK_BLOOD_ADD,           96).  %% 吸血加成
-define(SUCK_BLOOD_MINUS,         97).  %% 吸血减免
-define(BOSS_HURT_ADD_RATIO,      98).  %% BOSS伤害加成系数: 角色对boss造成伤害的加成比例（万分之X）
-define(BOSS_HURT_DEL_RATIO,      99).  %% BOSS伤害减免系数: 角色被boss攻击的伤害减免比例（万分之X）
-define(MON_HURT_ADD_RATIO,      100).  %% 普通怪物伤害加成系数: 角色对非boss怪物造成伤害的加成比例（万分之X）
-define(MON_HURT_DEL_RATIO,      101).  %% 普通怪物伤害减免系数: 角色被非boss怪物攻击伤害的减免比例（万分之X）

%% XXX 特别注意：
%% 由于项目中经常采用技能系统来投放属性，则意味着属性这边的id，
%% 与战斗中的特殊效果id必须是无冲突的，而由于沿用早期项目的设计，
%% 很多id段已经互相交叉，所以比较坑。
%% 后面新加的属性id应尽量采用独立的id段，错开战斗效果占用的特殊buff id段

%% -------------------------------------------------------------------
%% 对装备系统加成类特殊属性
-define(WEAPON_ATT_ADD_RATIO,     221).  %% 武器基础攻击增加百分比
-define(PROTECTION_HP_ADD_RATIO,  223).  %% 防具基础生命增加百分比
-define(PROTECTION_DEF_ADD_RATIO, 224).  %% 防具基础防御增加百分比
-define(JEWELRY_ATT_ADD_RATIO,    225).  %% 饰品基础攻击增加百分比

-define(EXP_DROP_ADD_RATIO,       231).  %% 经验闯关挂机挂机加成

%% 血量自动回复默认间隔（单位：毫秒）
-define(RESUME_DEFAULT_INTERVAL, 10000).

%% 通用基本属性记录
%% 仅使用在#player_status{}身上，其他地方尽量使用自定义map
%%
%% PS: 注意，当调节#attr{}中字段顺序、增删字段、更改相关字段对应的宏值(AttrId变动)时，
%% 必须使用attr_tool:c()重新生成attr_conv模块，以保证字段序号与AttrId的映射关系是正确的
%% 所以修改attr.hrl后，首先重新编译attr_tool，然后调用attr_tool:c()，再重新编译attr_conv
%%
%% attr_tool隐含的规则是，#attr{}中字段对应的属性，其宏定义必须是相应字段名的大写
%% 例如： att对应?ATT, dodge_ratio对应?DODGE_RATIO
-record(attr, {
        %% 直接数值型基础属性
        att = 0                                 % 攻击
        ,hp = 0                                 % 气血
        ,def = 0                                % 防御
        ,hit = 0                                % 命中
        ,dodge = 0                              % 闪避
        ,crit = 0                               % 暴击
        ,ten  = 0                               % 坚韧
        ,final_hurt_add = 0                     % 最终伤害加成值
        ,final_hurt_del = 0                     % 最终伤害减免值
        ,hp_resume = 0                          % 血量回复固定值

        %% 其他系数型基础属性(万倍数，代入公式计算的时候要除以10000)
        ,hurt_add_ratio = 0                     % 伤害加深
        ,hurt_del_ratio = 0                     % 伤害减免
        ,hit_ratio = 0                          % 命中几率
        ,dodge_ratio = 0                        % 闪避几率
        ,crit_ratio = 0                         % 暴击几率
        ,uncrit_ratio = 0                       % 抗暴几率
        ,crit_hurt_add_ratio = 0                % 暴伤加成%
        ,crit_hurt_del_ratio = 0                % 暴伤减免%

        ,heart_ratio = 0                        % 会心几率（伤害的X倍）
        ,heart_resist_ratio = 0                 % 会心抵抗
        ,heart_add_hurt = 0                     % 会心伤害加深
        ,heart_del_hurt = 0                     % 会心伤害减免
        ,stab_ratio = 0                         % 穿透几率（与格挡相对，格挡穿透）
        ,parry_ratio = 0                        % 格挡几率

        ,pvp_hurt_add_ratio = 0                 % PVP伤害加成%
        ,pvp_hurt_del_ratio = 0                 % PVP伤害减免%
        ,skill_hurt_add_ratio = 0               % 技能伤害加深百分比
        ,skill_hurt_del_ratio = 0               % 技能伤害减免百分比

        ,hp_resume_ratio = 0                    % 血量回血百分比

        ,ice_hurt = 0                           % 冰系伤害
        ,ice_def = 0                            % 冰系防御
        ,thunder_hurt = 0                       % 雷系伤害
        ,thunder_def = 0                        % 雷系防御
        ,fire_hurt = 0                          % 火系伤害
        ,fire_def = 0                           % 火系防御
        ,wind_hurt = 0                          % 风系伤害
        ,wind_def = 0                           % 风系防御

        ,boss_hurt_add_ratio = 0                % boss伤害加成
        ,boss_hurt_del_ratio = 0                % boss伤害减免
        ,mon_hurt_add_ratio = 0                 % 普通怪物伤害加成
        ,mon_hurt_del_ratio = 0                 % 普通怪物伤害减免

        ,suck_blood = 0                         % 吸血系数

        %% ------------------------------------------------------------------------------
        %% 对基础属性有数值调整效果的额外属性（万倍数，代入公式计算的时候要除以10000）
        %% 这一批属性，是对原基础属性作增/减幅后计入战力的，理论上，这一批属性绝对不应计战力
        ,att_add_ratio = 0                      % 攻击增加百分比
        ,hp_add_ratio = 0                       % 气血增加百分比
        ,def_add_ratio = 0                      % 防御增加百分比
        ,hit_add_ratio = 0                      % 命中增加百分比
        ,dodge_add_ratio = 0                    % 闪避增加百分比
        ,crit_add_ratio = 0                     % 暴击增加百分比
        ,ten_add_ratio = 0                      % 坚韧增加百分比
        ,final_hurt_add_ratio = 0               % 最终伤害加成属性 提升百分比
        ,final_hurt_del_ratio = 0               % 最终伤害减免属性 提升百分比
        ,suck_blood_add = 0                     % 吸血加成
        ,suck_blood_minus = 0                   % 吸血减免
        %% ------------------------------------------------------------------------------
        %% 加属性请先分清是否对原属性进行增幅后直接计入数值到原属性的属性，
        %% 此类直接加在上方，否则加在这一批之前的系数型基础属性中

        %% ------------------------------------------------------------------------------
        %% 其他与人物战斗不相关的属性类型
        ,speed = 0                              % 移动速度
        ,exp_add_ratio = 0                      % 经验加成
        ,exp_drop_add_ratio = 0                 % 放置经验加成

        %% TODO FIXME 暂未整理的属性，后续有涉及调整时修正到上方分类位置中
        ,speed_add_ratio = 0                    % 移速加成%

        ,ice_hurt_add_ratio = 0                 % 冰系伤害增加百分比
        ,ice_def_add_ratio = 0                  % 冰系防御增加百分比
        ,thunder_hurt_add_ratio = 0             % 雷系伤害增加百分比
        ,thunder_def_add_ratio = 0              % 雷系防御增加百分比
        ,fire_hurt_add_ratio = 0                % 火系伤害增加百分比
        ,fire_def_add_ratio = 0                 % 火系防御增加百分比
        ,wind_hurt_add_ratio = 0                % 风系伤害增加百分比
        ,wind_def_add_ratio = 0                 % 风系防御增加百分比

    }).

%% 战斗通用属性
-record(battle_attr, {
        hp = 200,                               % 血量
        hp_lim = 200,                           % 血量上限
        hp_lim_origin = 200,                    % 原始血量上限
        anger = 0,                              % 怒气
        anger_lim = ?ANGER_MAX,                 % 怒气上限
        attr = undefined,                       % 属性#attr{}
        base_attr_map = #{},                    % 基础属性maps #{attr_type=>attr_value} 注：8大基础属性+固定伤害、固定防御
        pk = undefined,                         % #pk{}
        skill_effect = undefined,               % 技能造成的中间属性 #skill_effect{}
        att_area = 1,                           % 攻击距离(格子)
        speed = ?SPEED_VALUE,                   % 移动速度(默认值)+飞行器修改+坐骑修改
        attr_buff_list = [],                    % 持续属性buff
        other_buff_list = [],                   % 持续特殊状态buff
        group = 0,                              % 战斗分组
        ghost = 0,                              % 是否幽灵(0:否，1是)
        hide = 0,                               % 是否隐身(0:否, 1是)
        shield_hp = 0,                          % 血量护盾(血量叠加)
        combat_power = 0,                       % 战斗力
        hp_resume_time = ?RESUME_DEFAULT_INTERVAL,  % 血量自动回复默认间隔
        hp_resume_add = 0,                      % 血量自动回复值（人物自动恢复能力）
        fire_ref = [],                          % 灼烧定时器s(最多三个)
        bleed_ref = [],                         % 流血定时器
        del_hp_each_time = [],                  % [Min,Max]:受击每次伤害值区间,整数,小数为百分比：1:默认:[];2:Min=<hurt=<Max;3怪物Hp的百分比:Hp*Min=<Hurt=<Hp*Max
        att_del_hp_each_object={0,0},           % 攻击哪些对象时，每次固定伤害值 {战斗对象定义, 怪物类型}
        att_del_hp_each_time = [],              % 攻击每次固定伤害值区间, 格式同 del_hp_each_time
        skill_stage_held = [],                  % 多段技能操作阶段保持记录 - [{SkillId, LastStage, StageTime}]
        last_active_skill_id = 0                % 最后释放的主动技id
    }).

%% 红名罪恶值系统自减时间间隔 单位为秒
-define(RemovePkValue, (60 * 30)).
-record(pk, {
        pk_status = 0,              %% pk状态
        pk_change_time = 0,         %% 上次切换和平状态的时间戳
        pk_value = 0,               %% 罪恶值
        pk_value_change_time = 0,   %% 罪恶值修改时间
        pk_value_ref = undefined,   %% 罪恶清理定时器
        pk_protect_time = 0         %% pk保护结束时间戳
    }).

-record(revive_status, {
        is_revive = 1,              %% 0不能复活 1可以复活
        revive_time = 0,            %% 下次复活的时间戳
        revive_coord = {0,0,0},     %% 下次复活坐标 {所在场景id,复活x坐标,复活y坐标}
        last_revive_time = 0        %% 上次复活时间戳
    }).


-endif.
