%% ---------------------------------------------------------
|
|
%% Author: HHL
|
|
%% Created: 2014-6-7
|
|
%% Description: 副本纪录
|
|
%% --------------------------------------------------------
|
|
|
|
%% ----------------------- 副本类型 -----------------------
|
|
%% 新增类型注意可否设置助战状态
|
|
%% 0:普通副本、1:材料副本、2:经验副本、3:vip副本、4:爬塔副本、5:个人boss、6:讨伐副本、7:幻光副本、8:宠物副本、9:塔防副本、10:唤神副本、11:宝宝副本、12:星辰副本、13:主线任务副本、15:跨服沙盘、17:社团跑环协助副本、18:唤神体验副本、19古神系列-清剿血魔副本
|
|
-define(DUNGEON_TYPE_NORMAL, 0). % 普通副本
|
|
-define(DUNGEON_TYPE_MATERIAL, 1). % 材料副本
|
|
-define(DUNGEON_TYPE_EXP, 2). % 经验副本
|
|
-define(DUNGEON_TYPE_VIP, 3). % VIP副本
|
|
-define(DUNGEON_TYPE_TOWER, 4). % 爬塔副本
|
|
-define(DUNGEON_TYPE_PER_BOSS, 5). % 个人boss
|
|
-define(DUNGEON_TYPE_CRUSADE, 6). % 多人副本-讨伐副本
|
|
-define(DUNGEON_TYPE_VISUS, 7). % 幻光副本
|
|
-define(DUNGEON_TYPE_PET, 8). % 宠物副本
|
|
-define(DUNGEON_TYPE_GUARD, 9). % 守卫信标
|
|
-define(DUNGEON_TYPE_GOD, 10). % 唤神副本
|
|
-define(DUNGEON_TYPE_CHILD, 11). % 宝宝副本
|
|
-define(DUNGEON_TYPE_GALAXY, 12). % 星辰副本
|
|
-define(DUNGEON_TYPE_TASK, 13). % 主线任务副本
|
|
-define(DUNGEON_TYPE_ASSESS, 14). % 考核副本
|
|
-define(DUNGEON_TYPE_POINT, 15). % 跨服沙盘副本
|
|
-define(DUNGEON_TYPE_CONVOY, 16). % 护送副本
|
|
-define(DUNGEON_TYPE_HELP, 17). % 协助副本
|
|
-define(DUNGEON_TYPE_EXGOD, 18). % 唤神体验副本
|
|
-define(DUNGEON_TYPE_ANNIHILATE, 19). % 古神系列-清剿血魔副本
|
|
-define(DUNGEON_TYPE_MAIN_LINE, 20). % 新主线副本
|
|
-define(DUNGEON_TYPE_GUIDE_BOSS, 99). % 新手引导boss
|
|
%% ----------------------- 待定 ------------------------
|
|
-define(DUNGEON_TYPE_COUPLE, 13). % 情缘副本
|
|
|
|
%% 可助战副本类型d
|
|
-define (HELP_DUNGEON_TYPES, [
|
|
]).
|
|
|
|
%% 组队副本
|
|
-define (TEAM_DUNGEON, [
|
|
?DUNGEON_TYPE_CRUSADE
|
|
,?DUNGEON_TYPE_GUARD
|
|
]).
|
|
|
|
%% 需要匹配假人副本
|
|
-define (MATCH_DUNGEON, [
|
|
?DUNGEON_TYPE_CRUSADE
|
|
,?DUNGEON_TYPE_GUARD
|
|
]).
|
|
|
|
%% 特殊经验本id
|
|
-define(DUNGEON_ID_NOVICE_EXP, 3002). % 新手引导经验副本
|
|
|
|
%% 嗨点活动计分规则,副本完成后才触发的副本类型列表,其他类型均进入副本触发
|
|
-define(HI_POINT_DUNGEON_SCORE_TRIGGER , [
|
|
?DUNGEON_TYPE_MATERIAL
|
|
,?DUNGEON_TYPE_VIP
|
|
,?DUNGEON_TYPE_CRUSADE %% 注意小队讨伐有自己的处理逻辑,这里只是将其排除在外
|
|
,?DUNGEON_TYPE_GUARD
|
|
]).
|
|
|
|
%% 七日目标,副本完成后才触发的副本类型列表,其他类型均进入副本触发
|
|
-define(SEVEN_DAY_GOAL_DUNGEON_TRIGGER , [
|
|
?DUNGEON_TYPE_MATERIAL
|
|
,?DUNGEON_TYPE_EXP
|
|
,?DUNGEON_TYPE_CHILD
|
|
]).
|
|
|
|
%% 统计怪物伤害输出
|
|
-define(DUNGEON_MON_HURT_TYPE, [
|
|
?DUNGEON_TYPE_CRUSADE
|
|
,?DUNGEON_TYPE_GUARD
|
|
,?DUNGEON_TYPE_GUIDE_BOSS
|
|
]).
|
|
|
|
%% 副本结束推送结算信息例外
|
|
%% 默认副本内结束就推送
|
|
-define(DUN_RESULT_PUSH_EXCLUSIVE, [
|
|
?DUNGEON_TYPE_CRUSADE
|
|
,?DUNGEON_TYPE_GUARD
|
|
]).
|
|
|
|
%% 需自己手动处理掉落的副本类型
|
|
-define(HANDLE_DROP_DUN_TYPE, [
|
|
?DUNGEON_TYPE_CRUSADE
|
|
]).
|
|
|
|
%% 是否可自动复活
|
|
-define(DUN_AUTO_REVIVE, [
|
|
?DUNGEON_TYPE_GUARD
|
|
]).
|
|
|
|
%% ----------------------- 副本大类型 -----------------------
|
|
-define(SINGLE_DUNGEON_TYPE, 1). % 单人副本
|
|
-define(TEAM_DUNGEON_TYPE, 2). % 组队副本
|
|
|
|
%% ----------------------- 次数扣除方式 -----------------------
|
|
%% 1进入扣除|2通关扣除|3失败扣除|4结束扣除|5发奖扣除|6打通第一波扣除
|
|
-define(DUN_COUNT_DEDUCT_ENTER, 1). % 进入扣除
|
|
-define(DUN_COUNT_DEDUCT_SUCCESS, 2). % 通关扣除
|
|
-define(DUN_COUNT_DEDUCT_FAIL, 3). % 失败扣除
|
|
-define(DUN_COUNT_DEDUCT_END, 4). % 结束扣除
|
|
-define(DUN_COUNT_DEDUCT_REWARD, 5). % 发奖扣除
|
|
-define(DUN_COUNT_DEDUCT_WAVE, 6). % 打通第一波扣除
|
|
|
|
%% ----------------------- 副本次数类型(对应副本配置) -----------------------
|
|
%% [{类型(1:日次数;2:周次数;3:终身次数;4:每日助战次数;5日常次数,领奖的时候加), 次数上限}]
|
|
-define(DUN_COUNT_COND_DAILY, 1). % 日常次数
|
|
-define(DUN_COUNT_COND_WEEK, 2). % 周次数
|
|
-define(DUN_COUNT_COND_PERMANENT, 3). % 永久次数
|
|
-define(DUN_COUNT_COND_DAILY_HELP, 4). % 日常助战次数(与日常次数是与或的关系)
|
|
-define(DUN_COUNT_COND_DAILY_REWARD,5). % 日常次数 领奖的时候加
|
|
|
|
%% 61003自定义数据主键
|
|
-define(DUN_PASS_TIME, 1). %% 通关时间
|
|
|
|
%% 副本记录键定义
|
|
%% 对应数据库表dungeon_best_record
|
|
%% 及内存结构 #dungeon_info.data
|
|
-define (DUNGEON_REC_PASSTIME, 1). %% 通关时间
|
|
-define (DUNGEON_REC_SCORE, 2). %% 评价等级
|
|
-define (DUNGEON_REC_MAX_SCORE, 3). %% 历史最佳
|
|
-define (DUNGEON_REC_DAILY_MAX_SCORE, 4). %% 每日最佳(暂废弃,建议使用日计数器)
|
|
-define (DUNGEON_REC_UPDATE_TIME, 5). %% 更新时间
|
|
-define (DUNGEON_REC_DATA, 6). %% 其它数据1 如:三星奖励是否领取等
|
|
-define (DUNGEON_REC_DATA_1, 7). %% 其他数据2 如:达到新记录评分时玩家等级等
|
|
-define (DUNGEON_REC_MAX_STARS, 8). %% 通用副本三星星级历史记录列表
|
|
-define (DUNGEON_REC_RATING, 9). %% 通用副本评级记录
|
|
|
|
|
|
%% 副本state类型特殊数据key定义
|
|
-define (DUN_STATE_EXP_DUN_AUTO, exp_auto). %% 经验副本-是否自动通关
|
|
-define (DUN_STATE_SPECIAL_KEY_HANDLE_MFA, init_mfa). %% 初始化回调处理,{M, F, A}
|
|
-define (DUN_STATE_SPECIAL_KEY_DUMMY, dungeon_dummys). %% 假人 => [#dungeon_dummy{},...]
|
|
-define (DUN_STATE_SPECIAL_KEY_DUMMY_KILLED, dummy_killed). %% 假人被杀数量统计 => integer()
|
|
-define (DUN_STATE_SPECIAL_KEY_MON_KILL_CALC, mon_calc). %% 怪物击杀统计 => [{MonId, Num}]
|
|
-define (DUN_STATE_SPECIL_KEY_TOWER_STATUS, dun_guard_tower_status).%% 守卫信标塔怪状态
|
|
-define (DUN_STATE_SPECIAL_KEY_TOWER_HP, dun_guard_tower_hp). %% 守卫信标塔怪血量状态
|
|
-define (DUN_STATE_SPECIAL_KEY_DUN_QUICK_CD, dun_guard_cd). %% 守卫信标快速通关召唤CD
|
|
-define (DUN_STATE_SPECIAL_KEY_GUARD_WAVES, dun_guard_waves). %% 守卫信标同时存在的波数
|
|
-define (DUN_STATE_SPECIAL_KEY_BOSS_HP, dun_galaxy_boss_hp). %% 星辰副本boss血上限
|
|
-define (DUN_STATE_SPECIAL_KEY_MAX_SCORE, dun_galaxy_max_score). %% 星辰副本历史最高星数
|
|
-define (DUN_STATE_SPECIAL_KEY_PET_ASSIST, dun_pet_assist). %% 宠物副本上阵宠物数据(已废弃)
|
|
-define (DUN_STATE_SPECIAL_KEY_PET_FORCE_REF, dun_pet_force_ref). %% 宠物副本强制定时(已废弃)
|
|
-define (DUN_STATE_SPECIAL_KEY_GOD_KILL, dun_god_mon_kill). %% 唤神副本怪物击杀
|
|
|
|
%% 玩家dungeon_role的特殊数据key定义
|
|
-define (DUN_ROLE_DUN_ENTER_NEXT, dun_enter_next). %% 是否继续通关
|
|
-define (DUN_ROLE_DUN_COUNT_COST, dun_count_cost). %% 副本次数是否已扣除
|
|
-define (DUN_ROLE_COUNT_COST_TYPE, count_cost_type). %% 副本次数消耗类型
|
|
-define (DUN_ROLE_COST_LIST, dun_cost). %% 本次副本消耗
|
|
-define (DUN_ROLE_CRUSADE_DUN_MON_HURT, dun_mon_hurt). %% 怪物伤害输出
|
|
-define (DUN_ROLE_MAT_REWARD_BUFF, dun_mat_reward_buff). %% 材料副本-材料提交活动buff标志
|
|
-define (DUN_ROLE_EXP_DUN_INIT_WAVE, exp_init_wave). %% 经验副本-初始波数
|
|
-define (DUN_ROLE_EXP_DUN_INIT_MAX_WAVE, init_max_wave). %% 经验副本-初始最大波数
|
|
-define (DUN_ROLE_EXP_DUN_DOING_TASK, exp_task_doing). %% 经验副本-是否任务在身
|
|
-define (DUN_ROLE_TOW_DUN_FIRST_PASS, tow_dun_first_pass). %% 爬塔副本-是否首通
|
|
-define (DUN_ROLE_TOW_DUN_MAX_DUN, tow_dun_max_pass_dun). %% 爬塔副本-普通难度副本通关历史最大副本
|
|
-define (DUN_ROLE_VISUS_INIT_WAVE, visus_init_wave). %% 幻光副本-初始波数
|
|
-define (DUN_ROLE_VISUS_INIT_MAX_WAVE, visus_init_max_wave). %% 幻光副本-初始最大波数
|
|
-define (DUN_ROLE_VISUS_REWARD_WAVE, visus_reward_wave). %% 幻光副本-已领取奖励波数
|
|
-define (DUN_ROLE_PET_MON_BUFF, pet_mon_buff). %% 宠物副本-进击怪死亡产生buff球
|
|
-define (DUN_ROLE_PET_TRIGGER_BUFF, pet_dun_trigger_buff). %% 宠物副本-玩家触发的buff球
|
|
-define (DUN_ROLE_PET_DUN_SCORE, pet_dun_score). %% 宠物副本-获得的积分
|
|
-define (DUN_ROLE_PET_DUN_HISTORY_SCORE, pet_dun_history_score). %% 宠物副本-单个副本历史积分
|
|
-define (DUN_ROLE_PET_DUN_OLD_RANK, pet_dun_old_rank). %% 宠物副本-旧排行
|
|
-define (DUN_ROLE_PET_DUN_CHOOSE_REWARD, pet_dun_choose_reward). %% 宠物副本-自选奖励
|
|
-define (DUN_ROLE_PET_DUN_PET_ID, pet_dun_pet_id). %% 宠物副本-宠物唯一Id
|
|
-define (DUN_ROLE_GUARD_INIT_MAX_WAVE, guard_init_max_wave). %% 塔防副本-初始最大波数
|
|
-define (DUN_ROLE_GOD_START_TIME, god_start_time). %% 唤神副本-唤神开始时间(ms)
|
|
-define (DUN_ROLE_GOD_SCORE, god_wave_score). %% 唤神副本-唤神波数积分
|
|
-define (DUN_ROLE_GOD_DOUBLE_REWARD_WAVE, double_reward_wave). %% 唤神副本-双倍奖励波数
|
|
-define (DUN_ROLE_CHILD_LEFT_MON, child_left_mon). %% 孩子副本-波数剩余怪物数
|
|
-define (DUN_ROLE_CHILD_INIT_WAVE, child_init_wave). %% 孩子副本-初始波数
|
|
-define (DUN_ROLE_CHILD_MAX_WAVE, child_max_wave). %% 孩子副本-历史最大波数(副本开始时记录)
|
|
-define (DUN_ROLE_CHILD_RUN_AWAY_NUM, child_run_away_num). %% 孩子副本-逃跑怪物数量
|
|
-define (DUN_ROLE_CHILD_WALK_MON, child_walk_mons). %% 孩子副本-自由寻路怪
|
|
-define (DUN_ROLE_CHILD_WALK_MON_TIME, child_walk_mons_time). %% 孩子副本-自由寻路怪创建时间
|
|
-define (DUN_ROLE_CHILD_BOX_MON, child_box_mon). %% 孩子副本-宝箱怪
|
|
-define (DUN_ROLE_CHILD_ENERGY, child_energy). %% 孩子副本-能量
|
|
-define (DUN_ROLE_GALAXY_DUN_MAX_DUN, galaxy_dun_max_pass_dun). %% 星辰副本-副本通关历史最大副本
|
|
-define (DUN_ROLE_COUNT_MERGE, dun_role_count_merge). %% 次数合并
|
|
-define (DUN_ROLE_DAILY_ENTER_COUNT, dun_role_daily_enter_count).%% 日常总合并次数
|
|
-define (DUN_ROLE_DAILY_COUNTS, dun_role_daily_counts). %% {正常合并次数,购买合并次数}
|
|
|
|
%% 假人自定义数据
|
|
-define (DUN_DUMMY_GUARD_REVIVE_REF, dummy_guard_revive_ref). %% 塔防副本-假人复活定时
|
|
-define (DUN_DUMMY_GUARD_REVIVE_TIME, dummy_guard_revive_count). %% 塔防副本-假人复活次数
|
|
|
|
%% 任务触发
|
|
-define(DUN_TASK_ENTER_TRIGGER, 0).
|
|
-define(DUN_TASK_PASS_TRIGGER, 1).
|
|
|
|
%% 结算界面推送key定义
|
|
-define (DUN_RESULT_DUN_PET_OLD_RANK, 1). %% 宠物副本-旧排名
|
|
|
|
%% 护送副本id
|
|
-define (DUN_CONVOY_ID, 50001).
|
|
|
|
-define (PET_DUN_BOX_MON, 2300051).
|
|
|
|
|
|
%% -------------------------------------------------
|
|
|
|
% %% 副本基本配置
|
|
-record(dun_cfg, {
|
|
id = 0 % 副本id
|
|
, name = <<"">> % 副本名称
|
|
, type = 0 % 副本类型
|
|
, sub_type = 0 % 副本子类(前端使用,默认配0)
|
|
, scene_id = 0 % 场景id
|
|
, time = 0 % 副本时间
|
|
|
|
, condition = [] % 进入条件 见 lib_dungeon:check_dungeon_condition
|
|
, cost = [] % 进入消耗(门票)
|
|
, count_cond = [] % 次数条件 [{类型(1:日次数;2:周次数;3:终身次数), 次数上限}]
|
|
, count_deduct = 0 % 次数扣除 1进入扣除|....
|
|
, buy_count_cost = [] % 次数购买消耗 没有表示不能购买 [{次数,vip,{物品类型,物品id,物品数量}}]
|
|
|
|
, wave_num = 0 % 副本波数
|
|
, fail_event = [] % 失败事件 通用通关条件默认完成全部波数
|
|
, is_use_power_crush = 0 % 是否使用战力碾压(0:无,1:是)
|
|
, is_use_attr_crush = 0 % 是否使用属性碾压(0:无,1:是)
|
|
, recommend_power = 0 % 推荐战力
|
|
, recommend_attr = [] % 推荐属性
|
|
|
|
, revive_count = 0 % 复活次数(复活次数为0,则表示不能复活, 非0极大值表示不限复活次数)
|
|
, revive_time = 0 % 复活秒数
|
|
|
|
, reward_show = [] % 奖励展示
|
|
, rand_reward_show = [] % 随机奖励展示
|
|
|
|
, flop_cost = [] % 翻牌消耗
|
|
, flop_pools = [] % 翻牌奖池&权重
|
|
, flop_rewards = [] % 翻牌普通奖池
|
|
, flop_times = [] % 翻牌倍率
|
|
, base_reward = [] % 基础奖励
|
|
, first_reward = [] % 首通奖励
|
|
, rand_reward = [] % 随机奖励
|
|
, trigger = 0 % 0任务进入触发|1通关触发
|
|
, quit_time = 0 % 副本退出时间
|
|
, born_type = 0 % 0场景出生点|1原坐标出生点
|
|
}).
|
|
|
|
% 副本怪物波数配置
|
|
-record(base_dun_wave_cfg, {
|
|
dun_id = 0, % 副本id
|
|
wave = 0, % 副本波数
|
|
scene = 0, % 场景id
|
|
create_time = 0, % 波数创建时间
|
|
limit_time = 0, % 波数限制时间
|
|
mon_list = [], % 波数怪物列表
|
|
next_wave = 0, % 下一波数 若当前波数和下一波相等,则为循环波数,否则默认是叠加波数;若当前波数不为0且下一波数为0则此波为最后一波
|
|
first_reward = [], % 首通奖励
|
|
normal_reward = [], % 普通奖励
|
|
recommend_power = 0, % 波数推荐战力
|
|
recommend_attr = [], % 推荐属性
|
|
born_xy = [] % 初始出生坐标
|
|
}).
|
|
|
|
|
|
%% 副本评分配置
|
|
-record(dungeon_grade, {
|
|
dun_id = 0 % 副本id
|
|
, grade_min = 0 %
|
|
, grade_max = 0
|
|
, condition = [] % 评分条件
|
|
, reward = [] % 奖励列表
|
|
}).
|
|
|
|
%% 经验本线路(关卡)配置
|
|
-record(base_exp_dun_level, {
|
|
level = 0, %
|
|
min_wave = 0, % 最小波数
|
|
max_wave = 0 % 最大波数
|
|
}).
|
|
|
|
-record (dungeon_dynamic_grade, {
|
|
dun_id = 0
|
|
, grade = 0
|
|
, min_lv = 0
|
|
, max_lv = 0
|
|
, reward = []
|
|
, reward2 = []
|
|
}).
|
|
|
|
|
|
%% 副本共享稀有奖池
|
|
-record(share_flop_treasure_cfg, {
|
|
id = 0, %% 奖池id
|
|
flop_cost = 0, %% 翻牌消耗
|
|
treasure = [] %% 稀有奖池奖励
|
|
}).
|
|
|
|
|
|
%% 爬塔普通副本每日奖励
|
|
-record(base_tower_dun_daily_reward, {
|
|
id = 0, %% 副本id
|
|
next_id = 0, %% 下一副本目标
|
|
rewards = [] %% 每日奖励
|
|
}).
|
|
|
|
%% 爬塔困难难度副本配置
|
|
-record(base_tower_dun_diffcult, {
|
|
id = 0, %% 副本id
|
|
next_id = 0, %% 下一困难难度副本目标
|
|
need_unlock = 0, %% 需解锁的普通难度副本id
|
|
suggest = "" %% 通关建议-前端使用
|
|
}).
|
|
|
|
%% 讨伐副本每日次数奖励
|
|
-record(base_crusade_dun_count_reward, {
|
|
id = 0, %% 副本id
|
|
count = 0, %% 次数节点
|
|
rewards = [] %% 奖励
|
|
}).
|
|
|
|
%% 副本通用评级配置
|
|
%% 和星级评分里的时间评分类似,但两者互相独立,不会同时配置
|
|
-record(base_dun_grade_rating, {
|
|
dun_id = 0, %% 副本id
|
|
grade = 0, %% 评级
|
|
last_time = 0, %% 持续时间
|
|
effiency = 0, %% 奖励效率
|
|
rewards = [] %% 奖励道具
|
|
}).
|
|
|
|
%% -------------------- 副本评分 ----------------------------
|
|
-define(DUN_SCORE_DIE_COUNT, 1). %% 死亡次数
|
|
-define(DUN_SCORE_PASS_TIME, 2). %% 通关时间
|
|
-define(DUN_SCORE_DIE, 3). %% 击杀怪物数量
|
|
-define(DUN_SCORE_DIE_ALL, 4). %% 击杀所有怪物
|
|
-define(DUN_SCORE_WAVE, 5). %% 通关波数
|
|
-define(DUN_SCORE_HP, 6). %% 剩余血量
|
|
|
|
%% 副本评分&评级完成状态
|
|
-define(DUN_SCORE_UNFIN, 0).
|
|
-define(DUN_SCORE_FINISH, 1).
|
|
|
|
%% DUN_GRADE_EVENT
|
|
%% 副本星级评分条件关键字
|
|
-define(DUN_GRADE_EVENT_DIE_COUNT, die). %% 人物死亡次数
|
|
-define(DUN_GRADE_EVENT_KILL_NUM, kill_num). %% 击杀怪物数量
|
|
-define(DUN_GRADE_EVENT_KILL_ALL, kill_all). %% 击杀所有怪物
|
|
-define(DUN_GRADE_EVENT_TIME, time). %% 限制时间内通关
|
|
-define(DUN_GRADE_EVENT_WAVE, wave). %% 通关波数
|
|
-define(DUN_GRADE_EVENT_REST_HP, rest_hp). %% 玩家剩余血量百分比
|
|
|
|
-define(SCORE_EVENT_KEYS, [
|
|
?DUN_GRADE_EVENT_DIE_COUNT
|
|
,?DUN_GRADE_EVENT_KILL_NUM
|
|
,?DUN_GRADE_EVENT_KILL_ALL
|
|
,?DUN_GRADE_EVENT_TIME
|
|
,?DUN_GRADE_EVENT_WAVE
|
|
,?DUN_GRADE_EVENT_REST_HP
|
|
]).
|
|
|
|
-define(SCORE_EVENT_TYPE_IDS, [
|
|
?DUN_SCORE_DIE_COUNT,
|
|
?DUN_SCORE_PASS_TIME,
|
|
?DUN_SCORE_DIE,
|
|
?DUN_SCORE_DIE_ALL,
|
|
?DUN_SCORE_WAVE,
|
|
?DUN_SCORE_HP
|
|
]).
|
|
|
|
%% ----------------------------------------------------------
|
|
-define(DEFAULT_QUIT_TIME, 30).
|
|
|
|
-define(FORCE_QUIT_TIME(DunId),
|
|
case data_dungeon:get_dun(DunId) of
|
|
#dun_cfg{quit_time = QuitTime} -> QuitTime;
|
|
_ -> ?DEFAULT_QUIT_TIME
|
|
end).
|
|
|
|
%% ----------------------- 副本结果类型 -----------------------
|
|
|
|
-define(DUN_RESULT_TYPE_NO, 0). % 没有结算
|
|
-define(DUN_RESULT_TYPE_SUCCESS, 1). % 挑战成功
|
|
-define(DUN_RESULT_TYPE_FAIL, 2). % 挑战失败
|
|
|
|
% 子类型
|
|
-define(DUN_RESULT_SUBTYPE_NO, 0). % 无
|
|
-define(DUN_RESULT_SUBTYPE_TIMEOUT, 1). % 副本超时
|
|
-define(DUN_RESULT_SUBTYPE_WAVE_TIMEOUT, 2). % 副本波数超时
|
|
-define(DUN_RESULT_SUBTYPE_ACTIVE_QUIT, 4). % 主动退出副本
|
|
-define(DUN_RESULT_SUBTYPE_LOGOUT, 5). % 玩家登出
|
|
-define(DUN_RESULT_SUBTYPE_PASSIVE_FORCE_QUIT, 6). % 被动强制退出
|
|
-define(DUN_RESULT_SUBTYPE_ROLE_DIE, 7). % 玩家死亡
|
|
-define(DUN_RESULT_SUBTYPE_TOWER_DIE, 8). % 塔怪被击杀
|
|
-define(DUN_RESULT_SUBTYPE_ROLE_DISCONNECT, 9). % 玩家中途掉线
|
|
-define(DUN_RESULT_SUBTYPE_PET_DIE, 10). % 宠物副本-宠物死亡
|
|
|
|
|
|
-define(CREATE_ROLE_DUN, 0). % 新人副本
|
|
-define(CREATE_ROLE_DUN_SCENE, 0). % 新人副本场景
|
|
|
|
-define(DUN_DEF_GROUP, 99). % 默认分组
|
|
|
|
%% ----------------------- 在线情况( #dungeon_role.online ) -----------------------
|
|
-define(DUN_ONLINE_NO, 0). % 不在线
|
|
-define(DUN_ONLINE_YES, 1). % 在线
|
|
-define(DUN_ONLINE_DELAY, 2). % 延迟登出状态
|
|
|
|
%% ----------------------- 是否副本结束退出( #dungeon_role.is_end_out ) -----------------------
|
|
-define(DUN_IS_END_OUT_NO, 0). % 副本未结束退出
|
|
-define(DUN_IS_END_OUT_YES, 1). % 副本结束退出
|
|
|
|
%% ----------------------- 是否领取了奖励( #dungeon_role.is_reward ) -----------------------
|
|
-define(DUN_IS_REWARD_NO, 0). % 没有领取奖励
|
|
-define(DUN_IS_REWARD_YES, 1). % 已经领取奖励
|
|
|
|
|
|
%% 助战类型
|
|
-define(DUN_TEAM_HELP_NO, 0). % 非助战
|
|
-define(DUN_TEAM_HELP_YES, 1). % 助战
|
|
|
|
%% 副本玩家信息
|
|
-record(dungeon_role, {
|
|
id = 0 % 玩家id
|
|
, node = undefined % 玩家节点
|
|
, server_id = 0 % 角色所在的服务器id
|
|
, server_num = 0 %
|
|
, figure = undefined % figure
|
|
, combat_power = 0 % 战力
|
|
, hp = 0 % 玩家血量(玩家死亡,复活,登出)
|
|
, hp_lim = 0 % 玩家血量上限
|
|
, base_attr = [] % 基础属性 [{key, val}]
|
|
, pid = 0 % 玩家服务进程
|
|
, sid = 0 % 异步广播进程
|
|
, online = ?DUN_ONLINE_YES % 在线情况
|
|
, scene = 0 % 原场景id
|
|
, scene_pool_id = 0 % 原场景进程id
|
|
, copy_id = 0 % 原CopyId
|
|
, x = 0 % 原x坐标
|
|
, y = 0 % 原y坐标
|
|
, team_id = 0 % 玩家所在的队伍
|
|
, team_position = 0 % 队伍位置
|
|
, dead_time = 0 % 死亡时间(复活重置为0)
|
|
, dead_count = 0 % 死亡次数
|
|
, revive_count = 0 % 复活的次数
|
|
, cost_revive_count = 0 % 付费复活次数
|
|
, revive_ref = undefined % 复活定时器
|
|
, delay_remove_ref = undefined % 延迟退出副本定时器(副本中断线/闪退/关客户端)
|
|
, help_type = 0 % 助战类型(0:无;1:助战)
|
|
, help_num = 0 % 已助战次数 (跨服副本需要赋值)
|
|
, is_end_out = 0 % 是否副本结束领取奖励后退出
|
|
, is_reward = 0 % 是否领取了奖励
|
|
, drop_list = [] % 掉落列表 未捡起
|
|
, drop_reward_list = [] % 掉落奖励列表,掉落获得的奖励列表
|
|
, calc_reward_list = [] % 计算好的奖励列表 结算奖励
|
|
, custom_reward_list = [] % 定制活动多倍奖励(活动奖励部分)
|
|
, level_list = [] % 关卡列表 [#dungeon_role_level{},...]
|
|
, rela_list = [] % 关系列表
|
|
, drop_times_args = [] % 结算倍数
|
|
, typical_data = #{} % 与副本类型相关的数据,由各个副本类型相关逻辑自行处理
|
|
% , is_leave = 0 % 中途离开 1:离开,0:默认
|
|
% , is_enter = 0 % 0为正在进入loading;1为进入到场景
|
|
, is_first = false % 是否已首通
|
|
, grade_progress = undefined % 副本评分事件进度
|
|
, grade_rating = [] % 副本通用评级,和评分事件的时间挑战通关类似,但互相独立
|
|
}).
|
|
|
|
-record(dungeon_dummy, {
|
|
id = 0
|
|
,dummy_type = 1 % 1假人|2玩家镜像
|
|
,mirror_id = 0 % 镜像玩家的真实id
|
|
,figure = undefined
|
|
,server_id = 0
|
|
,server_num = 0
|
|
,is_die = 0
|
|
,hurt_calc = 0 % 假人伤害输出统计
|
|
,help_type = 0 % 协助类型
|
|
,typical_data = #{} % 辅助数据
|
|
}).
|
|
|
|
%% 副本场景辅助信息
|
|
-record(dungeon_scene_helper, {
|
|
hp_rate_list = [] % 血量比例,只触发一次就抛弃
|
|
}).
|
|
|
|
%% 怪物辅助信息
|
|
-record(dungeon_mon_helper, {
|
|
hp_rate_map = #{} % 血量比例,只触发一次就抛弃
|
|
}).
|
|
|
|
%% 关卡结果
|
|
-record(dungeon_level_result, {
|
|
level = 0 % 关卡
|
|
, scene_id = 0 % 场景id
|
|
, start_time = 0 % 开始时间
|
|
, end_time = 0 % 结束时间
|
|
, result_time = 0 % 结果时间
|
|
, result_type = 0 % 结果
|
|
, is_level_end = 0 % 是否已经结算
|
|
}).
|
|
|
|
%% ----------------------- 副本是否结束 -----------------------
|
|
-define(DUN_IS_END_NO, 0). % 没有结束
|
|
-define(DUN_IS_END_YES, 1). % 已经结束
|
|
|
|
%% ----------------------- 是否跨服 -----------------------
|
|
-define(DUN_CLUSTER_NO, 0). % 不是跨服副本
|
|
-define(DUN_CLUSTER_YES, 1). % 是跨服副本
|
|
|
|
%% 副本进程状态
|
|
-record(dungeon_state, {
|
|
dun_id = 0 % 副本id
|
|
, dun_type = 0 % 副本类型
|
|
, dun_callcack = undefined % 副本回调模块
|
|
, scene_id = 0 % 当前场景id
|
|
, scene_pool_id = 0 % 场景进程id
|
|
, team_id = 0 % 队伍id
|
|
, owner_id = 0 % 拥有者
|
|
, enter_lv = 0 % 进入时的等级(用于生怪:单人副本就取自己;组队就取队长)
|
|
, cluster = 0 % 跨服副本,1是跨服,0是本服
|
|
, start_time = 0 % 副本开始时间
|
|
, end_time = 0 % 结束时间戳
|
|
, role_list = [] % 角色列表 [#dungeon_role{}]
|
|
, wave_num = 0 % 波数
|
|
, index_of_wave = 1 % 波数中的轮次(循环波数副本使用,叠加波数的副本默认为1)
|
|
, wave_info = [] % [#dun_wave_info{}]
|
|
, wave_type = 0 % 0普通叠加波数|1循环波数|...待添加
|
|
, mon_auto_id = 1 % 怪物的自增id
|
|
, close_ref = undefined % 结束定时器
|
|
, is_end = 0 % 是否结束副本(结束副本后不做任何处理)
|
|
, result_type = 0 % 结束类型
|
|
, result_subtype = 0 % 结束子类型
|
|
, result_time = 0 % 结束时间
|
|
, force_quit_ref = undefined % 强制被动退出定时器
|
|
, ref = undefined % 定时器(检查事件)
|
|
, wave_ref = [] % [波数创怪定时器,波数结束定时器]
|
|
, create_gap_ref = [] % 波数怪单只怪时间间隔定时器
|
|
, init_wave_sign = 0 % 初始波数加载标志 初始波数由前端进场触发,后面波数默认忽视
|
|
, typical_data = #{} % 副本类型相关数据 在各自类型模块的文件里定义和说明
|
|
, next_wave_time = [] % 下一波的触发时间[WaveNum, Time]
|
|
, grade_ref = [] % 评分定时器列表
|
|
, rating_ref = [] % 通用评级定时器
|
|
, animation_ref = undefined % 特效定时
|
|
}).
|
|
|
|
%% 波数状态信息
|
|
-record(dun_wave_info, {
|
|
key = {0, 0}, % {wave_num, index_of_wave}
|
|
progress = 0,
|
|
require = 0,
|
|
status = 0,
|
|
typical_data = #{} % 自定义数据
|
|
}).
|
|
|
|
%% 波数状态
|
|
-define(DUN_WAVE_UNFIN, 0).
|
|
-define(DUN_WAVE_FIN, 1).
|
|
|
|
%% 波数类型
|
|
-define(DUN_WAVE_OVERLAY, 0). % 波数普通叠加
|
|
-define(DUN_WAVE_CYCLE, 1). % 循环波数
|
|
|
|
-define(WAVE_SAME, same_state).
|
|
-define(WAVE_NEXT, next_wave).
|
|
-define(WAVE_CYCLE, cycle_wave).
|
|
-define(DUN_PASS, dungeon_pass).
|
|
|
|
%% 波数怪创建关键字
|
|
-define(DUN_WAVE_MON_KEY, dun_wave_mon).
|
|
|
|
%% 初始波数默认生成时间,与前端是同步(等待场景加载完成)
|
|
-define(INIT_WAVE_CREATE_TIME, 22000).
|
|
%% 特效定时
|
|
-define(ANIMATION_TIMEOUT, 5000).
|
|
|
|
%%
|
|
-define(INIT_WAVE_LOAD_SIGN, 1).
|
|
|
|
%% 副本退出记录
|
|
-record(dungeon_out, {
|
|
scene = 0 % 原场景id
|
|
, scene_pool_id = 0 % 原场景进程id
|
|
, copy_id = 0 % 原CopyId
|
|
, x = 0 % 原x坐标
|
|
, y = 0 % 原y坐标
|
|
, is_again = 0 % 是否重新使用退出记录,用于断线重连(0:无 1:是)
|
|
, dun_id = 0 % 副本id
|
|
, reply_pid = 0 % 默契答题pid(@情侣副本)
|
|
, data = #{}
|
|
}).
|
|
|
|
|
|
%% 可翻牌次数
|
|
-define(FLOP_MAX_COUNT, 3).
|
|
|
|
%% 翻牌宝藏类型
|
|
-define(FLOP_NORMAL, 1).
|
|
-define(FLOP_RARE, 2).
|
|
|
|
%% 翻牌状态
|
|
-define(FLOPING, 0).
|
|
-define(FLOPED, 1).
|
|
|
|
%% 翻牌类型
|
|
-define(NORMAL_FLOP, 0).
|
|
-define(BATCH_FLOP, 1).
|
|
|
|
-define(NORMAL_FLOP_MAX_TIME, 30).
|
|
-define(FLOP_FORCE_INTERVAL, 30000).
|
|
|
|
%% 批量翻牌持续时间,设定极大值,主要用于判断过不过时.相当于没有时间限制
|
|
-define(BATCH_FLOP_MAX_TIME, 3600).
|
|
|
|
%% 副本翻牌临时记录
|
|
-record(temp_flop, {
|
|
flop_kind = 0, % 翻牌类型 0普通|1批量
|
|
flop_count = 0, % 已翻牌次数(单个副本翻牌次数|批量副本翻牌批次)
|
|
flop_time = 0, % 翻牌结束时间
|
|
flop_dun_type = 0, % 翻牌副本类型
|
|
flop_dun_id = 0, % 翻牌副本id列表
|
|
flop_duns = [], % 批量翻牌副本列表 [{DunId, Count}] 每扫荡一次或每通关一次都有至少有一次免费翻牌,因此需统计先前使用的副本次数
|
|
reward = [], % 奖池已得奖励记录 [{{副本Id, 次数}, 位置, 2稀有, [奖池id,奖池内index]},{{副本id, 次数}, 位置, 1普通, [[{物品类型,物品id,数量}],倍率]}]
|
|
batch_rewarded = [], % 批量水晶宝藏已开启类型 1免费开启|2额外开启一次|3全部开启
|
|
ref = undefined % 免费翻牌强制定时器
|
|
}).
|
|
|
|
%% 单人副本翻牌数据
|
|
-record(role_dun_flop, {
|
|
id = 0, %% 玩家id
|
|
treasure_id = 0, %% 稀有奖池id
|
|
flop_val = 0, %% 祝福值 每次普通翻牌+1
|
|
treasured = [], %% 当前奖池已领取稀有奖励 [{稀有奖池id, [奖池内index,...]}]
|
|
tmp_flop = #temp_flop{} %% 副本翻牌临时记录
|
|
}).
|
|
|
|
|
|
-record(dungeon_role_grade, {
|
|
map = #{}
|
|
}).
|
|
|
|
%% 玩家进程的副本信息
|
|
-record(status_dungeon, {
|
|
dun_id = 0 % 副本id
|
|
, dun_score = 0 % 副本评分
|
|
, is_end = 0 % 副本结束
|
|
, dead_time = 0 % 死亡时间(复活重置为0)
|
|
, dead_count = 0 % 死亡次数
|
|
, revive_count = 0 % 复活的次数(默认使用)
|
|
, cost_revive_count = 0 % 付费复活次数(特殊副本使用)
|
|
, revive_map = #{} % 复活Map
|
|
, out = #dungeon_out{} % 退出记录
|
|
, help_type = 0 % 当前副本的助战状态
|
|
, data_before_enter = #{} % 一些进入前的数据
|
|
, dun_data = [] % 副本相关数据 [{副本类型,相关data}]
|
|
, flop = #role_dun_flop{} % 翻牌
|
|
, enter_time = 0 % 进入副本时间
|
|
, sweep_reward_calc = #{} % 批量扫荡临时记录(因批量扫荡奖励随机且需预展示,所以需保存临时结果,以便后续扫荡结果和展示内容一致)
|
|
}).
|
|
|
|
%% sweep_reward_calc map key
|
|
-define(BATCH_FREE_SWEEP, batch_free_sweep).
|
|
-define(BATCH_COST_SWEEP, batch_cost_sweep).
|
|
|
|
%%阶段奖励状态
|
|
-define(CAN_NOT_GET, 0). %% 未满足条件不能领取
|
|
-define(CAN_GET, 1). %% 可以领取
|
|
-define(HAS_GET, 2). %% 已经领取
|
|
|
|
%%-------------------------------------------
|
|
|
|
%% 副本管理记录.
|
|
-record(dungeon_record, {
|
|
role_id = 0 % 角色id
|
|
, dun_pid = 0 % 副本进程pid
|
|
, dun_id = 0 % 副本id
|
|
, last_leave = 0 % 最后离开副本时间
|
|
, end_time = 0 % 结束时间
|
|
}).
|
|
|
|
%% 副本信息 61020用
|
|
-record (dungeon_info, {
|
|
id = 0,
|
|
daily_count = 0,
|
|
weekly_count = 0,
|
|
permanent_count = 0,
|
|
permanent_pass = 0,
|
|
buy_count = 0,
|
|
buy_use = 0,
|
|
gold_buy = 0,
|
|
sweep_count = 0,
|
|
sweep_buy_count = 0,
|
|
help_count = 0,
|
|
daily_pass = 0,
|
|
daily_level = 0, %% 日常层数(通关等级)
|
|
data = []
|
|
}).
|
|
|
|
-define(SQL_DUN_DATA_SELECT,
|
|
<<" SELECT dun_type, data FROM `dungeon_data` where role_id=~p ">>).
|
|
-define(SQL_DUN_DATA_REPLACE,
|
|
<<"REPLACE INTO dungeon_data(role_id, dun_type, data) VALUES (~p,~p,'~ts')">>).
|
|
|
|
-define(SQL_DUN_BEST_REC_SELECT,
|
|
<<"SELECT `dun_id`, `data` FROM `dungeon_best_record` WHERE `player_id`=~p">>).
|
|
-define(SQL_DUN_BEST_REC_REPLACE,
|
|
<<"REPLACE INTO `dungeon_best_record` (`player_id`, `dun_id`, `data`) VALUES (~p, ~p, '~s')">>).
|
|
|
|
-define(SQL_SELECT_ROLE_DUN_FLOP,
|
|
<<"SELECT treasure_id, flop_val, treasured FROM role_dun_flop WHERE role_id = ~p">>).
|
|
-define(SQL_REPLACE_ROLE_DUN_FLOP,
|
|
<<"REPLACE INTO role_dun_flop SET role_id = ~p, treasure_id = ~p, flop_val = ~p, treasured = ~ts">>).
|
|
|
|
|
|
-define(SQL_SELECT_EXP_DUN,
|
|
<<"SELECT dun_id, wave, status FROM role_exp_dun_achieve WHERE role_id = ~p">>).
|
|
-define(SQL_EXP_DUN_REPLACE,
|
|
<<"REPLACE INTO role_exp_dun_achieve (role_id, dun_id, wave, status) VALUES ~ts">>).
|
|
|
|
-define(SQL_SP_EXP_DUN_DAILY_COUNT_RESET,
|
|
<<"UPDATE `counter_daily_four` SET `count` = ~p, `refresh_time` = ~p WHERE `role_id` = ~p AND `module` = ~p AND `sub_module` = ~p AND `type` = ~p">>).
|
|
|
|
-define(SQL_SP_EXP_DUN_REC_SELECT,
|
|
<<"SELECT `data` FROM `dungeon_best_record` WHERE `player_id`= ~p and `dun_id` = ~p">>).
|
|
-define(SQL_SP_EXP_DUN_REC_UPDATE,
|
|
<<"UPDATE `dungeon_best_record` SET `data` = ~ts WHERE `player_id` = ~p AND `dun_id` = ~p">>).
|
|
|
|
-define(SQL_VISUS_DUN_SELECT,
|
|
<<"SELECT `dun_id`, `pass_waves`, `time`, `last_highest_wave` FROM role_dun_visus WHERE `role_id` = ~p">>).
|
|
-define(SQL_ONE_VISUS_DUN_SELECT,
|
|
<<"SELECT `pass_waves`, `time`, `last_highest_wave` FROM role_dun_visus WHERE `role_id` = ~p AND `dun_id` = ~p">>).
|
|
-define(SQL_VISUS_DUN_DELETE,
|
|
<<"DELETE FROM role_dun_visus WHERE `role_id` = ~p AND `dun_id` in (~ts)">>).
|
|
-define(SQL_VISUS_DUN_REPLACE,
|
|
<<"REPLACE INTO role_dun_visus SET `role_id` = ~p, `dun_id` = ~p, `pass_waves` = ~ts, `time` = ~p, `last_highest_wave` = ~ts">>).
|
|
-define(SQL_VISUS_DUN_BATCH_REPLACE,
|
|
<<"REPLACE INTO role_dun_visus(role_id, dun_id, pass_waves, time, last_highest_wave) VALUES ~ts">>).
|
|
-define(SQL_VISUS_DUN_BATCH_VAL,
|
|
<<"(~p, ~p, '~ts', ~p, '~ts')">>).
|
|
-define(SQL_VISUS_DUN_REC_SELECT,
|
|
<<"SELECT `dun_id`, `data` FROM `dungeon_best_record` WHERE `player_id` = ~p AND ~ts">>).
|
|
|
|
%% ----------------------- 日志宏 -----------------------
|
|
-define(DUN_CREATE_PARTNER_POS_1, 1). % 副本创建怪物的位置1
|
|
-define(DUN_CREATE_PARTNER_POS_2, 2). % 副本创建怪物的位置2
|
|
|
|
%% ----------------------- 日志宏 -----------------------
|
|
-define(DUN_LOG_TYPE_NORMAL, 0). % 无
|
|
-define(DUN_LOG_TYPE_RESULT, 1). % 结算
|
|
-define(DUN_LOG_TYPE_HALFWAY_QUIT, 2). % 中途退出
|
|
-define(DUN_LOG_TYPE_QUIT, 3). % 退出操作
|
|
-define(DUN_LOG_TYPE_ROLE_OUT, 4). % 玩家离开
|
|
-define(DUN_LOG_TYPE_DISCONNECT, 5). % 玩家掉线
|