%%%-------------------------------------------------------------------
%%% @doc    废土战场(饥饿游戏)-头文件
%%% Module  : wasteland_war.hrl
%%% Created : 2020-08-03
%%% @Author : tyl
%%%-------------------------------------------------------------------

%% 活动模式
-define(WAR_TYPE_LOCAL, 0).      %% 本服模式
-define(WAR_TYPE_CLS,   1).      %% 跨服分区模式

%% 阶段
-define(WASTELAND_REST,   0).       %% 休战阶段
-define(WASTELAND_READY,  1).       %% 准备阶段
-define(WASTELAND_RUN,    2).       %% 战斗阶段
-define(WASTELAND_TURN,   3).       %% 战场切换阶段(2s,必须避免玩家的一些操作,例如击杀积分等)

%% 预备阶段时间
% -define(READY_WAIT_TIME, 3*60).
-define(READY_WAIT_TIME, 6*10). %% 测试
%% 默认每轮时间
-define(WAR_DEFAULT_DURATION, 300).

%% 分战场玩家数据
-define(WAR_FIELD_ROLE(Pool), {war_field, Pool}).
-define(WAR_FIELD_EXIT_ROLE(Pool), {war_exit_role, Pool}).  %% 被淘汰退出玩家

%% 分战场推送玩家积分时间
-define(WAR_FIELD_SEND(Pool), {war_field_send, Pool}).

%% 战场排名长度
-define(RANK_LENGTH, data_wasteland_war:get_kv_cfg(rank_num)).
%% 复活无敌时间
-define(WASTELAND_PROTECT_TIME, 5).
%% 复活cd时间
-define(WASTELAND_REVIVE_CD,    10).
-define(WASTELAND_REVIVE_CD_KEY, wasteland_revive_cd).

%% 废土结晶怪物Id
-define(CRYSTAL_MON_ID, 11001).
%% 击杀结晶怪类型
-define(KILL_CRYSTAL,   1).
-define(ASSIST_CRYSTAL, 2).

%% 默认分战场人数
-define(DEFAULT_ROLE_NUM, 40).
%% 场景分线偏移量
-define(SCENE_POOL_OFFSET, 2000).
%% 默认第一轮场景(初始预备场景)
-define(LOCAL_WAR_DEFAULT_SCENE, 7630).
-define(CLS_WAR_DEFAULT_SCENE,   7631).
%% 最后一场场景
-define(LOCAL_WAR_LAST_SCENE, 7620).
-define(CLS_WAR_LAST_SCENE,   7621).

%% 被击杀玩家击杀数达到N触发终结
-define(SHUTDOWN_TIMES,  data_wasteland_war:get_kv_cfg(shutdown)).

%% 角色伤害列表(存储在玩家进程)
-define(WASTELAND_HURT_LIST(RoleId), {wasteland_hurt_list, RoleId}).

%% 是否被淘汰
-define(IS_OVER_NO,     0).     %% 未淘汰
-define(IS_OVER_YES,    1).     %% 已淘汰

%% 是否在场景中
-define(IN_SCENE_NO,    0).
-define(IN_SCENE_YES,   1).

%% 是否托管中
-define(IN_HOSTING_NOT,    0).
-define(IN_HOSTING,        1).

%% 是否已经死亡
-define(IN_DIE_NOT,    0).
-define(IN_DIE_YES,    1).

%% 玩家形象改变
-define(CHANGE_TYPE_VIP,       1).  %% vip等级
-define(CHANGE_TYPE_SUP_VIP,   2).  %% 贵族
-define(CHANGE_TYPE_NAME,      3).  %% 名字

%% 进程字典记录TA数据
-define(PRO_TA_ROLE_DATA(RoleId), {pro_wasteland_ta_role_data, RoleId}).

%% 跨服/本服管理进程状态数据
-record(wasteland_war_state, {
	is_open       = false         %% 跨服活动是否开放(用于本服判断)
	,stage        = 0             %% 阶段 0-未开放 1-准备阶段 2-进行阶段
	,start_time   = 0             %% 开始时间
	,round        = 0             %% 当前轮数
	,round_ref    = []            %% 轮数定时器
	,crystal_ref  = []            %% 结晶刷出定时器
	,srv_zone_map = #{}           %% 服务器和分区映射
	,zone_work_map= #{}           %% 分区管理进程#{zone=>pid}
	,round_end_time = 0           %% 本轮结束时间
}).

%% 本服管理进程状态数据(废弃)
-record(local_wasteland_war_state, {
	is_open     = false         %% 活动开放 TODO:考虑是否去除
	,stage      = 0             %% 阶段 0-未开放 1-准备阶段 2-进行阶段
	,start_time = 0             %% 开始时间
	,round      = 0             %% 当前轮数
	,round_ref  = []            %% 轮数定时器
	,crystal_ref = []           %% 结晶刷出定时器
	,crystal_num = 0            %% 结晶数量
	,pools      = []            %% 分线列表
	,role_lists = []            %% 角色列表[#role_info{}...] 备注:包括托管玩家
}).

%% 玩家数据
-record(role_info, {
	%% 基础数据
	role_id     = 0
	,role_name  = ""
	,power      = 0         %% 战力，用于区分战区
	,sex        = 0
	,vip_lv     = 0
	,sup_vip    = 0
	,hp_lim     = 0         %% 血量上限,进入第一轮的时候回满
	,server_id  = 0
	,server_num = 0
	,node       = []        %% 玩家本服节点
	,mon_id     = 0         %% 如果是假人,记录唯一Id

	%% 玩法数据
	,round      = 0         %% 轮数
	,kill_num   = 0         %% 击杀数
	,be_kill_num = 0        %% 被杀数(当击杀玩家时清0,否则累加)
	,combo      = 0         %% 当前连杀数(人)
	,max_combo  = 0         %% 最大连杀数(人)
	,score      = 0         %% 积分(废弃)
	,rank       = 0         %% 分区总排名
	,reward_score = []      %% 领取过奖励的积分段

	%% 控制数据
	,war_field  = 0         %% 战场号(用于计算场景分线)
	,is_in_scene= 1         %% 是否在场景中(用于判断下轮传送)
	,is_over    = 0         %% 是否被淘汰
	,is_hosting = 0         %% 是否托管中
	,host_reward=[]         %% 托管期间获取的奖励
	,last_pos   = 0         %% 上一次随机点(托管战斗)
	,is_die     = 0         %% 是否已经死亡(晋升切换场景拉活)
	,figure     = undefined
	,ready_pool = 0         %% 准备场景分线Id
}).

%% 分战场玩家数据
-record(war_field_role, {
	role_id     = 0
	,mon_id     = 0         %% 如果是假人>0
	,power_rank = 0         %% 进来时的(分战区前)战力排行，用于分战区
	,war_score  = 0         %% 战场中的积分
	,war_rank   = 0         %% 战场中的排名
	,server_id  = 0         %% 服务器Id(用于广播数据)
	,node       = []        %% 服务器节点
}).

%% TA数据记录
-record(pro_ta_role_data, {
	role_id           = 0
	,crystal_score    = 0   %% 击杀结晶积分
	,kill_score       = 0   %% 击杀玩家积分
	,revive_times     = 0   %% 复活次数
	,enter_time       = 0   %% 进入时间
}).

%% ============================ 后台配置 ===================================
%% 常量配置表
-record(wasteland_war_kv_cfg, {
	id              = 0         %% 编号
	,key 			= ""		%% 键
	,value   		= "" 		%% 常量
	,remark			= ""		%% 备注
}).

%% 积分奖励
-record(wasteland_score_reward_cfg, {
	need_score      = 0         %% 需求的积分下限
	,reward         = []        %% 奖励
}).

%% 轮数奖励
-record(wasteland_round_reward_cfg, {
	round           = 0         %% 轮数
	,scene          = 0         %% 本服场景Id
	,cls_scene      = 0         %% 跨服场景Id
	,duration       = 0         %% 持续时间
	,max_crystal    = 0         %% 最大结晶数量
	,max_role       = 0         %% 场景最大人数
	,reward         = []        %% 奖励
}).

%% 排名奖励
-record(wasteland_rank_reward_cfg, {
	rank_low        = 0         %% 排名下限
	,rank_high      = 0         %% 排名上限
	,reward         = []        %% 奖励
}).

%% 杀人积分获得
-record(wasteland_bleed_score_cfg, {
	kill_count      = 0         %% 连杀数量
	,kill_score     = 0         %% 连杀积分
	,over_score     = 0         %% 终结积分
}).

%% 自动寻人点
-record(wasteland_select_pos_cfg, {
	scene           = 0         %% 场景Id
	,pos_list       = 0         %% 自动选择点
	,war_pos_list   = []        %% 战斗配置点
}).

%% ============================ db操作 ===================================
-define(SQL_SAVE_WASTELAND_RANK, <<"REPLACE INTO wasteland_war (`server_id`, `role_id`, `role_name`, `war_field`, `round`, `rank`, `score`, `kill_num`, `max_combo`, `sex`, `vip_lv`, `sup_vip`, `server_num`, `power`)
								VALUES (~p, ~p, '~ts', ~p, ~p, ~p, ~p, ~p, ~p, ~p, ~p, ~p, ~p, ~p)">>).
-define(SQL_BATCH_SAVE_WASTELAND_RANK, <<"REPLACE INTO wasteland_war (`server_id`, `role_id`, `role_name`, `war_field`, `round`, `rank`, `score`, `kill_num`, `max_combo`, `sex`, `vip_lv`, `sup_vip`, `server_num`, `power`)
											VALUES ~ts">>).
-define(SQL_BATCH_SAVE_WASTELAND_RANK_VALUE, <<"(~p, ~p, '~ts', ~p, ~p, ~p, ~p, ~p, ~p, ~p, ~p, ~p, ~p, ~p)">>).

-define(SQL_SELECT_WASTELAND_RANK, <<"SELECT `server_id`, `role_id`, `role_name`, `war_field`, `round`, `rank`, `score`, `kill_num`, `max_combo`, `sex`, `vip_lv`, `sup_vip`, `server_num`, `power` FROM wasteland_war">>).
-define(SQL_UPDATE_WASTELAND_RANK_COMBO, <<"UPDATE wasteland_war SET  `kill_num` = ~p, `max_combo` = ~p WHERE `server_id` = ~p, `role_id` = ~p">>).
-define(SQL_UPDATE_WASTELAND_RANK_ROUND, <<"UPDATE wasteland_war SET  `round` = ~p WHERE `server_id` = ~p AND `role_id` = ~p">>).
-define(SQL_UPDATE_WASTELAND_RANK_NAME, <<"UPDATE wasteland_war SET  `role_name` = '~ts' WHERE `server_id` = ~p AND `role_id` = ~p">>).
-define(SQL_UPDATE_WASTELAND_RANK_VIP, <<"UPDATE wasteland_war SET  `vip_lv` = ~p WHERE `server_id` = ~p AND `role_id` = ~p">>).
-define(SQL_UPDATE_WASTELAND_RANK_SUP_VIP, <<"UPDATE wasteland_war SET  `sup_vip` = ~p WHERE `server_id` = ~p AND `role_id` = ~p">>).
-define(SQL_UPDATE_WASTELAND_RANK_POWER, <<"UPDATE wasteland_war SET  `power` = ~p WHERE `server_id` = ~p AND `role_id` = ~p">>).

-define(SQL_DELETE_WASTELAND_RANK, <<"TRUNCATE table wasteland_war">>).

%%	,sex        = 0
%%  ,name       = ""
%%	,vip_lv     = 0
%%	,sup_vip    = 0
%%	,server_num = 0