import { getRandNum, getRandomArr } from '../pubUtils/util'; import { TERAPH_RANDOM } from "../consts/consts"; const _ = require('underscore'); const TERAPH_STRENGTHEN = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; export function checkMaterialEnough(count: number, attrs:Array, teraphInfo: any, teraph: any) { let res = {}; let consumes = []; let times = 0; if (count < 10) { for (let i = 0; i < count; i++) { if (!attrs.length) { break; } let num = getRandNum(TERAPH_RANDOM.MIN, TERAPH_RANDOM.MAX); let arr = getRandomArr(attrs, num) let critical = getRandNum(0, 100); let criEffect = 1; if (critical <= teraphInfo.criRate) criEffect = teraphInfo.criEffect; for (let attrName of arr) { let attrNameMax = attrName+'Max'; res[attrName] = teraphInfo[attrName] * criEffect; if (teraph[attrName] + res[attrName] > teraphInfo[attrNameMax]) { res[attrName] = teraphInfo[attrNameMax] - teraph[attrName]; let attrIndex = _.indexOf(attrs, attrName); attrs.splice(attrIndex, 1); } } times++; } } else if (count == 10){ let criticalArr = getRandomArr(TERAPH_STRENGTHEN, 2); for (let item of TERAPH_STRENGTHEN) { if (!attrs.length) { break; } let criEffect = 1; let index = _.indexOf(criticalArr, {item}); if (index > 0) { criEffect = teraphInfo.criEffect; } let num = getRandNum(TERAPH_RANDOM.MIN, TERAPH_RANDOM.MAX); let arr = getRandomArr(attrs, num); for (let attrName of arr) { res[attrName] = (res[attrName]||0) + teraphInfo[attrName] * criEffect; let attrNameMax = attrName+'Max'; if (teraph[attrName] + res[attrName] > teraphInfo[attrNameMax]) { res[attrName] = teraphInfo[attrNameMax] - teraph[attrName]; let attrIndex = _.indexOf(attrs, attrName); attrs.splice(attrIndex, 1); } } times++; } } for (let {id, count} of teraphInfo.upMaterial) { consumes.push({ id, count: count*times}); } return {attr: res, consumes}; }