三水非冰 发表于 2021-9-12 14:41

[魔改]人生重开模拟器

# 前言
  不知道为啥,一款开源的文字类web游戏——《人生重开模拟器》突然爆火,好奇玩了一会儿,发现这游戏其实和抽奖差不多,容易激发人的赌徒心理。倍感无聊,决定修改一下,给游戏添加个外挂天赋,毕竟重生总得带点什么逆天功能才合理的嘛。

  游戏代码不是很复杂,来来回回几个js文件,如果你要修改面板属性之类的其他东西,也是如此。这里以添加一个“不灭金身”天赋为例。

  游戏官方源码:https://github.com/VickScarlet/lifeRestart

# 配置数据

## 天赋 talent.json
添加:
```json
"1135": { //与id一致
    "id": 1135, //根据原有数据情况进行修改,不要和原有数据id相同
    "name": "不灭金身",//天赋名
    "description": "体质小于1时体质+10且死亡后会复活",//天赋说明
    "condition": "STR<1",//触发天赋的条件
    "grade": 3,//稀有度,越高越稀有
    "effect": {
      "STR": 10//体质+10
    }
}
```

## 剧情 event.json
修改:
```json
"10000": {
    "id": 10000,
    "event": "你死了。",
    "effect": {
      "LIF": -1
    },
    "NoRandom": 1
},
```
如下:
```json
"10000": {
    "id": 10000,
    "event": "你死了。",
    "effect": {
      "LIF": -1
    },
    "NoRandom": 1,
    "branch": [
      "TLT?:40062" // TLT?[不灭金身天赋id]:对应的剧情id
    ]
},
```

添加:
```json
"40062": { //与id一致
    "id": 40062,//根据原有数据情况进行修改,不要和原有数据id相同
    "event": "你是神选之子,拥有不灭金身,原地复活,又开始了新的人生。",//剧情说明
    "effect": {
      "LIF": 1//生命+1
    },
    "branch": [
      "AGE>499:40050" //目前的游戏设定最高500岁(不修仙99岁),大于499时必须死,看情况修改
    ],
    "NoRandom": 1 //非随机事件
}
```

# 修改代码

## life.js

添加方法:

```javascript
talentCheat(){
    return this.#talent.talentCheat();
}
```

## talent.js

添加方法:

```javascript
talentCheat(){
    return this.#talents;
}
```

## app.js

添加一个按钮:
```html
<button id="cheat" class="sponsor" style="margin:30px">神选之子</button>
```
如下:
```javascript
const talentPage = $(`
    <div id="main">
      <div class="head" style="font-size: 1.6rem">天赋抽卡</div>
      <button id="random" class="mainbtn" style="position: fixed; top: 50%; left: 50%; transform: translate(-50%, -50%);"">10连抽!</button>
      <ul id="talents" class="selectlist"></ul>
      <button id="next" class="mainbtn">请选择3个</button>
      <button id="cheat" class="sponsor" style="margin:30px">神选之子</button>
    </div>
`);
```

跳过随机天赋列表:

```javascript
if(talent.id==1135){ //配置的天赋id
    return true; //如果天赋列表中随机到【不灭金身】天赋则跳过本次循环
}
```
如下:
```javascript
talentPage
    .find('#random')
    .click(()=>{
      talentPage.find('#random').hide();
      const ul = talentPage.find('#talents');
      this.#life.talentRandom()
            .forEach(talent=>{
                if(talent.id==1135){ //配置的不灭金身天赋id
                  return true; //如果天赋列表中随机到【不灭金身】天赋则跳过本次循环
                }
                const li = createTalent(talent);
                ul.append(li);

            //其余代码略……
```

修改方法:
```javascript
const createTalent = ({ grade, name, description }) => {
    return $(`<li class="grade${grade}b">${name}(${description})</li>`)
};
```
如下:
```javascript
const createTalent = ({ id, grade, name, description }) => {
    return $(`<li id="tId_${id}" class="grade${grade}b">${name}(${description})</li>`)
};
```

添加方法:
```javascript
talentPage
    .find('#cheat')
    .click(()=>{
      talentPage.find('#cheat').hide();
      const talent = this.#life.talentCheat();//配置的不灭金身天赋id
      const talent2 = this.#life.talentCheat();
      const ul = talentPage.find('#talents');
      ul.children().remove();
      ul.find('#tId_1048').remove();
      const li = createTalent(talent);
      ul.append(li);
      
      li.click(()=>{
            if(li.hasClass('selected')) {
                li.removeClass('selected')
                this.#talentSelected.delete(talent);
                this.#talentSelected.delete(talent2);
                if(this.#talentSelected.size<3) {
                  talentPage.find('#next').text('请选择3个')
                }
            } else {
                if(this.#talentSelected.size==3) {
                  this.hint('只能选3个天赋');
                  return;
                }
                this.hint(`选择【不灭金身】的同时会附带【神秘的小盒子】,占用两个天赋位`);
                const exclusive = this.#life.exclusive(
                  Array.from(this.#talentSelected).map(({id})=>id),
                  talent.id
                );
                if(exclusive != null) {
                  for(const { name, id } of this.#talentSelected) {
                        if(id == exclusive) {
                            this.hint(`与已选择的天赋【${name}】冲突`);
                            return;
                        }
                  }
                  return;
                }
                li.addClass('selected');
                this.#talentSelected.add(talent);
                this.#talentSelected.add(talent2);
                if(this.#talentSelected.size==3) {
                  talentPage.find('#next').text('开始新人生')
                }
            }
      });
    })
```

选择天赋时显示按钮:
```javascript
talentPage.find('#cheat').show();
```
如下:
```javascript

//以上代码略……
            if (exclusive != null) {
                for (const { name, id } of this.#talentSelected) {
                  if (id == exclusive) {
                        this.hint(`与已选择的天赋【${name}】冲突`);
                        return;
                  }
                }
                return;
            }
            li.addClass('selected');
            this.#talentSelected.add(talent);
            if (this.#talentSelected.size == 3) {
                talentPage.find('#next').text('开始新人生')
            }
      }
    });
});
talentPage.find('#next').show();
talentPage.find('#cheat').show();
```


选择天赋前隐藏按钮:
```javascript
talentPage.find('#cheat').hide();
```
如下:
```javascript
talent: {
    page: talentPage,
    talentList: talentPage.find('#talents'),
    btnRandom: talentPage.find('#random'),
    btnNext: talentPage.find('#next'),
    pressEnter: () => {
      const talentList = this.#pages.talent.talentList;
      const btnRandom = this.#pages.talent.btnRandom;
      const btnNext = this.#pages.talent.btnNext;
      if (talentList.children().length) {
            btnNext.click();
      } else {
            btnRandom.click();
      }
    },
    clear: () => {
      this.#currentPage = 'talent';
      talentPage.find('ul.selectlist').empty();
      talentPage.find('#random').show();
      talentPage.find('#cheat').hide();
      this.#totalMax = 20;
    },
},
```

# 效果预览



zhaomingzhi 发表于 2021-9-12 15:17

GitHub:https://github.com/VickScarlet/lifeRestart

原版:http://liferestart.syaro.io/view/

超级人生版:http://restart.typekuon.com/lifeRestart/view/

我是人上人版:https://service-anw3da5k-1251676728.gz.apigw.tencentcs.com/release/view/index.html

zhaomingzhi 发表于 2021-9-12 15:13

太厉害了,不明觉厉

mosou 发表于 2021-9-12 15:16

已部署至服务器 完了一下 ok

mosou 发表于 2021-9-12 15:54

zhaomingzhi 发表于 2021-9-12 15:17
GitHub:https://github.com/VickScarlet/lifeRestart

原版:http://liferestart.syaro.io/view/


你这个代码有吗

15278066219 发表于 2021-9-12 16:51

人上人就是那么草率,要么富贵要么早夭!!!

Bimice 发表于 2021-9-12 16:58

好玩,分享了

18031371463 发表于 2021-9-12 17:04

楼主。怎么修改某个天赋的抽中概率呀,我想把某些天赋概率提高,谢谢楼主

三水非冰 发表于 2021-9-12 17:40

18031371463 发表于 2021-9-12 17:04
楼主。怎么修改某个天赋的抽中概率呀,我想把某些天赋概率提高,谢谢楼主

最简单的方式就是修改 grade 属性,看帖子 [天赋 talent.json] 节点,修改天赋对应的 grade数值越低出现概率越高

guxiaomo 发表于 2021-9-12 18:00

今天刚看到这个就有人分享了
页: [1] 2 3
查看完整版本: [魔改]人生重开模拟器