源战役
Nie możesz wybrać więcej, niż 25 tematów Tematy muszą się zaczynać od litery lub cyfry, mogą zawierać myślniki ('-') i mogą mieć do 35 znaków.

236 wiersze
8.9 KiB

4 tygodni temu
  1. %%%-------------------------------------------------------------------
  2. %%% @doc 废土战场(饥饿游戏)-头文件
  3. %%% Module : wasteland_war.hrl
  4. %%% Created : 2020-08-03
  5. %%% @Author : tyl
  6. %%%-------------------------------------------------------------------
  7. %% 活动模式
  8. -define(WAR_TYPE_LOCAL, 0). %% 本服模式
  9. -define(WAR_TYPE_CLS, 1). %% 跨服分区模式
  10. %% 阶段
  11. -define(WASTELAND_REST, 0). %% 休战阶段
  12. -define(WASTELAND_READY, 1). %% 准备阶段
  13. -define(WASTELAND_RUN, 2). %% 战斗阶段
  14. -define(WASTELAND_TURN, 3). %% 战场切换阶段(2s,必须避免玩家的一些操作,例如击杀积分等)
  15. %% 预备阶段时间
  16. % -define(READY_WAIT_TIME, 3*60).
  17. -define(READY_WAIT_TIME, 6*10). %% 测试
  18. %% 默认每轮时间
  19. -define(WAR_DEFAULT_DURATION, 300).
  20. %% 分战场玩家数据
  21. -define(WAR_FIELD_ROLE(Pool), {war_field, Pool}).
  22. -define(WAR_FIELD_EXIT_ROLE(Pool), {war_exit_role, Pool}). %% 被淘汰退出玩家
  23. %% 分战场推送玩家积分时间
  24. -define(WAR_FIELD_SEND(Pool), {war_field_send, Pool}).
  25. %% 战场排名长度
  26. -define(RANK_LENGTH, data_wasteland_war:get_kv_cfg(rank_num)).
  27. %% 复活无敌时间
  28. -define(WASTELAND_PROTECT_TIME, 5).
  29. %% 复活cd时间
  30. -define(WASTELAND_REVIVE_CD, 10).
  31. -define(WASTELAND_REVIVE_CD_KEY, wasteland_revive_cd).
  32. %% 废土结晶怪物Id
  33. -define(CRYSTAL_MON_ID, 11001).
  34. %% 击杀结晶怪类型
  35. -define(KILL_CRYSTAL, 1).
  36. -define(ASSIST_CRYSTAL, 2).
  37. %% 默认分战场人数
  38. -define(DEFAULT_ROLE_NUM, 40).
  39. %% 场景分线偏移量
  40. -define(SCENE_POOL_OFFSET, 2000).
  41. %% 默认第一轮场景(初始预备场景)
  42. -define(LOCAL_WAR_DEFAULT_SCENE, 7630).
  43. -define(CLS_WAR_DEFAULT_SCENE, 7631).
  44. %% 最后一场场景
  45. -define(LOCAL_WAR_LAST_SCENE, 7620).
  46. -define(CLS_WAR_LAST_SCENE, 7621).
  47. %% 被击杀玩家击杀数达到N触发终结
  48. -define(SHUTDOWN_TIMES, data_wasteland_war:get_kv_cfg(shutdown)).
  49. %% 角色伤害列表(存储在玩家进程)
  50. -define(WASTELAND_HURT_LIST(RoleId), {wasteland_hurt_list, RoleId}).
  51. %% 是否被淘汰
  52. -define(IS_OVER_NO, 0). %% 未淘汰
  53. -define(IS_OVER_YES, 1). %% 已淘汰
  54. %% 是否在场景中
  55. -define(IN_SCENE_NO, 0).
  56. -define(IN_SCENE_YES, 1).
  57. %% 是否托管中
  58. -define(IN_HOSTING_NOT, 0).
  59. -define(IN_HOSTING, 1).
  60. %% 是否已经死亡
  61. -define(IN_DIE_NOT, 0).
  62. -define(IN_DIE_YES, 1).
  63. %% 玩家形象改变
  64. -define(CHANGE_TYPE_VIP, 1). %% vip等级
  65. -define(CHANGE_TYPE_SUP_VIP, 2). %% 贵族
  66. -define(CHANGE_TYPE_NAME, 3). %% 名字
  67. %% 进程字典记录TA数据
  68. -define(PRO_TA_ROLE_DATA(RoleId), {pro_wasteland_ta_role_data, RoleId}).
  69. %% 跨服/本服管理进程状态数据
  70. -record(wasteland_war_state, {
  71. is_open = false %% 跨服活动是否开放(用于本服判断)
  72. ,stage = 0 %% 阶段 0-未开放 1-准备阶段 2-进行阶段
  73. ,start_time = 0 %% 开始时间
  74. ,round = 0 %% 当前轮数
  75. ,round_ref = [] %% 轮数定时器
  76. ,crystal_ref = [] %% 结晶刷出定时器
  77. ,srv_zone_map = #{} %% 服务器和分区映射
  78. ,zone_work_map= #{} %% 分区管理进程#{zone=>pid}
  79. ,round_end_time = 0 %% 本轮结束时间
  80. }).
  81. %% 本服管理进程状态数据(废弃)
  82. -record(local_wasteland_war_state, {
  83. is_open = false %% 活动开放 TODO:考虑是否去除
  84. ,stage = 0 %% 阶段 0-未开放 1-准备阶段 2-进行阶段
  85. ,start_time = 0 %% 开始时间
  86. ,round = 0 %% 当前轮数
  87. ,round_ref = [] %% 轮数定时器
  88. ,crystal_ref = [] %% 结晶刷出定时器
  89. ,crystal_num = 0 %% 结晶数量
  90. ,pools = [] %% 分线列表
  91. ,role_lists = [] %% 角色列表[#role_info{}...] 备注:包括托管玩家
  92. }).
  93. %% 玩家数据
  94. -record(role_info, {
  95. %% 基础数据
  96. role_id = 0
  97. ,role_name = ""
  98. ,power = 0 %% 战力,用于区分战区
  99. ,sex = 0
  100. ,vip_lv = 0
  101. ,sup_vip = 0
  102. ,hp_lim = 0 %% 血量上限,进入第一轮的时候回满
  103. ,server_id = 0
  104. ,server_num = 0
  105. ,node = [] %% 玩家本服节点
  106. ,mon_id = 0 %% 如果是假人,记录唯一Id
  107. %% 玩法数据
  108. ,round = 0 %% 轮数
  109. ,kill_num = 0 %% 击杀数
  110. ,be_kill_num = 0 %% 被杀数(当击杀玩家时清0,否则累加)
  111. ,combo = 0 %% 当前连杀数(人)
  112. ,max_combo = 0 %% 最大连杀数(人)
  113. ,score = 0 %% 积分(废弃)
  114. ,rank = 0 %% 分区总排名
  115. ,reward_score = [] %% 领取过奖励的积分段
  116. %% 控制数据
  117. ,war_field = 0 %% 战场号(用于计算场景分线)
  118. ,is_in_scene= 1 %% 是否在场景中(用于判断下轮传送)
  119. ,is_over = 0 %% 是否被淘汰
  120. ,is_hosting = 0 %% 是否托管中
  121. ,host_reward=[] %% 托管期间获取的奖励
  122. ,last_pos = 0 %% 上一次随机点(托管战斗)
  123. ,is_die = 0 %% 是否已经死亡(晋升切换场景拉活)
  124. ,figure = undefined
  125. ,ready_pool = 0 %% 准备场景分线Id
  126. }).
  127. %% 分战场玩家数据
  128. -record(war_field_role, {
  129. role_id = 0
  130. ,mon_id = 0 %% 如果是假人>0
  131. ,power_rank = 0 %% 进来时的(分战区前)战力排行,用于分战区
  132. ,war_score = 0 %% 战场中的积分
  133. ,war_rank = 0 %% 战场中的排名
  134. ,server_id = 0 %% 服务器Id(用于广播数据)
  135. ,node = [] %% 服务器节点
  136. }).
  137. %% TA数据记录
  138. -record(pro_ta_role_data, {
  139. role_id = 0
  140. ,crystal_score = 0 %% 击杀结晶积分
  141. ,kill_score = 0 %% 击杀玩家积分
  142. ,revive_times = 0 %% 复活次数
  143. ,enter_time = 0 %% 进入时间
  144. }).
  145. %% ============================ 后台配置 ===================================
  146. %% 常量配置表
  147. -record(wasteland_war_kv_cfg, {
  148. id = 0 %% 编号
  149. ,key = "" %% 键
  150. ,value = "" %% 常量
  151. ,remark = "" %% 备注
  152. }).
  153. %% 积分奖励
  154. -record(wasteland_score_reward_cfg, {
  155. need_score = 0 %% 需求的积分下限
  156. ,reward = [] %% 奖励
  157. }).
  158. %% 轮数奖励
  159. -record(wasteland_round_reward_cfg, {
  160. round = 0 %% 轮数
  161. ,scene = 0 %% 本服场景Id
  162. ,cls_scene = 0 %% 跨服场景Id
  163. ,duration = 0 %% 持续时间
  164. ,max_crystal = 0 %% 最大结晶数量
  165. ,max_role = 0 %% 场景最大人数
  166. ,reward = [] %% 奖励
  167. }).
  168. %% 排名奖励
  169. -record(wasteland_rank_reward_cfg, {
  170. rank_low = 0 %% 排名下限
  171. ,rank_high = 0 %% 排名上限
  172. ,reward = [] %% 奖励
  173. }).
  174. %% 杀人积分获得
  175. -record(wasteland_bleed_score_cfg, {
  176. kill_count = 0 %% 连杀数量
  177. ,kill_score = 0 %% 连杀积分
  178. ,over_score = 0 %% 终结积分
  179. }).
  180. %% 自动寻人点
  181. -record(wasteland_select_pos_cfg, {
  182. scene = 0 %% 场景Id
  183. ,pos_list = 0 %% 自动选择点
  184. ,war_pos_list = [] %% 战斗配置点
  185. }).
  186. %% ============================ db操作 ===================================
  187. -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`)
  188. VALUES (~p, ~p, '~ts', ~p, ~p, ~p, ~p, ~p, ~p, ~p, ~p, ~p, ~p, ~p)">>).
  189. -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`)
  190. VALUES ~ts">>).
  191. -define(SQL_BATCH_SAVE_WASTELAND_RANK_VALUE, <<"(~p, ~p, '~ts', ~p, ~p, ~p, ~p, ~p, ~p, ~p, ~p, ~p, ~p, ~p)">>).
  192. -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">>).
  193. -define(SQL_UPDATE_WASTELAND_RANK_COMBO, <<"UPDATE wasteland_war SET `kill_num` = ~p, `max_combo` = ~p WHERE `server_id` = ~p, `role_id` = ~p">>).
  194. -define(SQL_UPDATE_WASTELAND_RANK_ROUND, <<"UPDATE wasteland_war SET `round` = ~p WHERE `server_id` = ~p AND `role_id` = ~p">>).
  195. -define(SQL_UPDATE_WASTELAND_RANK_NAME, <<"UPDATE wasteland_war SET `role_name` = '~ts' WHERE `server_id` = ~p AND `role_id` = ~p">>).
  196. -define(SQL_UPDATE_WASTELAND_RANK_VIP, <<"UPDATE wasteland_war SET `vip_lv` = ~p WHERE `server_id` = ~p AND `role_id` = ~p">>).
  197. -define(SQL_UPDATE_WASTELAND_RANK_SUP_VIP, <<"UPDATE wasteland_war SET `sup_vip` = ~p WHERE `server_id` = ~p AND `role_id` = ~p">>).
  198. -define(SQL_UPDATE_WASTELAND_RANK_POWER, <<"UPDATE wasteland_war SET `power` = ~p WHERE `server_id` = ~p AND `role_id` = ~p">>).
  199. -define(SQL_DELETE_WASTELAND_RANK, <<"TRUNCATE table wasteland_war">>).
  200. %% ,sex = 0
  201. %% ,name = ""
  202. %% ,vip_lv = 0
  203. %% ,sup_vip = 0
  204. %% ,server_num = 0