维护提醒

BWIKI 全站将于 9 月 3 日(全天)进行维护,期间无法编辑任何页面或发布新的评论。

全站通知:

模组:效果

来自星露谷物语维基
跳到导航 跳到搜索

目录

此页面记录了自定义增益效果。

数据格式

您可以通过编辑 Data/Buffs 素材来自定义增益效果,然后可以在其他未知使用此效果,例如 Data/Object 中的 Buff 字段或 C# 的 Buff 构造函数。

此文件内含一个“字符串 → 数据模型”查询,其中

  • 键为此增益效果的唯一字符串ID
  • 值为包含如下字段的数据模型。
字段 含义
DisplayName 一个模板字符串,用于显示增益效果名称。
Description (可选)一个模板字符串,用于显示增益效果描述。默认为空。
IsDebuff (可选)此效果是否为减损效果,后者的持续时长会在结实戒指时减半。默认为 false。
GlowColor (可选)玩家的发光颜色。参见模组:公共数据字段#颜色。默认为空。
Duration 此效果持续时长(毫秒)。可以设为 -2 代表持续到当天结束。
MaxDuration (可选)效果最大持续时长(毫秒)。若此字段非空且大于 Duration,则会选取介于 DurationMaxDuration 之间的随机值。默认为空。
IconTexture 包含此效果贴图的贴图集素材名称。
IconSpriteIndex (可选)IconTexture 中此效果贴图的索引。默认为 0。
Effects (可选)欲应用的效果属性。默认为空。

此字段为包含如下字段的数据模型所组成的列表:

字段 含义
FarmingLevel
FishingLevel
ForagingLevel
LuckLevel
MiningLevel
(可选)此效果活跃期间,给指定技能等级的增量。可以为负数,代表负面效果。默认为 0。
Attack
Defense
MagneticRadius
MaxStamina
Speed
(可选)此效果活跃期间,给玩家攻击防御磁力半径、最大体力速度的增量。可以为负数,代表负面效果。默认为 0。
ActionsOnApply (可选)当此效果应用于当前玩家时,运行指定数量的触发动作字符串。例如,下面的代码增加玩家的统计数据:
"ActionsOnApply": [
    "IncrementStat {{ModId}}_NumberEaten 1"
]
CustomFields (可选)此列表项的自定义字段

对于C#模组作者

1.6 重写了增益效果逻辑,以使其更自洽、更可扩展:

  • 效果逻辑统一为 Game1.player.buffs,其为效果数据的唯一来源。它替换了 player.added*player.appliedBuffs 字段、BuffsDisplay 逻辑、附魔状态加成、穿戴靴子/戒指加成。
  • 这也取消了效果类型(例如,效果可以加成武器,武器也可以加成效果)和装备(工具也可以有效果)的限制。
  • 现在效果发生更改时,会被完全重新计算,这修复了一系列长期存在的漏洞,例如加成偏移和双重负面效果。就像先前那样,效果本身是局域的;仅有效果ID和总加成效果会被同步。

对于 C# 模组

  • 现在每个效果都有一个唯一字符串ID。您可以指定一个同名的新效果来替换旧效果(这意味您无需手动查找和移除此效果先前的实例)。
  • 效果持续时间可以设为 Buff.ENDLESS 代表效果一直持续到当天玩家入睡。
  • 您可以通过重写 Item.AddEquipmentEffects 来向任何设备添加标准加成效果,也可以通过重载 Item.onEquipItem.onUnequip 来添加自定义行为/效果。
  • 您可以通过重写 Item.GetFoodOrDrinkBuffs() 来添加自定义食物或饮料效果。
  • 现在 Buff 构造函数支持自定义图标贴图集、贴图索引、显示名称、描述和持续时长,以全面支持自定义效果。
  • 您现在可以通过扩展 BuffsDisplay.displayAttributes 来更改效果加成的显示方式(或添加新的加成)。
  • 您现在可以通过设置 buff.visible = false 来使效果不可见,

下面代码用于定义一个 +3 速度的增益:

Buff buff = new Buff(
    id: "Example.ModId_ZoomZoom",
    displayName: "Zoom Zoom", // can optionally specify description text too
    iconTexture: this.Helper.ModContent.Load<Texture2D>("assets/zoom.png"),
    iconSheetIndex: 0,
    duration: 30_000, // 30 seconds
    effects: new BuffEffects()
    {
        Speed = { 10 } // shortcut for buff.Speed.Value = 10
    }
);
Game1.player.applyBuff(buff);

您可以检查效果是否已被激活(例如 Game1.player.hasBuff("Example.ModId_ZoomZoom")),并在代码中应用相应自定义效果。