源战役
Du kannst nicht mehr als 25 Themen auswählen Themen müssen entweder mit einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.
 
 

209 Zeilen
7.9 KiB

%% -----------------------
%% desc:跨服团战头文件
%% author:hh
%% time:20/07/21
%% -----------------------
%% 分线规则
%% 1.跨服团战这边选定分线,因进入的战场固定,所以不参与自动强制分线
%% 2.3个社团一个战场,一个战场可能有多条分线(多个房间)
%% 划分战场规则
%% 1.划分战场时检测阵营内部有无服务器合服了,有的话要排除服务器
%% 2.只有满足开服天数要求的服务器才能参与划分战场
%% 跨服团战公共管理进程
-record(camp_war_state, {
status = 0, %% 阶段
start_time = 0, %% 阶段开始时间
next_time = 0, %% 下一阶段时间
end_time = 0, %% 结束时间
zone_state = 0, %% 0未分区|1已分区
extra_map = #{}, %% 其余数据的map
worker_pids = #{}, %% 阵营进程
fac_index = 1, %% 跨服团战内部阵营编号
cls_type = 0 %% 1跨服|0本服
}).
%% 跨服团战阵营管理进程
-record(zone_fac_state, {
zone_fac = undefined, %% {zone_id, fac_id}
fac_index = 0, %% 阵营编号
status = 0, %% 所处阶段
max_pool = 0, %% 阵营最大分线ID
res_id = 1, %% 生成采集资源使用
arena_map = #{}, %% 战场与社团列表映射 arena_id => [{guild_id, server_id}]
guild_arena_map = #{}, %% 社团列表与战场映射 guild_id => arena_id
arena_room_map = #{}, %% 战场与分线映射 arena_id => [pool_id,...]
room_role_num = #{}, %% 分线人数 pool_id => num
resource = #{}, %% 资源列表 pool => [{物资ID(怪物ID), {x, y}, Index}|_]
role_rank = [], %% 战场内个人排名 arena_id => [#camp_war_role{}]
guild_rank = [], %% 战场内社团排名 arena_id => [#camp_war_guild{}]
% hurt_top = 0, %% 阵营内伤害第一的社团id
buff_list = [], %% 社团buff增益列表 [#guild_res{}|_]
extra_map = #{}, %% 其余数据
cls_type = 0
}).
%% 本地公会战信息
-record(local_gwar_info, {
guild_id = 0,
server_id = 0,
server_num = 0,
zone_id = 0,
fac_id = 0,
guild_flag = 0,
guild_name = <<>>,
guild_power = 0,
chief_info = [],
score = 0
}).
%% 社团buff采集信息
-record(guild_res, {
guild_id = 0,
% server_id = 0,
buff_lists = [] %% {物资id,数量}
}).
%% 阵营玩家数据
-record(camp_war_role, {
role_id = 0,
role_name = "",
guild_id = 0,
server_id = 0,
server_num = 0,
lv = 0,
vip = 0,
sup_vip = 0,
sex = 0,
photo_profile_id = 0,
dress_id = 0,
zone_facs = [],
hurt = 0,
in_act = 0, %% 是否在活动场景
is_host = 0 %% 是否托管
}).
%% 阵营社团数据
-record(camp_war_guild, {
guild_id = 0,
guild_name = "",
guild_flag = 0,
guild_power = 0,
chief_info = [],
server_id = 0,
server_num = 0,
zone_facs = [],
nums = 1, %% 社团参与人数
hurt = 0 %% 社团输出伤害
}).
%% 百团大战结果
-record(guild_war_ret, {
guild_id = 0,
guild_name = 0,
score = 0,
guild_flag = 0,
guild_power = 0,
chief_info = [] % #rec_picture{}
}).
%% 人物进场数据
-record(role_camp_war, {
coordinate = []
}).
%% 当前状态
-define(CAMP_WAR_CLOSE, 0).
-define(CAMP_WAR_OPENING_1, 1). %% 入场
-define(CAMP_WAR_OPENING_2, 2). %% 采集
-define(CAMP_WAR_OPENING_3, 3). %% 杀boss
%% #camp_war_state.extra_map key
-define(FAC_ZONE_INIT, zone_init). %% val:0分区数据未准备|1分区数据已准备
-define(ZONE_INIT_INTERVAL, zone_calc_ref). %% val:is_reference()
-define(CAMP_WAR_GM_TYPE, gm_type). %% val:normal|gm
-define(FAC_ARENA_INIT, arena_init). %% val:0战场未分配|1战场已分配
-define(MGR_INIT_STATE, mgr_init). %% 是否已完成初始化
-define(FAC_GUILD_INIT, guild_init). %% 社团数据是否已处理
-define(IS_TODAY_ACT, today_act). %% 今日是否有活动
-define(WORKER_STOP_REF, worker_stop_ref). %% 工作进程停止定时
-define(PRE_KILL_REF, pre_kill_ref). %% 预清理怪物定时
%% #zeon_fac_state.extra_map key
-define(RES_UPUPDATE_REF, res_update). %% 资源刷新定时
-define(HURT_UPDATE_REF, hurt_update). %% 伤害排名刷新定时
-define(INIT_REF, worker_init). %% worker 初始化定时
-define(RES_START_TIME, res_stime). %% 物资资源开始时间
-define(OFF_HOST_PID, off_hosting_pid). %% 托管进程
-define(BOSS_UNIQUE_ID, boss_unique_id). %% boss唯一ID
-define(HOSTING_REF, hosting_battle). %% 通知托管玩家发动攻击定时
%% ets
-define(ETS_FAC_SRV_ZONE, ets_camp_war_svr_zone). %% 服务器与{分区,阵营}映射 server_id => {zone_id,fac_id}
-define(ETS_FAC_ZONE_FACS, ets_camp_war_zone_facs). %% 区里所有阵营列表 zone_id => facs = [_|_]
-define(ETS_FAC_LOCAL_GWAR_INFO, ets_local_gwar_info). %% 本地百团大战收集信息 {zone_id, fac_id} => [#local_gwar_info{}]
-define(ETS_FAC_ARENA_INFO, ets_camp_war_arena_info). %% 战场分配列表 {zone_id, fac_id} => {{zone_id, fac_id}, fac_index(跨服团战内部编号), [{arena_id, [{guild_id,server_id}|_]}]}
-define(ETS_FAC_LOG_RET, ets_camp_war_log_ret). %% 阵营战果保存
-define(PRE_FAC_ZONE_CALC_TIME, 3600).
-define(ZONE_INIT_INTERVAL_TIME, 600000).
-define(HURT_UPFATE_TIME, 15000).
-define(FAC_POOL_BASE(P), 1000*P).
%% 本服玩法默认分区&阵营
-define(LOC_ZONE, 1).
-define(LOC_FAC, 1).
%% 本服和跨服的活动日历子id
-define(CLS_ACT_MOD, 1). %% 跨服
-define(LOC_ACT_MOD, 2). %% 本服
%% 个人排行奖励
-record(base_camp_war_role_rank_reward, {
rank_min = 0,
rank_max = 0,
rewards = []
}).
%% 社团排行奖励
-record(base_camp_war_rank_reward, {
rank_min = 0,
rank_max = 0,
arena_id = 0,
rewards = []
}).
-define(SQL_SELECT_LOCAL_GUILD_SCORE,
<<"SELECT guild_id, guild_name, guild_flag, guild_power, chief_info, score, server_id, server_num, zone_id, fac_id FROM camp_war_guild_info">>).
-define(SQL_BATCH_REPLACE_LOCAL_GUILD_SCORE,
<<"REPLACE INTO camp_war_guild_info (guild_id, guild_name, guild_flag, guild_power, chief_info, score, server_id, server_num, zone_id, fac_id) VALUES ~ts">>).
-define(SQL_BATCH_REPLACE_LOCAL_GUILD_SCORE_VAL,
<<"(~p, '~ts', ~p, ~p, '~ts', ~p, ~p, ~p, ~p, ~p)">>).
-define(SQL_REPLACE_INTO_LOCAL_GUILD_SCORE,
<<"REPLACE INTO camp_war_guild_info set guild_id = ~p, guild_name = ~ts, guild_flag = ~p, score = ~p, server_id = ~p, server_num = ~p, zone_id = ~p, fac_id = ~p">>).
-define(REPLACE_INTO_CAMP_WAR_RESULT,
<<"REPLACE INTO camp_war_guild_rank_log (`guild_id`, `zone_id`, `fac_id`, `svr_id`, `svr_num`, `guild_name`, `hurt`, `guild_power`, `chief_info`)">>).
-define(SQL_DELETE_CAMP_WAR_RESULT,
<<"DELETE FROM camp_war_guild_rank_log">>).
-define(SQL_SELECT_CAMP_WAR_RESULT,
<<"SELECT `zone_id`, `fac_id`, `svr_id`, `guild_id`, `svr_num`, `guild_name`, `hurt`, `guild_power`, `chief_info` FROM camp_war_guild_rank_log">>).
-define(SQL_UPFATE_CAMP_WAR_RESULT,
<<"UPDATE camp_war_guild_rank_log SET `zone_id` = ~p, `fac_id` = ~p WHERE `guild_id` = ~p">>).
-define(SQL_DELETE_LOCAL_GUILD_SCORE,
<<"DELETE FROM camp_war_guild_info">>).
-define(SQL_DELETE_LOCAL_ONE_GUILD_SCORE,
<<"DELETE FROM camp_war_guild_info WHERE (zone_id = ~p AND fac_id = ~p) OR (zone_id = ~p AND fac_id = ~p)">>).