%%%------------------------------------------------------------------- %%% @author tyl %%% @doc %%% 成就头文件 %%% @end %%% Created : 2021-03-15 %%%------------------------------------------------------------------- %% 由于成就数据可能比较庞大同时读写比较频繁,所以保存在字典 -define(P_ACHIEVEMENT, p_achievement). %% 成就特权等级 -define(ACHV_WEEKLY_RECEIVE_LV, 30). %% 每周领取奖励 -define(ACHV_EXCHANGE_LV, 37). %% 每日红钻兑交易券 -define(ACHV_FREE_SWEEP_TASK, 43). %% 免费扫荡日常任务 %% 章节/成就奖励领取状态 -define(RECEIVE_TYPE_NOT, 0). %% 未达条件,不可领取 -define(RECEIVE_TYPE_CAN, 1). %% 可领取 -define(RECEIVE_TYPE_YES, 2). %% 已领取 %% 成就进度 -define(ACHV_UNFINISH, 0). %% 未完成 -define(ACHV_FINISH, 1). %% 已完成未领取奖励 -define(ACHV_HAS_RECEIVE, 2). %% 已领取奖励 -define(ACHV_WSTATUS_SUCCESS, 1). %% 写入成功 -define(ACHV_WSTATUS_WAIT, 2). %% 待写入 -define(ACHV_SAVE_DB_CD, 10). %% 写入数据库CD时间 -define(NOTIFY_TYPE_FIN_COUNT, 1). %% 成就大类进度更新 -define(NOTIFY_SUB_TYPE_PROGRESS, 2). %% 成就小类成就进度更新 %% ----------------------------------------------------------------------------- %% @doc 成就大类 和 小类 @end %% ----------------------------------------------------------------------------- %% 成就大类 -define(ACHIEVEMENT_TYPE_1, 1). -define(ACHIEVEMENT_TYPE_2, 2). -define(ACHIEVEMENT_TYPE_3, 3). -define(ACHIEVEMENT_TYPE_4, 4). %% 成就进度数据,存进程字典中 -record(proc_achievement, { fin_count_map = #{}, %% #{type => count} 章节完成数量 now_id_map = #{}, %% #{{type, sub_type}=>id...} 各个小类对应的当前展示进度 finish_map = #{}, %% #{type => [#achievement{}...]} 已经领取完奖励的成就列表 progress_map = #{} %% #{type => [#achievement{}...]} 保存有进度数据的成就 }). %% 成就等级,存#player_status{} -record(role_achievement, { lv = 0, %% 等级 exp = 0, %% 经验值 attr = [], %% 属性列表 lv_reward_list = [] %% 等级奖励领取状态[{lv,status}] }). -record(achievement, { key = {}, %% {sub_type,id}-{子分类,成就id} progress = 0, %% 进度 status = 0, %% 奖励状态 0: 未达成 1: 已达成 2: 已领取 wtime = 0, %% 最近一次更新写入数据库的时间 wstatus = 0 %% 写入状态 1: 写入成功 2: 待写入 }). %% ---------------------------------- 后台配置表 ---------------------------------- %% 成就基础配置表 -record(achievement_cfg, { type = 0, %% 成就大类 sub_type = 0, %% 成就子类 id = 0, %% 成就Id name = "", %% 名称 desc = "", %% 描述 condition = 0, %% 达成条件 next_id = 0, %% 下一级成就Id reward = [], %% 奖励 exp = 0, %% 成就经验值 client_skip = {} %% 客户端跳转 ,task_position = 0 %% 任务栏展示位置 ,task_sequence = 0 %% 任务序列 }). %% 成就分类排序表 -record(achievement_seq_cfg, { type = 0 %% 成就大类 ,sub_type = 0 %% 成就小类 ,seq = 0 %% 顺序 }). %% 成就等级配置表 -record(achievement_stage_cfg, { stage = 0, %% 等级 need_exp = 0, %% 需耀经验 attr_list = [] }). %% 成就等级特权配置表 -record(stage_privilege_cfg, { stage = 0, %% 等级 name = "", desc = "", content = [], reward = [], icon = 0 %% 前端展示icon }). %% 成就常量配置表 -record(achievement_kv_cfg, { key = "", %% 键 value = "", %% 值 desc = "" %% 描述 }). %% --------------------------------------- db -------------------------------- %% 成就进度 -define(insert_achievement, <<"replace into `achievement`(`role_id`, `type`, `sub_type`, `id`, `progress`, `status`, `time`) values(~p, ~p, ~p, ~p, ~p, ~p, ~p)">>). -define(select_achievement, <<"select `type`, `sub_type`, `id`, `progress`, `status` from `achievement` where `role_id` = ~p">>). -define(update_achievement_progress, <<"update `achievement` set `progress` = ~p, `status` = ~p, `time` = ~p where `role_id` = ~p and `type` = ~p and `sub_type` = ~p and `id` = ~p">>). -define(update_achievement_status, <<"update `achievement` set `status` = ~p, `time` = ~p where `role_id` = ~p and `type` = ~p and `sub_type` = ~p and `id` = ~p">>). -define(batch_insert_achievement, <<"replace into `achievement`(`role_id`, `type`, `sub_type`, `id`, `progress`, `status`, `time`) values ~ts">>). -define(batch_insert_achievement_value, <<"(~p, ~p, ~p, ~p, ~p, ~p, ~p)">>). %% 成就等级 -define(insert_achievement_level, <<"replace into `achievement_lv`(`role_id`, `lv`, `exp`, `lv_reward_list`) values(~p, ~p, ~p, '~ts')">>). -define(select_achievement_level, <<"select `lv`, `exp`, `lv_reward_list` from `achievement_lv` where `role_id` = ~p limit 1">>). -define(update_achievement_level, <<"update `achievement_lv` set `lv` = ~p, `exp` = ~p where `role_id` = ~p">>). -define(update_achievement_lv_reward_status, <<"update `achievement_lv` set `lv_reward_list` = '~ts' where `role_id` = ~p">>).