装备:天晶继承

This commit is contained in:
陆莹
2022-03-16 17:21:29 +08:00
parent 47d79df0b5
commit 535d588192
10 changed files with 930 additions and 45 deletions

View File

@@ -8,10 +8,10 @@ import { HeroModel, EPlace } from "../../../db/Hero";
import { calPlayerCeAndSave } from "../../../services/playerCeService";
import { gameData, getEquipByJobClassAndEPlace, getNextEquipQuality, getEquipStarIdByEquipId, getNextEquipStar } from "../../../pubUtils/data";
import { BAG, EQUIP } from "../../../pubUtils/dicParam";
import { getRandSeResult, updateEplace, updateEplaces, checkJewelCanPutOnEquip, updateStone, checkStoneCanPutOnEquip, checkTaskInComposeEquip, checkTaskInEquipLvUp, checkTaskInComposeStone, checkTaskInEquipReset, checkTaskInEquipQuench } from "../../../services/equipService";
import { getRandSeResult, updateEplace, updateEplaces, checkJewelCanPutOnEquip, updateStone, checkStoneCanPutOnEquip, checkTaskInComposeEquip, checkTaskInEquipLvUp, checkTaskInComposeStone, checkTaskInEquipReset, checkTaskInEquipQuench, isLocked } from "../../../services/equipService";
import { isNumber, pick } from 'underscore';
import { JewelModel } from "../../../db/Jewel";
import { JewelModel, RandSe } from "../../../db/Jewel";
import { getJewelRandSe } from "../../../pubUtils/itemUtils";
import { checkTaskInEquipQualityUp, checkTaskInEquipStarUp, checkTaskInPutJewel, checkTaskInPutStone } from '../../../services/equipService';
import { pushEquipQualityMax, pushEquipStarMax } from "../../../services/sysChatService";
@@ -723,4 +723,46 @@ export class EquipHandler {
return resResult(STATUS.SUCCESS, { goods });
}
public async inheritJewel(msg: { originJewel: number, targetJewel: number }, session: BackendSession) {
let { originJewel: originJewelId, targetJewel: targetJewelId } = msg;
let roleId: string = session.get('roleId');
let sid: string = session.get('sid');
let serverId: number = session.get('serverId');
let originJewel = await JewelModel.findbySeqId(originJewelId);
if(!originJewel || originJewel.roleId != roleId) return resResult(STATUS.JEWEL_IS_NOT_FIND);
if(originJewel.hid > 0) return resResult(STATUS.JEWEL_HAS_EQUPED);
let targetJewel = await JewelModel.findbySeqId(targetJewelId);
if(!targetJewel || targetJewel.roleId != roleId) return resResult(STATUS.JEWEL_IS_NOT_FIND);
if(isLocked(targetJewel.randSe)) return resResult(STATUS.JEWEL_LOCKED_CANNOT_INHERIT);
let dicOldJewel = gameData.jewel.get(originJewel.id);
if(!dicOldJewel) return resResult(STATUS.DIC_DATA_NOT_FOUND);
let dicJewel = gameData.jewel.get(targetJewel.id);
if(!dicJewel) return resResult(STATUS.DIC_DATA_NOT_FOUND);
if(dicJewel.eplaceId != dicOldJewel.eplaceId || dicJewel.lv < dicOldJewel.lv) {
return resResult(STATUS.JEWEL_CANNOT_INHERIT);
}
// 消耗
let consumeResult = await handleCost(roleId, sid, [
{ id: originJewel.id, seqId: originJewel.seqId},
...dicJewel.inheritConsume
], ITEM_CHANGE_REASON.ACT_DAILY_GK_BATTLE_END);
if(!consumeResult) return resResult(STATUS.ROLE_MATERIAL_NOT_ENOUGH);
let newRandSe = getRandSeResult(targetJewel.id, targetJewel.randSe, originJewel.randSe, originJewel.id);
let newJewel = await JewelModel.updateInfo(targetJewel.seqId, { previewRandSe: [], randSe: newRandSe });
// 更新战力
if(targetJewel.hid > 0) {
const hero = await HeroModel.findByHidAndRole(targetJewel.hid, roleId);
await calPlayerCeAndSave(HERO_SYSTEM_TYPE.JEWEL_RESET_RANDSE, sid, roleId, hero, {}, [targetJewel.ePlaceId], { oldJewel: originJewel, newJewel });
}
await checkTaskInEquipReset(serverId, roleId, sid);
return resResult(STATUS.SUCCESS, { curJewel: pick(newJewel, ['seqId', 'id', 'hid', 'ePlaceId', 'randSe', 'previewRandSe']) });
}
}

View File

@@ -1,15 +1,36 @@
import { getRandEelm, } from '../pubUtils/util';
import { EPlace, Stone } from "../db/Hero";
import { gameData } from "../pubUtils/data";
import { gameData, getRandEffectByGroupAndLevel } from "../pubUtils/data";
import { JewelType, RandSe } from '../db/Jewel';
import { getJewelRandSe } from '../pubUtils/itemUtils';
import { checkActivityTask, checkTask, checkTaskWithEplaces, checkTaskWithEplace } from './taskService';
import { TASK_TYPE } from '../consts';
import { DicRandomEffectPool } from '../pubUtils/dictionary/DicRandomEffectPool';
export function getRandSeResult(id: number, randSe: RandSe[]) {
let { randomEffect, effectCount } = gameData.jewel.get(id);
export function getRandSeResult(id: number, randSe: RandSe[], originSe: RandSe[] = [], originId?: number) {
let { randomEffect, effectCount, lv } = gameData.jewel.get(id);
let chosen = randSe.filter(cur => cur.locked).map(cur => cur.seid); // 上一轮随机出来的
let newRandSe: RandSe[] = []; // 随机结果
let startId = 0;
for(let { id, seid } of originSe) {
let { lv: oldLv } = gameData.jewel.get(originId);
// 替换成高阶
let dicRandomEffect = gameData.randomEffectPool.get(seid);
let nextRandEffect: DicRandomEffectPool;
let targetRandLv = dicRandomEffect.level + lv - oldLv;
while(!nextRandEffect) {
nextRandEffect = getRandEffectByGroupAndLevel(dicRandomEffect.group, targetRandLv);
targetRandLv--;
if(targetRandLv < 0) break;
}
let newSeid = nextRandEffect? nextRandEffect.id: seid;
newRandSe.push(getJewelRandSe(id, newSeid));
chosen.push(seid);
startId++;
}
let randomResult: number[] = getRandEelm(randomEffect.filter(cur => !chosen.includes(cur)), effectCount); // 随机出的结果
if(randomResult.length < effectCount) { // 去上轮之后不够,把上轮加入
let chosenRandom = getRandEelm(chosen, effectCount - randomResult.length);
@@ -20,8 +41,7 @@ export function getRandSeResult(id: number, randSe: RandSe[]) {
randomResult.push(...allRandom);
}
let newRandSe: RandSe[] = [];
for (let i = 0; i < effectCount; i++) {
for (let i = startId; i < effectCount; i++) {
if(randSe[i]) {
if(randSe[i] && randSe[i].locked) {
newRandSe.push(randSe[i]);
@@ -196,3 +216,11 @@ function getEquipById(oldEplace: EPlace[], newEplace: EPlace[], eplaceId: number
let newEquip = newEplace.find(cur => cur.id == eplaceId)||new EPlace(eplaceId, 0);
return { oldEquip, newEquip }
}
export function isLocked(randSe: RandSe[]) {
for(let { locked } of randSe) {
if(locked) return true;
}
return false;
}

View File

@@ -86,7 +86,7 @@ export async function checkActivityTask(serverId: number, sid: string, roleId: s
export async function pushActivityUpdate(roleId: string, sid: string, pushMessage: any[]) {
// console.log('pushActivityUpdate', JSON.stringify(pushMessage))
if (pushMessage.length > 0) {
if (pushMessage?.length > 0) {
if (!sid) {
let onlineUser = await getRoleOnlineInfo(roleId);
sid = onlineUser.sid;

View File

@@ -1008,6 +1008,7 @@ export enum ITEM_CHANGE_REASON {
ACT_TASK_PASS_SPD_UP = 143, // 活动-战令加速
ACT_GUILD_PAY_REWARD = 144, // 活动-军团人数奖励
RECEIVE_CHAPTER_BOX = 145, // 领取主线章节宝箱
JEWEL_INHERIT = 146, // 天晶继承
}
export enum TA_EVENT {

View File

@@ -336,6 +336,9 @@ export const STATUS = {
JEWEL_NOT_CHOOSEN_QUENCH: { code: 30533, simStr: '请选择一个淬炼词条' },
JEWEL_HAVE_NO_CUR_RANDSE: { code: 30534, simStr: '该天晶石上未找到该属性' },
JEWEL_IS_EQUIPED: { code: 30535, simStr: '该天晶石被装备中无法分解' },
JEWEL_LOCKED_CANNOT_INHERIT: { code: 30536, simStr: '该天晶石锁定中,无法进行继承' },
JEWEL_HAS_EQUPED: { code: 30537, simStr: '天晶石已经被装备' },
JEWEL_CANNOT_INHERIT: { code: 30538, simStr: '不能继承给类型不同或比自己低阶的天晶石' },
//全局养成30600-30699
ROLE_REACH_MAX_TITLE_LEVEL: { code: 30600, simStr: '玩家已达到最高的爵位' },

View File

@@ -22,7 +22,7 @@ import { maxFriendShipLv, dicFriendShipLevelMap, loadFriendShipLevel } from "./d
import { dicHeroQualityUp, loadHeroQualityUp } from "./dictionary/DicHeroQualityUp";
import { dicHeroStar, loadHeroStar } from "./dictionary/DicHeroStar";
import { dicHeroWake, loadHeroWake } from "./dictionary/DicHeroWake";
import { dicRandomEffectPool, loadRandomEffectPool } from './dictionary/DicRandomEffectPool';
import { dicRandomEffectPool, loadRandomEffectPool, dicRandomEffectPoolByGroupAndLv } from './dictionary/DicRandomEffectPool';
import { dicTitle, loadTitle } from './dictionary/DicTitle';
import { dicTeraph, loadTeraph } from './dictionary/DicTeraph';
import { dicSchool, loadSchool } from './dictionary/DicSchool';
@@ -137,6 +137,7 @@ export const gameData = {
maxFriendShipLv: maxFriendShipLv,
friendShipLevelMap: dicFriendShipLevelMap,
randomEffectPool: dicRandomEffectPool,
randomEffectPoolByGroupAndLv: dicRandomEffectPoolByGroupAndLv,
title: dicTitle,
teraphs: dicTeraph,
school: dicSchool,
@@ -863,6 +864,11 @@ export function getDicBlueprtById(id: number) {
return gameData.jewel.get(jewel);
}
export function getRandEffectByGroupAndLevel(group: number, level: number) {
let id = gameData.randomEffectPoolByGroupAndLv.get(`${group}_${level}`);
return gameData.randomEffectPool.get(id);
}
// 初始加载
function initDatas() {
parseDicParam();

View File

@@ -26,6 +26,8 @@ export interface DicJewel {
readonly quenchConsume: RewardInter[];
// 寻宝关卡id
readonly gkId: number;
// 继承消耗
readonly inheritConsume: RewardInter[];
}
export const dicJewel = new Map<number, DicJewel>();
@@ -39,6 +41,7 @@ export function loadJewel() {
arr.forEach(o => {
o.randomEffect = parseNumberList(o.randomEffect);
o.quenchConsume = parseGoodStr(o.quenchConsume);
o.inheritConsume = parseGoodStr(o.inheritConsume);
dicJewel.set(o.good_id, o);
dicBlueprt.set(o.mapGoodId, o.good_id);
if(!dicBlueprtByLv.has(o.lv)) {

View File

@@ -20,10 +20,15 @@ export interface DicRandomEffectPool {
readonly gap: number;
// 分割
readonly rate: {min: number, max: number, weight: number}[];
// 组别
readonly group: number;
// 等级
readonly level: number;
}
export const dicRandomEffectPool = new Map<number, DicRandomEffectPool>();
export const dicRandomEffectPoolByGroupAndLv = new Map<string, number>();
export function loadRandomEffectPool() {
dicRandomEffectPool.clear();
@@ -33,6 +38,7 @@ export function loadRandomEffectPool() {
o.rate = parseRate(o.count);
o.gainValueArr = parseNumberList(o.gainvalue);
dicRandomEffectPool.set(o.id, o);
dicRandomEffectPoolByGroupAndLv.set(`${o.group}_${o.level}`, o.id);
});
arr = undefined;
}

View File

@@ -12,7 +12,8 @@
"mapGoodId": 33001,
"quenchConsume": "31001&500",
"successConsume": "17057&100",
"gkId": 6001
"gkId": 6001,
"inheritConsume": "&"
},
{
"id": 2,
@@ -27,7 +28,8 @@
"mapGoodId": 33002,
"quenchConsume": "31001&500",
"successConsume": "17057&100",
"gkId": 6002
"gkId": 6002,
"inheritConsume": "17057&200"
},
{
"id": 3,
@@ -42,7 +44,8 @@
"mapGoodId": 33003,
"quenchConsume": "31001&500",
"successConsume": "17057&100",
"gkId": 6003
"gkId": 6003,
"inheritConsume": "17057&300"
},
{
"id": 4,
@@ -57,7 +60,8 @@
"mapGoodId": 33004,
"quenchConsume": "31001&500",
"successConsume": "17057&100",
"gkId": 6004
"gkId": 6004,
"inheritConsume": "17057&400"
},
{
"id": 5,
@@ -72,7 +76,8 @@
"mapGoodId": 33005,
"quenchConsume": "31001&500",
"successConsume": "17057&100",
"gkId": 6005
"gkId": 6005,
"inheritConsume": "17057&500"
},
{
"id": 6,
@@ -87,7 +92,8 @@
"mapGoodId": 33006,
"quenchConsume": "31001&500",
"successConsume": "17057&100",
"gkId": 6006
"gkId": 6006,
"inheritConsume": "17057&600"
},
{
"id": 7,
@@ -102,7 +108,8 @@
"mapGoodId": 33007,
"quenchConsume": "31001&500",
"successConsume": "17057&100",
"gkId": 6007
"gkId": 6007,
"inheritConsume": "17057&700"
},
{
"id": 8,
@@ -117,7 +124,8 @@
"mapGoodId": 33008,
"quenchConsume": "31001&500",
"successConsume": "17057&100",
"gkId": 6008
"gkId": 6008,
"inheritConsume": "17057&800"
},
{
"id": 9,
@@ -132,7 +140,8 @@
"mapGoodId": 33009,
"quenchConsume": "31001&500",
"successConsume": "17057&100",
"gkId": 6009
"gkId": 6009,
"inheritConsume": "17057&900"
},
{
"id": 10,
@@ -147,7 +156,8 @@
"mapGoodId": 33010,
"quenchConsume": "31001&500",
"successConsume": "17057&100",
"gkId": 6010
"gkId": 6010,
"inheritConsume": "&"
},
{
"id": 11,
@@ -162,7 +172,8 @@
"mapGoodId": 33011,
"quenchConsume": "31001&500",
"successConsume": "17057&100",
"gkId": 6011
"gkId": 6011,
"inheritConsume": "17057&200"
},
{
"id": 12,
@@ -177,7 +188,8 @@
"mapGoodId": 33012,
"quenchConsume": "31001&500",
"successConsume": "17057&100",
"gkId": 6012
"gkId": 6012,
"inheritConsume": "17057&300"
},
{
"id": 13,
@@ -192,7 +204,8 @@
"mapGoodId": 33013,
"quenchConsume": "31001&500",
"successConsume": "17057&100",
"gkId": 6013
"gkId": 6013,
"inheritConsume": "17057&400"
},
{
"id": 14,
@@ -207,7 +220,8 @@
"mapGoodId": 33014,
"quenchConsume": "31001&500",
"successConsume": "17057&100",
"gkId": 6014
"gkId": 6014,
"inheritConsume": "17057&500"
},
{
"id": 15,
@@ -222,7 +236,8 @@
"mapGoodId": 33015,
"quenchConsume": "31001&500",
"successConsume": "17057&100",
"gkId": 6015
"gkId": 6015,
"inheritConsume": "17057&600"
},
{
"id": 16,
@@ -237,7 +252,8 @@
"mapGoodId": 33016,
"quenchConsume": "31001&500",
"successConsume": "17057&100",
"gkId": 6016
"gkId": 6016,
"inheritConsume": "17057&700"
},
{
"id": 17,
@@ -252,7 +268,8 @@
"mapGoodId": 33017,
"quenchConsume": "31001&500",
"successConsume": "17057&100",
"gkId": 6017
"gkId": 6017,
"inheritConsume": "17057&800"
},
{
"id": 18,
@@ -267,7 +284,8 @@
"mapGoodId": 33018,
"quenchConsume": "31001&500",
"successConsume": "17057&100",
"gkId": 6018
"gkId": 6018,
"inheritConsume": "17057&900"
},
{
"id": 19,
@@ -282,7 +300,8 @@
"mapGoodId": 33019,
"quenchConsume": "31001&500",
"successConsume": "17057&100",
"gkId": 6019
"gkId": 6019,
"inheritConsume": "&"
},
{
"id": 20,
@@ -297,7 +316,8 @@
"mapGoodId": 33020,
"quenchConsume": "31001&500",
"successConsume": "17057&100",
"gkId": 6020
"gkId": 6020,
"inheritConsume": "17057&200"
},
{
"id": 21,
@@ -312,7 +332,8 @@
"mapGoodId": 33021,
"quenchConsume": "31001&500",
"successConsume": "17057&100",
"gkId": 6021
"gkId": 6021,
"inheritConsume": "17057&300"
},
{
"id": 22,
@@ -327,7 +348,8 @@
"mapGoodId": 33022,
"quenchConsume": "31001&500",
"successConsume": "17057&100",
"gkId": 6022
"gkId": 6022,
"inheritConsume": "17057&400"
},
{
"id": 23,
@@ -342,7 +364,8 @@
"mapGoodId": 33023,
"quenchConsume": "31001&500",
"successConsume": "17057&100",
"gkId": 6023
"gkId": 6023,
"inheritConsume": "17057&500"
},
{
"id": 24,
@@ -357,7 +380,8 @@
"mapGoodId": 33024,
"quenchConsume": "31001&500",
"successConsume": "17057&100",
"gkId": 6024
"gkId": 6024,
"inheritConsume": "17057&600"
},
{
"id": 25,
@@ -372,7 +396,8 @@
"mapGoodId": 33025,
"quenchConsume": "31001&500",
"successConsume": "17057&100",
"gkId": 6025
"gkId": 6025,
"inheritConsume": "17057&700"
},
{
"id": 26,
@@ -387,7 +412,8 @@
"mapGoodId": 33026,
"quenchConsume": "31001&500",
"successConsume": "17057&100",
"gkId": 6026
"gkId": 6026,
"inheritConsume": "17057&800"
},
{
"id": 27,
@@ -402,7 +428,8 @@
"mapGoodId": 33027,
"quenchConsume": "31001&500",
"successConsume": "17057&100",
"gkId": 6027
"gkId": 6027,
"inheritConsume": "17057&900"
},
{
"id": 28,
@@ -417,7 +444,8 @@
"mapGoodId": 33028,
"quenchConsume": "31001&500",
"successConsume": "17057&100",
"gkId": 6028
"gkId": 6028,
"inheritConsume": "&"
},
{
"id": 29,
@@ -432,7 +460,8 @@
"mapGoodId": 33029,
"quenchConsume": "31001&500",
"successConsume": "17057&100",
"gkId": 6029
"gkId": 6029,
"inheritConsume": "17057&200"
},
{
"id": 30,
@@ -447,7 +476,8 @@
"mapGoodId": 33030,
"quenchConsume": "31001&500",
"successConsume": "17057&100",
"gkId": 6030
"gkId": 6030,
"inheritConsume": "17057&300"
},
{
"id": 31,
@@ -462,7 +492,8 @@
"mapGoodId": 33031,
"quenchConsume": "31001&500",
"successConsume": "17057&100",
"gkId": 6031
"gkId": 6031,
"inheritConsume": "17057&400"
},
{
"id": 32,
@@ -477,7 +508,8 @@
"mapGoodId": 33032,
"quenchConsume": "31001&500",
"successConsume": "17057&100",
"gkId": 6032
"gkId": 6032,
"inheritConsume": "17057&500"
},
{
"id": 33,
@@ -492,7 +524,8 @@
"mapGoodId": 33033,
"quenchConsume": "31001&500",
"successConsume": "17057&100",
"gkId": 6033
"gkId": 6033,
"inheritConsume": "17057&600"
},
{
"id": 34,
@@ -507,7 +540,8 @@
"mapGoodId": 33034,
"quenchConsume": "31001&500",
"successConsume": "17057&100",
"gkId": 6034
"gkId": 6034,
"inheritConsume": "17057&700"
},
{
"id": 35,
@@ -522,7 +556,8 @@
"mapGoodId": 33035,
"quenchConsume": "31001&500",
"successConsume": "17057&100",
"gkId": 6035
"gkId": 6035,
"inheritConsume": "17057&800"
},
{
"id": 36,
@@ -537,6 +572,7 @@
"mapGoodId": 33036,
"quenchConsume": "31001&500",
"successConsume": "17057&100",
"gkId": 6036
"gkId": 6036,
"inheritConsume": "17057&900"
}
]

File diff suppressed because it is too large Load Diff