Line 3: |
Line 3: |
| This page helps solve common issues when creating mods. '''For issues ''using'' mods, see [[Modding:Player Guide/Troubleshooting]].''' | | This page helps solve common issues when creating mods. '''For issues ''using'' mods, see [[Modding:Player Guide/Troubleshooting]].''' |
| | | |
− | ==Fix common issues== | + | ==Fix common build warnings== |
− | ''TODO'' | + | Make sure you check your Error List pane in Visual Studio (or equivalent in other IDEs) and fix any warnings. Here are some common ones: |
| + | |
| + | ===Mismatch between the processor architecture...=== |
| + | Sample warning: "''There was a mismatch between the processor architecture of the project being built "{0}" and the processor architecture of the reference "{1}". This mismatch may cause runtime failures.''" |
| + | |
| + | That warning is normal. The error is saying that your build is set to 'Any CPU', but Stardew Valley is x86-only so it'll only work in x86 anyway. You can either ignore it, or [https://msdn.microsoft.com/en-us/library/ms185328.aspx change your platform target] to x86. |
| + | |
| + | ===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 [[#Net fields|net field]], which can cause subtle bugs. The field you're referencing has an equivalent non-net property, like <tt>monster.Health</tt> (<tt>int</tt>) instead of <tt>monster.health</tt> (<tt>NetBool</tt>). 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 [[#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 <tt>null</tt>), you can use the <tt>.Value</tt> property (or <tt>.FieldDict</tt> for a <tt>NetDictionary</tt>): |
| + | <source lang="c#"> |
| + | if (building.indoors.Value == null) |
| + | </source> |
| + | |
| + | Or convert the value before comparison: |
| + | <source lang="c#"> |
| + | GameLocation indoors = building.indoors.Value; |
| + | if(indoors == null) |
| + | // ... |
| + | </source></li> |
| + | <li>For a value type (i.e. one that can't contain <tt>null</tt>), check if the parent is null (if needed) and compare with <tt>.Value</tt>: |
| + | <source lang="c#"> |
| + | if (item != null && item.category.Value == 0) |
| + | </source></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. |
| | | |
| ==Ask for help== | | ==Ask for help== |
| If you still need help, ask for help in [[Modding:Community#Discord|#modding on the Stardew Valley Discord]]. The Stardew Valley modding community is very welcoming! | | If you still need help, ask for help in [[Modding:Community#Discord|#modding on the Stardew Valley Discord]]. The Stardew Valley modding community is very welcoming! |