属性随机使用既有方法

This commit is contained in:
luying
2020-12-23 11:52:02 +08:00
parent af8c89db20
commit 9746f53570
3 changed files with 36 additions and 25 deletions
@@ -1,7 +1,7 @@
import { Application, BackendSession } from "pinus"; 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 { 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 { 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 { addItems, handleCost } from "../../../services/rewardService";
import { EquipModel, RandSe } from "../../../db/Equip"; import { EquipModel, RandSe } from "../../../db/Equip";
import { HeroModel, EPlace } from "../../../db/Hero"; import { HeroModel, EPlace } from "../../../db/Hero";
@@ -9,7 +9,7 @@ import Role from "../../../db/Role";
import { calPlayerCeAndSave } from "../../../services/playerCeService"; import { calPlayerCeAndSave } from "../../../services/playerCeService";
import { getHeroJob, getGoodById, gameData, getJewelById, getHeroEquipByClassId } from "../../../pubUtils/data"; import { getHeroJob, getGoodById, gameData, getJewelById, getHeroEquipByClassId } from "../../../pubUtils/data";
import { EQUIP } from "../../../pubUtils/dicParam"; 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'); const _ = require('underscore');
@@ -271,28 +271,28 @@ export class EquipHandler {
if (!dicGoods) return resResult(STATUS.DIC_DATA_NOT_FOUND); if (!dicGoods) return resResult(STATUS.DIC_DATA_NOT_FOUND);
let { randomEffect } = dicGoods; let { randomEffect } = dicGoods;
let pool = randomEffect.map(cur => gameData.randomEffectPool.get(cur)); let chosen = randSe.map(cur => cur.seid); // 上一轮随机出来的
let chosen = randSe.map(cur => cur.seid); // 上一轮和这一轮随机出来的 let randomResult: number[] = getRandEelm(randomEffect.filter(cur => !chosen.includes(cur)), randSe.length);
let hasReset = false, lockNum = 0;
let lockNum = 0;
let removeSeidList = new Array<number>(); // 原装备上的seid [seid, rand, ...] let removeSeidList = new Array<number>(); // 原装备上的seid [seid, rand, ...]
for(let i = 0; i < randSe.length; i++) { for(let i = 0; i < randSe.length; i++) {
removeSeidList.push(randSe[i].seid, randSe[i].rand); removeSeidList.push(randSe[i].seid, randSe[i].rand);
if(!randSe[i].locked) { if(!randSe[i].locked) {
let newPool = pool.filter(cur => !chosen.includes(cur.id)); let random = gameData.randomEffectPool.get(randomResult[i]);
let random = getRandomByLen(newPool); if (!random) break ;
if (!random) { break };
let rand = 0; 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].seid = random.id;
randSe[i].rand = rand; randSe[i].rand = rand;
hasReset = true;
} else { } else {
lockNum++; lockNum++;
} }
} }
if (!hasReset) {
if (lockNum >= randSe.length) {
return resResult(STATUS.ROLE_EQUIP_CANNOT_RESTRENGTHEN); return resResult(STATUS.ROLE_EQUIP_CANNOT_RESTRENGTHEN);
} }
+12 -14
View File
@@ -6,7 +6,7 @@ import { EquipModel, RandSe, Holes } from './../db/Equip';
import { BagInter, EquipInter } from './interface'; import { BagInter, EquipInter } from './interface';
import { gameData } from './data'; import { gameData } from './data';
import { RANDOM_SE_COUNT, FIX_ATTRIBUTES_RAN, ITID } from '../consts'; import { RANDOM_SE_COUNT, FIX_ATTRIBUTES_RAN, ITID } from '../consts';
import { getRandomByLen } from './util'; import { getRandValueByMinMax, getRandEelm } from './util';
const _ = require('underscore'); const _ = require('underscore');
@@ -35,24 +35,22 @@ export async function addEquips(roleId: string, roleName: string, weapon: EquipI
let {type} = ITID.get(itid); let {type} = ITID.get(itid);
let randomNum = RANDOM_SE_COUNT.get(quality); let randomNum = RANDOM_SE_COUNT.get(quality);
let pool = randomEffect.map(cur => gameData.randomEffectPool.get(cur)); let randomResult: number[] = getRandEelm(randomEffect, randomNum);
let chosen = new Array<number>();
let randSe = new Array<RandSe>(); let randSe: Array<RandSe> = randomResult.map((id: number, i: number) => {
for(let i = 0; i < randomNum; i++) { let random = gameData.randomEffectPool.get(id)
pool = pool.filter(cur => !chosen.includes(cur.id));
let random = getRandomByLen(pool);
if(!random) break;
chosen.push(random.id);
let rand = 0; 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.push({ return {
id: i + 1, id: i + 1,
seid: random.id, seid: random.id,
rand, rand,
locked: false 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<Holes>(); let holes = new Array<Holes>();
for(let i = 0; i < hole; i++) { for(let i = 0; i < hole; i++) {
holes.push({id: i+1, isOpen: false, jewel: 0}) holes.push({id: i+1, isOpen: false, jewel: 0})
+13
View File
@@ -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)); 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 = '') { export function resResult(status: {code: number, simStr: string}, data = null, customMsg = '') {
const { code, simStr } = status; const { code, simStr } = status;
if (code !== STATUS.SUCCESS.code) { if (code !== STATUS.SUCCESS.code) {