%%%-------------------------------------------------------------------
%% 唤神
%% 说明
%% 唤神装备的格子sell = 唤神id * 100 + pos
%% 辅助唤神位置id = 主站 pos * 100 + 位置
%% 神血 = 唤神生命 + 套装附带的神血 + 玩家生命*20%
%% 神攻 = 唤神攻击 + 玩家攻击
%% 神防 = 唤神防御 + 玩家防御
%%% @end
%%%-------------------------------------------------------------------
-author("liushl").

%% 出战位置判断 1-99为出战位置|101-9999为援护位置
-define(IS_PRIMARY_GOD(Pos),   Pos >=1    andalso Pos =< 99).
-define(IS_SECONDARY_GOD(Pos), Pos >= 101 andalso Pos =< 9999).
%% Pos2 是不是 Pos1 的辅助位
-define(IS_THE_SECONDARY_GOD(Pos1, Pos2),
    (?IS_PRIMARY_GOD(Pos1)
        andalso ?IS_SECONDARY_GOD(Pos2)
            andalso Pos2 div ?POS_OFFSET =:= Pos1)).
%% 出战位置偏移量
-define(POS_OFFSET,  100).
%% 唤神装备位置偏移量
-define(CELL_OFFSET, 100).
%% 默认解锁的主出战位大小
-define(DEFAULT_POS,  3).
%% 援助唤神属性折扣
-define(ASSISTANCE, 0.5).
%% 装备位置
-define(DEFAULT_EQUIP_POS, [1,2,3,4,5,6]).
%% 装备5级时产生变异属性
-define(GOD_EQUIP_SP_LV,   5).
%% 操作信息
-define(LOG_ACTIVE,      1).   % 激活 {1，0, time}
-define(LOG_STAR_UP,     2).   % 升星:每升一星{2, 星级，time}
-define(LOG_LV_UP,       3).   % 升级：升到整50级 {3, 等级， time}
-define(LOG_SUIT,        4).   % 激活套装：首次激活某6件套装{4, 套装类型，time}
-define(LOG_SKILL,       5).   % 技能满级：某个技能满级{5, 技能id，time}
-define(LOG_EQUIP_UP,    6).   % 装备强化
-define(LOG_GOD_FRONT,   7).   % 唤神上阵变化

%% 召唤流程
-define(GOD_SUMMON_BEGIN, 1).   % 初次召唤
-define(GOD_SUMMON_NEXT,  2).   % 切换为下一个
-define(GOD_SUMMON_END,   3).   % 结束

%%奖池类型
-define(NORMAL_POOL,  1).   % 普通奖池
-define(LIMIT_POOL,   2).   % 限时奖池


%% 效果类型
-define(TYPE_SUIT_SKILL_FRONT_GOD,    1).       %% 上阵唤神属性加成
-define(TYPE_SUIT_SKILL_FRONT_ROLE,   2).       %% 上阵玩家属性加成
-define(TYPE_SUIT_SKILL_FIGHT_ROLE,   3).       %% 出战玩家属性加成
-define(TYPE_SUIT_SKILL_SPECIAL,      9).       %% 特殊效果
%% 套装技能
-define(SUIT_SKILL_ROLE_CRIT_ADD      , 1).  % 上阵提升2000暴击
-define(SUIT_SKILL_GOD_ATT            , 2).  % 装备后神攻 翻倍
-define(SUIT_SKILL_ROLE_TEN           , 3).  % 上阵提升2000坚韧
-define(SUIT_SKILL_GOD_DEF            , 4).  % 装备后神防 翻倍
-define(SUIT_SKILL_ROLE_DODGE         , 5).  % 上阵提升2000闪避
-define(SUIT_SKILL_GOD_HP             , 6).  % 装备后神血 翻倍
-define(SUIT_SKILL_ROLE_PARRY_RATIO   , 7).  % 上阵提升5%格挡几率
-define(SUIT_SKILL_ROLE_UNCRIT_ADD_RATIO, 8).  % 唤神+20%暴击抵抗
-define(SUIT_SKILL_GOD_CALL_ONE       , 9).  % 上阵后单个神祗召唤时间+5s
-define(SUIT_SKILL_GOD_CALL           , 10). % 上阵后所有神祗召唤时间+5s
-define(SUIT_SKILL_ROLE_CRIT_HURT     , 11). % 装备的唤神+15%暴击几率
-define(SUIT_SKILL_ADD_POS            , 12). % 上阵后出战阵位+1
-define(SUIT_SKILL_ROLE_HURT_ADD_RATIO, 13). % 提升5%伤害加成
-define(SUIT_SKILL_ROLE_NO_CTRL       , 14). % 出战战斗时免疫所有控制 减速/流血/眩晕 等
-define(SUIT_SKILL_STAB_RATIO         , 15). % 提升5%格挡穿透
-define(SUIT_SKILL_ROLE_NO_HURT       , 16). % 出战时前2s免疫所有伤害
-define(SUIT_SKILL_ROLE_ASSIST_PLUS1  , 17). % 该唤神护佑时属性加成为60%
-define(SUIT_SKILL_ROLE_ASSIST_PLUS2  , 18). % 该唤神护佑时属性加成为80%

%% 出战中的唤神信息
-record(god_fighting, {
    id = 0
    , att    = 0  % 攻
    , def    = 0  % 防
    , hp     = 0  % 血
    , hp_lim = 0  % 血上限
    , skills = []           % 技能 [{skill_id, lv}|_]
    , battle_effect = []    % 战斗特殊效果（一般是装备套装效果）[skill_id|_]
    , time = 0              % 变身时间戳 utime:longunixtime()
    , continue = 0          % 变身持续时间
}).
%% 唤神召唤出战信息
-record(god_summon, {
    ref = [],
    fighters = []        % 按出战顺序排列#god_fighting{}发到场景去
}).
%% 玩家唤神数据
-record(role_god, {
    god_info = []                   % 玩家激活的唤神
    ,unlock = []                    % 出战解锁信息[出战位置/援助位置|_]
    ,summon_time = 0                % 召唤时间，CD过后才能继续召唤
    ,god_summon = undefined         % 召唤出战信息。召唤时才有数据#god_summon{}
    
    ,temp_attr = []                 % 某些唤神 出战时 会给玩家提供额外属性
    ,attr = []                      % 提供给玩家的总属性列表:上阵的唤神才计算
    ,god_power = 0                  % 唤神战力：包括唤神技能额外战力+神属性战力
    ,role_power = 0                 % 总战力,人物属性战力
}).

%% 单个唤神
-record(god, {
    id = 0,                 % 唤神id
    star = 0,               % 唤神星级
    lv = 1,                 % 唤神等级
    exp = 0,                % 唤神经验
    pos = 0,                % 出战位置：0未出战|1-99为出战位置|101-9999为援护位置
    attr = [],              % 上阵提供给玩家的属性：培养属性/技能属性/装备属性
    equip_attr = [],        % 装备属性 只在装备变更时刷新
    god_attr = [],          % 唤神属性：变身战斗时附加给为玩家的 攻/血/防
                            % 主唤神：包括自己的成长属性+套装效果+人物继承
                            % 援助唤神：0.5*自己的成长属性+套装效果
                            % 未上阵：[]
    skills = [],            % 战斗技能[{skill_id, lv}|_]
    suit_info = [],         % 套装效果，统计装备属性的时候计算
    suit_skills = [],       % 套装技能
    extra_power = 0,        % 额外战力：技能战力/
    power_show = 0          % 前端展示战力
}).


%%%===================================================================
%%% 配置
%%%===================================================================

%% 唤神配置
-record(base_god_info, {
    id = 0,
    name = <<>>,
    star = 0,
    cost = [],
    need_lv = 0,
    attr = [],
    god_attr = [],
    skills = [],
    goods_id = 0,
    skill_max = 0,
    type = 0
}).

%% 唤神装备配置
-record(base_god_equip, {
    id = 0,
    name = <<>>,
    attr = [],
    extra_attr = [],
    pos = 0,
    quality = 0,
    exp = 0,
    suit_id = 0
}).

%% 唤神套装配置
-record(base_god_equip_suit, {
    name = <<>>,
    type = 0,           %% 1属性百分比加成/2属性直接加成/3其他
    effect = []         %%
}).

%% 唤神限时抽奖期数
-record(base_god_limit_phase, {
    phase = 0,
    god_id = 0,
    count_award = [],
    blessing_award = [],
    days = 0
}).

%% 唤神普通抽奖期数
-record(base_god_normal_phase, {
    phase = 0,
    awards = 0
}).

%% 唤神抽奖奖品
-record(base_god_limit_award, {
    id = 0,
    awards = [],
    broadcast = 0,
    weight = 0,
    need_lv = 0,
    phase = 0
}).

%% 唤神抽奖奖品
-record(base_god_normal_award, {
    id = 0,
    awards = [],
    broadcast = 0,
    weight = 0,
    need_lv = 0,
    phase = 0,
    show = 0
}).


-define(SELECT_ROLE_GOD_INFO, 
    <<"SELECT god_id, star, lv, exp, pos, skills FROM role_god_info WHERE role_id = ~p">>).

-define(SELECT_ROLE_GOD, 
    <<"SELECT unlock_pos FROM role_god WHERE role_id = ~p">>).

-define(REPLACE_INTO_ROLE_GOD_INFO, 
    <<"REPLACE INTO role_god_info(role_id, god_id, star, lv, exp, pos, skills) VALUES(~p, ~p, ~p, ~p, ~p, ~p, '~ts')">>).

-define(REPLACE_INTO_ROLE_GOD,
    <<"REPLACE INTO role_god(role_id,unlock_pos) VALUES(~p, '~ts')">>).