|
|
- %%%-------------------------------------------------------------------
- %%% @doc 扭蛋-头文件
- %%% Module : capsule_egg.hrl
- %%% Created : 2020-06-24
- %%% @Author : tyl
- %%%-------------------------------------------------------------------
-
- %% 抽奖池类型
- -define(POOL_TYPE_DRAGON, 1). %% 龙神宝库
- -define(POOL_TYPE_WEAPON, 2). %% 炫武宝库
- -define(POOL_TYPE_CLOTH, 3). %% 华裳宝库
- -define(POOL_TYPE_LIST, [1,2,3]). %% 所有奖池
-
- %% 连抽次数
- -define(DRAW_TIMES_LIST, [1,10,50]).
- %% 单抽免费时间间隔
- -define(FREE_DRAW_INTERVAL, 86400).
-
- %% 目前所有档位 - 0/1/2/3
- %% 0/1/2档划分为一类,第3档划分为二类,其他档位不上电视
- %% 抽奖上电视最低档位
- -define(TV_GRADE, 3).
- %% 一类最低档位
- -define(TV_TOP, 2).
- %% 置顶档位列表
- -define(TV_TOP_LIST, [1,2]).
- %% 一二类记录限制条数(保底,具体看常量配置)
- -define(TV_ONE, data_capsule_egg:get_capsule_egg_kv_cfg(show_num_one)).
- -define(TV_TWO, data_capsule_egg:get_capsule_egg_kv_cfg(show_num_two)).
-
- %% 临时仓库将满提醒
- -define(CAPSULE_EGG_NULL_CELL, 50).
- %% 全服最大幸运值
- -define(SERVER_MAX_LUCKY, 999).
-
- %% 概率加成类型
- -define(RAND_ADD_PERSONAL, 1). %% 个人
- -define(RAND_ADD_SERVER, 2). %% 全服
-
- %% 积分商城兑换限制类型
- -define(SCORE_STORE_LIMIT_DAILY, 1). %% 每日次数限制
- -define(SCORE_STORE_LIMIT_WEEK, 2). %% 每周次数限制
- -define(SCORE_STORE_LIMIT_LIFE, 3). %% 终身次数限制
-
- %% 玩家扭蛋数据
- -record(status_capsule_egg, {
- capsule_egg_map = #{} %% 扭蛋数据(共三个抽奖池) #{pool_type => #capsule_egg_data{}}
- ,score = 0 %% 总抽奖积分,用于兑换积分商城物品
- }).
-
- %% 扭蛋抽奖数据
- -record(capsule_egg_data, {
- pool_type = 0 %% 抽奖池类型
- ,next_free_time = 0 %% 下次免费时间
- ,draw_times = 0 %% 抽奖次数(计算必得)
- ,lucky_score = 0 %% 个人幸运值, 计算动态权重(获得一二档之后清0)
- ,top_lucky_score= 0 %% 0当奖励的个人幸运值(获得0档之后清0)
- ,times_reward = [] %% 次数奖励[{times,status}...] status-1 已领取
- }).
-
- %% 全服扭蛋数据
- -record(capsule_egg_state, {
- lucky_score_map = #{} %% 全服幸运值 #{pool_type => server_score}
- ,show_lucky_map = #{} %% 展示给前端的全服幸运值 #{pool_type => show_score}
- ,record_map = #{} %% 二类(3档)抽奖记录 #{pool_type => [#draw_record{}]}
- ,top_record_map = #{} %% 一类(1/2档)抽奖记录 #{pool_type => [#draw_record{}]}
- ,weekly_refresh_ref = [] %% 周期清理定时器
- }).
-
- %% 抽奖记录
- -record(draw_record, {
- pool_type = 0 %% 抽奖池类型
- ,role_id = 0 %% 角色Id
- ,role_name = 0 %% 角色名称
- ,reward_cfg_id = 0 %% 奖励配置Id
- ,draw_time = 0 %% 抽奖时间
- }).
-
-
- %% ==================================== 后台配置 ===========================
- %% 扭蛋基础配置表
- -record(capsule_egg_kv_cfg, {
- id = 0 %% Id
- ,key = "" %% 主键
- ,value = "" %% 值
- ,remark = "" %% 备注
- }).
-
- %% 抽奖物品配置表
- -record(capsule_egg_reward_cfg, {
- id = 0 %% Id
- ,pool_type = 0 %% 奖池类型
- ,color = 0 %% 档位(品质)
- ,reward = [] %% 奖励列表
- ,weight = 0 %% 权重
- ,client_pos = 0 %% 客户端推荐展示位置
- }).
-
- %% 动态概率配置表
- -record(capsule_egg_ratio_cfg, {
- pool_type = 0 %% 奖池类型
- ,color = 0 %% 档位
- ,type = 0 %% 概率类型 1-个人 2-全服
- ,low = 0 %% 下限(抽奖次数)
- ,high = 0 %% 上限
- ,add_weight = 0 %% 权重加成
- }).
-
- %% 次数必得配置表
- -record(capsule_egg_times_cfg, {
- pool_type = 0 %% 奖池类型
- ,draw_times = 0 %% 抽奖次数
- ,select_color = 0 %% 必得物品品质
- }).
-
- %% 积分商城兑换配置表
- -record(capsule_egg_exchange_cfg, {
- id = 0 %% 序号
- ,reward = [] %% 兑换物品
- ,cost_score = 0 %% 消耗积分
- ,exchange_times = 0 %% 可兑换次数
- ,limit_type = 0 %% 限购类型 1-日 2-周 3-终身
- }).
-
- %% 次数奖励配置表
- -record(capsule_egg_times_reward_cfg, {
- pool_type = 0 %% 奖池类型
- ,draw_times = 0 %% 抽奖次数
- ,reward = [] %% 奖励
- }).
-
- %% ============================= 数据库操作 =============================
- %% 个人抽奖数据
- -define(SQL_INSERT_CAPSULE_EGG, <<"REPLACE INTO capsule_egg_data (`role_id`, `pool_type`, `next_free_time`, `draw_times`, `lucky_score`, `top_lucky_score`) VALUES (~p, ~p, ~p, ~p, ~p, ~p)">>).
- -define(SQL_SELECT_CAPSULE_EGG, <<"SELECT `pool_type`, `next_free_time`, `draw_times`, `lucky_score`, `top_lucky_score` FROM capsule_egg_data WHERE `role_id` = ~p">>).
- -define(SQL_UPDATE_CAPSULE_EGG, <<"UPDATE capsule_egg_data SET `next_free_time` = ~p, `draw_times` = ~p WHERE `role_id` = ~p AND `pool_type` = ~p">>).
- -define(SQL_UPDATE_FREE_TIME, <<"UPDATE capsule_egg_data SET `next_free_time` = ~p WHERE `role_id` = ~p AND `pool_type` = ~p">>).
- -define(SQL_UPDATE_DRAW_TIMES, <<"UPDATE capsule_egg_data SET `draw_times`= 0">>).
-
- %% 个人抽奖积分
- -define(SQL_INSERT_CAPSULE_EGG_PERSON_SCORE, <<"REPLACE INTO capsule_egg_person_score (`role_id`, `score`) VALUES (~p, ~p)">>).
- -define(SQL_SELECT_CAPSULE_EGG_PERSON_SCORE, <<"SELECT `score` FROM capsule_egg_person_score WHERE `role_id` = ~p LIMIT 1">>).
-
- %% 全服抽奖幸运值积分
- -define(SQL_INSERT_CAPSULE_EGG_SERVER_LUCKY, <<"REPLACE INTO capsule_egg_server_score (`pool_type`, `score`, `show_score`) VALUES (~p, ~p, ~p)">>).
- -define(SQL_SELECT_CAPSULE_EGG_SERVER_LUCKY, <<"SELECT `pool_type`,`score`, `show_score` FROM capsule_egg_server_score">>).
-
- %% 0档奖励全服抽奖幸运值积分(暂时未使用)
- -define(SQL_INSERT_CAPSULE_EGG_TOP_SERVER_LUCKY, <<"REPLACE INTO capsule_egg_top_server_score (`pool_type`, `score`) VALUES (~p, ~p)">>).
- -define(SQL_SELECT_CAPSULE_EGG_TOP_SERVER_LUCKY, <<"SELECT `pool_type`,`score` FROM capsule_egg_top_server_score">>).
-
- %% 全服抽奖记录
- -define(SQL_INSERT_CAPSULE_EGG_DRAW_LOG, <<"REPLACE INTO capsule_egg_draw_log (`pool_type`, `role_id`, `reward_cfg_id`, `color`, `time`) VALUES (~p, ~p, ~p, ~p, ~p)">>).
- -define(SQL_BATCH_INSERT_CAPSULE_EGG_DRAW_LOG, <<"REPLACE INTO capsule_egg_draw_log (`pool_type`, `role_id`, `reward_cfg_id`, `color`, `time`) VALUES ~ts">>).
- -define(SQL_BATCH_INSERT_CAPSULE_EGG_DRAW_LOG_VALUE, <<"(~p, ~p, ~p, ~p, ~p)">>).
- -define(SQL_SELECT_CAPSULE_EGG_DRAW_LOG, <<"SELECT `pool_type`, `role_id`, `reward_cfg_id`, `color`, `time` FROM capsule_egg_draw_log WHERE `time` >= ~p AND `color` = 3 ORDER BY `time` desc LIMIT ~p">>).
- -define(SQL_SELECT_TOP_CAPSULE_EGG_DRAW_LOG, <<"SELECT `pool_type`, `role_id`, `reward_cfg_id`, `color`, `time` FROM capsule_egg_draw_log WHERE `time` >= ~p AND `color` < 3 ORDER BY `time` desc LIMIT ~p">>).
-
- %% 次数奖励
- -define(SQL_INSERT_CAPSULE_EGG_TIMES_REWARD, <<"REPLACE INTO capsule_egg_times_reward (`role_id`, `pool_type`, `draw_times`, `status`) VALUES (~p, ~p, ~p, ~p)">>).
- -define(SQL_SELECT_CAPSULE_EGG_TIMES_REWARD, <<"SELECT `draw_times`, `status` from capsule_egg_times_reward WHERE `role_id` = ~p AND `pool_type` = ~p">>).
- -define(SQL_DELETE_CAPSULE_EGG_TIMES_REWARD, <<"TRUNCATE table capsule_egg_times_reward">>).
-
- %% 查询玩家名称
- -define(SQL_SELECT_PLAYER_NAME, <<"select nickname from player_low where id = '~w' limit 1">>).
-
- %% capsule_egg_data, capsule_egg_person_score, capsule_egg_server_score, capsule_egg_draw_log
|