add talent achievement rate

This commit is contained in:
Vick Scarlet
2021-09-10 13:16:44 +08:00
parent 166f3b8a58
commit 55caf12417
5 changed files with 69 additions and 18 deletions

View File

@@ -1,5 +1,6 @@
import { clone } from './functions/util.js';
import { checkCondition, extractMaxTriggers } from './functions/condition.js';
import { getRate } from './functions/addition.js';
class Talent {
constructor() {}
@@ -47,7 +48,29 @@ class Talent {
return null;
}
talentRandom(include) {
talentRandom(include, {times = 0, achievement = 0} = {}) {
const rate = { 1:100, 2:10, 3:1, };
const rateAddition = { 1:1, 2:1, 3:1, };
const timesRate = getRate('times', times);
const achievementRate = getRate('achievement', achievement);
for(const grade in timesRate)
rateAddition[grade] += timesRate[grade] - 1;
for(const grade in achievementRate)
rateAddition[grade] += achievementRate[grade] - 1;
for(const grade in rateAddition)
rate[grade] *= rateAddition[grade];
const randomGrade = () => {
let randomNumber = Math.floor(Math.random() * 1000);
if((randomNumber -= rate[3]) < 0) return 3;
if((randomNumber -= rate[2]) < 0) return 2;
if((randomNumber -= rate[1]) < 0) return 1;
return 0;
}
// 1000, 100, 10, 1
const talentList = {};
for(const talentId in this.#talents) {
@@ -63,15 +86,8 @@ class Talent {
return new Array(10)
.fill(1).map((v, i)=>{
if(!i && include) return include;
const gradeRandom = Math.random();
let grade;
if(gradeRandom>=0.111) grade = 0;
else if(gradeRandom>=0.011) grade = 1;
else if(gradeRandom>=0.001) grade = 2;
else grade = 3;
let grade = randomGrade();
while(talentList[grade].length == 0) grade--;
const length = talentList[grade].length;
const random = Math.floor(Math.random()*length) % length;