-ifndef(SKILL_HRL).
-define(SKILL_HRL, ok).

%% 技能用途类型
-define(SKILL_CAREER_NORMAL,       0).    %% 普通技能
-define(SKILL_CAREER_ROLE,         1).    %% 职业技能
-define(SKILL_CAREER_COMMON,      10).    %% 通用技能(职业通用技能)
-define(SKILL_CAREER_MON,         11).    %% 怪物技能
-define(SKILL_CAREER_PET,         12).    %% 宠物技能
-define(SKILL_CAREER_JUMP,        13).    %% 神器技能
-define(SKILL_CAREER_MOUNT,       14).    %% 坐骑技能
-define(SKILL_CAREER_WING,        15).    %% 翅膀技能
-define(SKILL_CAREER_BABY,        16).    %% 宝具技能
-define(SKILL_CAREER_GOD_WEAPON,  17).    %% 神兵技能
-define(SKILL_CAREER_WARSOUL,     18).    %% 战魂技能
% -define(SKILL_CAREER_MAGIC_BEAST, 19).    %% 幻兽技能
-define(SKILL_CAREER_GUILD,       20).    %% 公会技能
-define(SKILL_CAREER_DUN,         21).    %% 副本技能
-define(SKILL_CAREER_CHILD,       22).    %% 宝宝技能
-define(SKILL_CAREER_NUCLEON,     23).    %% 灵能技能
-define(SKILL_CAREER_PARTNER,     24).    %% 伙伴/ai娘技能
-define(SKILL_CAREER_GOD,         25).    %% 仙翼技能
% -define(SKILL_CAREER_STAR_SOUL,   26).    %% 仙武技能 旧功能删除，新仙武系统预留
% -define(SKILL_CAREER_DEITY,       27).    %% 仙骑技能 旧功能删除，新仙骑系统预留
-define(SKILL_RING_SKILL,         28).    %% 婚姻技能
-define(SKILL_FOSTER_SKILL,       29).    %% 珍宝技能
-define(SKILL_CAREER_GOD_1,       30).    %% 唤神技能
-define(SKILL_CAREER_DUN_CHILD,   31).    %% 宝宝副本特殊技能
-define(SKILL_SEVEN_DAYS_GOAL,    32).    %% 七日目标技能
-define(SKILL_CAREER_AI_POINT,    36).    %% 怪物ai特殊技能

%% 技能类型
-define(SKILL_TYPE_ACTIVE,         1).    %% 主动
-define(SKILL_TYPE_PASSIVE,        2).    %% 被动
-define(SKILL_TYPE_ASSIST,         3).    %% 辅助
-define(SKILL_TYPE_PERMANENT_GAIN, 4).    %% 永久增益

%% Buff类型
-define(SKILL_NORMAL_BUFF,         0).    %% 普通buff
-define(SKILL_BUFF,                1).    %% 增益buff
-define(SKILL_DEBUFF,              2).    %% 减益buff
-define(SKILL_CTRL_BUFF,           3).    %% 控制buff
-define(SKILL_SP_BUFF,             4).    %% 特殊buff

%% buff作用方
-define(SKILL_AFFECT_MYSELF,       1).    %% 作用对象是自己
-define(SKILL_AFFECT_ENEMY,        2).    %% 作用对象是别人
-define(SKILL_AFFECT_ALL,          3).    %% 作用对象是双方

%% 被动技能触发条件的类型
-define(SKILL_BUFF_TRIGGER,             0).     %% 无条件触发
-define(SKILL_BUFF_TRIGGER_GET,         1).     %% 受到某个特殊效果时触发
-define(SKILL_BUFF_TRIGGER_HAVE,        2).     %% 身上有特殊效果时触发
-define(SKILL_BUFF_TRIGGER_HP,          3).     %% 血量低于一定比例触发
-define(SKILL_BUFF_TRIGGER_CRIT,        4).     %% 战斗中发生暴击触发
-define(SKILL_BUFF_TRIGGER_HPRESUME,    5).     %% 回血时触发
-define(SKILL_BUFF_TRIGGER_DIE,         6).     %% 受到致死伤害时触发
-define(SKILL_BUFF_TRIGGER_MISS,        7).     %% 闪避时触发
-define(SKILL_BUFF_TRIGGER_HAVE_LIST,   8).     %% 身上有任一特殊效果时触发
-define(SKILL_BUFF_TRIGGER_HURT_TYPE_LIST, 9).  %% 某任一伤害类型时触发
-define(SKILL_BUFF_TRIGGER_SKILL_ID,    10).    %% 使用某一技能时触发
-define(SKILL_BUFF_TRIGGER_TEAM,        11).    %% 组队状态检查触发
-define(SKILL_BUFF_TRIGGER_LV_LARGER,   12).    %% 等级高于怪物对方时触发
-define(SKILL_BUFF_TRIGGER_B_SIGN,      13).    %% 被动技能实际影响方的战斗身份标识

%% 被动技能触发时机
-define(SKILL_BUFF_TG_TIME,             0).     %% 特殊血量不分前后触发
-define(SKILL_BUFF_TG_TIME_ATTBF,       1).     %% 攻击者触发 -> 计算伤害前触发
-define(SKILL_BUFF_TG_TIME_DEFBF,       2).     %% 防守者触发 -> 计算伤害前触发
-define(SKILL_BUFF_TG_TIME_ATTAF,       3).     %% 攻击者触发 -> 计算伤害后触发
-define(SKILL_BUFF_TG_TIME_DEFAF,       4).     %% 防守者触发 -> 计算伤害后触发
-define(SKILL_BUFF_TG_TIME_GOLD_REVIVE, 5).     %% 彩钻原地复活时无条件触发

%% 天赋技能
-define(TALENT_RESET_GOOD,  38120001).    %% 重置消耗的物品
-define(DEF_SKILL_POINT,           5).    %% 天赋技能开启给予的默认技能点

-define(DEFAULT_SKILL_LV,     1).         %% 默认技能等级

%%%------------------------------------------------
%% 特殊技能ID
-define(SP_SKILL_HP_RESUME,                109100).      % 特殊回血：独立配置计算回血量
-define(SP_SKILL_INVINCIBLE_MADNESS,   1110000015).      % 狂战领域怪物无敌技能
-define(SP_SKILL_DEL_HURT_GWAR,        1110000016).      % 减伤技能-百团大战
-define(SP_SKILL_BUFF_ENCOURAGE,           400001).      % 伤害鼓舞 通用
-define(SP_SKILL_DEL_HURT,                 400002).      % 减伤护佑技能-护送
-define(SP_SKILL_NO_BATTLE,                400003).      % 无敌技能，既不能攻击被人也不能被攻击-护送

-define(SP_SKILL_KILLING,                       0).      % 荆棘之心(个人反伤和队伍反伤被动): 旧待删
-define(SP_SKILL_HOPE,                          0).      % 不灭希望(主动): 旧待删
%% 怪物默认技能（未配置技能时）
-define(MON_DEFAUL_SKILL, 1110000001).
%%%------------------------------------------------

%% 技能
-record(status_skill, {
        skill_attr = [],                % 技能属性值[]
        skill_attr_other = [],          % 技能其他类系属性值[]
        skill_cd = [],                  % 技能cd[{id1, time1},{id2, time2}...]
        %% 职业技能
        skill_list = [],                % 技能列表[{id1, lv1}, {id2, lv2}...]
        skill_power = 0,                % 技能额外增加战力
        tmp_skill_list = [],            % 临时技能列表[{id1, lv1}, {id2, lv2}...]
        skill_passive = [],             % 战斗计算时触发的buff效果的被动技能,从已学被动技能中过滤得到[{id1, lv1}, {id2, lv2}...]
        combo_skill_ref=undefined,      % 副技能
        %% 天赋技能
        skill_talent_list = [],         % 总天赋技能列表 [{SkillId, SkillLv}]
        skill_talent_passive = [],      % 战斗中触发的天赋被动技能列表 [{SkillId, SkillLv}]
        skill_talent_active_list = [],  % 天赋主动技能列表 [{SkillId, SkillLv}]
        skill_talent_active_triggers=[],% 天赋主动技能触发列表 [{SkillId, EndTime}]
        skill_talent_attr = [],         % 天赋技能属性值#attr{}
        skill_talent_power = 0,         % 天赋技能战力
        use_point = 0,                  % 使用的技能点数
        point = 0,                      % 技能总点数
        skill_talent_attr_other = []    % 天赋技能其他类系属性值
        ,hp_resume_spcl_add = 0         % 特殊技能血量回复增量值
    }).

%% 技能等级数据
-record(skill_lv, {
        condition = [],                 % 学习条件[{point, 天赋技能类型, 类型总投入技能点}, {pre_skill, 前置技能id, 等级}]
        power = 0,                      % 基础战力
        %% 基础属性效果（被动技能永久增益）
        %% 格式1：[{FuncId, AttrId, Int|float}] {作用Id, 属性类型(属性id和属性类型万分比id), 整数加的数值|万分比数值}
        %% 格式2：[{FuncId, AttrId, BaseVal, LevelPeriod, ValAddPerPeriod}]
        base_attr = [],
        %% 触发时机，参考 ?SKILL_BUFF_TRIGGER 等
        trigger = [],
        cd = 0,                         % 触发cd
        distance = 0,                   % 攻击距离
        area = 0,                       % 每级的攻击范围
        num  = [0, 0],                  % [攻击人数,攻击怪物数量]
        attr = [],                      % 基础属性效果[{属性类型ID,buff类型,概率,作用方,整数值,小数值,持续时间,叠加层数,特效id},...]
        hurt = 0,                       % 伤害加成倍率效果(填整数，万倍数)
        hurt_val = 0,                   % 伤害加成固定值
        effect = []                     % 特殊效果效果:[{特殊效果ID,buff类型,概率,作用方,整数值,小数值,属性类型ID,持续时间,作用次数,特效id},...]
    }).

%% 技能
-record(skill, {
        id = 0,                         % 技能id
        name = "",                      % 技能名字
        lv = 1,                         % 等级
        career = 0,                     % 技能用途类型:1职业;10通用;11;怪物;12宠物
        sex = 0,                        % 性别
        type = 0,                       % 技能类型:(1主动, 2被动, 3辅助, 4.永久增益 5.天赋攻击 6.天赋防守 7.天赋通用)
        is_normal = 0,                  % 是否普攻
        is_combo = 0,                   % 是否组合技副技能(0|1)
        is_anger = 0,                   % 是否怒气技能
        refind_target=0,                % 是否重新选取目标(0|1) del
        mod = 0,                        % 技能模式(1单体,2群体)
        obj = 0,                        % 释放目标(1自己,2最近敌方,3最近队友,4朝向,5最少血队友,6指定怪物,7主人,8相同类型队友)
        att_obj = 0,                    % 攻击参照对象(1.自己; 2.选择目标)
        calc= 1,                        % 是否计算伤害
        release=1,                      % 技能释放模式 1.普通为即时释放 2.蓄能表示伤害以蓄能时间长短来计算 3.移动施法
        around_hurt=1000,               % 群攻周围伤害比
        range=1,                        % 群攻范围模式(1圆形，2直线，3扇形)
        talent=[],                      % 天赋技能id列表 [{技能id,概率(千分制),持续时间(毫秒)}...]
        combo=[],                       % 组合技能的组成
        skill_link=[],                  % 关联技能，如三连击
        time=0,                         % 技能施放时间
        is_shake_pre = 0,               % 是否前摇技能
        broadcast = 0,                  % 是否在服务器返回在播放动作
        repel = 0,                      % 击退参数 Distance，0为不击退，大于0为击退像素数
        multistage = 1,                 % 多段技能最大阶段数（默认1，按阶段顺序施放，可中断但不允许从中段开始。小于1将按1处理）
        stage_cd = 1000,                % 多段技能各阶段之间cd时间
        lv_data=#skill_lv{}             % 各等级数据
    }).

%% 技能调整功能，相关附带参数，用于特定的ai计算调整参数使用
-record(adjust_params, {
        copy_id = 0
        ,aer_x = 0
        ,aer_y = 0
    }).

%% skill
-define(sql_get_all_skill,   <<"select skill_id, lv from skill where id = ~w">>).
-define(sql_insert_skill,    <<"insert into skill set id = ~w, skill_id = ~w, lv = ~w">>).
-define(sql_update_skill_lv, <<"update skill set lv = ~w where id = ~w and skill_id = ~w">>).
-define(sql_reset_skill_lv,  <<"update skill set lv = ~w where id = ~w">>).
-define(sql_del_skill,       <<"delete from skill where id = ~w and skill_id = ~w">>).
-define(sql_batch_del_skill, <<"delete from skill where id = ~w and skill_id in (~ts)">>).

%% talent skill
-define(sql_get_all_talent_skill,      <<"select skill_id, lv from talent_skill where role_id = ~w">>).
-define(sql_replace_talent_skill,      <<"replace into talent_skill (role_id, skill_id, lv) values (~w, ~w, ~w)">>).
-define(sql_reset_talent_skill,        <<"delete from talent_skill where role_id = ~w">>).
-define(sql_update_talent_skill_point, <<"update `player_state` set `skill_extra_point` = ~p where id=~w ">>).

-endif.
