Linha 1: |
Linha 1: |
| + | {{traduzir}} |
| + | {{../cabeçalho}} |
| | | |
| + | This page helps you test your mods and solve common issues. '''For issues ''using'' mods, see [[Modding:Player Guide/Troubleshooting]].''' |
| + | |
| + | ==Test the mod== |
| + | ===Basic testing=== |
| + | Testing is pretty straightforward for most mods: |
| + | # Click ''Build > Rebuild Solution'' (Visual Studio) or ''Build > Rebuild All'' (MonoDevelop). |
| + | # Make sure there are no build errors and the mod gets copied to your <samp>Mods</samp> folder. |
| + | # Try the mod in-game. |
| + | # Make sure there are no errors or warnings for your mod in the SMAPI console. |
| + | |
| + | In general, if a mod works on one platform it'll work fine on the others. |
| + | |
| + | ===Testing in multiplayer=== |
| + | You can test mods in multiplayer on the same computer, by launching two instances of the game: |
| + | |
| + | # Prepare player one: |
| + | ## Launch SMAPI like usual. |
| + | ## From the title screen: click ''co-op'', then ''host''. |
| + | ## Start a new save slot (unless you've already created one). Make sure to set 'starting cabins' to at least one (you'll need one cabin per extra player). |
| + | # Prepare player two: |
| + | ## Launch SMAPI again. (This will automatically create a separate log file.) |
| + | ## From the title screen: click ''co-op'', then ''join LAN game''. |
| + | ## Leave the 'Enter IP...' box empty and click OK. |
| + | |
| + | ===Testing on all platforms=== |
| + | For complex mods, you may need to test your mod on all platforms. The game is mostly the same on Linux/Mac, so you only need to test your mod twice: once on Windows, and again on Linux or Mac. You can do that by testing one version on your computer, and the other in a virtual machine. |
| + | |
| + | <dl> |
| + | <dt>If your main computer is Windows 11:</dt> |
| + | <dd> |
| + | <ol> |
| + | <li>[https://docs.microsoft.com/en-us/windows/wsl/install Install Windows Subsystem for Linux (WSL)].</li> |
| + | <li>Install the required software in WSL:</li> |
| + | <ol> |
| + | <li>[https://linuxconfig.org/how-to-install-steam-on-ubuntu-20-04-focal-fossa-linux Install Steam].</li> |
| + | <li>Launch <code>export TERM=xterm && steam</code>, then install & launch Stardew Valley through its UI. This will also install its dependencies.</li> |
| + | <li>''(optional)'' Download and install your preferred IDE, if you plan to compile the code on Linux. For the [https://www.jetbrains.com/help/rider/Installation_guide.html#prerequisites latest standalone Rider version] (not free): |
| + | <syntaxhighlight lang="sh"> |
| + | 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 |
| + | </syntaxhighlight></li> |
| + | <li>[[Modding:Installing SMAPI on Linux|Install SMAPI]].</li> |
| + | </ol></li> |
| + | <li>To launch the game, launch <code>steam</code> and run the game through its UI.</li> |
| + | </ol></li> |
| + | </ul> |
| + | </dd> |
| + | </dl> |
| + | |
| + | ; If your main computer is Windows 10 or earlier: |
| + | :# Install [https://www.virtualbox.org/ VirtualBox]. |
| + | :# Create a [https://zorinos.com/ ZorinOS Core] VM in VirtualBox. |
| + | :#* ''See [https://extr3metech.wordpress.com/2013/09/05/installing-zorin-os-7-in-virtual-box-screenshots this setup guide] for more details. The ZorinOS installer might be a bit different than shown, but should be pretty intuitive.'' |
| + | :#* ''If you don't see any options for 64-bit OSes in VirtualBox, see [https://superuser.com/a/866963 how to enable them].'' |
| + | :#* ''When creating the virtual disk, at least 20GB is recommended.'' |
| + | :# [https://store.steampowered.com/about Download the Steam installer] in the VM and run it. |
| + | :# Launch Steam to finish installation. If nothing happens, see [https://askubuntu.com/questions/771032/steam-not-opening-in-ubuntu-16-04-lts these extra steps] to fix it. |
| + | :# Install Stardew Valley through Steam. |
| + | :# [[Modding:Player Guide/Getting Started#Install SMAPI|Install SMAPI]]. |
| + | :# ''(optional)'' Install [https://www.mono-project.com/ <samp>mono-complete</samp>] and [http://www.monodevelop.com/download/ MonoDevelop] in your VM. This is only needed if you want to compile separately for Linux/Mac. When installing <samp>.deb</samp> files, use the instructions for [https://zorinos.com/help/install-apps/#deb-files the Ubuntu version shown here]. If you run into errors, may Linux have mercy on your soul. |
| + | :# ''(optional)'' For unlocking Mac OS only: [https://www.insanelymac.com/forum/files/file/838-unlocker/ Virtual Machine Unlocker 2.1.1] for VmWare Workstation 11/12/14, VmWare Player 7/12/14, or Fusion 7/8/10. '''This is needed to boot Mac OS on a virtual Machine''' |
| + | |
| + | ; If your main computer is Linux or macOS: |
| + | :# Install [https://www.virtualbox.org/ VirtualBox]. |
| + | :# [http://www.macworld.co.uk/how-to/mac-software/run-windows-10-on-your-mac-using-virtualbox-3621650/ Create a VM with Windows]. |
| + | :# Install Stardew Valley in your VM. |
| + | :# [[Modding:Player Guide/Getting Started#Install SMAPI|Install SMAPI]]. |
| + | :# ''(optional)'' Install [https://visualstudio.microsoft.com/vs/community/ Visual Studio Community] in your VM. This is only needed if you want to compile separately for Windows. |
| + | |
| + | ==Fix common build warnings== |
| + | After building your project, you can see build warnings via ''Visual Studio > View > Error List'' or ''MonoDevelop > View > Pads > Errors''. Here are some common ones. |
| + | |
| + | ===This implicitly converts...=== |
| + | Sample warning: "''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.''" |
| + | |
| + | Your code is referencing a [[Modding:Modder Guide/Game Fundamentals#Net fields|net field]], which can cause subtle bugs. This field has an equivalent non-net property, like <samp>monster.Health</samp> (<samp>int</samp>) instead of <samp>monster.health</samp> (<samp>NetBool</samp>). Change your code to use the suggested property instead. |
| + | |
| + | ===FieldName is a Net* field...=== |
| + | Sample warning: "'''{0}' is a Net{1} field; consider using the {2} property instead. See https://smapi.io/buildmsg/avoid-net-field for details.''" |
| + | |
| + | Your code is referencing a [[Modding:Modder Guide/Game Fundamentals#Net fields|net field]], which can cause subtle bugs. You should access the underlying value instead: |
| + | <ul> |
| + | <li>For a reference type (''i.e.,'' one that can contain <samp>null</samp>), you can use the <samp>.Value</samp> property (or <samp>.FieldDict</samp> for a <samp>NetDictionary</samp>): |
| + | <syntaxhighlight lang="c#"> |
| + | if (building.indoors.Value == null) |
| + | </syntaxhighlight> |
| + | |
| + | Or convert the value before comparison: |
| + | <syntaxhighlight lang="c#"> |
| + | GameLocation indoors = building.indoors.Value; |
| + | if(indoors == null) |
| + | // ... |
| + | </syntaxhighlight></li> |
| + | <li>For a value type (''i.e.,'' one that can't contain <samp>null</samp>), check if the parent is null (if needed) and compare with <samp>.Value</samp>: |
| + | <syntaxhighlight lang="c#"> |
| + | if (item != null && item.category.Value == 0) |
| + | </syntaxhighlight></li> |
| + | </ul> |
| + | |
| + | ===The FieldName field is obsolete...=== |
| + | Sample warning: "''The 'Character.friendships' field is obsolete and should be replaced with 'friendshipData'. See https://smapi.io/buildmsg/avoid-obsolete-field for details.''" |
| + | |
| + | You're referencing a field which should no longer be used. Use the suggested field name instead to fix it. |
| + | |
| + | ===An instance of analyzer ... cannot be created=== |
| + | Update to the latest [https://visualstudio.microsoft.com/vs/community/ Visual Studio]; the NuGet package uses a recent feature that isn't available in older versions. |
| + | |
| + | ==Other issues== |
| + | ===Can't target .NET 5=== |
| + | If the target framework list has options starting with... |
| + | * ''.NET Framework'': you created the wrong type of project. Make sure you create a .NET 5 project for your mod instead. (The naming is a bit confusing.) |
| + | * ''.NET Core'', ''.NET Standard'', or ''.NET 5+'': use .NET 5 for compatibility with the game. If you don't have that option, you can install the [https://dotnet.microsoft.com/en-us/download/dotnet/5.0 .NET 5 SDK] to add it. |
| + | |
| + | ===Visual Studio can't find the game/SMAPI/MonoGame DLLs=== |
| + | <span id="Visual_Studio_can.27t_find_the_game.2FSMAPI.2FXNA_DLLs"><!--old section name--></span> |
| + | Common solutions: |
| + | * Restart Visual Studio. |
| + | * Make sure the game and SMAPI are correctly installed and work fine. |
| + | * Check for an error like "''Failed to find game install path''". If it's present, you need to [https://smapi.io/package/custom-game-path specify your game path]. |
| + | * Make sure you created a .NET 5 project, '''not''' .NET Framework. (See [[Modding:IDE reference#Set the target framework|how to set the target framework]]; if you see options starting with .NET Framework, delete the project and create a .NET 5 project instead.) |
| + | * Make sure you target .NET 5 (see [[Modding:IDE reference#Set the target framework|how to]]). |
| + | |
| + | If those didn't fix it: |
| + | # Click ''Build > Rebuild Solution'' (Visual Studio) or ''Build > Rebuild All'' (MonoDevelop). |
| + | # Check the ''Output'' pane or error list (Visual Studio), or the ''Errors'' pad (MonoDevelop). |
| + | # If you don't see anything relevant, post the ''Output'' text to [https://hastebin.com hastebin], [[#Ask for help|ask for help on Discord]], and include a link to your hastebin. |
| + | |
| + | ==Ask for help== |
| + | See [[Modding:Help]] for how to get help! |
| + | |
| + | [[es:Modding:Guía del Modder/Prueba y solución de problemas]] |