|
|
- %%%-------------------------------------------------------------------
- %%% @doc 宠物-头文件
- %%% Module : pet
- %%% Created : 2019-12-09
- %%% @Author : tyl
- %%%-------------------------------------------------------------------
-
- -define(PetOpenLv, 134). %% 宠物系统开放等级
-
- -define(REFRESH_THRESHOLD, 100). %% 排行榜公式替换阀值
-
- %% 宠物生活技能相关增益
- -define(PET_LIFE_SKILL_AUTO_DECOMPOSE_EQUIP, 1). %% 自动分解蓝色品质装备(前端处理)
- -define(PET_LIFE_SKILL_ARENA_POWER_ADD, 2). %% 排位赛战力加成5%
- -define(PET_LIFE_SKILL_CONVOY_RE_BACK, 3). %% 护送双倍找回
- -define(PET_LIFE_SKILL_GUILD_ORDER_ADD, 4). %% 拼单邀请社团助手额外增加20%收益
- -define(PET_LIFE_SKILL_ARENA_FAIL_COMPENSATION, 5). %% 排位赛失败不损失奖励
- -define(PET_LIFE_SKILL_CONVOY_PROTECT_ADD, 6). %% 护送庇护次数+1
- -define(PET_LIFE_SKILL_EQUIP_RISE_STAR_ADD, 7). %% 装备进化成功率提升5%
- -define(PET_LIFE_SKILL_BEACH_VOTE_ADD, 8). %% 舞动温泉初始点赞次数+5
- -define(PET_LIFE_SKILL_AUTO_DECOMPOSE_WARSOUL, 9). %% 自动分解3星战魂->供养魂(前端处理)
- -define(PET_LIFE_SKILL_ARENA_QUICK_KILL, 10). %% 排位赛中直接秒杀低排位对手
- -define(PET_LIFE_SKILL_CHILD_VOTE_ADD, 11). %% 宝宝每日给同一玩家点赞次数+1
- -define(PET_LIFE_SKILL_GLAMOUR_FUND_ADD, 12). %% 社团赛马初始资金增加200
- -define(PET_LIFE_SKILL_NUCLEON_WASH_FREE, 13). %% 圣物洗练每日免费一次
- -define(PET_LIFE_SKILL_DAILY_HONOUR_ADD, 14). %% 每日名望券获取上限增加100
- -define(PET_LIFE_SKILL_DESERTED_REVIVE_FREE, 15). %% 每日混乱星域免费复活3次
- -define(PET_LIFE_SKILL_GOLD_EXCHANGE_DOUBLE, 16). %% 彩钻兑换交易券10%概率暴击,收益翻倍
- -define(PET_LIFE_SKILL_DUN_EXP_DROP_SUM_TIME,17). %% 冒险挂机累计时间提高到24小时
- -define(PET_LIFE_SKILL_EQUIP_STRENGTH_ADD, 18). %% 装备强化成功率提升2%
- -define(PET_LIFE_SKILL_CAPSULE_EGG_FREE_TIME, 19). %% 龙神扭蛋免费次数CD减少到12小时
- -define(PET_LIFE_SKILL_GOD_SUMMON_FREE, 20). %% 神座普通召唤每天免费1次
- -define(PET_LIFE_SKILL_GALAXY_STORE_REFRESH_FREE, 21). %% 星辰灵市每天免费刷新1次
-
- -define(ACTION_ACTIVE, 1). %% 激活宠物
- -define(ACTION_UPGRADE, 2). %% 宠物进化
-
- %% 宝石镶嵌
- -define(SKILL_DIAMOND_SLOT_LIST, [1,2,3,4]). %% 技能石槽位列表
- -define(PET_DIAMOND_UNLOAD, 0). %% 卸下当前宝石
- -define(PET_DIAMOND_INLAY, 1). %% 镶嵌宝石
-
- %% 宠物跟随状态
- -define(PET_UNFOLLOW, 0). %% 非跟随状态
- -define(PET_FOLLOW, 1). %% 跟随状态
-
- -define(SKILL_SLOT_LIST, [1,2,3,4]). %% 技能槽位列表
- %%-define(LIFE_SKILL, 1). %% 生活技能
- %%-define(PASSIVE_SKILL, 2). %% (被动)战斗技能
- %% 技能天赋类型细分
- -define(SKILL_LIFE, 0). %% 生活技能
- -define(SKILL_ATTR, 1). %% 玩家被动(属性)技能
- -define(SKILL_BATTLE, 2). %% 宠物技能(其实配的也是被动,宠物主战加在玩家身上)
-
- %% 主战位宠物拿战斗技能
- -define(PET_BATTLE_SKILL_SLOT, 1).
-
- %% 每天投票次数
- -define(DAY_VOTE_PET_COUNT, 3).
- %% 战力榜长度
- -define(PET_POWER_RANK_LEN, 8).
-
- %% 觉醒需要星级基础
- -define(PET_AWAKEN_NEED_STAR, 10).
-
- %% 普通支援加成比例
- -define(PET_NORMAL_SUPPORT_RATIO, 0.03).
-
- -define(SUPPORT_TIMES_ENOUGH, 0). %% 支援次数足够
- -define(SUPPORT_TIMES_OVER, 1). %% 支援次数已经达到上限
-
- -define(PET_SUPPORT_NOT_LOGIN, 0). %% 还未登录过
- -define(PET_SUPPORT_HAS_LOGIN, 1). %% 已经登录过
-
- %% 宠物Ets表数据
- -define(ETS_PET, ets_pet).
-
- -record(ets_role_pets, {
- rid = 0 %% 玩家Id
- ,pets = [] %% 宠物列表[#ets_pet_info{}],与status_pet里的pets不同,只保留部分字段
- }).
-
- -record(ets_pet_info, {
- pet_id = 0 %% 宠物Id
- ,pet_star = 0 %% 宠物星级
- ,pet_lv = 0 %% 宠物等级
- ,pet_attr = 0 %% 宠物属性
- ,pet_power = 0 %% 宠物战力
- }).
-
- %% 宠物基础数据
- -record(status_pet, {
- pets = [] %% 领养的宠物列表 [#pet_info{}...]
- ,follow_pet = 0 %% 跟随的宠物Id
- ,sum_pet_star = 0 %% 宠物总星级
- ,life_skills = [] %% 生活技能列表 格式:[SkillId1,SkillId2...]
- ,passive_skills = [] %% (被动)战斗技能列表,附加玩家身上 格式:[SkillId1,SkillId2...]
- ,battle_skills = [] %% 宠物战斗技能,主副战宠物 格式:[SkillId1,SkillId2...]
- ,attr_list = [] %% 所有宠物属性列表
- ,power = 0 %% 总战力
- ,extra_power = 0 %% 额外战力,目前有战力提供的额外战力
- ,open_support_slots = 0 %% 已经开启的槽位列表
- ,support_list = [] %% 宠物助战槽位 [#pet_support_slot{}...]
- ,vote_list = [] %% 宠物投票[pet_id...]
- ,support_times = 0 %% 当天宠物投票次数,限制在3次以内(为使统计数据尽量准确)
- ,receive_pet_list = [] %% 已领取的昨日投票榜奖励
- }).
-
- %% 单只宠物数据
- -record(pet_info, {
- pet_id = 0 %% 宠物Id
- ,pet_star = 0 %% 宠物星级
- ,pet_lv = 0 %% 宠物培养等级
- ,pet_exp = 0 %% 宠物当前培养经验值
- ,pet_life_skills = [] %% 生活技能列表 格式:[SkillId1,SkillId2...]
- ,pet_attr_skills = [] %% 属性技能列表 格式:[SkillId1,SkillId2...]
- ,pet_battle_skills = [] %% 战斗技能列表 格式:[SkillId1,SkillId2...]
- ,diamond_slots = [] %% 技能宝石槽位 [{SlotId,GoodsId}...]
- ,pet_attr = [] %% 属性列表
- ,pet_power = 0 %% 战力
- ,pet_extra_power = 0 %% 额外战力,目前有战力技能提供的战力
- ,adopt_time = 0 %% 领养的时间
- ,support_add_ratio = 0 %% 宠物助战属性增长比率 万分比的整数部分
- ,is_awaken = 0 %% 是否已觉醒
- ,old_power = 0 %% 前一次刷新的战力(也可以看做历史最高战力)
- %% ,pet_support_times = 0 %% 当天宠物全服支援次数
- }).
-
- %% 玩家宠物声援槽位数据
- -record(pet_support_slot, {
- slot_id = 0 %% 声援槽位
- ,pet_id = 0 %% 宠物Id
- }).
-
- %% 宠物全服战力排名
- -record(pet_power_rank_state, {
- rank_info_list = [] %% 排名信息 [#pet_power_rank_info{}...]
- ,yest_rank_info_list = [] %% 昨天排名信息 [#pet_power_rank_info{}] 只读
- ,center_rank_length = 0 %% 跨服榜单长度(进入跨服后 连接跨服/每天0点更新) 只读
- }).
-
- %% 宠物跨服战力排名
- -record(pet_power_rank_center_state, {
- rank_info_map = #{} %% 排名信息 #{zone=>[#pet_rank_info{}...]}
- ,yest_rank_info_map = #{} %% 昨天排名信息 #{zone=>[#pet_rank_info{}]} 只读
- ,tmp_rank_info_map = #{} %% #{zone=>[#pet_rank_info{}...]} 用于存放各个服上报的临时数据(有可能只是部分的服)
- ,tmp_up_servers = #{} %% #{zone=>[srv_id...]}已经上报的数据的区服(避免重复上报叠加数据)
- ,rezone_info_map = #{} %% #{old_zone=>[stage,new_zone]...} 当天重新分区数据,只存内存,4点结算时删除
- }).
-
- %% 游戏服上报跨服数据结构
- -record(up_pet_info, {
- pet_id = 0 %% 宠物Id
- ,player_id = 0 %% 玩家Id
- ,sex = 0 %% 玩家性别
- ,player_name = "" %% 玩家名称
- ,player_power = 0 %% 玩家战力
- ,vip = 0
- ,sup_vip = 0
- ,dress_id = 0
- ,photo_id = 0
- ,server_id = 0 %% 服务器Id(跨服使用)
- ,server_num = 0 %% 服务器Num(跨服使用)
- ,sum_power = 0 %% 总战力
- }).
-
- %% 宠物排名信息(old: 已废弃逻辑)
- -record(pet_rank_info, {
- rank = 0 %% 排名(如果是今天排行为0,由前端自行排序)
- ,pet_id = 0 %% 宠物Id
- ,player_id = 0 %% 玩家Id
- ,player_name = "" %% 玩家名称
- ,player_power = 0 %% 玩家战力
- ,support_count = 0 %% 支援人数
- ,support_ratio = 0 %% 声援率 万分比的整数部分
- }).
-
- %% 游戏服宠物战力榜
- -record(pet_power_rank_info, {
- rank = 0 %% 排名
- ,pet_id = 0 %% 宠物Id
- ,player_id = 0 %% 玩家Id
- ,pet_power = 0 %% 宠物战力(游戏服使用)
- ,sex = 0 %% 玩家性别
- ,player_name = "" %% 玩家名称
- ,player_power = 0 %% 玩家战力
- ,vip = 0
- ,sup_vip = 0
- ,dress_id = 0
- ,photo_id = 0
- ,server_id = 0 %% 最高战力玩家服务器Id(跨服使用)
- ,server_num = 0 %% 最高战力玩家服务器Num(跨服使用)
- ,sum_power = 0 %% 总战力
- }).
-
- %% ==================================== 后台配置 ===========================
- %% 宠物基础配置表
- -record(pet_cfg, {
- pet_id = 0 %% 宠物Id
- ,pet_name = "" %% 宠物名称
- ,pet_star = 0 %% 星级
- ,rare_degree = 0 %% 稀有度 1,普通 2,稀有 3,极品
- ,color = 0 %% 品质色
- ,pet_race = 0 %% 宠物种族
- ,attr_list = 0 %% 成长属性
- ,is_native_pet = 0 %% 是否原始宠物
- ,cost = [] %% 激活和进化碎片需求
- ,figure_id = 0 %% 形象资源Id
- ,illus_range = 0 %% 图鉴序列
- ,open_day = 0 %% 开启天数
- ,open_time = 0 %% 开启时间
- }).
-
- %% 宠物升级配置表
- -record(pet_grow_up_cfg, {
- pet_rare_degree = 0 %% 宠物稀有度(同稀有度升级逻辑相同)
- ,level = 0 %% 等级
- ,need_exp = 0 %% 升级需要经验值
- }).
-
- %% 种族经验道具表
- -record(pet_race_material_cfg, {
- race = 0 %% 种族
- ,cost_material = [] %% 消耗材料
- }).
-
- %% 宠物故事配置表
- -record(pet_story_cfg, {
- pet_id = 0 %% 宠物Id
- ,para_id = 0 %% 段落Id
- ,star = 0 %% 需求星级
- ,title = "" %% 正文标题
- ,content = "" %% 正文内容
- }).
-
- %% 宠物技能配置表
- -record(pet_skill_cfg, {
- pet_id = 0 %% 宠物Id
- ,skill_slot = 0 %% 槽位
- ,skill_talent_type = 0 %% 天赋类别
- ,skill_talent_id = 0 %% 天赋Id
- ,skill_ratio = 0 %% 技能系数(生活技能),战斗技能系数默认为0
- ,name = "" %% 技能名称
- ,desc = "" %% 技能描述
- ,active_star = 0 %% 开放星级
- }).
-
- %% 宠物宝石栏配置表
- -record(pet_diamond_storage_cfg, {
- diamond_id = 0 %% 宝石Id
- ,diamond_type = "" %% 宝石类型
- ,need_race = 0 %% 对应种族
- ,add_attr_list = [] %% 属性加成列表
- ,diamond_name = "" %% 宝石名称
- ,diamond_desc = "" %% 宝石效果描述
- }).
-
- %% 宠物声援阵位配置表
- -record(pet_support_slot_cfg, {
- slot_id = 0 %% 声援阵位
- ,attr_add_ratio = 0 %% 宠物属性加成比例
- ,open_sum_star = 0 %% 开放总星级(所有宠物累计星级)
- }).
-
- %% 宠物人气榜配置表
- -record(pet_support_rank_cfg, {
- rank = 0 %% 排名
- ,top_designation= 0 %% 头名玩家称号
- ,server_reward = [] %% 全服奖励
- ,pet_expression = "" %% 宠物随机发言
- }).
-
- %% 宠物觉醒配置表
- -record(pet_awaken_cfg, {
- pet_id = 0 %% 宠物Id
- ,need_star = 0 %% 需求星级
- ,cost_material = [] %% 需求材料
- ,add_attr = [] %% 属性加成
- ,skill_list = [] %% 技能替换
- }).
-
- %% 宠物宝石合成配置表
- -record(pet_stone_compound_cfg, {
- stone_id = 0 %% 宠物技能石Id
- ,compound_list = [] %% 合成列表
- }).
-
- %% 常量配置(直接后台生成配置,这里不配格式了)
-
- %% ============================= 数据库操作 ==================================
- %% 宠物基础信息
- -define(SQL_INSERT_PET, <<"REPLACE INTO role_pet (`role_id`, `pet_id`, `pet_star`, `pet_lv`, `pet_exp`, `adopt_time`,`is_awaken`, `old_power`)
- VALUES (~p, ~p, ~p, ~p, ~p, ~p, ~p, ~p)">>).
- -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">>).
-
- %% 宠物培养
- -define(SQL_UPDATE_PET, <<"UPDATE role_pet SET `pet_star` = ~p WHERE `role_id` = ~p and `pet_id` = ~p">>).
- -define(SQL_UPDATE_PET_LV, <<"UPDATE role_pet SET `pet_lv` = ~p, `pet_exp` = ~p WHERE `role_id` = ~p and `pet_id` = ~p">>).
- -define(SQL_UPDATE_PET_AWAKEN, <<"UPDATE role_pet SET `is_awaken` = 1 WHERE `role_id` = ~p and `pet_id` = ~p">>).
- -define(SQL_UPDATE_PET_POWER, <<"UPDATE role_pet SET `old_power` = ~p WHERE `role_id` = ~p and `pet_id` = ~p">>).
-
- %% 宠物技能相关
- -define(SQL_SAVE_PET_SKILL_DIAMOND, <<"REPLACE INTO pet_skill_diamond (`role_id`, `pet_id`, `diamond_slot`, `diamond_id`) VALUES (~p, ~p, ~p, ~p)">>).
- -define(SQL_SELECT_PET_SKILL_DIAMOND, <<"SELECT `diamond_slot`, `diamond_id` FROM pet_skill_diamond WHERE `role_id` = ~p AND `pet_id` = ~p">>).
- %%-define(SQL_DELETE_PET_SKILL_DIAMOND, <<"DELETE FROM pet_skill_diamond WHERE `role_id` = ~p and `pet_id` = ~p and `diamond_slot` = ~p">>).
- -define(SQL_UPDATE_PET_SKILL_DIAMOND, <<"REPLACE INTO pet_skill_diamond (`role_id`, `pet_id`, `diamond_slot`, `diamond_id`) VALUES (~p, ~p, ~p, ~p)">>).
-
- %% 宠物助战
- -define(SQL_SAVE_PET_SUPPORT_INFO, <<"REPLACE INTO pet_support_info (`role_id`, `slot_id`, `pet_id`, `time`) VALUES (~p, ~p, ~p, ~p)">>).
- -define(SQL_SELECT_PET_SUPPORT_INFO, <<"SELECT `slot_id`, `pet_id` FROM pet_support_info WHERE `role_id` = ~p">>).
- -define(SQL_UPDATE_PET_SUPPORT_PET, <<"UPDATE pet_support_info SET `pet_id` = ~p, `time` = ~p WHERE `role_id` = ~p AND `slot_id` = ~p">>).
- -define(SQL_UPDATE_PET_SUPPORT_SLOT, <<"UPDATE pet_support_info SET `slot_id` = ~p, `time` = ~p WHERE `role_id` = ~p AND `pet_id` = ~p">>).
- -define(SQL_BATCH_SAVE_PET_SUPPORT_SLOT, <<"REPLACE INTO pet_support_info (`role_id`, `slot_id`, `pet_id`, `time`) VALUES ~ts">>).
- -define(SQL_BATCH_SAVE_PET_SUPPORT_SLOT_VALUE, <<"(~p, ~p, ~p, ~p)">>).
-
- %% 宠物投票排行
- -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)">>).
- -define(SQL_SELECT_PET_SUPPORT_RANK, <<"SELECT `pet_id`, `role_id`, `support_count` FROM pet_support_rank">>).
- -define(SQL_SELECT_PET_SUPPORT_OLD_RANK, <<"SELECT `pet_id`, `yest_role_id`, `yest_support_count` FROM pet_support_rank">>).
- -define(SQL_UPDATE_PET_SUPPORT_COUNT, <<"UPDATE pet_support_rank SET `role_id` = ~p, `support_count` = ~p WHERE `pet_id` = ~p">>).
- -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">>).
- -define(SQL_UPDATE_PET_SUPPORT_RANK_POWER, <<"UPDATE pet_support_rank SET `role_id` = ~p WHERE `pet_id` = ~p">>).
-
- %% 宠物战力排行
- -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)">>).
- -define(SQL_SELECT_PET_POWER_RANK, <<"SELECT `pet_id`, `role_id`, `role_pet_power`, `sum_power` FROM pet_power_rank">>).
- -define(SQL_SELECT_PET_POWER_OLD_RANK, <<"SELECT `pet_id`, `yest_role_id`, `yest_sum_power` FROM pet_power_rank">>).
- -define(SQL_UPDATE_PET_POWER_RANK_POWER, <<"UPDATE pet_power_rank SET `role_id` = ~p, `sum_power` = ~p WHERE `pet_id` = ~p">>).
- -define(SQL_UPDATE_PET_POWER_RANK_INFO, <<"UPDATE pet_power_rank SET `yest_role_id` = ~p, `yest_sum_power` = ~p WHERE `pet_id` = ~p">>).
- -define(SQL_UPDATE_PET_POWER_RANK_ROLE, <<"UPDATE pet_power_rank SET `role_id` = ~p WHERE `pet_id` = ~p">>).
-
- %% 宠物战力跨服排行(只需要记录昨日的数据,今天数据由游戏服上报)
- -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">>).
- -define(SQL_SAVE_PET_POWER_CENTER_RANK_VALUE, <<"(~p, ~p, ~p, ~p, '~ts', ~p, ~p, ~p, ~p, ~p, ~p, ~p)">>).
- -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">>).
-
- %% 玩家宠物投票数据:投票次数,宠物列表,领取奖励列表
- -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')">>).
- -define(SQL_SELECT_PET_VOTE_INFO, <<"SELECT `vote_count`, `pet_list`, `receive_pet_list` FROM pet_vote_info WHERE `role_id` = ~p">>).
- -define(SQL_UPDATE_PET_VOTE_COUNT, <<"UPDATE pet_vote_info SET `vote_count` = ~p, `pet_list` = '~ts' WHERE `role_id` = ~p">>).
- -define(SQL_UPDATE_PET_VOTE_RECEIVE_LIST, <<"UPDATE pet_vote_info SET `receive_pet_list` = '~ts' WHERE `role_id` = ~p">>).
- -define(SQL_DELETE_PET_VOTE_INFO, <<"TRUNCATE table pet_vote_info">>).
|