每日登录奖励

每日登录奖励

这个模组增加了为玩家每日登录提供奖励的功能。

实用

概述

本模组新增了向玩家发放每日登录奖励的功能。

玩家使用方法

玩家登录服务器时,如果存在可领取的奖励,将会收到提示信息
玩家可通过输入 /daily_reward claim/daily claim/daily c 来领取每日奖励

服务器使用方法

模组首次运行时,会在 {服务器根目录}/config/KatsiLib/DailyLoginRewards.json 生成配置文件,该文件包含控制本模组的所有相关信息。

以下是默认配置(含注释):

{
    "login_rewards": [
        {
            "items": { # <-- 每个登录奖励都有一个"items"字段,用于直接向玩家发放物品。
                "Tool_Pickaxe_Crude": 1.0, # <-- 可指定游戏内任意物品,包括模组物品。
                "Tool_Hatchet_Crude": 1.0  # <-- 数字代表玩家将获得的物品数量。
            },
            "reward_box_keys": { # <-- 每个登录奖励也有"reward_box_keys"字段,用于-
                                 # - 指定玩家将获得哪些奖励箱(我的另一个模组)的钥匙。
                "ExampleRewardBox": 1.0 # <-- 箱子名称及玩家应获得的钥匙数量。
            }
        },
        {
            "items": {
                "Tool_Hatchet_Copper": 1.0,
                "Tool_Pickaxe_Copper": 1.0
            },
            "reward_box_keys": {} # <-- 如果不想赠送奖励箱钥匙,保持为空即可!
        },
        {
            "items": {
                "Tool_Hatchet_Iron": 1.0,
                "Tool_Pickaxe_Iron": 1.0
            },
            "reward_box_keys": {}
        },
        {
            "items": {}, # <-- 也可以仅赠送奖励箱钥匙,甚至可以让两个字段都为空来设置空白奖励日。
            "reward_box_keys": {
                "ExampleRewardBox": 5.0
            }
        }
    ],
    "map": { # <-- 文件这部分用于在服务器重启时持久保存数据,存储相关玩家信息。如有需要可以编辑...
        "6bdc927f-b163-41e4-954b-b8f04e4db561": { # <-- 玩家的UUID(通用唯一标识符)。可通过"/whoami <玩家名>"获取
            "last_login_epoch": 20471, # <-- 玩家上次登录的纪元日数值。简而言之:该值+1为前进一天,-1为后退一天。
            "login_streak": 0.0 # <-- 玩家当前的连续登录天数。
        }
    }
}

注意事项:

  • 未领取的奖励不会保存,如果不领取登录奖励则会失去连续登录记录。
  • 配置中"login_rewards"的顺序对应玩家领取奖励的天数
    • 示例:第0天 -> 第一个物品,第1天 -> 第二个物品。
    • 可以将某天的物品设置为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);
  }

以上代码展示了如何分发'GrantRollEvent'事件,该事件会通知奖励箱模组向目标玩家发放钥匙。
GrantRollEvent需要3个参数 -> <PlayerRef = 目标玩家> <RewardBox名称 = 奖励箱名称> <num_keys_to_give = 默认为1,可省略>

奖励箱模组中包含的另一个事件是'ConsumeRollEvent',它接受与上述命令相同的参数,并为玩家抽取奖励箱。