diff --git a/src/tool/random.ts b/src/tool/random.ts index 4d57178..110fdbe 100644 --- a/src/tool/random.ts +++ b/src/tool/random.ts @@ -1,15 +1,18 @@ -import { difficultys } from '@/config'; -import { qualitys, createWeapon, createArmor, createNeck, createRing, createJewelry, createpants, createshoes, createbracers } from '@/config/equips'; +import { difficultys, Categorys, qualitys } from '@/config'; +import * as Equips from '@/config/equips'; -const creators = new Array(); -creators.push(createWeapon); -creators.push(createArmor); -creators.push(createNeck); -creators.push(createRing); -creators.push(createJewelry); -creators.push(createpants); -creators.push(createshoes); -creators.push(createbracers); +const types = ['weapon', 'arrmor', 'neck', 'ring', 'jewelry', 'bracers', 'pants', 'shoes']; +const normal: Categorys[] = new Array(); +const uniques: Categorys[] = new Array(); +const colorfuls: Categorys[] = new Array(); +types.forEach((type) => { + const nkey = type + 'Categorys'; + Array.prototype.push.apply(normal, Equips[nkey]); + const ukey = type + 'UniqueCategorys'; + Array.prototype.push.apply(uniques, Equips[ukey]); + const ckey = type + 'ColorfulCategorys'; + Array.prototype.push.apply(colorfuls, Equips[ckey]); +}); export const randonBootyEquip = (monster) => { const equips = new Array(); @@ -27,6 +30,26 @@ export const randonBootyEquip = (monster) => { }; export const randomEquip = (rates, lv) => { + const quality = randomQuality(rates); + if (quality) { + lv = randomLv(lv, quality); + const category = randomCategory(quality); + const creator = Equips['create' + category.type]; + return creator(quality, lv, category); + } else { + return null; + } +}; +const randomLv = (lv, quality) => { + if (quality == qualitys[4] || quality == qualitys[5]) { + lv += Math.floor(Math.random() * 6); + } else { + lv += Math.floor(Math.random() * 3); + } + lv = lv > 100 ? 100 : lv; + return lv; +}; +const randomQuality = (rates) => { const r = Math.random(); let tmp = 0; let quality = ''; @@ -37,17 +60,25 @@ export const randomEquip = (rates, lv) => { break; } } - if (quality) { - if (quality == qualitys[4] || quality == qualitys[5]) { - lv += Math.floor(Math.random() * 6); - } else { - lv += Math.floor(Math.random() * 3); + return quality; +}; +const randomCategory = (quality): Categorys => { + let categorys = normal; + if (quality == qualitys[4]) { + categorys = uniques; + } else if (quality == qualitys[5]) { + categorys = colorfuls; + } + while (true) { + const category = categorys[Math.floor(Math.random() * categorys.length)]; + if (category.reRoll > 0) { + console.log('重ROLL概率:' + category.reRoll); } - lv = lv > 100 ? 100 : lv; - const creator = creators[Math.floor(Math.random() * creators.length)]; - return creator(quality, lv); - } else { - return null; + if (category.reRoll > 0 && Math.random() < category.reRoll) { + console.log('重ROLL'); + continue; + } + return category; } };