%%%-----------------------------------
%%% @Module  : lib_kf_1vn
%%% @Email   : ming_up@foxmail.com
%%% @Created : 2018.1.24
%%% @Description: 跨服1vN 头文件
%%%-----------------------------------

-define(KF_1VN_FREE, 			0).		%% 空闲
-define(KF_1VN_SIGN, 			1).		%% 报名
-define(KF_1VN_RACE_1_PRE, 	    2).		%% 淘汰赛准备
-define(KF_1VN_RACE_1, 			3).		%% 淘汰赛
-define(KF_1VN_RACE_2_PRE, 		4).		%% 挑战赛准备
-define(KF_1VN_RACE_2, 			5).		%% 挑战赛
-define(KF_1VN_END, 			6).		%% 挑战赛

-define(KF_1VN_STATE_WAIT, 		0).		%% 等待
-define(KF_1VN_STATE_BET, 		2).		%% 押注
-define(KF_1VN_STATE_MATCH, 	1).		%% 匹配
-define(KF_1VN_STATE_FIGHT, 	3).		%% 战斗
-define(KF_1VN_STATE_END, 	    4).		%% 结束

-define(KF_1VN_ROLE_WEED, 		0).		%% 淘汰
-define(KF_1VN_ROLE_WAIT, 		1).		%% 等待战斗
-define(KF_1VN_ROLE_FIGHT, 		2).		%% 对战中
-define(KF_1VN_ROLE_SIGN, 		3).		%% 报名
-define(KF_1VN_ROLE_FAIL,		4).		%% 擂主失败

-define (SIDE_CHALLENGER, 0).	%% 挑战者
-define (SIDE_DEF, 1).	        %% 擂主

-define (KF_1VN_WIN_SIDE_A, 1).        %% A方获胜
-define (KF_1VN_WIN_SIDE_B, 2).        %% B方获胜

-define(KF_1VN_C_TYPE_PLAYER, 1).  %% 真实玩家
-define(KF_1VN_C_TYPE_ROBOT,  2).  %% 机器人

-define(KF_1VN_CFG_ENTER_LV,        1).   %% 进入等级配置key
-define(KF_1VN_CFG_RACE_1_XY,       2).   %% 资格赛双方出生坐标配置key
-define(KF_1VN_CFG_DEF_XY,          3).   %% 擂主出生坐标配置key
-define(KF_1VN_CFG_CHALLENGER_XY,   4).   %% 挑战者出生坐标配置key
-define(KF_1VN_CFG_PER_SCENE_XY,    5).   %% 等待场景出生坐标配置key
-define(KF_1VN_CFG_BET_TIME,        6).   %% 竞猜时间配置key
-define(KF_1VN_CFG_ACT_MIN_NUM,     7).   %% 开活动的最低人数配置key
-define(KF_1VN_CFG_AREA_MIN_NUM,    8).   %% 每个区域的最低人数配置key
-define(KF_1VN_CFG_AUCTION_MIN_LV,  9).   %% 拍卖全服邮件最低等级（包含）
-define(KF_1VN_CFG_RACE_1_SCENE,    10).  %% 资格赛战斗场景配置key
-define(KF_1VN_CFG_RACE_1_PRE_SCENE,11).  %% 资格赛备战场景配置key
-define(KF_1VN_CFG_RACE_2_SCENE,    12).  %% 挑战赛战斗场景配置key
-define(KF_1VN_CFG_RACE_2_PRE_SCENE,13).  %% 挑战赛备战场景配置key
-define(KF_1VN_CFG_VOUCHER,         14).  %% 代金卷id配置key
-define(KF_1VN_CFG_LOSER_SCORE,     15).  %% 资格赛战败积分配置key
-define(KF_1VN_CFG_WINNER_SCORE,    16).  %% 资格赛胜利积分配置key
-define(KF_1VN_CFG_RACE_1_TIMES,    17).  %% 资格赛最多打几场
-define(KF_1VN_CFG_EXP_RATIO,       18).  %% 擂主经验值加成
-define(KF_1VN_CFG_ALL_WIN_REWARD,  19).  %% 擂主全胜奖励
-define(KF_1VN_CFG_AUCTION_START_TIME, 20).%% 拍卖启动时间
-define(KF_1VN_CFG_BET_COST,        21).  %% 竞猜花费
-define(KF_1VN_CFG_ENTER_MATCH_TIME,22).  %% 进场景剩余多少时间不匹配
-define(KF_1VN_CFG_OPEN_DAY,        23).  %% 开服多少天后才能开启
-define(KF_1VN_CFG_COMBAT_POWER,    24).  %% 单位评分战力

-define(KF_1VN_TYPE_RACE_1,        1).  %% 资格赛
-define(KF_1VN_TYPE_RACE_2,        2).  %% 挑战赛

-define(KF_1VN_LOSE,               1).  %% 失败
-define(KF_1VN_WIN,                2).  %% 胜利

-define(KF_1VN_ENTER,              1).  %% 在场景中
-define(KF_1VN_QUIT,               0).  %% 不在场景中

-define(KF_1VN_WAITING_TIME,       20). %% 战斗等待时间
-define(KF_1VN_EXP_ADD_TIME,     5000). %% 增加经验间隔 5s
-define(KF_1VN_WATCH_MAX_NUM,     100).  %% 单场战斗观战人数上限

-define(KF_1VN_SEND_OUT_TIME,      60). %% 活动结束多少秒退出场景

-define(RACE_1_MATCH_COUNT,     2).     %% 资格赛匹配到同一个人的次数
-define(RACE_2_MATCH_COUNT,     5).     %% 挑战赛随机难度列表次数

-define(PRE_SCENE_XY_KEY, {621, pre_scene_xy_key}).

%% 配置-1vN活动开启时间
-record(kf_1vn_time_cfg, {
        id = 0,             %% 活动唯一id
        open_week = [],     %% 周几开启
        signtime = {0, 0},  %% 报名开启时间
        optime = {0, 0},    %% 活动开启时间
        race_1_pre = 0,     %% 资格赛准备时间(s)
        race_1 = 0,         %% 资格赛时间(s)
        race_1_m_time = 0,  %% 资格赛匹配时间(s)
        race_1_b_time = 0,  %% 资格赛战斗时间(s)
        race_2_pre = 0,     %% 挑战赛准备时间(s)
        race_2 = 0,         %% 挑战赛时间(s)
        race_2_m_time = 0,  %% 挑战赛匹配时间(s)
        race_2_b_time = 0,  %% 挑战赛战斗时间(s)
        bet_time = 0        %% 竞猜时间(s)
    }).

%% 配置-1vN分组
-record(kf_1vn_group, {
        id=0,               %% 自增id
        hard=0,             %% 难度评级
        robot_args=0,       %% 机器人系数
        height=0            %% 人数权重
    }).

%% 配置-1vN守擂匹配
-record(kf_1vn_race_2_match, {
        stage=0,            %% 阶段
        area=0,             %% 赛区
        hard=0,             %% 难度评级
        c_num=0,            %% 挑战者人数
        hard_list = [],     %% 难度评级列表
        all_hard = []       %% 难度评级上下限
    }).

%% 配置-1vN拍卖匹配
-record(kf_1vn_auction_cfg, {
        id=0,               %% 自增id
        area=0,             %% 赛区
        goods=[],           %% 物品列表
        cost=[],            %% 消耗
        ser_award=[]        %% 全服奖励
    }).



%% 进程记录

%% 报名和竞猜记录
-record(kf_1vn_role_sign, {
        server_id = 0,      %% 服务器id
        id = 0,             %% 玩家id
        name = "",          %% 玩家名
        server_name = "",   %% 服务器名
        lv = 0,             %% 等级
        area = 0,           %% 赛区
        battle_id = 0,      %% 战斗id
        bet_side=0,         %% 竞猜哪边胜
        combat_power=0,     %% 战力
        race_1_seed=0       %% 种子选手
    }).
%% 1vN角色基本信息
-record(kf_1vn_role, {
        id = 0,             %% 玩家id
        server_id=0,        %% 服务器id
        server_num=0,       %% 服务器数
        server_name = "",   %% 服务器名
        figure=undefined,   %% 形象
        attr=undefined,     %% 属性
        combat_power=0,     %% 战力
        score=0,            %%分数
        win=0,              %% 胜利次数
        race_1_times=0,     %% 资格赛战斗次数
        race_1_match=0,     %% 资格赛匹配次数，影响匹配参数
        race_1_match_record = [], %% 资格赛匹配记录[{role_id, time}]
        race_1_seed = 0,    %% 种子选手
        win_streak= 0,      %% 连胜次数
        enter=0,            %% 是否在场景中
        area=0,             %% 赛区
        out=0,              %% 是否在资格赛中被淘汰
        pk=0,               %% 是否在战斗中
        pk_time = 0,        %% 战斗结束时间
        exp = 0,            %% 已获取经验
        pk_pid = undefined, %% 战斗进程
        scene_pool_id = 0,  %% 场景进程id
        race_2_turn=0,      %% 擂台赛轮数
        race_2_time = 0,    %% 擂台赛存活时间
        race_2_lose=0,      %% 是否已经输了擂台赛
        race_2_match_heigh=0,%% 擂台赛匹配权重
        race_2_side = 0,    %% 擂台赛身份
        race_2_bet_id = 0,  %% 竞猜id
        race_2_battle_id = 0,%% 擂台赛战斗id
        watch_battle_id = 0, %% 观战id
        match_challenger = 0, %% 是否被选为该轮比赛的挑战者 0否 1是
        result = 0          %% 0未被选为挑战者，1挑战失败 2挑战胜利（用来排名用的）
    }).

-record(kf_1vn_role_pk, {
        type = 0,  %% ?KF_1VN_C_TYPE_PLAYER|?KF_1VN_C_TYPE_ROBOT
        id = 0,             %% 玩家id
        server_id = 0,      %% 服务器id
        name = "",          %% 玩家名
        server_num = 0,     %% 服务器数
        server_name = "",   %% 服务器名
        scene_pool_id=0,    %% 场景进程id
        career = 0,         %% 职业
        sex= 1,             %% 性别
        turn = 0,           %% 转生
        picture = "",       %% 头像
        picture_ver = 0,    %% 头像版本
        area = 0,           %% 赛区
        score = 0,          %% 分数
        win = 0,            %% 胜负
        win_streak = 0,     %% 连胜
        race_1_times = 0,   %% 资格赛次数
        attr=undefined,     %% 属性
        combat_power = 0,   %% 战力
        is_dead = 0,        %% 是否死亡
        hard = 0,           %% 难度评级
        enter = 0,          %% 是否在场景中
        lv = 0              %% 等级
    }).

-record(kf_1vn_score_rank, {
        rank = 0,           %% 排名
        id = 0,             %% 玩家id
        server_id=0,        %% 服务器id
        server_num=0,       %% 服务器数
        server_name = "",   %% 服务器名
        name="",            %% 玩家名
        guild_name="",      %% 公会名
        vip =0,             %% vip等级
        score=0,            %% 分数
        win=0,              %% 胜利次数
        lose=0,             %% 失败次数
        combat_power = 0,   %% 战力
        career=0            %% 职业
    }).

%% 活动时间信息
-record(kf_1vn_time, {
	sign_start = 0,				%% 报名开始时间
    race_1_pre_start = 0,       %% 资格赛等待开始时间
	race_1_start = 0,			%% 淘汰赛开启时间
	race_1_end = 0,				%% 淘汰赛结束时间
	race_2_pre_start = 0,		%% 挑战赛准备开启时间
    race_2_start = 0,			%% 挑战赛开启时间
    race_2_end = 0,             %% 挑战赛结束时间
	show = 0 					%% 展示时长
	}).

%% 活动数据
-record(kf_1vn_info, {
    ac_id=0,
	all_time = #kf_1vn_time{},	%% 整个活动开启的时间信息
	stage = 0,					%% 活动阶段:0空闲 1报名 2淘汰赛 3挑战赛准备 4挑战赛 5展示 6聊天时间
	start_time = 0,				%% 活动开启时间
	end_time = 0,				%% 活动结束时间(0表示动态结束)
	state = 0,					%% 活动状态(0空闲 1等待 2进行中 3押注 4战斗)
    ref=undefined               %% 定时器
	}).


%% 1vN 擂台赛记录
-record(kf_1vn_race_2, {
        def_list=[],            %% 擂主id列表
        challenger_list=[],     %% 挑战者id列表
        match_list=[],          %% 匹配列表
        battle_id = 1,          %% 当前最大战斗id
        bet_m=#{},              %% 竞猜map
        def_rank=[],            %% 擂主排行榜 格式 [#kf_1vn_def_rank{}]
        challenage_rank = []    %% 挑战者排行榜 格式 [#kf_1vn_challenger_rank{}]
    }).

%% 1vN对战(匹配)列表
-record(kf_1vn_race_2_match_info, {
        battle_id = 0,          %% 战斗id
        status=0,               %% 战斗状态
        scene_pool_id=0,        %% 场景进程id
        copy_id=undefined,
        def_role=undefined,     %% 擂主信息 格式 #kf_1vn_role{}
        challengers=[],         %% 挑战者id 格式 [#kf_1vn_role{}]
        battle_win=0,           %% 战斗胜负 1:擂主胜 2:挑战者胜
        watch_ids=[],           %% 观战玩家id列表
        watch_num=0             %% 观战玩家数量
    }).


-record(kf_1vn_def_rank, {
        rank = 0,
        id = 0,
        server_id=0,
        server_num=0,
        server_name = "",
        name="",
        guild_name="",
        vip =0,
        score=0,
        race_2_lose=0,
        race_2_turn=1,
        race_2_time=0,
        combat_power = 0,
        career = 0,
        enter=0
    }).

-record(kf_1vn_challenger_rank, {
        rank = 0,
        id = 0,
        server_id=0,
        server_num=0,
        name="",
        guild_name="",
        vip =0,
        score=0,
        combat_power = 0,
        career = 0,
        enter=0,
        race_2_turn=1,
        result = 0,      %% 1失败 2胜利
        race_2_time = 0  %% 存活时间
    }).

%% 玩家记录
-record(status_kf1vn, {
        area = 0,
        def_type=0,  %% 1擂主 2挑战者
        turn = 0     %% 擂主存活轮次
    }).

%% ---------  mod_kf_1vn ---------------
%% 活动总状态
-record(act_state, {
    ac_id = 0,
    stage = 0,
    sub_stage = 0,
    optime = 0,
    edtime = 0,
    sub_edtime = 0,
    area_list = [],
    max_scene_pool = 0,
    sign_num = 0,
    sign_list = [],      %% 报名信息 [{Id1, Lv},...]
    role_m = #{},        %% 参加玩家信息（全区域) #{Area1 => [#kf_1vn_role{},...],...}
    race_1_rank_m = #{}, %% 资格赛排行榜（全区域) #{Area1 => [#kf_1vn_score_rank{},...],...}
    race_2_m = #{},      %% 挑战赛信息（全区域) #{Area1 => [#kf_1vn_race_2{},...],...}
    def_num_m = #{},
    seed_num_m = #{},
    match_time = 0,
    battle_time = 0,
    match_ref = undefined,
    match_turn = 1,
    last_match_time = 0,
    exp_ref = undefined,
    sorted_sign_list = undefined,   %% 有序的报名信息
    max_power = 10000000
}).


%% ---------- mod_kf_1vn_auction ----------
%% 拍卖进程状态
-record(auction_state, {
        issue=0,
        stage=0,
        auction_list=[],
        follow_list=[],
        ref = undefined,
        optime = 0,
        edtime = 0,
        past_list=[] %% 往期记录
    }).

-record(auction, {
        id=0,
        area = 0,
        result=0,
        last_price=0,
        goods = [],
        cost = [],
        bidders = [],   %% [#bidder{}, ...]
        rank = [],      %% [#bidder{}, ...]
        min_rank_price = 0
    }).

-record(bidder, {
        id=0,           %% 玩家id
        server_id=0,    %% 服id
        server_num=0,   %% 服数
        name = "",      %% 玩家名字
        price = 0,      %% 玩家拍卖价格（包含代金卷）
        voucher = 0,     %% 代金卷数量
        payment_refs = [] %% 预付款单据引用
    }).

-record(past_auction, {
        issue=1,
        server_num=0,
        name="",
        price=0,
        goods=[]
    }).

%% ------------- local_state ---------

-record(local_state, {
        stage=0,    %% 比赛阶段
        sub_stage=0,%% 比赛子阶段
        optime=0,   %% 此阶段开启时间
        edtime=0,   %% 此阶段结束时间
        sign_num=0, %% 报名人数
        def_num_m = #{}, %% 擂主人数
        sign_info = [], %% 本服报名名单 [{Id, 所属战区},....]
        race_1_rank_m = #{},     %% 资格赛排行榜
        def_rank_m = #{},        %% 擂主排行榜
        challenger_rank_m = #{}, %% 挑战者排行榜
        node = undefined,
        auction_stage=0,
        auction_edtime=0
    }).

%% ------------ pk_state ------------
-record(pk_state, {
        stage = 0,
        area = 0,
        battle_id = 0,
        side_a = undefined, %% #kf_1vn_role_pk{}
        side_b_list = [], %% [#kf_1vn_role_pk{},...]
        battle_time = 0,
        loading_time = 0,
        is_end = 0,
        scene_id=0,
        scene_pool_id=0,
        match_turn = 0,
        start_time = 0,
        optime=0,
        ref = undefined,
        max_power = 10000000,
        ready_time = 0,
        result = 0          %% 获胜方 1-A方 2-B方
    }).
