-
Notifications
You must be signed in to change notification settings - Fork 0
食用说明书
👋 Welcome to the MeowHouseModule wiki!
📝 Only Chinese versions available. (This sentence is machine-translated)
本作品采用知识共享署名-非商业性-相同方式共享 4.0 国际许可协议进行许可。
要查看此许可证的副本,请访问 https://creativecommons.org/licenses/by-nc-sa/4.0/deed.zhThis work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.
To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/
- 前置addon [MeowHouse(喵喵屋)] 是不可或缺的
- 游戏版本:1.19.40(Bedrock)
- 游戏存档需要开实验玩法(应用测试框架,等)
游戏存档的作弊选项可以不开,但在应用了行为包的存档,
成就已是被禁用,无法获得成就,而本模块是行为包。
所以推荐启用作弊,以获得更好的体验。
本节为高级食用方法,不推荐跳着看
在本模块中“随机池”将指有选择优先级的随机表,不是单一的随机列表。
单一的随机列表将是以相同的概率选取列表里定义各个项,
假如列表有n个项,那么某一项被选到的概率为 1/n,无论随机次数是多少。随机池将在定义列表里项的时候,同时赋予选取权重(优先级),
假如列表有n个项,某个项的权重为q,随机次数为i,那么他被选到的概率为 (q-i)/n 。
可以看到随机次数越大越容易选到权重越大的项。
首先我们看看随机池文件所在目录:
- 行为包目录 下
- scripts文件夹 下
- lib文件夹 下
- 的 meow文件夹 ,此文件夹里有
- events.js 事件随机池文件
- chests.js 宝箱随机池文件
- entitys.js 生物随机池文件
- blocks.js 方块随机池文件
- 的 meow文件夹 ,此文件夹里有
- lib文件夹 下
- scripts文件夹 下
其中 events.js 事件随机池 的自定义对大部分玩家来说难度过高,
所以暂时不详细讲解。
好,让我们开始自定义吧 awa
1. events.js 事件随机池
const events2 = () => [
[dfksjE_zombieSiege, 3]/* 僵尸围岛 */
]
const dfksjE_zombieSiege = (meowEvent, queryNoThis) => {
queryNoThis.runCommand(`say @${meowEvent.player.name},僵尸围岛`);
for (let i = 0; i < 10; i++) {
const zombie = meowEvent.dimension.spawnEntity("minecraft:zombie", meowEvent.player.location);
zombie.addEffect(mc.MinecraftEffectTypes.fireResistance, 12000, 0, false);
}
return true;
}
以上为 events.js 事件随机池 的部分代码摘要。
让此随机池进一步简单化已是提案。。。
未完待续。。。
2. chests.js 宝箱随机池
const chests1 = () => [
/* [随机权重, ["物品", 占用格数(可getRndInteger获得随机数), 每格最大数量, 特殊值, 每格最小数量(省略=默认1)], ...[第n个物品]] */
[1, ["minecraft:apple", methods.getRndInteger(8, 10), 5, 0], ["minecraft:golden_apple", methods.getRndInteger(2, 5), 5, 0]]
]
以上为 chests.js 宝箱随机池 的部分代码摘要。
其中 chests1
是一个池,chests2
chests3
同理,他们都是独立,互不干扰的。
const chests1 = () => [
随机项1,
随机项2,
·
·
·
随机项n
]
chests1
指传奇宝箱随机池
chests2
指稀有宝箱随机池
chests3
指普通宝箱随机池
在上面的代码摘要可以看到,随机项:
/* [随机权重, ["物品", 占用格数(可getRndInteger获得随机数), 每格最大数量, 特殊值, 每格最小数量(省略=默认1)], ...[第n个物品]] */
[1, ["minecraft:apple", methods.getRndInteger(8, 10), 5, 0], ["minecraft:golden_apple", methods.getRndInteger(2, 5), 5, 0]]
/* 这是注释 */
不是一个随机项 awa
随机权重是这一项在所在随机池的权重(优先级),
在本章节开头已讲述,这里不再赘述。
在随机权重后面的是一个一个 [像这样被包住的东西]
,都代表一种物品。
他的写法为 [物品名, 占用格数, 梅格最大数量, 特殊值, 每格最小数量(可选)]
-
物品名是命令give处能用的英文名,比如
minecraft:apple
(物品的赋命名空间标识符(Namespaced identifier)) -
占用格数为在宝箱中占用的格子,如果为n (n为不大于27的正整数),
那么该物品在宝箱中将占用n个格子。
可以使用methods.getRndInteger(最小值, 最大值)
来获得随机数。请注意,在同一随机项中,所有物品共用27个格子,不会重复利用格子。
假如有一物品占用了20个格子,那么留给其他未生成的物品的可用格子只有7个。 -
每格最大数量,字面意思,每格该物品的最大数量。
-
特殊值,字面意思,该物品的特殊值。
-
每格最小数量,字面意思,每格该物品的最小数量。
此参数不是必须的,可不填,默认值为1。
每个参数之间要用
,
(英文逗号)隔开,这是必须的。
后面跟着的空格,是书写规范,非必须,
但让我们的代码-随机池可读性更高。(即看着舒服)
方便日后维护,提高效率。例如:
[参数1, 参数2, 参数3]
或者适当添加换行与缩进:[ 参数1, 参数2, 参数3 ]缩进
例如:
-
在现有的某一项进行修改,原:
[1, ["minecraft:apple", methods.getRndInteger(8, 10), 5, 0], ["minecraft:golden_apple", methods.getRndInteger(2, 5), 5, 0]]
为了演示,我们给他适当添加换行与缩进:
[ 1, ["minecraft:apple", methods.getRndInteger(8, 10), 5, 0], ["minecraft:golden_apple", methods.getRndInteger(2, 5), 5, 0] ]
温馨提示:这样也是可以运行的,是有效的,前提是规范没有错。
给苹果
minecraft:apple
定义每格最小数量为 2:[ 1, ["minecraft:apple", methods.getRndInteger(8, 10), 5, 0, 2 /* 最小格数 */], ["minecraft:golden_apple", methods.getRndInteger(2, 5), 5, 0] ]
之后把苹果从8到10之间的随机占用格数,改成9到11之间的随机占用格数:
[ 1, ["minecraft:apple", methods.getRndInteger(9, 11) /* 占用格数 */, 5, 0, 2], ["minecraft:golden_apple", methods.getRndInteger(2, 5), 5, 0] ]
之后把金苹果
minecraft:golden_apple
的占用格数改成 1:[ 1, ["minecraft:apple", methods.getRndInteger(9, 11), 5, 0, 2], ["minecraft:golden_apple", 1 /* 占用格数 */, 5, 0] ]
添加附魔金苹果
minecraft:enchanted_golden_apple
,
并定义占用一个格子,每格最小为0个,最大为1个:[ 1, ["minecraft:apple", methods.getRndInteger(9, 11), 5, 0, 2], ["minecraft:golden_apple", 1, 5, 0], // 不要忘记","(英文逗号) ["minecraft:enchanted_golden_apple", 1, 1, 0, 0] // 添加的附魔金苹果 ]
经过以上修改后在随机池的样子:
const chests1 = () => [ [ 1, ["minecraft:apple", methods.getRndInteger(9, 11), 5, 0, 2], ["minecraft:golden_apple", 1, 5, 0], ["minecraft:enchanted_golden_apple", 1, 1, 0, 0] ] ] // 或者 const chests1 = () => [ [1, ["minecraft:apple", methods.getRndInteger(9, 11), 5, 0, 2], ["minecraft:golden_apple", 1, 5, 0], ["minecraft:enchanted_golden_apple", 1, 1, 0, 0]] ]
当然只要你愿意,双重随机也不是不行。
非必须,不建议这样,毕竟即使是0.001s的性能开销,也是浪费了性能。
当然,你无所谓的话。。。那就无所谓吧。谁。谁要管你(气嘟嘟 o(≧口≦)o双重随机的妙用:
["minecraft:apple", methods.getRndInteger(0, 1), 1, 0, 0]
如上例子,这个苹果将更难于被生成:
- 初始化 ——————————> 生成概率 = 100% ——> 100%
- 占用格数为0至1的随机数 ——> 生成概率 * 50% ———> 50%
- 每格最小为0,最大为1 ———> 生成概率 * 50% ———> 25%
- 结果:生成概率 = 25%
未完待续。。。
本作品采用知识共享署名-非商业性-相同方式共享 4.0 国际许可协议进行许可。
要查看此许可证的副本,请访问 https://creativecommons.org/licenses/by-nc-sa/4.0/deed.zh
This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.
To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/