源战役
25'ten fazla konu seçemezsiniz Konular bir harf veya rakamla başlamalı, kısa çizgiler ('-') içerebilir ve en fazla 35 karakter uzunluğunda olabilir.
 
 

237 satır
8.9 KiB

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