如果人生可以重开的话,我选择开挂
背景
最近发现Github上一款比较火的小游戏,人生重开模拟器。对于一个老非酋来说,什么胎死腹中、生了一场重病就一命呜呼了等等莫名其妙的死法都是常规操作了。
于是乎,开始魔改数据ing。。。

游戏界面
环境配置
开发环境
- Webstorm
- nodejs(推荐使用scoop安装nvm管理node版本)
- git
下载运行项目
直接使用Webstorm克隆lifeRestart项目。
克隆后,在终端执行命令npm install
安装依赖;每次修改后,执行命令npm run build
重新编译;执行命令npm run dev
即可在本地部署游戏。
> xlsx_transform@ dev D:\Workspace\Webstorm\lifeRestart
> webpack serve --open /view/index.html
<i> [webpack-dev-server] Project is running at:
<i> [webpack-dev-server] Loopback: http://localhost:8080/
<i> [webpack-dev-server] On Your Network (IPv4): http://10.39.103.140:8080/
<i> [webpack-dev-server] On Your Network (IPv6): http://[fe80::1c2b:20b8:519a:6583]:8080/
<i> [webpack-dev-server] Content not from webpack is served from
'D:\Workspace\Webstorm\lifeRestart\data,
D:\Workspace\Webstorm\lifeRestart\public,
D:\Workspace\Webstorm\lifeRestart\view' directory
<i> [webpack-dev-middleware] wait until bundle finished: /view/index.html
asset bundle.js 1.22 MiB [emitted] [minimized] [big] (name: main)
...
魔改
修改天赋概率
- 修改
talent.js
代码
talentRandom(include) {
const talentList = {};
for(const talentId in this.#talents) {
const { id, grade, name, description } = this.#talents[talentId];
if(id == include) {
include = { grade, name, description, id };
continue;
}
if(!talentList[grade]) talentList[grade] = [{ grade, name, description, id }];
else talentList[grade].push({ grade, name, description, id });
}
return new Array(10)
.fill(1).map((v, i)=>{
if(!i && include) return include;
const gradeRandom = Math.random();
let grade;
/**
* grade代表天赋等级,3级代表最高等级
* P(grade=0) = 1-0.990
* P(grade=1) = 1-0.980
* P(grade=2) = 1-0.970
* P(grade=3) = 0.970
* 所以上面魔改使每次刷新基本必出高等级天赋(除非你太'欧'了)
*/
if(gradeRandom>=0.990) grade = 0;
else if(gradeRandom>=0.980) grade = 1;
else if(gradeRandom>=0.970) grade = 2;
else grade = 3;
while(talentList[grade].length == 0) grade--;
const length = talentList[grade].length;
const random = Math.floor(Math.random()*length) % length;
return talentList[grade].splice(random,1)[0];
});
}
修改属性点
- 修改
app.js
代码
// 代码一
talentPage
.find('#next')
.click(()=>{
if(this.#talentSelected.size!=5) {
this.hint('请选择3个天赋');
return;
}
// 初始属性点totalMax默认20+...,这里魔改成80000+
this.#totalMax = 80000 + this.#life.getTalentAllocationAddition(Array.from(this.#talentSelected).map(({id})=>id));
this.switch('property');
})
// 代码二
// 这里的20000代表属性值上限,保证这些属性值上限值的和大于代码一中的totalMax值
groups.CHR = getBtnGroups("颜值", 0, 20000); // 颜值 charm CHR
groups.INT = getBtnGroups("智力", 0, 20000); // 智力 intelligence INT
groups.STR = getBtnGroups("体质", 0, 20000); // 体质 strength STR
groups.MNY = getBtnGroups("家境", 0, 20000); // 家境 money MNY
修改随机事件
- 修改
age.json
数据
"315": {
"age": "315",
"event": [
"10380*100",
"10381*100",
"10382*100",
"10383*100",
"10384*100",
"10386*10",
"10387*10",
"10388*10",
"10389*10",
"10390*10"
]
},
为了保证修仙能够渡劫成功,必须触发五个事件你悟出了金(木水火土)之大道
,和任意一个事件你悟出了空间(时间、混沌、生命、毁灭)大道。
,对应事件的id
为10380~10384,10386~10390
。
所以,我们要做的是保证在300~500
岁之间有足够的概率触发上述事件。拿315岁举例,键event
对应的数组值代表可能触发的事件(经过条件过滤前的所有可能),10380*100
表示id为10380
的事件发生的权重为100
。权重越大,发生概率越大,剩下的你懂了吧。
结果
必须选择的天赋为神秘小盒子
,剩下的随便选吧。
1
魔改后的天赋抽卡界面
2
飞升界面
3
人生总结界面