源战役
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.

159 lines
7.8 KiB

  1. %%%-------------------------------------------------------------------
  2. %%% @author liushl
  3. %%% @doc
  4. %%% 跨服沙盘争夺战
  5. %%% rr("../include/*.hrl").
  6. %%% cross_point_fight_center:finish_dun(554050781185, 1012,1000, 10, utime:unixtime()).
  7. %%% sys:get_state(cross_point_fight_center).
  8. %%% @end
  9. %%%-------------------------------------------------------------------
  10. -author("liushl").
  11. -define(POINT_BEGIN_CROSS_STAGE, 2). %% 沙盘开启时的跨服阶段
  12. -define(POINT_TYPE_SAFE, 1). %% 安全据点
  13. -define(POINT_TYPE_FIGHT, 2). %% 争夺区普通据点
  14. -define(POINT_TYPE_FIGHT_BUFF, 3). %% 争夺区BUFF据点
  15. -define(SWITCH_TYPE_INIT, 1). %% 赛季切换:初始化
  16. -define(SWITCH_TYPE_RECALC_ZONE, 2). %% 赛季切换:分区合并
  17. -define(SWITCH_TYPE_FIXED_TIME, 3). %% 赛季切换:固定时间
  18. -define(POINT_BOSS_HP_MAX_RATIO, 10000). %% 安全据点BOSS血量分母值
  19. -define(POINT_BATTLE_LOG_LENGTH, 20). %% 据点战斗记录长度
  20. -define(POINT_MASS_CD, 300). %% 召集5分钟CD
  21. %% 活动管理-跨服管理数据
  22. -record(point_fight_center, {
  23. zone_data = #{} %% 每个分区一份游戏数据
  24. , ref_buff = 0 %% BUFF刷新定时器
  25. }).
  26. %% 活动管理-跨服管理数据
  27. -record(point_fight_local, {
  28. subscribe = [], %% 玩家订阅 [pid]
  29. my_buff = [], %% 我方激活的BUFF [技能id]
  30. buff_time = 0 %% BUFF结束时间
  31. }).
  32. %% 活动管理-各分区数据
  33. -record(point_fight_zone, {
  34. zone_id = 0, %% 分区id
  35. season_id = 0, %% 赛季id##不做功能使用
  36. season_time = 0, %% 赛季开始时间:第N天进行赛季结算
  37. %% 每个分区的赛季都是不一样的
  38. point_mass = [], %% 集结信息##[{faction, [point_id], mass_time}] CD
  39. %% 归属变更后,插旗取消;一个阵营可以同时存在两个旗子,插第三个旗子的时候会自动取消最老的旗子
  40. point_info = [], %% 据点信息 [#point_info{}]
  41. point_buff = [], %% BUFF归属 [{point_id,faction}]BUFF激活时,当前占领国家即为BUFF归属,之后不再变化
  42. buff_time = 0, %% BUFF结束时间
  43. role_data = #{} %% 玩家信息:玩家攻打的时候新增插入/玩家数据修改更新
  44. }).
  45. %% 活动管理-沙盘据点信息
  46. -record(point_info, {
  47. point_id = 0, %% 据点id
  48. faction = 0, %% 攻占国家id
  49. seize_time = 0, %% 攻占时间## 攻占后每N小时国家成员可以领一次奖励
  50. %% 注意!!!攻占后,攻占时间并不一定是当前时间,还需要根据累计时间往前推算
  51. score_rank = [], %% 积分排行[#point_role{}],只保留前N位,由玩家攻占时刷新榜单
  52. %% 整个赛季一直累计,赛季结束才清空
  53. add_up_time = [], %% 其他国家在该据点累计占领时间,[{faction,time}]归属发生变更时更新
  54. seize_info = [] %% 国家攻占信息##[{faction, score}]
  55. %% 统计每个国家攻占的总积分,归属状态变更后,数据清空
  56. %% 对于本国安全基地
  57. }).
  58. %% 活动管理-据点攻占信息
  59. -record(point_role, {
  60. role_id = 0, %% 玩家id
  61. hurt_part = 0, %% 据点总伤害占比:安全据点有效
  62. score = 0 %% 据点总积分
  63. }).
  64. -record(role_cross_point, {
  65. point_info = [], %% role_cross_point_info#{}
  66. dun_arg = undefned
  67. }).
  68. %% 玩家状态-玩家活动数据
  69. -record(role_cross_point_info, {
  70. point_id = 0, %% 据点id
  71. single_max_score = 0, %% 单次攻打最大积分
  72. total_score = 0, %% 攻打总积分
  73. total_hurt = 0, %% 攻打总输出:安全据点有效
  74. value = 0, %% 副本通关后参数#对于安全据点:为输出万分比/对于抢占据点,为副本波数
  75. award_time = 0 %% 领奖次数
  76. }).
  77. %% 玩家信息
  78. -record(role_data, {
  79. role_id = 0, %% 玩家id
  80. name = "", %% 玩家名字
  81. server_id = 0, %% 服务器id
  82. server_num = 0,
  83. faction = 0 %% 阵营
  84. }).
  85. %%%-------------------------------------------------------------------
  86. %%% @doc
  87. %%% DB
  88. %%% @end
  89. %%%-------------------------------------------------------------------
  90. %% 查询所有活动中的分区数据
  91. -define(DB_GET_ZONE_INFO, <<"SELECT `zone_id`, `season_id`,`season_time`,`point_mass`,`point_buff`,`buff_time` FROM cross_point_fight_zone">>).
  92. %% 保存分区数据
  93. -define(DB_SAVE_ZONE_INFO, <<"REPLACE INTO cross_point_fight_zone(`zone_id`,`season_id`,`season_time`,`point_mass`,`point_buff`,`buff_time`) VALUES(~p,~p,~p,'~ts','~ts',~p)">>).
  94. %% 清理分区数据
  95. -define(DB_CLEAN_ZONE_INFO, <<"DELETE FROM cross_point_fight_zone WHERE `zone_id`=~p">>).
  96. %% 获得单个分区内的据点信息
  97. -define(DB_GET_ZONE_POINTS, <<"SELECT `point_id`,`faction`,`seize_time`,`add_up_time`,`seize_info` FROM cross_point_fight_point WHERE `zone_id`=~p">>).
  98. %% 保存据点信息
  99. -define(DB_SAVE_ZONE_POINT, <<"REPLACE INTO cross_point_fight_point(`zone_id`,`point_id`,`faction`,`seize_time`,`add_up_time`,`seize_info`) VALUES(~p,~p,~p,~p,'~ts','~ts')">>).
  100. %% 清理据点信息
  101. -define(DB_CLEAN_ZONE_POINTS, <<"DELETE FROM cross_point_fight_point WHERE `zone_id`=~p">>).
  102. %% 获得据点战斗记录
  103. -define(DB_GET_POINT_BATTLE_LOG, <<"SELECT `point_id`,`role_id`,`score`,`hurt_part` FROM cross_point_fight_log WHERE `zone_id`=~p">>).
  104. %% 保存据点战斗记录
  105. -define(DB_SAVE_POINT_BATTLE_LOG, <<"REPLACE INTO cross_point_fight_log(`zone_id`,`point_id`,`role_id`,`score`,`hurt_part`) VALUES(~p,~p,~p,~p,~p)">>).
  106. %% 删除据点战斗记录
  107. -define(DB_DEL_POINT_BATTLE_LOG, <<"DELETE FROM cross_point_fight_log WHERE `zone_id`=~p AND `point_id`=~p AND `role_id`=~p">>).
  108. %% 清理整个分区战斗记录
  109. -define(DB_CLEAN_ZONE_BATTLE_LOG, <<"DELETE FROM cross_point_fight_log WHERE `zone_id`=~p">>).
  110. %% 获得玩家跨服沙盘活动数据
  111. -define(DB_GET_ROLE_CROSS_POINT_INFO, <<"SELECT `point_id`,`single_max_score`,`score`,`hurt_part`,`value`,`award_time` FROM role_cross_point_score WHERE `role_id`=~p">>).
  112. %% 获得玩家跨服沙盘活动数据
  113. -define(DB_GET_ROLE_CROSS_POINT_INFO_ONE, <<"SELECT `single_max_score`,`score`,`hurt_part`,`value`,`award_time` FROM role_cross_point_score WHERE `role_id`=~p AND `point_id`=~p">>).
  114. %% 保存玩家沙盘活动数据
  115. -define(DB_SAVE_ROLE_CROSS_POINT_INFO, <<"REPLACE INTO role_cross_point_score(`role_id`,`point_id`,`single_max_score`,`score`,`hurt_part`,`value`,`award_time`) VALUES(~p,~p,~p,~p,~p,~p,~p)">>).
  116. %% 清理玩家跨服沙盘活动数据
  117. -define(DB_CLEAN_ROLE_CROSS_POINT_INFO, <<"TRUNCATE role_cross_point_score">>).
  118. %% 获得玩家信息
  119. -define(DB_GET_ROLE_DATA, <<"SELECT `role_id`,`name`,`server_id`,`server_num`,`faction` FROM cross_point_role_data WHERE `zone_id`=~p">>).
  120. %% 保存玩家信息
  121. -define(DB_SAVE_ROLE_DATA, <<"REPLACE INTO cross_point_role_data(`zone_id`,`role_id`,`name`,`server_id`,`server_num`,`faction`) VALUES(~p,~p,'~ts',~p,~p,~p)">>).
  122. %% 批量保存
  123. -define(DB_SAVE_ROLE_DATA_BATCH, <<"REPLACE INTO cross_point_role_data(`zone_id`,`role_id`,`name`,`server_id`,`server_num`,`faction`) VALUES">>).
  124. %% 清理玩家信息
  125. -define(DB_CLEAN_ROLE_DATA, <<"DELETE FROM cross_point_role_data WHERE `zone_id`=~p">>).
  126. %%%-------------------------------------------------------------------
  127. %%% @doc
  128. %%% 后台配置
  129. %%% @end
  130. %%%-------------------------------------------------------------------
  131. -record(base_cross_point_fight_point, {
  132. point_id,
  133. name,
  134. type,
  135. owner,
  136. dun_id,
  137. base_score,
  138. link_point,
  139. cost,
  140. reward,
  141. interval_time,
  142. buff,
  143. attack_reward
  144. }).