%%%------------------------------------------------------------------- %%% @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">>).