源战役
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

102 lines
4.8 KiB

  1. %%% -------------------------------------------------------
  2. %%% @author huangyongxing@yeah.net
  3. %%% @doc
  4. %%% 跨服分区基础相关定义
  5. %%% @end
  6. %%% -------------------------------------------------------
  7. -ifndef(CZONE_HRL).
  8. -define(CZONE_HRL, ok).
  9. %% 分区资料表
  10. -define(SQL_SELECT_CZONES, <<"SELECT `zone_id`,`stage`,`server_ids`,`faction_names` FROM `center_zones`">>).
  11. -define(SQL_REPLACE_CZONE_PREFIX, <<"REPLACE INTO `center_zones` (`zone_id`,`stage`,`server_ids`,`faction_names`)">>).
  12. -define(SQL_DEL_CZONE, <<"DELETE FROM `center_zones` WHERE `zone_id`=~w">>).
  13. %% 分区中游戏服基础资料表
  14. -define(SQL_SELECT_ZONE_SVR_BASE, <<"SELECT `server_id`,`faction`,`world_level` FROM `center_zone_svr_base`">>).
  15. -define(SQL_REPLACE_ZONE_SVR_BASE, <<"REPLACE INTO `center_zone_svr_base` (`server_id`,`faction`,`world_level`)">>).
  16. %% 合并子分区相关资料表 center_rezone_info
  17. -define(SQL_SELECT_REZONE_INFO, <<"SELECT `zone_id`,`zone_id_2`,`next_stage`,`svr_factions`,`scheduled_time`,`confirm` FROM `center_rezone_info`">>).
  18. -define(SQL_REPLACE_REZONE_INFO_PREFIX, <<"REPLACE INTO `center_rezone_info` (`zone_id`,`zone_id_2`,`next_stage`,`svr_factions`,`scheduled_time`,`confirm`)">>).
  19. -define(SQL_DEL_REZONE_INFO, <<"DELETE FROM `center_rezone_info` WHERE zone_id=~w">>).
  20. %% 时间节点
  21. %% 预分区时间
  22. -define(PRE_TIME, {9, 0, 0}).
  23. %% 确认时间(将预分区结果移动到已确认数据区)
  24. -define(CONFIRM_TIME, {12, 0, 0}).
  25. %% 执行合并的时间(按已确认数据执行分区,并清理数据)
  26. -define(REZONE_TIME, {9, 0, 0}).
  27. %% 预告定时器(按已确认数据进行预告)
  28. -define(NOTICE_TIME, {8, 50, 0}).
  29. %% 阵营
  30. -define(FACTION_1, 1).
  31. -define(FACTION_2, 2).
  32. -define(FACTION_3, 3).
  33. -define(FACTION_4, 4).
  34. %% 阵营列表
  35. -define(FACTION_LIST, [?FACTION_1, ?FACTION_2, ?FACTION_3, ?FACTION_4]).
  36. %% 当配置缺失时,默认的世界等级需求
  37. -define(DEFAULT_WORLD_LV_REQT, 999).
  38. %% 计数器type值
  39. -define(CZONE_COUNTER_STAGE_AWARD_STATE, 1). % 分区阶段备战奖励状态
  40. %% 游戏服缓存的分区基本数据
  41. -record(czone_svr_local, {
  42. zone_id = 0 % 分区id
  43. ,stage = 0 % 分区阶段
  44. ,faction = 0 % 分区中的阵营
  45. }).
  46. %% ** 各模块需要存储在分区管理进程中的自定义数据的集合结构 **
  47. %% 需要添加和管理的数据,都添加在这里(或自己在进程字典中管理)
  48. %%
  49. %% 数据从db中load到内存、数据更新维护、数据存储等
  50. %% 均由相关功能模块在回调中自行实现
  51. %% 存储到 #zone_proc_state.module_state 中
  52. -record(cz_state, {
  53. }).
  54. %% 分区管理相关数据
  55. -record(czone_sys, {
  56. pre_rezone_data = [] % 预重新分区结果(定时器生成或人工编辑生成) [ #rezone_info{} ]
  57. ,confirm_rezone_data = [] % 已确认分区数据(正式分区前) [ #rezone_info{} ]
  58. ,pre_timer = undefined % 预重新分区定时器(每天触发,统一检查是否满足条件)
  59. ,confirm_timer = undefined % 分区正式确定定时器(确定后不可修改)
  60. ,notice_timer = undefined % 正式执行分区之前预告定时器
  61. ,rezone_timer = undefined % 正式执行分区定时器
  62. ,notice_state = false % 用于标记是否处于notice与rezone之间(通知倒计时阶段)
  63. %% 阵营相关资料,主要供给其他功能使用,对分区逻辑本身无意义(额外的更新管理成本)
  64. ,svr_faction_map = #{} % 游戏服阵营资料 #{ServerId => Faction}
  65. ,zone_faction_svrs_map = #{}% 分区阵营对应游戏服列表 #{ZoneId => FSvrsMap}, FSvrsMap :: #{Faction => ServerIds}
  66. }).
  67. %% 系统 - 单个分区数据(多个游戏服)
  68. %% 存储于#zone_info.ext,维护czone类型分区的分区核心数据
  69. -record(czone_info, {
  70. stage = 0 % 当前分区阶段
  71. ,world_lv_avg = 0 % 平均世界等级
  72. ,faction_names = [] % 阵营名称列表(为空时即默认名,[{1, "阵营1"}, ...])
  73. }).
  74. %% 系统 - 单个游戏服数据
  75. %% 存储于#zone_svr.ext,维护czone类型分区中单服的分区核心数据
  76. -record(czone_svr, {
  77. faction = 1 % 阵营/派系
  78. ,world_level = 0 % 世界等级
  79. }).
  80. %% 系统 - 单个合并信息
  81. -record(rezone_info, {
  82. zone_id = 0 % 主分区id
  83. ,zone_id_2 = 0 % 副分区id
  84. ,next_stage = 0 % 下一分区阶段
  85. ,svr_factions = [] % 合区重新分配的各服阵营信息 [{ServerId, Faction}, ...]
  86. ,scheduled_time = 0 % 计划正式分区时间(0表示运营在未满足条件前提前修改的数据,非0应当进行合并管理)
  87. }).
  88. -endif.