%%%-------------------------------------------------------------------
%%% @author liushl
%%% @doc
%%%     狂战领域
%%% @end
%%%-------------------------------------------------------------------
-author("liushl").

%%%-------------------------------------------------------------------
%%% @doc
%%%     常量配置
%%% @end
%%%-------------------------------------------------------------------
%% 活动场景
-define(MADNESS_LAND_SCENE_ROUND_1,        7800).       %% 第一轮场景id
-define(MADNESS_LAND_SCENE_ROUND_2_NODE,   7810).       %% 第二轮本服场景
-define(MADNESS_LAND_SCENE_ROUND_2_CENTER, 7820).       %% 第二轮跨服场景
-define(MADNESS_LAND_SCENE(Round, ClsType),
    case {Round, ClsType} of
        {1, _} -> ?MADNESS_LAND_SCENE_ROUND_1;              %% 第一轮
        {2, 0} -> ?MADNESS_LAND_SCENE_ROUND_2_NODE;         %% 第二轮本服
        {2, 1} -> ?MADNESS_LAND_SCENE_ROUND_2_CENTER        %% 第二轮跨服
    end
).
%% 狂战领域BOSS
-define(MADNESS_LAND_ROUND_1_BOSS, 83000001).       %% 第一轮BOSS
-define(MADNESS_LAND_ROUND_2_BOSS, 83000003).       %% 第二轮BOSS
-define(MADNESS_LAND_BOSS_ID(Round),
    case Round of
        1 -> ?MADNESS_LAND_ROUND_1_BOSS;
        2 -> ?MADNESS_LAND_ROUND_2_BOSS
    end).
%% 狂战领域第一轮持续时间
-define(MADNESS_LAND_ROUND_1_TIME,               data_madness_land:get_madness_land_kv(round_1_time)).
%% 狂战领域第一轮休息间
-define(MADNESS_LAND_ROUND_REST_TIME,            data_madness_land:get_madness_land_kv(rest_time)).
%% 狂战领域第二轮持续时间
-define(MADNESS_LAND_ROUND_2_TIME,               data_madness_land:get_madness_land_kv(round_2_time)).
%% 狂战领域第一轮小怪出生时间
-define(MADNESS_LAND_ROUND_1_MON_BORN,           data_madness_land:get_madness_land_kv(round_1_monster_time)).
%% 狂战领域第二轮小怪出生时间
-define(MADNESS_LAND_ROUND_2_MON_BORN,           data_madness_land:get_madness_land_kv(round_2_monster_time)).
%% 狂战领域循环加积分-循环时间
-define(MADNESS_LAND_CYCLE_SCORE_TIME,           data_madness_land:get_madness_land_kv(cycle_time_interval)).
%% 狂战领域循环加积分-积分数
-define(MADNESS_LAND_CYCLE_SCORE,                data_madness_land:get_madness_land_kv(cycle_time_score)).
%% 狂战领域杀人基础分
-define(MADNESS_LAND_KILL_BASE_SCORE,            data_madness_land:get_madness_land_kv(kill_integral)).
%% 狂战领域BOSS首刀奖励
-define(MADNESS_LAND_FIRST_ATTACK_AWARD,         data_madness_land:get_madness_land_kv(first_kill_one)).
%% 狂战领域第一轮小怪
-define(MADNESS_LAND_ROUND_1_MONS,               data_madness_land:get_madness_land_kv(monster_refresh_one)).
%% 狂战领域第二轮小怪
-define(MADNESS_LAND_ROUND_2_MONS,               data_madness_land:get_madness_land_kv(monster_refresh_two)).
%% 狂战领域BOSS刀分
-define(MADNESS_LAND_BOSS_ATTACK_SCORE,          data_madness_land:get_madness_land_kv(hurt_integral)).
%% 狂战领域小怪刀分
-define(MADNESS_LAND_MONS_ATTACK_SCORE,          data_madness_land:get_madness_land_kv(refresh_hurt)).
%% 狂战领域个人榜单长度
-define(MADNESS_LAND_RANK_LENGTH,           20).
%% 狂战领域公会榜单长度
-define(MADNESS_LAND_GUILD_RANK_LENGTH,     10).
%% 狂战领域全服邮件奖励
-define(MADNESS_LAND_SERVER_REWARD,              data_madness_land:get_madness_land_kv(service_rewards)).

%% 活动阶段定义
-define(MADNESS_LAND_STAGE_IDLE,    0).  %% 活动未开始
-define(MADNESS_LAND_STAGE_ROUND_1, 1).  %% 第一阶段
-define(MADNESS_LAND_STAGE_RESET,   2).  %% 第一阶段结束阶段，准备进入第二阶段
-define(MADNESS_LAND_STAGE_ROUND_2, 3).  %% 第二阶段
-define(MADNESS_LAND_STAGE_END,     4).  %% 第二阶段结束阶段，活动即将结束


%% 活动数据
-record(madness_land_act, {
    zone_id         = 0                %% 分区id：本服玩法，分区为0
    , role_grade    = dict:new()       %% 本服跨服均有效：所有玩家成绩
    , guild_grade   = []               %% 公会成绩
    , top           = 0                %% 最高成绩者：公会id
    , boss_first_attack_time    = 0    %% 第一次攻击BOSS时间
    , boss_first_attack_role    = 0    %% 首刀玩家
    , refresh_flag  = false            %% 是否有成绩变化
    , alive_mons_info     = #{}        %% 存活的分身 #{分线 => 数量}
    , invincible_time     = 0          %% 进入无敌时间
    , relieve_invincible_time = 0      %% 解除无敌时间
}).

%% 活动管理结构：本服/跨服
-record(madness_land, {
    cls_type              = 0               %%  节点类型：1跨服/0本服
    , stage               = 0               %%  当前阶段
    , end_time            = 0               %%  当前阶段结束时间
    , round               = 0               %%  活动轮次：两轮
    , ref_stage_switch    = undefined       %%  阶段切换定时器
    , ref_cycle_add_score = undefined       %%  循环加分定时器
    , ref_mon_born        = undefined       %%  小怪出生定时器
    , ref_refresh_rank    = undefined       %%  排行榜刷新定时器
    
    , round_1_first_attack= 0               %%  本服有效：第一轮首刀玩家。临时数据，活动结束会清理
    , round_1_role_grade  = dict:new()               %%  本服有效：第一轮个人成绩，第一轮结束的时候写入。临时数据，活动结束会清理
    , round_1_guild_grade = []              %%  本服有效：第一轮公会成绩，第一轮结束的时候写入。临时数据，活动结束会清理
    
    , round_2_type        = 0               %%  本服有效：第二轮活动位置：1跨服/0本服
    
    , local_data          = undefined       %%  本服有效：活动数据 #madness_land_act{}
    , zone_data           = #{}             %%  跨服有效：分区数据：#{分区id => #madness_land_act{}}
    
    , role_rank           = #{}             %% 个人排名#{分区id => [#madness_land_role{}]}, 本服 分区id为0
    , guild_rank          = #{}             %% 公会排名#{分区id => [#madness_land_guild{}]}, 本服 分区id为0
    
    , check_host_pid
}).

%% 服务器数据
-record(madness_land_server, {
    server_id        = 0
    , server_num     = 0
    , server_name    = ""
    , score          = 0
    , time           = 0          %% 刷新时间
    , rank           = 0          %% 排名
}).
%% 公会数据
-record(madness_land_guild, {
    guild_id        = 0
    , server_id      = 0
    , server_num     = 0
    , guild_name     = ""
    , guild_flag     = 0
    , score          = 0
    , time           = 0          %% 刷新时间
    , rank           = 0          %% 排名
}).
%% 玩家数据
-record(madness_land_role, {
    role_id         = 0     %% 玩家id
    , node          = undefined
    , server_id     = 0     %% 服务器id
    , server_num    = 0     %% 服务器num
    , picture       = undefined
    , guild_id      = 0     %% 社团id
    , guild_name    = 0     %% 社团名字
    , score         = 0     %% 积分
    , time          = 0     %% 刷新时间
    , continue_kill = 0     %% 当前连杀数
    , zone_id       = 0     %% 分区id
    , rank          = 0     %% 排名
    %% 统计用
    , leave         = false %% 是否离场
    , enter_time    = 0     %% 当次进入时间
    , die_count     = 0     %% 当次死亡次数
}).