%%%-------------------------------------------------------------------
%%% @author liushl
%%% @doc
%%%     跨服沙盘争夺战
%%% rr("../include/*.hrl").
%%% cross_point_fight_center:finish_dun(554050781185, 1012,1000, 10, utime:unixtime()).
%%% sys:get_state(cross_point_fight_center).
%%% @end
%%%-------------------------------------------------------------------
-author("liushl").

-define(POINT_BEGIN_CROSS_STAGE, 2).    %% 沙盘开启时的跨服阶段

-define(POINT_TYPE_SAFE,        1).     %% 安全据点
-define(POINT_TYPE_FIGHT,       2).     %% 争夺区普通据点
-define(POINT_TYPE_FIGHT_BUFF,  3).     %% 争夺区BUFF据点

-define(SWITCH_TYPE_INIT,        1).    %% 赛季切换：初始化
-define(SWITCH_TYPE_RECALC_ZONE, 2).    %% 赛季切换：分区合并
-define(SWITCH_TYPE_FIXED_TIME,  3).    %% 赛季切换：固定时间

-define(POINT_BOSS_HP_MAX_RATIO, 10000).    %% 安全据点BOSS血量分母值
-define(POINT_BATTLE_LOG_LENGTH, 20).       %% 据点战斗记录长度
-define(POINT_MASS_CD,           300).      %% 召集5分钟CD

%% 活动管理-跨服管理数据
-record(point_fight_center, {
    zone_data  = #{}        %% 每个分区一份游戏数据
    , ref_buff = 0          %% BUFF刷新定时器
}).

%% 活动管理-跨服管理数据
-record(point_fight_local, {
    subscribe = [],         %% 玩家订阅 [pid]
    my_buff   = [],         %% 我方激活的BUFF [技能id]
    buff_time = 0           %% BUFF结束时间
}).

%% 活动管理-各分区数据
-record(point_fight_zone, {
    zone_id     = 0,       %% 分区id
    season_id   = 0,       %% 赛季id##不做功能使用
    season_time = 0,       %% 赛季开始时间：第N天进行赛季结算
                           %% 每个分区的赛季都是不一样的
    point_mass   = [],     %% 集结信息##[{faction, [point_id], mass_time}] CD
                           %% 归属变更后，插旗取消；一个阵营可以同时存在两个旗子，插第三个旗子的时候会自动取消最老的旗子
    point_info   = [],     %% 据点信息 [#point_info{}]
    point_buff   = [],     %% BUFF归属 [{point_id,faction}]BUFF激活时，当前占领国家即为BUFF归属，之后不再变化
    buff_time    = 0,      %% BUFF结束时间
    role_data    = #{}     %% 玩家信息：玩家攻打的时候新增插入/玩家数据修改更新
}).

%% 活动管理-沙盘据点信息
-record(point_info, {
    point_id        = 0,    %% 据点id
    faction         = 0,    %% 攻占国家id
    seize_time      = 0,    %% 攻占时间## 攻占后每N小时国家成员可以领一次奖励
                            %% 注意！！！攻占后，攻占时间并不一定是当前时间，还需要根据累计时间往前推算
    score_rank      = [],   %% 积分排行[#point_role{}]，只保留前N位，由玩家攻占时刷新榜单
                            %% 整个赛季一直累计，赛季结束才清空
    add_up_time     = [],   %% 其他国家在该据点累计占领时间，[{faction,time}]归属发生变更时更新
    seize_info      = []    %% 国家攻占信息##[{faction, score}]
                            %% 统计每个国家攻占的总积分，归属状态变更后，数据清空
                            %% 对于本国安全基地
}).

%% 活动管理-据点攻占信息
-record(point_role, {
    role_id     = 0,        %% 玩家id
    hurt_part   = 0,        %% 据点总伤害占比：安全据点有效
    score       = 0         %% 据点总积分
}).

-record(role_cross_point, {
    point_info = [],            %% role_cross_point_info#{}
    dun_arg = undefned
}).

%% 玩家状态-玩家活动数据
-record(role_cross_point_info, {
    point_id            = 0,    %% 据点id
    single_max_score    = 0,    %% 单次攻打最大积分
    total_score         = 0,    %% 攻打总积分
    total_hurt          = 0,    %% 攻打总输出：安全据点有效
    value               = 0,    %% 副本通关后参数#对于安全据点：为输出万分比/对于抢占据点，为副本波数
    award_time          = 0     %% 领奖次数
}).

%% 玩家信息
-record(role_data, {
    role_id     = 0,        %% 玩家id
    name        = "",       %% 玩家名字
    server_id   = 0,        %% 服务器id
    server_num  = 0,
    faction     = 0         %% 阵营
}).
%%%-------------------------------------------------------------------
%%% @doc
%%%     DB
%%% @end
%%%-------------------------------------------------------------------
%% 查询所有活动中的分区数据
-define(DB_GET_ZONE_INFO, <<"SELECT `zone_id`, `season_id`,`season_time`,`point_mass`,`point_buff`,`buff_time` FROM cross_point_fight_zone">>).
%% 保存分区数据
-define(DB_SAVE_ZONE_INFO, <<"REPLACE INTO cross_point_fight_zone(`zone_id`,`season_id`,`season_time`,`point_mass`,`point_buff`,`buff_time`) VALUES(~p,~p,~p,'~ts','~ts',~p)">>).
%% 清理分区数据
-define(DB_CLEAN_ZONE_INFO, <<"DELETE FROM cross_point_fight_zone WHERE `zone_id`=~p">>).

%% 获得单个分区内的据点信息
-define(DB_GET_ZONE_POINTS, <<"SELECT `point_id`,`faction`,`seize_time`,`add_up_time`,`seize_info` FROM cross_point_fight_point WHERE `zone_id`=~p">>).
%% 保存据点信息
-define(DB_SAVE_ZONE_POINT, <<"REPLACE INTO cross_point_fight_point(`zone_id`,`point_id`,`faction`,`seize_time`,`add_up_time`,`seize_info`) VALUES(~p,~p,~p,~p,'~ts','~ts')">>).
%% 清理据点信息
-define(DB_CLEAN_ZONE_POINTS, <<"DELETE FROM cross_point_fight_point WHERE `zone_id`=~p">>).

%% 获得据点战斗记录
-define(DB_GET_POINT_BATTLE_LOG, <<"SELECT `point_id`,`role_id`,`score`,`hurt_part` FROM cross_point_fight_log WHERE `zone_id`=~p">>).
%% 保存据点战斗记录
-define(DB_SAVE_POINT_BATTLE_LOG, <<"REPLACE INTO cross_point_fight_log(`zone_id`,`point_id`,`role_id`,`score`,`hurt_part`) VALUES(~p,~p,~p,~p,~p)">>).
%% 删除据点战斗记录
-define(DB_DEL_POINT_BATTLE_LOG, <<"DELETE FROM cross_point_fight_log WHERE `zone_id`=~p AND `point_id`=~p AND `role_id`=~p">>).
%% 清理整个分区战斗记录
-define(DB_CLEAN_ZONE_BATTLE_LOG, <<"DELETE FROM cross_point_fight_log WHERE `zone_id`=~p">>).

%% 获得玩家跨服沙盘活动数据
-define(DB_GET_ROLE_CROSS_POINT_INFO, <<"SELECT `point_id`,`single_max_score`,`score`,`hurt_part`,`value`,`award_time` FROM role_cross_point_score WHERE `role_id`=~p">>).
%% 获得玩家跨服沙盘活动数据
-define(DB_GET_ROLE_CROSS_POINT_INFO_ONE, <<"SELECT `single_max_score`,`score`,`hurt_part`,`value`,`award_time` FROM role_cross_point_score WHERE `role_id`=~p AND `point_id`=~p">>).
%% 保存玩家沙盘活动数据
-define(DB_SAVE_ROLE_CROSS_POINT_INFO, <<"REPLACE INTO role_cross_point_score(`role_id`,`point_id`,`single_max_score`,`score`,`hurt_part`,`value`,`award_time`) VALUES(~p,~p,~p,~p,~p,~p,~p)">>).
%% 清理玩家跨服沙盘活动数据
-define(DB_CLEAN_ROLE_CROSS_POINT_INFO, <<"TRUNCATE role_cross_point_score">>).

%% 获得玩家信息
-define(DB_GET_ROLE_DATA, <<"SELECT `role_id`,`name`,`server_id`,`server_num`,`faction` FROM cross_point_role_data WHERE `zone_id`=~p">>).
%% 保存玩家信息
-define(DB_SAVE_ROLE_DATA, <<"REPLACE INTO cross_point_role_data(`zone_id`,`role_id`,`name`,`server_id`,`server_num`,`faction`) VALUES(~p,~p,'~ts',~p,~p,~p)">>).
%% 批量保存
-define(DB_SAVE_ROLE_DATA_BATCH, <<"REPLACE INTO cross_point_role_data(`zone_id`,`role_id`,`name`,`server_id`,`server_num`,`faction`) VALUES">>).
%% 清理玩家信息
-define(DB_CLEAN_ROLE_DATA, <<"DELETE FROM cross_point_role_data WHERE `zone_id`=~p">>).
%%%-------------------------------------------------------------------
%%% @doc
%%%     后台配置
%%% @end
%%%-------------------------------------------------------------------
-record(base_cross_point_fight_point, {
    point_id,
    name,
    type,
    owner,
    dun_id,
    base_score,
    link_point,
    cost,
    reward,
    interval_time,
    buff,
    attack_reward
}).