一个基于 mirai 的人生重开模拟器
在授予权限后,发送指令 /remake start
开始人生模拟器
您可以添加参数来设定初始属性,它们按照以下规律:
/remake start (初始颜值值) (初始智力值) (初始体质值) (初始家境值) (初始快乐值)
默认下, 会随机分配 分配的值总和不可以超过配置文件
game.yml
中maxAttributePoint
的值,否则将会按比例重新分配
您可能需要 project-mirai/chat-command 插件
首先,bot
会发送随机抽取的天赋列表,如:
共有 10
个天赋,
使用者需要发送用逗号分割的序号列表
如:1,2,3
或 1,2,3
(但 1,2,3
这类混合使用中英文逗号的是无效的)
随后,bot会按照所提供的序号选择天赋,并发送人生模拟器结果
如果您不想获取图片结果,可以使用
/remake text
代替/remake start
向人生重开器中添加自己编写的事件
关于内置的年龄事件/天赋/事件,可以查看
github
源上的 ages.json talents.json events.json
life-restart-bot
将您的自定义事件存放在 /mcl/config/com.github.hatoyuze.restarter.life-restarter/register.yml
中
这些自定义事件默认下并不会启用,如果您希望可以使用这些自定义事件可以将文件中的
# 是否启用自定义事件
enabledCustomizedEvent: false
更改为
# 是否启用自定义事件
enabledCustomizedEvent: true
在该文件下,还存在其他的属性
每一个事件都遵循如下的格式
events:
- id: 50001
event: 你在使用社交软件水群的时候,发现有群友在使用聊天机器人。
include: AGE<60
exclude: 'EVT![50001,50002]'
NoRandom: false
grade: 0
postEvent: 你感到很好奇。
effect: { }
branch:
- '(INT>5)&(MNY>3):50002'
若与已存在的冲突,会采用新配置的事件代替原有事件 (大多时候,这可能不是您所需要的)
为保证您的自定义事件不会覆盖原有事件,请保证其不在以下的范围内:
10000~11502
日常生活中的事件20007~21457
一些后续事件,并不会被随机直接选中 或 日常生活的部分事件(可能需要天赋)30001~30002
异世界生活?40001~40084
修仙事件
为统一内容格式,建议您以
。
结尾
以下内容非必填项,您可以选择不填写相关内容
当为空''
时,表示没有条件,可以直接触发
非空时,遵循以下格式
- 判断的成员属性,包括以下值
AGE
年龄CHR
颜值INT
智力STR
体质MNY
家境SPR
快乐TLT
天赋LIF
寿命EVT
事件RDM
随机属性(从颜值,智力,体质,家境,快乐)中随机抽取实现说明:在
0.4.0
之后,为了保证游玩记录可以被完整保存, 涉及RDM
属性的事件都会在被调用时被转化为对应真实属性(如: 天赋
id=1141
(随机属性增加 8) 会首先被转义为id=-98859
事件,再根据结果转化为id=-98859n
(0≤n≤4) 事件)这些转化是运行时转化的,并不会在内存中存储这些临时事件,当然你也可以在配置
game.enableCacheTemporaryEvent
中设定
- 判断的类型
- 大于:
>
- 小于:
<
- 包含:
?[...]
- 不包含:
![...]
- 大于:
- 内容 需要为纯数字
内容 与 判断的类型 有所关联,例如选择了
包含
/不包含
你可以提供多个值,如
INT?[1,2,3,4,5]
(用逗号分割值,为符合yaml
格式,你需要整体加上英文引号)您无法直接编写
INT=1
或INT≠1
,不过你可以考虑更改为INT?[1]
和INT![1]
在此基础上,添加英文括号()
可以实现进一步的嵌套, 如:
include: (TLT?[1048])&(EVT?[20461])
这表示,需要选择编码为
1048
的天赋。同时,还需要经历事件20461
每一个 ()
内包含如上格式的表达式,直接使用 |
和&
串起整个表达式,其中:
|
表示 前后只需要满足一个条件&
表示 前后的条件都要满足
你甚至可以进行进一步的嵌套,如:
include: '((TLT?[1073,1000])&(INT>5)&(EVT?[10011]))|(MNY>10)'
这表示,有两种条件可以触发该事件
- 第一种为 选择了天赋
1073
或1000
的同时,INT
(智力)大于5
且经历过事件10011
- 另一种则为
MNY
(家境)大于10
只需要满足其中一个条件即可触发
我们建议您不要过度嵌套您的表达式,否则将会造成额外的消耗,或无法进行反序列化
表达式格式同上, 不过表示只有不满足条件时,才可能会出现
这通常被用于有前后依赖关系的事件,或者的与天赋相冲突的事件
例如:
id: 10001
event: 你出生了,是个男孩。
exclude: ’TLT?[1004,1024,1025,1113]‘
其中的 exclude
就表示:
如果选择了天赋 1004
(生而为女) , 1024
(人中龙凤), 1025
(人中龙凤), 1113
(三胎人生) 就无法触发该事件
或者有时,会将该事件的所有后续事件写进去,避免触发后续事件后再次触发前序事件
为true
时,无法随机触发该事件,只可以由某个事件 branch
所指向的内容进入
默认下为 false
即可以被随机抽中该事件
这通常用于一个 选择类型
的事件,表示该事件的结果
范围为 0
到3
, 默认为 0
。 序号越大则越难抽取到该项
如果 branch
为空,则会推送其设定的内容
一般用于补充后续,并不会有什么影响
如:
MNY: -1
INT: 1
SPR: 2
这会使人生中的
MNY
(家境) 减少1
,INT
(智力) 增加1
,SPR
(快乐) 增加2
前项为属性(可参照 include
中提供的列表),后项为增改的值(可为负数)
一般地,并不允许重复,如果重复了效果仅会应用较后的一项
分为两部分,前半部分是与 include
相同的条件表达式,后半部分为指向的事件。中间使用 :
分割
指向的事件会和当前事件在同一年发生, 同一个事件可以有多个分支事件, 是否进入该分支由 前半部分的表达式 判断决定,同时满足时,选择较前的一项
例如:
- id: 10207,
event: "参加奥运会。",
grade: 2,
postEvent: "夺得奖牌。",
effect:
MNY: 1
SPR: 1
include: "EVT?[10204]"
branch:
- 'SPR>9:10208'
- id: 10208,
event: "夺得金牌。",
grade: 3,
effect:
SPR: 1
NoRandom: true
branch:
- 'SPR>10:10209'
- id: 10209,
event: "并打破世界纪录。",
grade: 3,
effect:
SPR: 1
NoRandom: true
解释代码,其逻辑链可视作
graph TD
A[触发事件 10027: 参加奥运会] -->|SPR > 9| B[触发事件 10208: 夺得金牌]
B -->|SPR > 10| C[触发事件 10209: 并打破世界纪录]
A -->|否则| D[夺得奖牌]
年龄内可以触发的事件
为保证您的事件能够被成功触发,你应该在该项中填写内容
enableAge:
12..=50:
- 50001
- 50002
- ...
事件
50001
,50002
仅会 在12岁 到 50岁 的年龄内出现
前半部分的 12..=50
为年龄表达式,它遵循以下格式(start
>= 0
且 end
<= 500
):
start..end
-> start ≤ x < endstart..=end
-> start ≤ x ≤ end..end
-> 0 ≤ x < end..
-> 0 ≤ x ≤ 500..=end
-> x ≤ end
这和
rust
的范围表达式相似
随后的内容为该区间内会出现的事件id
,每一个 id
的概率都为 1.0
(即代表 1 份)
暂时无法设定必然出现的事件
在原始内置的 ages.json 配置中 你可能会看到一些事件拥有尾缀
*999999
这些表示这些事件是必然出现的(如果符合条件)
如果id
不存在则该表达式将会被忽略,或是抛出错误
若想要插件正常运行,你需要给予用户 com.github.hatoyuze.restarter.life-restarter:command-execute
权限
你可以使用以下指令,使所有用户都可以正常使用相关指令
perm add u* com.github.hatoyuze.restarter.life-restarter:command-execute
如果你希望只有指定的用户可以使用,将u*
改为u对应qq号
即可,例如:
perm add u114514 com.github.hatoyuze.restarter.life-restarter:command-execute
如果没有该权限,任何有关本插件的指令都无法正常调用哦!