维护提醒

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

全站通知:

模组:制作指南/测试和疑难解答

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

模组:目录

此页面提供关于测试模组和解决常见问题的帮助。对于使用模组的帮助,另请参阅模组:使用指南/疑难解答

测试模组

基本测试

对于大多数模组而言,测试是非常容易的:

  1. 点击 Build > Rebuild Solution (Visual Studio) 或 Build > Rebuild All (MonoDevelop)。
  2. 确保没有报错,然后把模组复制到您的Mods文件夹。
  3. 在游戏中测试模组。
  4. 确保SMAPI控制台中没有报错或警告。

一般而言,如果一个模组在某个平台上能够正常工作,则其在其他平台上也能正常工作。

多人游戏测试

通过运行两个游戏实例,您可以在同一台计算机上进行模组的多人游戏测试:

  1. 准备玩家一:
    1. 正常启动SMAPI。
    2. 在标题界面,点击“合作”,然后点击“主持”。
    3. 创建一个新存档(若已有存档则无需创建新存档)。确保“初始联机小屋”至少为 1 (若要测试更多玩家,则酌情增加)。
  2. 准备玩家二:
    1. 再次启动SMAPI(这会自动创建一个独立的日志文件)。
    2. 在标题界面,点击“合作”,然后点击“加入局域网游戏”。
    3. 将“输入 IP……”字段留空,然后点击OK。

全平台测试

对于复杂的模组,可能需要在全平台上进行测试。由于游戏的Linux和Mac版本几乎相同,所以只需要测试两个平台:一个为Windows,另一个为Linux或Mac。可以使用虚拟机来完成测试。

若您的计算机为Windows 10 或 11:
  1. 安装Windows Subsystem for Linux (WSL)
  2. 在WSL中安装所需软件:
    1. 安装Steam
    2. 运行export TERM=xterm && steam,然后通过Steam的UI安装星露谷物语。这也会安装相应的依赖。
    3. (可选)若您希望在Linux上编译代码,可下载并安装您偏好的IDE。下面是安装Rider最新版本的方法:
      wget "<download url here>" -O rider-install.tar.gz
      sudo tar -xzvf rider-install.tar.gz -C /opt
      ln -s "/opt/JetBrains Rider-<version>/bin/rider.sh"
      ./rider.sh
      
    4. 安装SMAPI
  3. 运行steam并通过其UI启动游戏。
若您的计算机为Windows 8或更早版本:
  1. 安装VirtualBox
  2. 在VirtualBox中创建一个ZorinOS Core虚拟机。
    • 参见此安装指南以获得更多信息。ZorinOS安装程序可能与此指南所示有所不同,但应当易于使用。
    • 若您在VirtualBox中没有找到64位系统选项,参见此页面以了解如何启用64位系统。
    • 创建虚拟硬盘时,建议设置至少20GB的容量。
  3. 在虚拟机中下载Steam安装程序并运行。
  4. 运行Steam以完成安装。若无反应,参见这些额外的步骤以修复它。
  5. 通过Steam安装星露谷物语。
  6. 安装SMAPI
  7. (可选)在虚拟机中安装mono-completeMonoDevelop。仅当您需要在Linux/Max环境中独立编译时需要安装这些软件。当安装.deb文件时,使用此处以Ubuntu为例的指南。若中间发生错误,您大概需要自己想办法解决。
  8. (可选)仅解锁Mac OS: Virtual Machine Unlocker 2.1.1 适用于 VmWare Workstation 11/12/14、 VmWare Player 7/12/14、 或 Fusion 7/8/10 。需要以此来在虚拟机上部署Mac OS
若您的计算机为Linux或Mac OS:
  1. 安装VirtualBox
  2. 创建一个Windows虚拟机
  3. 在虚拟机上安装星露谷物语。
  4. 安装SMAPI
  5. (可选)若您希望在Windows上独立编译,则需在虚拟机上安装Visual Studio Community

修复常见的构建警告

构建项目后,可以通过 Visual Studio > View > Error ListMonoDevelop > View > Pads > Errors 查看构建警告(build warning)。下文列出了一些常见的警告:

This implicitly converts...

警告示例:"This implicitly converts '{0}' from Net{1} to {2}, but Net{1} has unintuitive implicit conversion rules. Consider comparing against the actual value instead to avoid bugs. See https://smapi.io/buildmsg/avoid-implicit-net-field-cast for details."

这是因为您的代码引用了Net字段,这可能会产生微妙的错误。此字段应当有等价的非Net属性,例如Net属性monster.health(NetBool)的等价属性为monster.Health(int)。请使用提示的等价属性替换您的Net字段。

FieldName is a Net* field...

警告示例:"'{0}' is a Net{1} field; consider using the {2} property instead. See https://smapi.io/buildmsg/avoid-net-field for details."

这是因为您的代码引用了Net字段,这可能会产生微妙的错误。您应当转而引用它的Value而非Net字段本身:

  • 对于引用类型(可能为null),可以使用.Value属性(对于NetDictionary则为.FieldDict属性):
    if (building.indoors.Value == null)
    

    或在比较前转为相应的值:

    GameLocation indoors = building.indoors.Value;
    if(indoors == null)
       // ...
    
  • 对于值类型(即不能包含null的类型),应当在比较前检查其父对象是否为空(如有需要),并使用.Value属性:
    if (item != null && item.category.Value == 0)
    

The FieldName field is obsolete...

警告示例:"The 'Character.friendships' field is obsolete and should be replaced with 'friendshipData'. See https://smapi.io/buildmsg/avoid-obsolete-field for details."

您正在使用过时的字段,后者不应当再被使用。请转而使用推荐的字段名称以修复此问题。

An instance of analyzer ... cannot be created

升级到最新版本的Visual Studio;;此警告意味着NuGet包使用了较新的功能,旧版不能支持。

Feature 'global using directive' is not available in C# 9.0

打开解决方案的项目文件(.csproj文件),并将<ImplicitUsings>属性从"enable"切换到"disable"。

其他问题

Can't target .NET 6

若目标框架列表包含如下选项:

  • .NET Framework 开头:您的项目类型是错误的。请确保您的模组项目的类型为 .NET 6(这个命名有些迷惑性)。
  • .NET Core.NET Standard.NET 6+ 开头:请使用 .NET 6 以保证兼容性。若列表中没有相应选项,可以安装.NET 6 SDK以添加。

Visual Studio can't find the game/SMAPI/MonoGame DLLs

一般解决方案:

  • 重启Visual Studio。
  • 确保游戏和SMAPI已正确安装且正常工作。
  • 检查是否存在 "Failed to find game install path" 等错误。若出现此类错误,则需指定游戏路径
  • 确保您所创建的是 .NET 6 项目,而不是 .Net Framework。(参见如何设置目标框架;若您看到了以 .NET Framework 开头的选项,请删除此项目,并创建一个 .NET 6 项目。)
  • 确保您的目标框架是 .NET 6(参见教程)。

若上述步骤不能修复此问题:

  1. 依次点击 Build > Rebuild Solution(Visual Studio)或 Build > Rebuild All(MonoDevelop)。
  2. 检查 Output 面板或错误列表(Visual Studio)或 Errors 面板(MonoDevelop)。
  3. 若您没有发现相关的内容,请将 Output 文本粘贴到hastebin在Discord上寻求帮助并附上您的hastebin链接。

寻求帮助

参见模组:帮助以了解如何寻求帮助。