
奖励宝箱
为游戏添加类似战利品盒的功能。此模组旨在供其他模组使用,但也可独立使用。
Hytale 模组 - 随机奖励箱
这是一个 Hytale 模组。
该模组增加了创建随机"奖励箱"的功能。
独立使用时仅提供命令功能,但作为 API 使用时,它可以触发自定义事件来用"奖励箱"奖励玩家。
使用方法:
以下所有命令均以“/RewardBox”开头 {例如:“/RewardBox create example”}
| 命令 | 描述 | 权限 |
|---|---|---|
| list_boxes list | 列出所有箱子及其中包含的物品数量,可用“–rewardbox ExampleBox”列出指定奖励箱中的所有物品 | |
| roll_box <RewardBox_Name> roll, pull | 如果玩家拥有对应奖励箱的“钥匙”,则打开箱子并将奖励放入玩家背包。如果背包空间不足,物品会掉落在地。 | |
| create | 创建一个新的奖励箱 | rewardboxes.admin |
| remove_box rem_box, rb | 删除整个奖励箱 | rewardboxes.admin |
| add_item <RewardBox_name> add, a | 向奖励箱添加一个物品。同一物品可多次添加。ItemID 可以是任意物品,例如:{"Tool_Pickaxe_Crude"}。概率表示为:{该物品概率 / 奖励箱内所有物品概率之和} | rewardboxes.admin |
| remove_item <RewardBox_name> rem, r | 移除所有匹配 ItemID 的物品。例如:如果箱子中有两个“Tool_Pickaxe_Crude”,它会同时删除这两个条目 | rewardboxes.admin |
| grant_item_roll <player_name> <RewardBox_Name> optional_arg: add_roll, ar | 为目标玩家添加“钥匙”,允许他们打开指定箱子次。当未指定时,默认为 1 | rewardboxes.admin |
给服务器管理员与模组制作者
JSON 配置
模组首次启动时会创建 {服务器根目录}/config/KatsiLib/RewardBoxes.json 文件,该文件存储服务器上所有奖励箱的信息。命令会动态保存到此文件,因此你也可以在游戏内直接设置奖励箱。
首次启动模组时,如果文件不存在,会生成一个包含示例的默认配置。
创建奖励箱配置的默认及示例:
{
"is_enabled": true,
"reward_boxes": [
{
"box_creator": "Katsi",
"box_name": "DefaultRewardBox",
"items": [
{
"item_id": "Tool_Pickaxe_Crude",
"pull_chance": 0.5,
"quantity": 1
},
{
"item_id": "Tool_Hatchet_Crude",
"pull_chance": 0.5,
"quantity": 1
}
],
"total_chance": 1.0
},
{
"box_creator": "Katsi",
"box_name": "ExampleRewardBox",
"items": [
{
"item_id": "Weapon_Daggers_Crude",
"pull_chance": 35.0,
"quantity": 1
},
{
"item_id": "Weapon_Daggers_Bone",
"pull_chance": 30.0,
"quantity": 1
},
{
"item_id": "Weapon_Daggers_Bronze",
"pull_chance": 20.0,
"quantity": 1
},
{
"item_id": "Weapon_Daggers_Copper",
"pull_chance": 10.0,
"quantity": 1
},
{
"item_id": "Weapon_Daggers_Iron",
"pull_chance": 5.0,
"quantity": 1
}
],
"total_chance": 100.0
}
]
}
注意:“total_chance”只需是一个数字,它在启动时计算,因此其具体数值无关紧要。
模组 API
一个使用本模组 API 的示例模组是我的“每日登录奖励”。源代码可在 GitHub 上获取以供进一步参考。
要与本模组 API 交互,请使用 Hytale 内置的事件系统。本模组绑定了两个事件:GrantRollEvent() 和 ConsumeRollEvent(),这两个事件具有相同的签名:"new GrantRollEvent(PlayerRef targetted_player, String RewardBoxName, int Number_Keys_To_Give);"
GrantRollEvent 会向目标玩家授予“钥匙”,使其能够打开指定的奖励箱。 ConsumeRollEvent 会导致目标玩家尝试打开奖励箱 X 次。注意:玩家会消耗钥匙来打开箱子,当钥匙用完时停止。{例如:我有 4 把钥匙 -> Event(Me, ExampleBox, 6) -> 会进行 4 次抽奖,我将剩余 0 把钥匙。}
分发事件的典型代码如下:
IEventDispatcher<GrantRollEvent, GrantRollEvent> dispatcher = HytaleServer.get().getEventBus().dispatchFor(GrantRollEvent.class); if (dispatcher.hasListener()) { GrantRollEvent event = new GrantRollEvent(playerRef, reward_box, num_keys_to_give); dispatcher.dispatch(event); }
正在加载版本记录…
正在加载评论…
评论在新手盒子客户端中发表,这里同步展示。