mirror of
https://github.com/VickScarlet/lifeRestart.git
synced 2026-02-04 23:03:12 +08:00
add talent achievement rate
This commit is contained in:
File diff suppressed because one or more lines are too long
33
src/app.js
33
src/app.js
@@ -1,5 +1,5 @@
|
||||
import { summary } from './functions/summary.js';
|
||||
import { getGrade } from './functions/addition.js';
|
||||
import { getRate, getGrade } from './functions/addition.js';
|
||||
import Life from './life.js';
|
||||
|
||||
class App{
|
||||
@@ -516,14 +516,35 @@ class App{
|
||||
total.empty();
|
||||
achievements.empty();
|
||||
|
||||
`<li><span class="achievementtitle">重开次数</span>紫色几率翻倍</li>`
|
||||
const formatRate = (type, value) => {
|
||||
const rate = getRate(type, value);
|
||||
let color = Object.keys(rate)[0];
|
||||
switch(parseInt(color)) {
|
||||
case 0: color = '白色'; break;
|
||||
case 1: color = '蓝色'; break;
|
||||
case 2: color = '紫色'; break;
|
||||
case 3: color = '橙色'; break;
|
||||
default: break;
|
||||
}
|
||||
let r = Object.values(rate)[0];
|
||||
switch(parseInt(r)) {
|
||||
case 1: r = '不变'; break;
|
||||
case 2: r = '翻倍'; break;
|
||||
case 3: r = '三倍'; break;
|
||||
case 4: r = '四倍'; break;
|
||||
case 5: r = '五倍'; break;
|
||||
case 6: r = '六倍'; break;
|
||||
default: break;
|
||||
}
|
||||
return `抽到${color}概率${r}`;
|
||||
}
|
||||
|
||||
const { times, achievement, talentRate, eventRate } = this.#life.getTotal();
|
||||
total.append(`
|
||||
<li class="achvg${getGrade('times', times)}"><span class="achievementtitle">已重开${times}次</span>抽到紫色几率不变</li>
|
||||
<li class="achvg${getGrade('achievement', achievement)}"><span class="achievementtitle">成就达成${achievement}个</span>抽到橙色几率翻倍</li>
|
||||
<li class="achvg${getGrade('talentRate', talentRate)}"><span class="achievementtitle">事件收集率</span>${Math.floor(talentRate * 100)}%</li>
|
||||
<li class="achvg${getGrade('eventRate', eventRate)}"><span class="achievementtitle">天赋选择率</span>${Math.floor(eventRate * 100)}%</li>
|
||||
<li class="achvg${getGrade('times', times)}"><span class="achievementtitle">已重开${times}次</span>${formatRate('times', times)}</li>
|
||||
<li class="achvg${getGrade('achievement', achievement)}"><span class="achievementtitle">成就达成${achievement}个</span>${formatRate('achievement', achievement)}</li>
|
||||
<li class="achvg${getGrade('eventRate', eventRate)}"><span class="achievementtitle">事件选择率</span>${Math.floor(eventRate * 100)}%</li>
|
||||
<li class="achvg${getGrade('talentRate', talentRate)}"><span class="achievementtitle">天赋收集率</span>${Math.floor(talentRate * 100)}%</li>
|
||||
`);
|
||||
|
||||
const achievementsData = this.#life.getAchievements();
|
||||
|
||||
@@ -1,8 +1,20 @@
|
||||
export function getRate(type, value) {
|
||||
switch(type) {
|
||||
case 'times':
|
||||
if(value >= 100) return {2:6};
|
||||
if(value >= 70) return {2:5};
|
||||
if(value >= 50) return {2:4};
|
||||
if(value >= 30) return {2:3};
|
||||
if(value >= 10) return {2:2};
|
||||
return {2: 1};
|
||||
case 'achievement':
|
||||
default: return 0;
|
||||
if(value >= 100) return {3:6};
|
||||
if(value >= 70) return {3:5};
|
||||
if(value >= 50) return {3:4};
|
||||
if(value >= 30) return {3:3};
|
||||
if(value >= 10) return {3:2};
|
||||
return {3:1};
|
||||
default: return {};
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -116,7 +116,9 @@ class Life {
|
||||
}
|
||||
|
||||
talentRandom() {
|
||||
return this.#talent.talentRandom(this.getLastExtendTalent());
|
||||
const times = this.#property.get(this.#property.TYPES.TMS);
|
||||
const achievement = this.#property.get(this.#property.TYPES.CACHV);
|
||||
return this.#talent.talentRandom(this.getLastExtendTalent(), { times, achievement });
|
||||
}
|
||||
|
||||
talentExtend(talentId) {
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user