From 9746f53570d5d5326054c36b1513cef8d915b2b7 Mon Sep 17 00:00:00 2001 From: luying Date: Wed, 23 Dec 2020 11:51:45 +0800 Subject: [PATCH] =?UTF-8?q?=E5=B1=9E=E6=80=A7=E9=9A=8F=E6=9C=BA=E4=BD=BF?= =?UTF-8?q?=E7=94=A8=E6=97=A2=E6=9C=89=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../app/servers/role/handler/equipHandler.ts | 22 ++++++++-------- shared/pubUtils/itemUtils.ts | 26 +++++++++---------- shared/pubUtils/util.ts | 13 ++++++++++ 3 files changed, 36 insertions(+), 25 deletions(-) diff --git a/game-server/app/servers/role/handler/equipHandler.ts b/game-server/app/servers/role/handler/equipHandler.ts index 2614bbef6..ebd09bd2b 100644 --- a/game-server/app/servers/role/handler/equipHandler.ts +++ b/game-server/app/servers/role/handler/equipHandler.ts @@ -1,7 +1,7 @@ import { Application, BackendSession } from "pinus"; import { STATUS, EQUIP_STRENGTHEN_TYPE, CURRENCY_BY_TYPE, CURRENCY_TYPE, HERO_SYSTEM_TYPE, CONSUME_TYPE, GOOD_TYPE, HERO_GROW_MAX } from "../../../consts"; import { ItemInter } from "../../../pubUtils/interface"; -import { resResult, parseGoodStr, getRandomByLen, deepCopy } from "../../../pubUtils/util"; +import { resResult, parseGoodStr, getRandomByLen, deepCopy, getRandValueByMinMax, getRandEelm } from "../../../pubUtils/util"; import { addItems, handleCost } from "../../../services/rewardService"; import { EquipModel, RandSe } from "../../../db/Equip"; import { HeroModel, EPlace } from "../../../db/Hero"; @@ -9,7 +9,7 @@ import Role from "../../../db/Role"; import { calPlayerCeAndSave } from "../../../services/playerCeService"; import { getHeroJob, getGoodById, gameData, getJewelById, getHeroEquipByClassId } from "../../../pubUtils/data"; import { EQUIP } from "../../../pubUtils/dicParam"; -import { ITID, SPEICAL_ITEM } from "../../../consts/constModules/itemConst"; +import { ITID, SPEICAL_ITEM, RANDOM_SE_COUNT } from "../../../consts/constModules/itemConst"; const _ = require('underscore'); @@ -271,28 +271,28 @@ export class EquipHandler { if (!dicGoods) return resResult(STATUS.DIC_DATA_NOT_FOUND); let { randomEffect } = dicGoods; - let pool = randomEffect.map(cur => gameData.randomEffectPool.get(cur)); - let chosen = randSe.map(cur => cur.seid); // 上一轮和这一轮随机出来的 - let hasReset = false, lockNum = 0; + let chosen = randSe.map(cur => cur.seid); // 上一轮随机出来的 + let randomResult: number[] = getRandEelm(randomEffect.filter(cur => !chosen.includes(cur)), randSe.length); + let lockNum = 0; let removeSeidList = new Array(); // 原装备上的seid [seid, rand, ...] + for(let i = 0; i < randSe.length; i++) { removeSeidList.push(randSe[i].seid, randSe[i].rand); if(!randSe[i].locked) { - let newPool = pool.filter(cur => !chosen.includes(cur.id)); - let random = getRandomByLen(newPool); - if (!random) { break }; + let random = gameData.randomEffectPool.get(randomResult[i]); + if (!random) break ; let rand = 0; - if (random.id > 0) rand = Math.floor(Math.random() * (random.Max - random.Min) + random.Min); + if (random.id > 0) rand = getRandValueByMinMax(random.Min, random.Max, 0); randSe[i].seid = random.id; randSe[i].rand = rand; - hasReset = true; } else { lockNum++; } } - if (!hasReset) { + + if (lockNum >= randSe.length) { return resResult(STATUS.ROLE_EQUIP_CANNOT_RESTRENGTHEN); } diff --git a/shared/pubUtils/itemUtils.ts b/shared/pubUtils/itemUtils.ts index a8b5176d7..acfec812d 100644 --- a/shared/pubUtils/itemUtils.ts +++ b/shared/pubUtils/itemUtils.ts @@ -6,7 +6,7 @@ import { EquipModel, RandSe, Holes } from './../db/Equip'; import { BagInter, EquipInter } from './interface'; import { gameData } from './data'; import { RANDOM_SE_COUNT, FIX_ATTRIBUTES_RAN, ITID } from '../consts'; -import { getRandomByLen } from './util'; +import { getRandValueByMinMax, getRandEelm } from './util'; const _ = require('underscore'); @@ -35,24 +35,22 @@ export async function addEquips(roleId: string, roleName: string, weapon: EquipI let {type} = ITID.get(itid); let randomNum = RANDOM_SE_COUNT.get(quality); - let pool = randomEffect.map(cur => gameData.randomEffectPool.get(cur)); - let chosen = new Array(); - let randSe = new Array(); - for(let i = 0; i < randomNum; i++) { - pool = pool.filter(cur => !chosen.includes(cur.id)); - let random = getRandomByLen(pool); - if(!random) break; - chosen.push(random.id); + let randomResult: number[] = getRandEelm(randomEffect, randomNum); + + let randSe: Array = randomResult.map((id: number, i: number) => { + let random = gameData.randomEffectPool.get(id) let rand = 0; - if(random.id > 0) rand = Math.floor(Math.random() * (random.Max - random.Min) + random.Min); - randSe.push({ + if(random.id > 0) rand = getRandValueByMinMax(random.Min, random.Max, 0); + return { id: i + 1, seid: random.id, rand, locked: false - }); - } - let randRange = Math.floor(Math.random() * FIX_ATTRIBUTES_RAN * 2) - FIX_ATTRIBUTES_RAN; + }; + }); + + let randRange = getRandValueByMinMax(0 - FIX_ATTRIBUTES_RAN, FIX_ATTRIBUTES_RAN, 0); + let holes = new Array(); for(let i = 0; i < hole; i++) { holes.push({id: i+1, isOpen: false, jewel: 0}) diff --git a/shared/pubUtils/util.ts b/shared/pubUtils/util.ts index 3243495b0..dc3c5b6ac 100644 --- a/shared/pubUtils/util.ts +++ b/shared/pubUtils/util.ts @@ -293,6 +293,19 @@ export function getRandValue(base: number, ratio: number, decimal = 2): number { return parseFloat((base * (1 - ratio + Math.random() * ratio * 2)).toFixed(decimal)); } + +/** + * 在给定最大最小值中随机一个值 + * @param min 最小 + * @param max 最大 + * @param decimal 返回值保留的小数位数 + */ +export function getRandValueByMinMax(min: number, max: number, decimal = 2): number { + return parseFloat((min + (max - min) * Math.random()).toFixed(decimal)); + +} + + export function resResult(status: {code: number, simStr: string}, data = null, customMsg = '') { const { code, simStr } = status; if (code !== STATUS.SUCCESS.code) {