stardew-valley:荔枝成为最好的种田插件!

顾名思义,本插件是按照《星露谷物语》编写的插件 虽然大部分功能还没开发好就是了

目前,此插件提供了一个种田系统
玩家可以购买种子种田,当然种田数量是有上限的,此上限可以通过购买农场来增加
农场有等级,种子有等级,只有当种子等级小于等于农场等级时才可以种

在提供的指令中,购买、卖出、种植指令都可以提供第二个参数number
number即要进行操作的数量,缺省时为1

那么目前都有什么种子和什么农场呢?
只有一个普通农场和一个土豆
难道你以为真就这么少吗?!
是的,真就这么少
诶不过别急,以上说的都不重要,接下来才是重头戏!因为我在此插件中引入了mod系统!

mod系统

其实很简单,就是通过遍历data/mods/stardew-valley文件夹下的所有文件来加载

那么该如何编写mod呢?

{
    "name": "Stardew_Valley",
    "id": 0,
    "description": "koishi星露谷物语插件主要内容文件",
    "main": [
        {
            "name": "土豆",
            "id": 0,
            "description": "土豆作物",
            "main": {
                "type": "crop",
                "main": {
                    "level": 0,
                    "growthTime": 7200000,
                    "harvestOutput": [
                        {
                            "id": "0:0",
                            "number": 2
                        }
                    ]
                }
            },
            "price": {
                "can": true,
                "sell": 10,
                "buy": 10
            }
        },
        {
            "name": "普通农场",
            "id": 1,
            "description": "非常tm普通的农场",
            "main": {
                "type": "building",
                "main": {
                    "type": "farm",
                    "level": 0,
                    "max": 10
                }
            },
            "price": {
                "can": true,
                "sell": 100,
                "buy": 100
            }
        }
    ]
}

这是一段示范代码,你可以在插件文件夹下的lib文件夹下找main.json
容易理解的我就不讲了

首先,我们来讲harvestOutput
这个键用于描述此植物的产出,这个键的值是一个数组
id键的值就是收获时的产物,其中id的格式是"mod id:物品id"
实际上我并没有对id键值做出限定,所以理论上你完全可以在这里面添上建筑的id
number键的值就是收获时此产物的数量

然后,是price下的can
can的值是一个布尔值,用于确定此物品是否可以直接购买
当can为false时,你可以不写buy值,但必须写sell值

最后,则是物品的type,目前只提供了两个,crop和building
building下还有一个type,目前只提供了farm

最后依旧是惯例了,如果你发现了插件的bug或者有好的想法,请前往 ACAlexChen/stardew-valley (github.com)提交issues

2 个赞

啊!当然!
虽然购买指令可以提供第二个参数进行批量购买
但我还是不推荐你一次性购买100个以上的
或者说,我不推荐你库存的物品或建筑达到100个以上
因为目前数据存储的格式十分辣鸡
如果你偏要购买的话,那我就只能祝你good luck了
:+1:

2 个赞

图形化一下,多个阶段都能展示的话会很不错的。
而且种菜最好能搭配别的业务,比如一些随机事件、故事;单纯只是种菜可能会失去热情;

3 个赞

新版本发布,1.0.0

这个版本加了什么
修复了一些bug,并且加了概率系统,还加了版本限制

概率系统

"harvestOutput": {
      "max": 3,
      "min": 1,
      "output": [
          {
              "id": "0:0",
              "max": 2,
              "min": 1,
              "probability": 1
          },
          {
              "id": "0:2",
              "max": 1,
              "min": 0,
              "probability": 0.2
          }
      ]
    }

首先来看harvestOutput底下的max和min

  • max:即该物品收获时产出的最大值,超出此值的量不会被计算,即使你的probability为1
  • min:即该物品收获时产出的最小值,低于此值将重复一轮对output的运算,直到超过此值

其次是output下的

  • id:即物品id,详情看上文
  • max:该产出的最大值,每轮循环该产出的值都不会超过此值
  • min:该产出的最小值,每轮循环该产出的值都不会低于此值
  • probability:该产出获得的概率

注意!必须有一个产出的probability值在0以上!否则会陷入无限循环!

其次,我还添加了一个新type,output

{
    "name": "毒土豆",
    "id": 2,
    "description": "毒性很强的土豆,不能再次种植",
    "main": {
        "type": "output"
    },
    "price": {
        "can": false,
        "sell": 5
    }
}

版本限制

{
    "name": "Stardew_Valley",
    "id": 0,
    "version": "1.0.0",
    "description": "koishi星露谷物语插件主要内容文件",

你现在需要在你的mod中添加一个version键,他的值应该与插件的版本一样,否则不会被读取

最后呢,此版本很可能会存在bug,因为我一开始在创建数据库时眼瞎了,没看见list的ts类型是string,我给他添加object时出错了,所以我只能将类型换成json:sob:

3 个赞

在数据库内容为空时使用查看.拥有物品指令报错

TypeError: Cannot read properties of undefined (reading 'item')
at Command.<anonymous> (E:\koishi-app\node_modules\koishi-plugin-stardew-valley\lib\index.js:463:21)

… 毕竟 nowHave 在没有获取到信息的时候是undefined吧…要不要修改一下?

2 个赞

emmmm,实际上在使用过程中应该先使用购买指令,所以当数据库内容为空时我只对购买指令做了适配
我会在下一个版本对其他指令也做好适配

3 个赞

修好了,同时修了一个很逆天的bug(tmd这bug我从周五一直修到现在才tm修好)

2 个赞

牛逼啊,我顶!/手动狗头
image

2 个赞