源战役
您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

342 行
17 KiB

  1. %%%-------------------------------------------------------------------
  2. %%% @doc 宠物-头文件
  3. %%% Module : pet
  4. %%% Created : 2019-12-09
  5. %%% @Author : tyl
  6. %%%-------------------------------------------------------------------
  7. -define(PetOpenLv, 134). %% 宠物系统开放等级
  8. -define(REFRESH_THRESHOLD, 100). %% 排行榜公式替换阀值
  9. %% 宠物生活技能相关增益
  10. -define(PET_LIFE_SKILL_AUTO_DECOMPOSE_EQUIP, 1). %% 自动分解蓝色品质装备(前端处理)
  11. -define(PET_LIFE_SKILL_ARENA_POWER_ADD, 2). %% 排位赛战力加成5%
  12. -define(PET_LIFE_SKILL_CONVOY_RE_BACK, 3). %% 护送双倍找回
  13. -define(PET_LIFE_SKILL_GUILD_ORDER_ADD, 4). %% 拼单邀请社团助手额外增加20%收益
  14. -define(PET_LIFE_SKILL_ARENA_FAIL_COMPENSATION, 5). %% 排位赛失败不损失奖励
  15. -define(PET_LIFE_SKILL_CONVOY_PROTECT_ADD, 6). %% 护送庇护次数+1
  16. -define(PET_LIFE_SKILL_EQUIP_RISE_STAR_ADD, 7). %% 装备进化成功率提升5%
  17. -define(PET_LIFE_SKILL_BEACH_VOTE_ADD, 8). %% 舞动温泉初始点赞次数+5
  18. -define(PET_LIFE_SKILL_AUTO_DECOMPOSE_WARSOUL, 9). %% 自动分解3星战魂->供养魂(前端处理)
  19. -define(PET_LIFE_SKILL_ARENA_QUICK_KILL, 10). %% 排位赛中直接秒杀低排位对手
  20. -define(PET_LIFE_SKILL_CHILD_VOTE_ADD, 11). %% 宝宝每日给同一玩家点赞次数+1
  21. -define(PET_LIFE_SKILL_GLAMOUR_FUND_ADD, 12). %% 社团赛马初始资金增加200
  22. -define(PET_LIFE_SKILL_NUCLEON_WASH_FREE, 13). %% 圣物洗练每日免费一次
  23. -define(PET_LIFE_SKILL_DAILY_HONOUR_ADD, 14). %% 每日名望券获取上限增加100
  24. -define(PET_LIFE_SKILL_DESERTED_REVIVE_FREE, 15). %% 每日混乱星域免费复活3次
  25. -define(PET_LIFE_SKILL_GOLD_EXCHANGE_DOUBLE, 16). %% 彩钻兑换交易券10%概率暴击,收益翻倍
  26. -define(PET_LIFE_SKILL_DUN_EXP_DROP_SUM_TIME,17). %% 冒险挂机累计时间提高到24小时
  27. -define(PET_LIFE_SKILL_EQUIP_STRENGTH_ADD, 18). %% 装备强化成功率提升2%
  28. -define(PET_LIFE_SKILL_CAPSULE_EGG_FREE_TIME, 19). %% 龙神扭蛋免费次数CD减少到12小时
  29. -define(PET_LIFE_SKILL_GOD_SUMMON_FREE, 20). %% 神座普通召唤每天免费1次
  30. -define(PET_LIFE_SKILL_GALAXY_STORE_REFRESH_FREE, 21). %% 星辰灵市每天免费刷新1次
  31. -define(ACTION_ACTIVE, 1). %% 激活宠物
  32. -define(ACTION_UPGRADE, 2). %% 宠物进化
  33. %% 宝石镶嵌
  34. -define(SKILL_DIAMOND_SLOT_LIST, [1,2,3,4]). %% 技能石槽位列表
  35. -define(PET_DIAMOND_UNLOAD, 0). %% 卸下当前宝石
  36. -define(PET_DIAMOND_INLAY, 1). %% 镶嵌宝石
  37. %% 宠物跟随状态
  38. -define(PET_UNFOLLOW, 0). %% 非跟随状态
  39. -define(PET_FOLLOW, 1). %% 跟随状态
  40. -define(SKILL_SLOT_LIST, [1,2,3,4]). %% 技能槽位列表
  41. %%-define(LIFE_SKILL, 1). %% 生活技能
  42. %%-define(PASSIVE_SKILL, 2). %% (被动)战斗技能
  43. %% 技能天赋类型细分
  44. -define(SKILL_LIFE, 0). %% 生活技能
  45. -define(SKILL_ATTR, 1). %% 玩家被动(属性)技能
  46. -define(SKILL_BATTLE, 2). %% 宠物技能(其实配的也是被动,宠物主战加在玩家身上)
  47. %% 主战位宠物拿战斗技能
  48. -define(PET_BATTLE_SKILL_SLOT, 1).
  49. %% 每天投票次数
  50. -define(DAY_VOTE_PET_COUNT, 3).
  51. %% 战力榜长度
  52. -define(PET_POWER_RANK_LEN, 8).
  53. %% 觉醒需要星级基础
  54. -define(PET_AWAKEN_NEED_STAR, 10).
  55. %% 普通支援加成比例
  56. -define(PET_NORMAL_SUPPORT_RATIO, 0.03).
  57. -define(SUPPORT_TIMES_ENOUGH, 0). %% 支援次数足够
  58. -define(SUPPORT_TIMES_OVER, 1). %% 支援次数已经达到上限
  59. -define(PET_SUPPORT_NOT_LOGIN, 0). %% 还未登录过
  60. -define(PET_SUPPORT_HAS_LOGIN, 1). %% 已经登录过
  61. %% 宠物Ets表数据
  62. -define(ETS_PET, ets_pet).
  63. -record(ets_role_pets, {
  64. rid = 0 %% 玩家Id
  65. ,pets = [] %% 宠物列表[#ets_pet_info{}],与status_pet里的pets不同,只保留部分字段
  66. }).
  67. -record(ets_pet_info, {
  68. pet_id = 0 %% 宠物Id
  69. ,pet_star = 0 %% 宠物星级
  70. ,pet_lv = 0 %% 宠物等级
  71. ,pet_attr = 0 %% 宠物属性
  72. ,pet_power = 0 %% 宠物战力
  73. }).
  74. %% 宠物基础数据
  75. -record(status_pet, {
  76. pets = [] %% 领养的宠物列表 [#pet_info{}...]
  77. ,follow_pet = 0 %% 跟随的宠物Id
  78. ,sum_pet_star = 0 %% 宠物总星级
  79. ,life_skills = [] %% 生活技能列表 格式:[SkillId1,SkillId2...]
  80. ,passive_skills = [] %% (被动)战斗技能列表,附加玩家身上 格式:[SkillId1,SkillId2...]
  81. ,battle_skills = [] %% 宠物战斗技能,主副战宠物 格式:[SkillId1,SkillId2...]
  82. ,attr_list = [] %% 所有宠物属性列表
  83. ,power = 0 %% 总战力
  84. ,extra_power = 0 %% 额外战力,目前有战力提供的额外战力
  85. ,open_support_slots = 0 %% 已经开启的槽位列表
  86. ,support_list = [] %% 宠物助战槽位 [#pet_support_slot{}...]
  87. ,vote_list = [] %% 宠物投票[pet_id...]
  88. ,support_times = 0 %% 当天宠物投票次数,限制在3次以内(为使统计数据尽量准确)
  89. ,receive_pet_list = [] %% 已领取的昨日投票榜奖励
  90. }).
  91. %% 单只宠物数据
  92. -record(pet_info, {
  93. pet_id = 0 %% 宠物Id
  94. ,pet_star = 0 %% 宠物星级
  95. ,pet_lv = 0 %% 宠物培养等级
  96. ,pet_exp = 0 %% 宠物当前培养经验值
  97. ,pet_life_skills = [] %% 生活技能列表 格式:[SkillId1,SkillId2...]
  98. ,pet_attr_skills = [] %% 属性技能列表 格式:[SkillId1,SkillId2...]
  99. ,pet_battle_skills = [] %% 战斗技能列表 格式:[SkillId1,SkillId2...]
  100. ,diamond_slots = [] %% 技能宝石槽位 [{SlotId,GoodsId}...]
  101. ,pet_attr = [] %% 属性列表
  102. ,pet_power = 0 %% 战力
  103. ,pet_extra_power = 0 %% 额外战力,目前有战力技能提供的战力
  104. ,adopt_time = 0 %% 领养的时间
  105. ,support_add_ratio = 0 %% 宠物助战属性增长比率 万分比的整数部分
  106. ,is_awaken = 0 %% 是否已觉醒
  107. ,old_power = 0 %% 前一次刷新的战力(也可以看做历史最高战力)
  108. %% ,pet_support_times = 0 %% 当天宠物全服支援次数
  109. }).
  110. %% 玩家宠物声援槽位数据
  111. -record(pet_support_slot, {
  112. slot_id = 0 %% 声援槽位
  113. ,pet_id = 0 %% 宠物Id
  114. }).
  115. %% 宠物全服战力排名
  116. -record(pet_power_rank_state, {
  117. rank_info_list = [] %% 排名信息 [#pet_power_rank_info{}...]
  118. ,yest_rank_info_list = [] %% 昨天排名信息 [#pet_power_rank_info{}] 只读
  119. ,center_rank_length = 0 %% 跨服榜单长度(进入跨服后 连接跨服/每天0点更新) 只读
  120. }).
  121. %% 宠物跨服战力排名
  122. -record(pet_power_rank_center_state, {
  123. rank_info_map = #{} %% 排名信息 #{zone=>[#pet_rank_info{}...]}
  124. ,yest_rank_info_map = #{} %% 昨天排名信息 #{zone=>[#pet_rank_info{}]} 只读
  125. ,tmp_rank_info_map = #{} %% #{zone=>[#pet_rank_info{}...]} 用于存放各个服上报的临时数据(有可能只是部分的服)
  126. ,tmp_up_servers = #{} %% #{zone=>[srv_id...]}已经上报的数据的区服(避免重复上报叠加数据)
  127. ,rezone_info_map = #{} %% #{old_zone=>[stage,new_zone]...} 当天重新分区数据,只存内存,4点结算时删除
  128. }).
  129. %% 游戏服上报跨服数据结构
  130. -record(up_pet_info, {
  131. pet_id = 0 %% 宠物Id
  132. ,player_id = 0 %% 玩家Id
  133. ,sex = 0 %% 玩家性别
  134. ,player_name = "" %% 玩家名称
  135. ,player_power = 0 %% 玩家战力
  136. ,vip = 0
  137. ,sup_vip = 0
  138. ,dress_id = 0
  139. ,photo_id = 0
  140. ,server_id = 0 %% 服务器Id(跨服使用)
  141. ,server_num = 0 %% 服务器Num(跨服使用)
  142. ,sum_power = 0 %% 总战力
  143. }).
  144. %% 宠物排名信息(old: 已废弃逻辑)
  145. -record(pet_rank_info, {
  146. rank = 0 %% 排名(如果是今天排行为0,由前端自行排序)
  147. ,pet_id = 0 %% 宠物Id
  148. ,player_id = 0 %% 玩家Id
  149. ,player_name = "" %% 玩家名称
  150. ,player_power = 0 %% 玩家战力
  151. ,support_count = 0 %% 支援人数
  152. ,support_ratio = 0 %% 声援率 万分比的整数部分
  153. }).
  154. %% 游戏服宠物战力榜
  155. -record(pet_power_rank_info, {
  156. rank = 0 %% 排名
  157. ,pet_id = 0 %% 宠物Id
  158. ,player_id = 0 %% 玩家Id
  159. ,pet_power = 0 %% 宠物战力(游戏服使用)
  160. ,sex = 0 %% 玩家性别
  161. ,player_name = "" %% 玩家名称
  162. ,player_power = 0 %% 玩家战力
  163. ,vip = 0
  164. ,sup_vip = 0
  165. ,dress_id = 0
  166. ,photo_id = 0
  167. ,server_id = 0 %% 最高战力玩家服务器Id(跨服使用)
  168. ,server_num = 0 %% 最高战力玩家服务器Num(跨服使用)
  169. ,sum_power = 0 %% 总战力
  170. }).
  171. %% ==================================== 后台配置 ===========================
  172. %% 宠物基础配置表
  173. -record(pet_cfg, {
  174. pet_id = 0 %% 宠物Id
  175. ,pet_name = "" %% 宠物名称
  176. ,pet_star = 0 %% 星级
  177. ,rare_degree = 0 %% 稀有度 1,普通 2,稀有 3,极品
  178. ,color = 0 %% 品质色
  179. ,pet_race = 0 %% 宠物种族
  180. ,attr_list = 0 %% 成长属性
  181. ,is_native_pet = 0 %% 是否原始宠物
  182. ,cost = [] %% 激活和进化碎片需求
  183. ,figure_id = 0 %% 形象资源Id
  184. ,illus_range = 0 %% 图鉴序列
  185. ,open_day = 0 %% 开启天数
  186. ,open_time = 0 %% 开启时间
  187. }).
  188. %% 宠物升级配置表
  189. -record(pet_grow_up_cfg, {
  190. pet_rare_degree = 0 %% 宠物稀有度(同稀有度升级逻辑相同)
  191. ,level = 0 %% 等级
  192. ,need_exp = 0 %% 升级需要经验值
  193. }).
  194. %% 种族经验道具表
  195. -record(pet_race_material_cfg, {
  196. race = 0 %% 种族
  197. ,cost_material = [] %% 消耗材料
  198. }).
  199. %% 宠物故事配置表
  200. -record(pet_story_cfg, {
  201. pet_id = 0 %% 宠物Id
  202. ,para_id = 0 %% 段落Id
  203. ,star = 0 %% 需求星级
  204. ,title = "" %% 正文标题
  205. ,content = "" %% 正文内容
  206. }).
  207. %% 宠物技能配置表
  208. -record(pet_skill_cfg, {
  209. pet_id = 0 %% 宠物Id
  210. ,skill_slot = 0 %% 槽位
  211. ,skill_talent_type = 0 %% 天赋类别
  212. ,skill_talent_id = 0 %% 天赋Id
  213. ,skill_ratio = 0 %% 技能系数(生活技能),战斗技能系数默认为0
  214. ,name = "" %% 技能名称
  215. ,desc = "" %% 技能描述
  216. ,active_star = 0 %% 开放星级
  217. }).
  218. %% 宠物宝石栏配置表
  219. -record(pet_diamond_storage_cfg, {
  220. diamond_id = 0 %% 宝石Id
  221. ,diamond_type = "" %% 宝石类型
  222. ,need_race = 0 %% 对应种族
  223. ,add_attr_list = [] %% 属性加成列表
  224. ,diamond_name = "" %% 宝石名称
  225. ,diamond_desc = "" %% 宝石效果描述
  226. }).
  227. %% 宠物声援阵位配置表
  228. -record(pet_support_slot_cfg, {
  229. slot_id = 0 %% 声援阵位
  230. ,attr_add_ratio = 0 %% 宠物属性加成比例
  231. ,open_sum_star = 0 %% 开放总星级(所有宠物累计星级)
  232. }).
  233. %% 宠物人气榜配置表
  234. -record(pet_support_rank_cfg, {
  235. rank = 0 %% 排名
  236. ,top_designation= 0 %% 头名玩家称号
  237. ,server_reward = [] %% 全服奖励
  238. ,pet_expression = "" %% 宠物随机发言
  239. }).
  240. %% 宠物觉醒配置表
  241. -record(pet_awaken_cfg, {
  242. pet_id = 0 %% 宠物Id
  243. ,need_star = 0 %% 需求星级
  244. ,cost_material = [] %% 需求材料
  245. ,add_attr = [] %% 属性加成
  246. ,skill_list = [] %% 技能替换
  247. }).
  248. %% 宠物宝石合成配置表
  249. -record(pet_stone_compound_cfg, {
  250. stone_id = 0 %% 宠物技能石Id
  251. ,compound_list = [] %% 合成列表
  252. }).
  253. %% 常量配置(直接后台生成配置,这里不配格式了)
  254. %% ============================= 数据库操作 ==================================
  255. %% 宠物基础信息
  256. -define(SQL_INSERT_PET, <<"REPLACE INTO role_pet (`role_id`, `pet_id`, `pet_star`, `pet_lv`, `pet_exp`, `adopt_time`,`is_awaken`, `old_power`)
  257. VALUES (~p, ~p, ~p, ~p, ~p, ~p, ~p, ~p)">>).
  258. -define(SQL_SELECT_PET, <<"SELECT `pet_id`, `pet_star`, `pet_lv`, `pet_exp`, `adopt_time`, `is_awaken`, `old_power` FROM role_pet WHERE `role_id` = ~p">>).
  259. %% 宠物培养
  260. -define(SQL_UPDATE_PET, <<"UPDATE role_pet SET `pet_star` = ~p WHERE `role_id` = ~p and `pet_id` = ~p">>).
  261. -define(SQL_UPDATE_PET_LV, <<"UPDATE role_pet SET `pet_lv` = ~p, `pet_exp` = ~p WHERE `role_id` = ~p and `pet_id` = ~p">>).
  262. -define(SQL_UPDATE_PET_AWAKEN, <<"UPDATE role_pet SET `is_awaken` = 1 WHERE `role_id` = ~p and `pet_id` = ~p">>).
  263. -define(SQL_UPDATE_PET_POWER, <<"UPDATE role_pet SET `old_power` = ~p WHERE `role_id` = ~p and `pet_id` = ~p">>).
  264. %% 宠物技能相关
  265. -define(SQL_SAVE_PET_SKILL_DIAMOND, <<"REPLACE INTO pet_skill_diamond (`role_id`, `pet_id`, `diamond_slot`, `diamond_id`) VALUES (~p, ~p, ~p, ~p)">>).
  266. -define(SQL_SELECT_PET_SKILL_DIAMOND, <<"SELECT `diamond_slot`, `diamond_id` FROM pet_skill_diamond WHERE `role_id` = ~p AND `pet_id` = ~p">>).
  267. %%-define(SQL_DELETE_PET_SKILL_DIAMOND, <<"DELETE FROM pet_skill_diamond WHERE `role_id` = ~p and `pet_id` = ~p and `diamond_slot` = ~p">>).
  268. -define(SQL_UPDATE_PET_SKILL_DIAMOND, <<"REPLACE INTO pet_skill_diamond (`role_id`, `pet_id`, `diamond_slot`, `diamond_id`) VALUES (~p, ~p, ~p, ~p)">>).
  269. %% 宠物助战
  270. -define(SQL_SAVE_PET_SUPPORT_INFO, <<"REPLACE INTO pet_support_info (`role_id`, `slot_id`, `pet_id`, `time`) VALUES (~p, ~p, ~p, ~p)">>).
  271. -define(SQL_SELECT_PET_SUPPORT_INFO, <<"SELECT `slot_id`, `pet_id` FROM pet_support_info WHERE `role_id` = ~p">>).
  272. -define(SQL_UPDATE_PET_SUPPORT_PET, <<"UPDATE pet_support_info SET `pet_id` = ~p, `time` = ~p WHERE `role_id` = ~p AND `slot_id` = ~p">>).
  273. -define(SQL_UPDATE_PET_SUPPORT_SLOT, <<"UPDATE pet_support_info SET `slot_id` = ~p, `time` = ~p WHERE `role_id` = ~p AND `pet_id` = ~p">>).
  274. -define(SQL_BATCH_SAVE_PET_SUPPORT_SLOT, <<"REPLACE INTO pet_support_info (`role_id`, `slot_id`, `pet_id`, `time`) VALUES ~ts">>).
  275. -define(SQL_BATCH_SAVE_PET_SUPPORT_SLOT_VALUE, <<"(~p, ~p, ~p, ~p)">>).
  276. %% 宠物投票排行
  277. -define(SQL_SAVE_PET_SUPPORT_RANK, <<"REPLACE INTO pet_support_rank (`pet_id`, `role_id`, `support_count`, `yest_role_id`, `yest_support_count`, `time`) VALUES (~p, ~p, ~p, ~p, ~p, ~p)">>).
  278. -define(SQL_SELECT_PET_SUPPORT_RANK, <<"SELECT `pet_id`, `role_id`, `support_count` FROM pet_support_rank">>).
  279. -define(SQL_SELECT_PET_SUPPORT_OLD_RANK, <<"SELECT `pet_id`, `yest_role_id`, `yest_support_count` FROM pet_support_rank">>).
  280. -define(SQL_UPDATE_PET_SUPPORT_COUNT, <<"UPDATE pet_support_rank SET `role_id` = ~p, `support_count` = ~p WHERE `pet_id` = ~p">>).
  281. -define(SQL_UPDATE_PET_SUPPORT_RANK_INFO, <<"UPDATE pet_support_rank SET `role_id` = ~p, `support_count` = ~p, `yest_role_id` = ~p, `yest_support_count` = ~p WHERE `pet_id` = ~p">>).
  282. -define(SQL_UPDATE_PET_SUPPORT_RANK_POWER, <<"UPDATE pet_support_rank SET `role_id` = ~p WHERE `pet_id` = ~p">>).
  283. %% 宠物战力排行
  284. -define(SQL_SAVE_PET_POWER_RANK, <<"REPLACE INTO pet_power_rank (`pet_id`, `role_id`, `role_pet_power`, `sum_power`, `yest_role_id`, `yest_sum_power`, `time`) VALUES (~p, ~p, ~p, ~p, ~p, ~p, ~p)">>).
  285. -define(SQL_SELECT_PET_POWER_RANK, <<"SELECT `pet_id`, `role_id`, `role_pet_power`, `sum_power` FROM pet_power_rank">>).
  286. -define(SQL_SELECT_PET_POWER_OLD_RANK, <<"SELECT `pet_id`, `yest_role_id`, `yest_sum_power` FROM pet_power_rank">>).
  287. -define(SQL_UPDATE_PET_POWER_RANK_POWER, <<"UPDATE pet_power_rank SET `role_id` = ~p, `sum_power` = ~p WHERE `pet_id` = ~p">>).
  288. -define(SQL_UPDATE_PET_POWER_RANK_INFO, <<"UPDATE pet_power_rank SET `yest_role_id` = ~p, `yest_sum_power` = ~p WHERE `pet_id` = ~p">>).
  289. -define(SQL_UPDATE_PET_POWER_RANK_ROLE, <<"UPDATE pet_power_rank SET `role_id` = ~p WHERE `pet_id` = ~p">>).
  290. %% 宠物战力跨服排行(只需要记录昨日的数据,今天数据由游戏服上报)
  291. -define(SQL_SAVE_PET_POWER_CENTER_RANK, <<"REPLACE INTO pet_power_center_rank (`zone_id`, `pet_id`, `role_id`,`sex`, `role_name`, `server_num`, `vip`, `sup_vip`, `dress_id`, `photo_id`, `sum_power`, `time`) VALUES ~ts">>).
  292. -define(SQL_SAVE_PET_POWER_CENTER_RANK_VALUE, <<"(~p, ~p, ~p, ~p, '~ts', ~p, ~p, ~p, ~p, ~p, ~p, ~p)">>).
  293. -define(SQL_SELECT_PET_POWER_CENTER_RANK, <<"SELECT `zone_id`, `pet_id`, `role_id`, `sex`, `role_name`, `server_num`, `vip`, `sup_vip`, `dress_id`, `photo_id`, `sum_power` FROM pet_power_center_rank">>).
  294. %% 玩家宠物投票数据:投票次数,宠物列表,领取奖励列表
  295. -define(SQL_SAVE_PET_VOTE_INFO, <<"REPLACE INTO pet_vote_info (`role_id`, `vote_count`, `pet_list`, `receive_pet_list`) VALUES (~p, ~p, '~ts', '~ts')">>).
  296. -define(SQL_SELECT_PET_VOTE_INFO, <<"SELECT `vote_count`, `pet_list`, `receive_pet_list` FROM pet_vote_info WHERE `role_id` = ~p">>).
  297. -define(SQL_UPDATE_PET_VOTE_COUNT, <<"UPDATE pet_vote_info SET `vote_count` = ~p, `pet_list` = '~ts' WHERE `role_id` = ~p">>).
  298. -define(SQL_UPDATE_PET_VOTE_RECEIVE_LIST, <<"UPDATE pet_vote_info SET `receive_pet_list` = '~ts' WHERE `role_id` = ~p">>).
  299. -define(SQL_DELETE_PET_VOTE_INFO, <<"TRUNCATE table pet_vote_info">>).