%%%------------------------------------------------------------------- %%% @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