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

246 lines
9.8 KiB

  1. %%%-------------------------------------------------------------------
  2. %%% @author liushl
  3. %%% @doc
  4. %%%
  5. %%% @end
  6. %%%-------------------------------------------------------------------
  7. -author("liushl").
  8. %%%-------------------------------------------------------------------
  9. %%% @doc
  10. %%% 常量定义
  11. %%% @end
  12. %%%-------------------------------------------------------------------
  13. %% 比赛阶段
  14. -define(BC_STAGE_IDLE, 0). %% 未开始
  15. -define(BC_STAGE_SIGN, 1). %% 报名阶段
  16. -define(BC_STAGE_PRE, 2). %% 预赛海选
  17. -define(BC_STAGE_TOP_16, 3). %% 16进8
  18. -define(BC_STAGE_TOP_8, 4). %% 8进4
  19. -define(BC_STAGE_TOP_4, 5). %% 4进2
  20. -define(BC_STAGE_TOP_2, 6). %% 决赛
  21. -define(BC_STAGE_CHAMPION,7). %% 冠军专用
  22. -define(BC_MASK, 1).
  23. %% 每天活动开始时间
  24. -define(BC_BEGIN_TIME, {0, 0, 0}).
  25. %% 总决赛活动结束时间
  26. -define(BC_END_TIME, {23, 55, 0}).
  27. %% 游戏服大于该轮次时,进入跨服模式
  28. -define(BC_LOCAL_PATTERN_ROUND, 1).
  29. %% 阶段持续时间:天
  30. -define(BC_STAGE_DAY(Stage),
  31. case Stage of
  32. ?BC_STAGE_SIGN -> 1;
  33. ?BC_STAGE_PRE -> 2;
  34. ?BC_STAGE_TOP_16 -> 1;
  35. ?BC_STAGE_TOP_8 -> 1;
  36. ?BC_STAGE_TOP_4 -> 1;
  37. ?BC_STAGE_TOP_2 -> 1
  38. end).
  39. %% 根据星期获得活动阶段和阶段开启星期
  40. -define(BC_STAGE_BY_WEEK(Week),
  41. case Week of
  42. 1 -> {?BC_STAGE_SIGN, 1};
  43. 2 -> {?BC_STAGE_PRE, 2};
  44. 3 -> {?BC_STAGE_PRE, 2};
  45. 4 -> {?BC_STAGE_TOP_16, 4};
  46. 5 -> {?BC_STAGE_TOP_8, 5};
  47. 6 -> {?BC_STAGE_TOP_4, 6};
  48. 7 -> {?BC_STAGE_TOP_2, 7}
  49. end).
  50. %% 阶段选取人数
  51. -define(BC_STAGE_ROLES(Stage),
  52. case Stage of
  53. ?BC_STAGE_SIGN -> data_beauty_contest:get_beauty_contest_kv(act_role_number);
  54. ?BC_STAGE_PRE -> 16;
  55. ?BC_STAGE_TOP_16 -> 8;
  56. ?BC_STAGE_TOP_8 -> 4;
  57. ?BC_STAGE_TOP_4 -> 2;
  58. ?BC_STAGE_TOP_2 -> 1
  59. end).
  60. %% 参赛数据
  61. %% 用四个参数表示一条参赛数据
  62. %%// {衣服时装,0, 时装id,颜色}
  63. %%// {头饰, 0, 时装id,颜色}
  64. %%// 武器/坐骑/翅膀/宝具:
  65. %%// {珍宝,1,珍宝外观id,星级}
  66. %%// {进阶,2,阶数,0}
  67. %%// {时装,3,时装id,颜色}
  68. %%type:int8 // 类型1-6
  69. %%value1:int8 // 类型1-2(0)|类型3-6(幻化类型:1珍宝2进阶阶数3时装)
  70. %%value2:int32 // 类型1-2(时装id)|类型3-6(幻化类型1:珍宝外观id/幻化类型2:进阶阶数/幻化类型3:时装id)
  71. %%value3:int8 // 类型1-2(时装颜色id)|类型3-6(幻化类型1:珍宝星级/幻化类型2:0/幻化类型3:时装颜色id)
  72. %%}
  73. -define(BC_DATA_CLOTH, 1). %% 衣服时装
  74. -define(BC_DATA_HEAD, 2). %% 头饰
  75. -define(BC_DATA_WEAPON, 3). %% 武器
  76. -define(BC_DATA_HORSE, 4). %% 坐骑
  77. -define(BC_DATA_WING, 5). %% 翅膀
  78. -define(BC_DATA_PEARL, 6). %% 宝具
  79. -define(BC_DATA_HAIR, 7). %% 发型
  80. -define(BC_FOSTER_SKIN, 1). %% 珍宝皮肤
  81. -define(BC_FOSTER_STAGE, 2). %% 进阶外观
  82. -define(BC_FOSTER_FASHION, 3). %% 时装
  83. %% 计数器
  84. -define(BC_COUNTER_DAILY_VOTE, 1).
  85. %%%-------------------------------------------------------------------
  86. %%% @doc
  87. %%% 数据结构
  88. %%% @end
  89. %%%-------------------------------------------------------------------
  90. %% 参赛人员
  91. -record(beauty_contest_role, {
  92. role_id = 0
  93. , zone_id = 0
  94. , server_id = 0
  95. , server_num = 0
  96. , picture = undefined
  97. , fashion_num = 0 %% 时装数量
  98. , contest_data = [] %% 竞赛数据
  99. , vote = 0 %% 票数
  100. , pick_counts = 0 %% 挑选次数
  101. , time = 0 %% 投票时间
  102. , update = true %% 更新标识:投票/个人信息变更/阶段结算/合服合区
  103. %% 最后阶段, 默认进入了海选
  104. , stage = ?BC_STAGE_PRE
  105. , origin_rank = 0 %% 初始排名(海选赛进16强的初始排名,赛程期间不变)
  106. , rank = 0 %% 最终排名
  107. }).
  108. %% 报名人员
  109. -record(beauty_contest_sign, {
  110. role_id = 0
  111. , contest_data = [] %% 竞赛数据
  112. , sign_award = 0 %% 是否报名领奖
  113. }).
  114. %% 玩家数据
  115. -record(role_beauty_contest, {
  116. vote_log = [] %% 投票日志:[{name, time}]
  117. }).
  118. -record(beauty_contest, {
  119. cls_type = 0
  120. , act_data = #{} %% 活动数据
  121. , begin_time = 0 %% 活动开始时间
  122. , end_time = 0 %% 活动结束时间
  123. , stage = 0 %% 活动阶段
  124. , stage_begin = 0 %% 阶段开始时间
  125. , stage_end = 0 %% 阶段结束时间
  126. , ref_stage = undefined %% 阶段切换定时器-结算当前阶段/进入下一阶段
  127. , ref_save = undefined %% 定时保存玩家数据
  128. , round = 0 %% 本服有效:轮次,每次开启+1,第一轮为本服模式
  129. , sign_roles = #{} %% 本服有效:所有报名的玩家。比赛阶段,默认每个玩家都报名了
  130. , vote_candidates = #{} %% 本服有效:玩家的投票候选:[{RoleId, [A,B]}]
  131. %% 玩家每次请求投票候选后,记录下来,直到玩家投票才进行更新
  132. , act_log = [] %% 本服有效:上期数据,每个服务器都记录一份数据
  133. }).
  134. -record(beauty_contest_act, {
  135. zone_id = 0
  136. , members = [] %% 全部玩家
  137. }).
  138. %%%-------------------------------------------------------------------
  139. %%% @doc
  140. %%% DB
  141. %%% @end
  142. %%%-------------------------------------------------------------------
  143. %% 加载参赛人员-跨服
  144. -define(SQL_BC_LOAD_ACT_ROLE,
  145. <<"SELECT `role_id`,`zone_id`,`server_id`,`server_num`,`name`,`lv`,`sex`,`vip`,`sup_vip`,`career`,`turn`,`picture`,`picture_dress`,`contest_data`,`vote`,`pick_counts`,`time`,`stage`,`rank`,`origin_rank`,`fashion_num` FROM beauty_contest_role">>).
  146. %% 保存参赛人员-批量-跨服
  147. -define(SQL_BC_SAVE_ACT_ROLE_BATCH,
  148. <<"REPLACE INTO beauty_contest_role(`role_id`,`zone_id`,`server_id`,`server_num`,`name`,`lv`,`sex`,`vip`,`sup_vip`,`career`,`turn`,`picture`,`picture_dress`,`contest_data`,`vote`,`pick_counts`,`time`,`stage`,`rank`,`origin_rank`,`fashion_num`) VALUES ~ts">>).
  149. %% 清除参赛人员-跨服
  150. -define(SQL_BC_DELETE_ACT_ROLE,
  151. <<"DELETE FROM beauty_contest_role WHERE zone_id in (~ts)">>).
  152. %% 清空参赛人员-跨服
  153. -define(SQL_BC_CLEAN_ACT_ROLE,
  154. <<"TRUNCATE beauty_contest_role">>).
  155. %% 加载参赛人员-本服
  156. -define(SQL_BC_LOAD_ACT_ROLE_LOCAL,
  157. <<"SELECT `role_id`,`contest_data`,`vote`,`pick_counts`,`time`,`stage`,`rank`,`origin_rank` FROM beauty_contest_role_local">>).
  158. %% 保存参赛人员-批量-本服
  159. -define(SQL_BC_SAVE_ACT_ROLE_BATCH_LOCAL,
  160. <<"REPLACE INTO beauty_contest_role_local(`role_id`,`contest_data`,`vote`,`pick_counts`,`time`,`stage`,`rank`,`origin_rank`) VALUES ~ts">>).
  161. %% 清空参赛人员-本服
  162. -define(SQL_BC_CLEAN_ACT_ROLE_LOCAL,
  163. <<"TRUNCATE beauty_contest_role_local">>).
  164. %% 加载报名数据
  165. -define(SQL_BC_LOAD_SIGN,
  166. <<"SELECT role_id,contest_data,sign_award FROM beauty_contest_sign">>).
  167. %% 保存报名数据
  168. -define(SQL_BC_SAVE_SIGN_ONE,
  169. <<"REPLACE INTO beauty_contest_sign(role_id,contest_data,sign_award) VALUES(~p,'~ts',~p)">>).
  170. %% 清空报名数据
  171. -define(SQL_BC_CLEAN_SIGN, <<"TRUNCATE beauty_contest_sign">>).
  172. %% 加载投票记录
  173. -define(SQL_BC_LOAD_VOTE_LOG,
  174. <<"SELECT vote_name,time FROM beauty_contest_vote_log WHERE role_id=~p ORDER BY time DESC LIMIT 20">>).
  175. %% 保存一条投票记录
  176. -define(SQL_BC_SAVE_VOTE_LOG,
  177. <<"INSERT INTO beauty_contest_vote_log(role_id,vote_name,time) VALUES(~p,'~ts',~p)">>).
  178. %% 清空投票记录
  179. -define(SQL_BC_CLEAN_VOTE_LOG,
  180. <<"TRUNCATE beauty_contest_vote_log">>).
  181. %% 加载上期日志
  182. -define(SQL_BC_LOAD_ACT_LOG,
  183. <<"SELECT `rank`,`server_num`,`name`,`lv`,`sex`,`vip`,`sup_vip`,`career`,`turn`,`picture`,`picture_dress`,`contest_data`,`origin_rank`,`stage` FROM beauty_contest_log">>).
  184. %% 清空上期日志
  185. -define(SQL_BC_CLEAN_ACT_LOG, <<"TRUNCATE beauty_contest_log">>).
  186. %% 保存上期日志
  187. -define(SQL_BC_SAVE_ACT_LOG, <<"INSERT INTO beauty_contest_log(`rank`,`server_num`,`name`,`lv`,`sex`,`vip`,`sup_vip`,`career`,`turn`,`picture`,`picture_dress`,`contest_data`,`origin_rank`,`stage`) VALUES ~ts">>).
  188. %%%-------------------------------------------------------------------
  189. %%% @doc
  190. %%% 玩法配置
  191. %%% @end
  192. %%%-------------------------------------------------------------------
  193. %% 服务器基础开服天数:功能模块开放配置
  194. -define(BC_OPEN_TIME, lib_module:get_open_day(416)).
  195. %% 投票区人数
  196. -define(BC_RANK_LENGTH, data_beauty_contest:get_beauty_contest_kv(act_role_number)).
  197. %% 系统投票随机最大数
  198. -define(BC_SYS_VOTE_NUM, 5).
  199. -ifdef(DEV_SERVER).
  200. %% 系统投票间隔时间
  201. -define(BC_SYS_VOTE_TIME, 60).
  202. %% 保存玩家数据时间间隔
  203. -define(BC_SAVE_TIME, 60).
  204. -else.
  205. -define(BC_SYS_VOTE_TIME, 3600).
  206. -define(BC_SAVE_TIME, 3600).
  207. -endif.
  208. %% 报名奖励
  209. -define(BC_SIGN_AWARD, data_beauty_contest:get_beauty_contest_kv(signup_reward)).
  210. %% 投票普通奖励
  211. -define(BC_VOTE_NORMAL_AWARD, data_beauty_contest:get_beauty_contest_kv(vote_reward)).
  212. %% 投票额外奖励
  213. -define(BC_VOTE_EXTRA_AWARD, data_beauty_contest:get_beauty_contest_kv(sp_vote_reward)).
  214. %% 可投票次数
  215. -define(BC_VOTE_COUNTS(Stage),
  216. case Stage of
  217. ?BC_STAGE_PRE -> data_beauty_contest:get_beauty_contest_kv(daily_vote);
  218. ?BC_STAGE_TOP_16 -> data_beauty_contest:get_beauty_contest_kv(daily_vote);
  219. ?BC_STAGE_TOP_8 -> data_beauty_contest:get_beauty_contest_kv(daily_vote);
  220. ?BC_STAGE_TOP_4 -> data_beauty_contest:get_beauty_contest_kv(four_vote);
  221. ?BC_STAGE_TOP_2 -> data_beauty_contest:get_beauty_contest_kv(finals_vote);
  222. _ -> 0
  223. end).