Diferenças entre edições de "Modificações:Guia do Modder/Começando"

Fonte: Stardew Valley Wiki
Saltar para a navegação Saltar para a pesquisa
m (→‎Adicionando seu manifest: fixed bad translate)
 
(Há 35 revisões intermédias de 6 utilizadores que não estão a ser apresentadas)
Linha 5: Linha 5:
  
 
==Intro==
 
==Intro==
===What is a SMAPI mod?===
+
=== O que é um mod SMAPI? ===
A SMAPI mod uses the [https://smapi.io/ SMAPI] modding API to extend the game logic. The mod can respond when something happens in the game (like when an object is placed in the world), run code periodically (like once per update tick), change the game's assets and data, etc. SMAPI mods are written in C# using the .NET Framework, and Stardew Valley uses XNA/MonoGame for the game logic (drawing to the screen, user input, etc).
+
Um mod SMAPI usa a API de modificação [https://smapi.io/ SMAPI] para estender a lógica do jogo. O mod pode responder quando algo acontece no jogo (como quando um objeto é colocado no mundo), executar código periodicamente (como uma vez por atualização), alterar os ativos e dados do jogo, etc. Mods SMAPI são escritos em C# usando o O .NET Framework e o Stardew Valley usam XNA / MonoGame para a lógica do jogo (desenho na tela, entrada do usuário, etc.).
  
===Why do mods use SMAPI?===
+
=== Por que os mods usam SMAPI? ===
SMAPI does a lot for you! For example, SMAPI will...
+
SMAPI faz muito por você! Por exemplo, o SMAPI irá ...
  
# Load your mod into the game. Code mods aren't possible without SMAPI to load them.
+
# Carregue seu mod no jogo. Mods de código não são possíveis sem o SMAPI para carregá-los.
# Provide APIs and events which let you interact with the game in ways you otherwise couldn't. There are simplified APIs for game asset/data changes, player configuration, translation, reflection, etc. These are covered later in the guide.
+
# Forneça APIs e eventos que permitam interagir com o jogo de maneiras que você não conseguiria. Existem APIs simplificadas para alterações de ativos / dados do jogo, configuração do jogador, tradução, reflexão etc. Isso será abordado mais adiante neste guia.
# Rewrite your mod for crossplatform compatibility when it's loaded. That lets you write mod code without worrying about the differences between the Linux/Mac/Windows versions of the game.
+
# Reescreva seu mod para compatibilidade de plataformas cruzadas quando estiver carregado. Isso permite que você escreva código mod sem se preocupar com as diferenças entre as versões Linux / Mac / Windows do jogo.
# Rewrite your mod to update it. SMAPI detects and fixes mod code broken by a game update in common cases.
+
# Reescreva seu mod para atualizá-lo. O SMAPI detecta e corrige o código mod quebrado por uma atualização do jogo em casos comuns.
# Intercept errors. If your mod crashes or causes an error, SMAPI will intercept the error, show the error details in the console window, and in most cases automatically recovers the game. This means your mod won't accidentally crash the game, and makes it much easier to troubleshoot errors.
+
# Erros de interceptação. Se o seu mod travar ou causar um erro, o SMAPI irá interceptar o erro, mostrar os detalhes do erro na janela do console e, na maioria dos casos, recuperar o jogo automaticamente. Isso significa que seu mod não travará acidentalmente o jogo e facilita muito a solução de erros.
# Provide update checks. SMAPI automatically alerts players when a new version of your mod is available.
+
# Forneça verificações de atualização. O SMAPI alerta automaticamente os jogadores quando uma nova versão do seu mod está disponível.
# Provide compatibility checks. SMAPI automatically detects when your mod is incompatible and disables it before it causes problems, so players aren't left with broken games.
+
# Forneça verificações de compatibilidade. O SMAPI detecta automaticamente quando o seu mod é incompatível e o desativa antes de causar problemas, para que os jogadores não fiquem com jogos quebrados.
  
===Can I make a mod?===
+
=== Posso fazer um mod? ===
Yes! This guide will help you create a simple mod step-by-step. If you follow along, you'll have created a mod! Then you'll just need to make it do what you want.
+
Sim! Este guia irá ajudá-lo a criar um mod simples, passo a passo. Se você seguir em frente, você terá criado um mod! Então você só precisa fazer o que quiser.
  
If you're new to programming: many mod developers start with little or no programming experience. You can certainly learn along the way if you're determined, but you should be prepared for a steep learning curve. Don't be too ambitious at first; it's better to start with a small mod when you're figuring it out. It's easy to become overwhelmed at first and give up. The modding community is very welcoming, so don't be afraid to ask questions!
+
Se você é iniciante em programação: muitos desenvolvedores de mod começam com pouca ou nenhuma experiência em programação. Você certamente pode aprender ao longo do caminho, se estiver determinado, mas deve estar preparado para uma curva de aprendizado acentuada. Não seja muito ambicioso a princípio; é melhor começar com um mod pequeno quando você descobrir isso. É fácil ficar impressionado no começo e desistir. A comunidade modding é muito acolhedora, portanto, não tenha medo de fazer perguntas!
  
If you already have programming experience, you should be fine. Programming experience in C# or Java will make things easier, but it isn't critical. If you're unfamiliar with C#, you can skim through the ''Learning C#'' references below to fill in any gaps.
+
Se você já tem experiência em programação, deve ficar bem. A experiência de programação em C# ou Java facilitará as coisas, mas não é crítica. Se você não está familiarizado com o C#, pode percorrer as referências abaixo de ''Learning C#'' para preencher as lacunas.
  
===Can I make a mod ''without SMAPI''?===
+
=== Posso fazer um mod ''sem SMAPI''? ===
Yep. Many SMAPI mods support 'content packs', which let you provide JSON text files, images, etc which they use. For example, you can use [https://www.nexusmods.com/stardewvalley/mods/1915 Content Patcher] to edit the game's images and data with zero programming needed. The rest of this guide is about creating a new SMAPI mod; for content packs, see the documentation for the mod that'll read it.
+
Sim. Muitos mods SMAPI suportam 'pacotes de conteúdo', que permitem fornecer arquivos de texto JSON, imagens etc. que eles usam. Por exemplo, você pode usar o [https://www.nexusmods.com/stardewvalley/mods/1915 Content Patcher] para editar as imagens e os dados do jogo sem necessidade de programação. O restante deste guia é sobre como criar um novo mod SMAPI; para pacotes de conteúdo, consulte a documentação do mod que o lerá.
  
===Where can I get help?===
+
=== Onde posso obter ajuda? ===
<span id="help"></span>The Stardew Valley modding community is very welcoming. Feel free to ask for help in [[Modding:Community#Discord|#modding on the Stardew Valley Discord]].
+
<span id="help"></span>A comunidade de modificação de Stardew Valley é muito acolhedora. Sinta-se livre para pedir ajuda em [[Modding:Community#Discord|modding na Stardew Valley Discord]].
  
==Get started==
+
== Introdução ==
===Learn C#===
+
=== Aprenda C# ===
Since mods are written in C#, it's a good idea to get acquainted with it first. You don't need to memorise everything, but a grasp of the basics (like fields, methods, variables, and classes) will make everything else much easier.
+
Como os mods são escritos em C#, é uma boa idéia familiarizá-lo primeiro. Você não precisa memorizar tudo, mas uma compreensão do básico (como campos, métodos, variáveis ​​e classes) facilitará todo o resto.
  
Some useful resources:
+
Alguns recursos úteis:
* [https://docs.microsoft.com/en-us/dotnet/csharp/quick-starts/ ''C# Quickstarts''] teaches the basics of C# with interactive examples.
+
* [https://docs.microsoft.com/en-us/dotnet/csharp/quick-starts/ ''C# Quickstarts''] ensina o básico do C# com exemplos interativos.
* [https://mva.microsoft.com/en-us/training-courses/c-fundamentals-for-absolute-beginners-16169 ''C# Fundamentals for Absolute Beginners''] is a video guide which will walk you through C#, from the basic concepts to event-driven programming (which is what SMAPI mods mostly use).
+
* [https://mva.microsoft.com/en-us/training-courses/c-fundamentals-for-absolute-beginners-16169 ''Fundamentos de C# para iniciantes absolutos''] é um guia em vídeo que o orientará C#, dos conceitos básicos à programação orientada a eventos (que é o que os mods SMAPI usam principalmente).
  
===Requirements===
+
=== Requisitos ===
Before you start:
+
Antes que você comece:
# Read the [[Modding:Player Guide/Getting Started|Player Guide]]. The rest of this guide assumes you're already familiar with using mods.
+
# Leia o [[Modding:Player Guide/Getting Started|Player Guide]]. O restante deste guia pressupõe que você já esteja familiarizado com o uso de mods.
# Install Stardew Valley.
+
# Instale o Stardew Valley.
# Install [[Modding:Player Guide/Getting Started#Install SMAPI|SMAPI]].
+
# Instale [[Modificações:Guia do Player/Introdução#Instale SMAPI|SMAPI]].
# Install the IDE (''integrated development environment'').
+
# Instale o IDE (''ambiente de desenvolvimento integrado'').
#* On Linux: install [http://www.monodevelop.com/ MonoDevelop].
+
# * No Linux: instale [http://www.monodevelop.com/ MonoDevelop].
#* On Mac: install [https://www.visualstudio.com/vs/visual-studio-mac/ Visual Studio 2017 for Mac]. (This is a rebranded MonoDevelop.)
+
# * No Mac: instale [https://www.visualstudio.com/vs/visual-studio-mac/ Visual Studio para Mac]. (Este é um MonoDevelop renomeado.)
#* On Windows: install [https://www.visualstudio.com/vs/community/ Visual Studio 2017 Community]. When the installer asks about workloads, enable ''.NET Desktop Development''.  
+
# * No Windows: instale [https://www.visualstudio.com/vs/community/ Visual Studio Comumnity]. Quando o instalador perguntar sobre cargas de trabalho, ative '' .NET Desktop Development ''.
  
If you're not familiar with Visual Studio 2017 (on Windows/Mac) or MonoDevelop (on Linux), [[Modding:IDE reference]] explains how to do the important stuff you need for this guide.
+
Se você não está familiarizado com o Visual Studio (no Windows / Mac) ou o MonoDevelop (no Linux), [[Modding:IDE reference]] explica como fazer as coisas importantes necessárias para este guia.
  
==Create a basic mod==
+
==Crie um mod básico==
===Quick start===
+
===Inicio rápido===
If you're experienced enough to skip the tutorial, here's a quick summary of this section:
+
Se você tiver experiência suficiente para pular o tutorial, aqui está um rápido resumo desta seção:
{{collapse|expand for quick start|content=&#32;
+
{{collapse|Expanda para começo rápido|content=&#32;
# Create an empty C# class library project.
+
# Crie uma biblioteca de classes vazia em um projeto com o C#. (não selecione o Biblioteca de Classes(.NET Framework))
# Target .NET Framework 4.5, 4.5.1, or 4.5.2 for best compatibility.
+
# Instâncie o .NET 5.
# Reference the [https://github.com/Pathoschild/Stardew.ModBuildConfig <tt>Pathoschild.Stardew.ModBuildConfig</tt> NuGet package] to automatically add the right references depending on the platform the mod is being compiled on.
+
# Referencie o [https://github.com/Pathoschild/Stardew.ModBuildConfig <samp>Pathoschild.Stardew.ModBuildConfig</samp> NuGet package] para adicionar automaticamente as referências corretas, dependendo da plataforma em que o mod está sendo compilado.
# Create a <tt>ModEntry</tt> class which subclasses <tt>StardewModdingAPI.Mod</tt>.
+
# Crie uma classe com o nome <samp>ModEntry</samp> com uma subclasse chamada <samp>StardewModdingAPI.Mod</samp>.
# Override the <tt>Entry</tt> method, and write your code using the [[#Mod APIs|SMAPI events and APIs]].
+
# Reescreva o método <samp>Entry</samp>, e escreva seu código usando [[#Mod APIs|SMAPI events and APIs]].
# Create a [[#Add your manifest|<tt>manifest.json</tt> file]] which describes your mod for SMAPI.
+
# Crie um [[#Aidicione seu manifesto|<samp>manifest.json</samp>]] que descreva o seu mod para o SMAPI.
# Create [[#Release your mod|a zip file containing the mod files]] for release.
+
# Crie [[#Lance seu mod|um arquivo zip contendo os arquivos do seu mod]] para o lançamento.
 
}}
 
}}
  
===Create the project===
+
===Crie o projeto===
A SMAPI mod is a compiled library (DLL) with an entry method that gets called by SMAPI, so let's set that up.
+
Um mod SMAPI é uma biblioteca compilada (DLL) com um método de entrada que é chamado por SMAPI, então vamos configurar isso.
  
# Open Visual Studio 2017 or MonoDevelop.
+
# Abra o Visual Studio 2022 ou MonoDevelop.
# Create a solution with a .NET Framework class library project (see [[Modding:IDE reference#create-project|how to create a project]]). '''Make sure you choose .NET Framework, not .NET Core or .NET Standard.'''
+
# Crie uma solução com projeto de biblioteca de classes (veja [[Modding:IDE reference#create-project|como criar um projeto]]). (Não escolha Biblioteca de Classes .NET Framework!)
# Change the target framework to .NET Framework 4.5, 4.5.1, or 4.5.2 for best compatibility (see [[Modding:IDE reference#set-target-framework|how to change target framework]]).
+
# Mude a versão framework para .NET 5 (veja [[Modding:IDE reference#set-target-framework|como alterar a versão do framework]]). Talvez você precise [https://dotnet.microsoft.com/en-us/download/dotnet/5.0 instalar o SDK]
# Reference the [https://www.nuget.org/packages/Pathoschild.Stardew.ModBuildConfig <tt>Pathoschild.Stardew.ModBuildConfig</tt> NuGet package] (see [[Modding:IDE reference#add-nuget|how to add the package]]).
+
# Referêncie [https://www.nuget.org/packages/Pathoschild.Stardew.ModBuildConfig <samp>Pathoschild.Stardew.ModBuildConfig</samp> NuGet package] (veja [[Modding:IDE reference#add-nuget|como adicionar o pacote]]).
# Restart Visual Studio/MonoDevelop after installing the package.
+
#* Se você estiver recebendo um erro informando que o tipo ou nome do namespace "StardewModdingAPI" não foi encontrado, é possível que o caminho do jogo não esteja sendo detectado. Você precisará definir a propriedade GamePath para o diretório executável do jogo. Isso pode ser feito adicionando uma propriedade ''GamePath'' ao ''PropertyGroup'' em suas configurações ''.csproj''.
 +
# Reinicie o Visual Studio/MonoDevelop após a instalação do pacote.
  
===Add the code===
+
===Adicione o código===
Next let's add some code SMAPI will run.
+
A seguir, vamos adicionar alguns códigos que o SMAPI executará.
  
 
<ol>
 
<ol>
<li>Delete the <tt>Class1.cs</tt> or <tt>MyClass.cs</tt> file (see [[Modding:IDE reference#delete-file|how to delete a file]]).</li>
+
<li>Exclua o arquivo <samp>Class1.cs</samp> ou <samp>MyClass.cs</samp> (Veja [[Modding:IDE reference#delete-file|como excluir um arquivo]]).</li>
<li>Add a C# class file called <tt>ModEntry.cs</tt> to your project (see [[Modding:IDE reference#Add a file|how to add a file]]).</li>
+
<li>Adicione um arquivo C# class Chamado <samp>ModEntry.cs</samp> ao seu projeto (Veja [[Modding:IDE reference#Add a file|como adicionar um arquivo]]).</li>
<li>Put this code in the file (replace <tt>YourProjectName</tt> with the name of your project):
+
<li>Coloque este código no arquivo (substitua o <samp>YourProjectName</samp> pelo nome do seu projeto):
<source lang="c#">
+
<syntaxhighlight lang="c#">
 
using System;
 
using System;
 
using Microsoft.Xna.Framework;
 
using Microsoft.Xna.Framework;
Linha 91: Linha 92:
 
namespace YourProjectName
 
namespace YourProjectName
 
{
 
{
     /// <summary>The mod entry point.</summary>
+
     /// <summary>O ponto de entrada do mod.</summary>
 
     public class ModEntry : Mod
 
     public class ModEntry : Mod
 
     {
 
     {
 
         /*********
 
         /*********
         ** Public methods
+
         ** Métodos públicos
 
         *********/
 
         *********/
         /// <summary>The mod entry point, called after the mod is first loaded.</summary>
+
         /// <summary>O ponto de entrada do mod, chamado após o mod ser carregado pela primeira vez.</summary>
         /// <param name="helper">Provides simplified APIs for writing mods.</param>
+
         /// <param name="helper">Fornece APIs simplificadas para escrever mods</param>
 
         public override void Entry(IModHelper helper)
 
         public override void Entry(IModHelper helper)
 
         {
 
         {
Linha 106: Linha 107:
  
 
         /*********
 
         /*********
         ** Private methods
+
         ** Métodos privados
 
         *********/
 
         *********/
         /// <summary>Raised after the player presses a button on the keyboard, controller, or mouse.</summary>
+
         /// <summary>Chamado após o jogador pressionar um botão no teclado, controle ou mouse.</summary>
         /// <param name="sender">The event sender.</param>
+
         /// <param name="sender">O remetente do evento.</param>
         /// <param name="e">The event data.</param>
+
         /// <param name="e">Os dados do evento.</param>
 
         private void OnButtonPressed(object sender, ButtonPressedEventArgs e)
 
         private void OnButtonPressed(object sender, ButtonPressedEventArgs e)
 
         {
 
         {
             // ignore if player hasn't loaded a save yet
+
             // ignore se o jogador não tiver carregado o salvamento ainda.
 
             if (!Context.IsWorldReady)
 
             if (!Context.IsWorldReady)
 
                 return;
 
                 return;
  
             // print button presses to the console window
+
             // imprima o botão pressionado na janela do console.
             this.Monitor.Log($"{Game1.player.Name} pressed {e.Button}.");
+
             this.Monitor.Log($"{Game1.player.Name} apertou o botão {e.Button}.");
 
         }
 
         }
 
     }
 
     }
 
}
 
}
</source></li>
+
</syntaxhighlight></li>
 
</ol>
 
</ol>
  
Here's a breakdown of what that code is doing:
+
Aqui um detalhamento do que o código faz:
  
# <code>using X;</code> (see [https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/using-directive using directive]) makes classes in that namespace available in your code.
+
# <code>using X;</code> (veja [https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/using-directive using directive]) torna as classes desse namespace disponiveis no seu código.
# <code>namespace YourProjectName</code> (see [https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/namespace namespace keyword]) defines the scope for your mod code. Don't worry about this when you're starting out, Visual Studio or MonoDevelop will add it automatically when you add a file.
+
# <code>namespace YourProjectName</code> (see [https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/namespace namespace keyword]) define o escopo do código do seu mod. Não se preocupe com isso quando estiver começando, o Visual Studio ou o MonoDevelop vai adiciona-lo automaticamente quando você adicionar um arquivo.
# <code>public class ModEntry : Mod</code> (see [https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/class class keyword]) creates your mod's main class, and subclasses SMAPI's <tt>Mod</tt> class. SMAPI will detect your <tt>Mod</tt> subclass automatically, and <tt>Mod</tt> gives you access to SMAPI's APIs.
+
# <code>public class ModEntry : Mod</code> (veja [https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/class class keyword]) cria a classe principal do seu mod, e subclasses da classe <samp>Mod</samp> do SMAPI. O SMAPI vai detectar as subclasses do <samp>Mod</samp> automaticamente, e o <samp>Mod</samp> lhe dará acesso as APIs do SMAPI.
# <code>public override void Entry(IModHelper helper)</code> is the method SMAPI will call when your mod is loaded into the game. The <code>helper</code> provides convenient access to many of SMAPI's APIs.
+
# <code>public override void Entry(IModHelper helper)</code> é o método que o SMAPI irá chamar ao seu mod ser carregado no jogo. O <code>helper</code> fornece acesso conveniente à várias APIs do SMAPI.
# <code>helper.Events.Input.ButtonPressed += this.OnButtonPressed;</code> adds an 'event handler' (i.e. a method to call) when the button-pressed event happens. In other words, when a button is pressed (the <tt>helper.Events.Input.ButtonPressed</tt> event), SMAPI will call your <tt>this.OnButtonPressed</tt> method. See [[Modding:Modder Guide/APIs/Events|events in the SMAPI reference]] for more info.
+
# <code>helper.Events.Input.ButtonPressed += this.OnButtonPressed;</code> adiciona um 'manipulador de eventos' (''i.e.,'' um método para chamar) quando o evento do button-pressed (botão pressionado) ocorrer. Em outras palavras, quando um botão é pressionado (O evento <samp>helper.Events.Input.ButtonPressed</samp>), O SMAPI vai chamar o seu método <samp>this.OnButtonPressed</samp>. Veja [[Modding:Modder Guide/APIs/Events|events in the SMAPI reference]] para mais informações.
  
===Add your manifest===
+
===Adicionando seu manifest===
The mod manifest tells SMAPI about your mod.
+
O manifest conta ao SMAPI sobre seu mod.
  
 
<ol>
 
<ol>
<li>Add a file named <tt>manifest.json</tt> to your project.</li>
+
<li>Adicione um arquivo chamado <samp>manifest.json</samp> ao seu projeto.</li>
<li>Paste this code into the file (replacing the <tt>&lt;...&gt;</tt> placeholders):
+
<li>Cole esse código dentro do arquivo (substituindo os <samp>&lt;...&gt;</samp> pelas informações):
<source lang="json">
+
<syntaxhighlight lang="json">
 
{
 
{
   "Name": "<your project name>",
+
   "Name": "<nome do seu projeto>",
   "Author": "<your name>",
+
   "Author": "<seu nome>",
 
   "Version": "1.0.0",
 
   "Version": "1.0.0",
   "Description": "<One or two sentences about the mod>",
+
   "Description": "<Uma ou duas frases sobre seu mod>",
   "UniqueID": "<your name>.<your project name>",
+
   "UniqueID": "<seu nome>.<nome do seu projeto>",
   "EntryDll": "<your project name>.dll",
+
   "EntryDll": "<nome do seu projeto>.dll",
 
   "MinimumApiVersion": "2.9",
 
   "MinimumApiVersion": "2.9",
 
   "UpdateKeys": []
 
   "UpdateKeys": []
 
}
 
}
</source></li>
+
</syntaxhighlight></li>
 
</ol>
 
</ol>
  
This will be listed in the console output when the game is launching. For more info, see the [[Modding:Modder Guide/APIs/Manifest|manifest docs]].
+
Isso será listado na saída do console quando o jogo for iniciado. Para obter mais informações, consulte a documentação do [[Modding: Modder Guide / APIs / Manifest | manifest]].
  
===Try your mod===
+
=== Experimente o seu mod ===
# Build the project.<br /><small>If you did the ''[[#Create the project|create the project]]'' steps correctly, this will automatically add your mod to the game's <tt>Mods</tt> folder.</small>
+
# Compile o projeto. (Para compilar o projeto: Visual Studio - Compilação > Compilar [Nome do seu projeto]) <br /><small>Se você executou as etapas ''[[#Criar o projeto|crie o projeto]]'' corretamente, isso adicionará automaticamente seu mod aos <samp>Mods do jogo</samp>.</small>  
# Run the game through SMAPI.
+
# Execute o jogo através do SMAPI.
  
The mod so far will just send a message to the console window whenever you press a key in the game.
+
O mod até agora enviará uma mensagem para a janela do console sempre que você pressionar uma tecla no jogo.
  
===Troubleshoot===
+
=== Solucionar problemas ===
If the tutorial mod doesn't work...
+
Se o mod tutorial não funcionar ...
  
# Review the above steps to make sure you didn't skip something.
+
# Revise as etapas acima para garantir que você não pulou alguma coisa.
# Check for error messages which may explain why it's not working:
+
# Verifique as mensagens de erro que podem explicar por que não está funcionando:
#* In Visual Studio, click ''Build > Rebuild Solution'' and check the ''Output'' pane or ''Error'' list.
+
# * No Visual Studio, clique em ''Build > Rebuild Solution'' e verifique o painel ''Output'' ou a lista ''Error''.
#* In MonoDevelop, click ''Build > Rebuild All'' and wait until it's done. Then click the "Build: XX errors, XX warnings" bar at the top, and check the ''XX Errors'' and ''Build Output'' tabs.
+
# * No MonoDevelop, clique em ''Build > Rebuild All'' e aguarde até que esteja pronto. Em seguida, clique na barra "Build: XX errors, XX warnings" na parte superior e verifique as guias ''XX Errors'' e ''Build Output''.
# See the [[Modding:Modder Guide/Test and Troubleshoot|troubleshooting guide]].
+
# Consulte o [[Modificações:Guia do Modder/Teste e Solução de Problemas|Guia do Modder/Guia de Teste e Solução de Problemas]].
# If all else fails, come ask for help in the [[Modding:Community#Discord|#modding in the Stardew Valley Discord]]. :)
+
# Se tudo mais falhar, peça ajuda na [[Modding:Community#Discord|#modding na Stardew Valley Discord]]. :)
  
==Go further==
+
==Vá além==
===SMAPI APIs===
+
===APIs do SMAPI===
SMAPI provides a set of APIs you can use to do more. See [[Modding:Modder Guide/APIs|SMAPI reference]] for more info.
+
O SMAPI fornece um conjunto de APIs na qual você pode usar para criar mais. veja a [[Modding:Modder Guide/APIs|referencia SMAPI]] para mais informações.
  
===Crossplatform support===
+
===Suporte multiplataforma===
SMAPI will automatically adjust your mod so it works on Linux, Mac, and Windows. However, there are a few things you should do to avoid problems:
+
O SMAPI irá ajustar automaticamente seu mod para funcionar no Linux, Mac e Windows. Entretanto, há alguma coisas que você deveria fazer para evitar problemas:
  
 
<ol>
 
<ol>
<li>Use the [https://github.com/Pathoschild/Stardew.ModBuildConfig#readme crossplatform build config] package to automatically set up your project references. This makes crossplatform compatibility easier and lets your code compile on any platform. (If you followed the above guide, you already have this.)</li>
+
<li>Use o pacote [https://github.com/Pathoschild/Stardew.ModBuildConfig#readme configuração de compilação multiplataforma] para ajustar as referencias do seu projeto automaticamente. Isso facilita a compatibilidade entre plataformas, além de deixar seu código compilar em qualquer plataforma. (Se você tiver seguido o guia acima, já tem isso.)</li>
  
<li>Use <tt>Path.Combine</tt> to build file paths, don't hardcode path separators since they won't work on all platforms.
+
<li>Use <samp>Path.Combine</samp> para criar caminhos de arquivo, não codifique os separadores de caminho, pois poderão não funcionar em todas as plataformas.</li>
  
<source lang="c#">
+
<syntaxhighlight lang="c#">
// ✘ Don't do this! It will crash on Linux/Mac.
+
// ✘ Não faça isso! Do contrario irá crashar (travar) no Linux/Mac.
 
string path = Helper.DirectoryPath + "\assets\asset.xnb";
 
string path = Helper.DirectoryPath + "\assets\asset.xnb";
  
// ✓ This is OK
+
// ✓ Isso é OK
 
string path = Path.Combine(Helper.DirectoryPath, "assets", "asset.xnb");
 
string path = Path.Combine(Helper.DirectoryPath, "assets", "asset.xnb");
</source></li>
+
</syntaxhighlight></li>
  
<li>Use <tt>Helper.DirectoryPath</tt>, don't try to determine the mod path yourself.
+
<li>Use o <samp>Helper.DirectoryPath</samp>, Não tente determinar o caminho do mod sozinho.
  
<source lang="c#">
+
<syntaxhighlight lang="c#">
// ✘ Don't do this! It will crash if SMAPI rewrites the assembly (e.g. to update or crossplatform it).
+
// ✘ Não faça isso! Ele vai crashar (travar) se o SMAPI reescrever o assembly. (''exp.'' para atualiza-lo ou torna-lo multiplataforma).
 
string modFolder = Assembly.GetCallingAssembly().Location;
 
string modFolder = Assembly.GetCallingAssembly().Location;
  
// ✓ This is OK
+
// ✓ Isso é OK
 
string modFolder = Helper.DirectoryPath;
 
string modFolder = Helper.DirectoryPath;
</source></li>
+
</syntaxhighlight></li>
 
</ol>
 
</ol>
  
===Decompile the game code===
+
===Decompile o código do jogo===
When you start working on more complex mods, you may need to look at how the game code works.
+
Quando você começar a trabalhar em mod mais complexos, você pode precisar olhar como o código do jogo funciona.
  
To decompile the game code so you can read it (though it won't be fully functional due to decompiler limitations):
+
Para descompilar o código do jogo de modo que você possa lê-lo (embora não seja totalmente funcional devido à limitações do descompilador):
* On Windows:
+
* No Windows:
*# Open <tt>StardewValley.exe</tt> in [https://www.jetbrains.com/decompiler/ dotPeek].
+
*# Abra o <samp>StardewValley.exe</samp> no [https://www.jetbrains.com/decompiler/ dotPeek].
*# Right-click on ''Stardew Valley'' and choose ''Export to Project''. Accept the default options to create a decompiled project you can open in Visual Studio.
+
*# Clique com o botão direito em ''Stardew Valley'' e escolha ''Export to Project''. Aceite as opções padrões para criar um projeto decompilado que você poderá abrir no Visual Studio.
* On Linux/Mac:
+
* No Linux/Mac:
*# Open <tt>StardewValley.exe</tt> in MonoDevelop through ''File &gt; Open''.
+
*# Abra o <samp>StardewValley.exe</samp> no MonoDevelop por meio do ''File &gt; Open''.
*# Change ''Language'' from ''Summary'' to ''C#''.
+
*# Altere a ''Language'' do ''Summary'' para ''C#''.
  
To unpack the XNB data/image files, see [[Modding:Editing XNB files]].
+
Para descompactar os arquivos XNB de dados/imagem, veja [[Modding:Editing XNB files]].
  
 
{{modding guide footer
 
{{modding guide footer
 
  |prev =  
 
  |prev =  
  |next = [[Modding:Modder Guide/Test and Troubleshoot|Test and Troubleshoot]]
+
  |next = [[Modificações:Guia do Modder/Teste e Solução de Problemas|Teste e solução de problemas]]
 
}}
 
}}
  
 
[[en:Modding:Modder Guide/Get Started]]
 
[[en:Modding:Modder Guide/Get Started]]
 +
[[zh:模组:创建 SMAPI 模组]]

Edição atual desde as 23h14min de 20 de fevereiro de 2024

Robin building.png
“Ainda tenho muito trabalho a fazer”
— Robin

Tradução incompleta

Este artigo ou seção não foi completamente traduzido para o português. Você está convidado a ajudar na sua construção editando-o
Última edição por LokKol em 2024-02-20 23:14:48.

Creating SMAPI mods SMAPI mascot.png


Modificações:Índice

Você quer criar mods SMAPI para o Stardew Valley? Este guia é para você! Para instruções sobre usar mods, veja Modificações:Guia do Jogador.

Intro

O que é um mod SMAPI?

Um mod SMAPI usa a API de modificação SMAPI para estender a lógica do jogo. O mod pode responder quando algo acontece no jogo (como quando um objeto é colocado no mundo), executar código periodicamente (como uma vez por atualização), alterar os ativos e dados do jogo, etc. Mods SMAPI são escritos em C# usando o O .NET Framework e o Stardew Valley usam XNA / MonoGame para a lógica do jogo (desenho na tela, entrada do usuário, etc.).

Por que os mods usam SMAPI?

SMAPI faz muito por você! Por exemplo, o SMAPI irá ...

  1. Carregue seu mod no jogo. Mods de código não são possíveis sem o SMAPI para carregá-los.
  2. Forneça APIs e eventos que permitam interagir com o jogo de maneiras que você não conseguiria. Existem APIs simplificadas para alterações de ativos / dados do jogo, configuração do jogador, tradução, reflexão etc. Isso será abordado mais adiante neste guia.
  3. Reescreva seu mod para compatibilidade de plataformas cruzadas quando estiver carregado. Isso permite que você escreva código mod sem se preocupar com as diferenças entre as versões Linux / Mac / Windows do jogo.
  4. Reescreva seu mod para atualizá-lo. O SMAPI detecta e corrige o código mod quebrado por uma atualização do jogo em casos comuns.
  5. Erros de interceptação. Se o seu mod travar ou causar um erro, o SMAPI irá interceptar o erro, mostrar os detalhes do erro na janela do console e, na maioria dos casos, recuperar o jogo automaticamente. Isso significa que seu mod não travará acidentalmente o jogo e facilita muito a solução de erros.
  6. Forneça verificações de atualização. O SMAPI alerta automaticamente os jogadores quando uma nova versão do seu mod está disponível.
  7. Forneça verificações de compatibilidade. O SMAPI detecta automaticamente quando o seu mod é incompatível e o desativa antes de causar problemas, para que os jogadores não fiquem com jogos quebrados.

Posso fazer um mod?

Sim! Este guia irá ajudá-lo a criar um mod simples, passo a passo. Se você seguir em frente, você terá criado um mod! Então você só precisa fazer o que quiser.

Se você é iniciante em programação: muitos desenvolvedores de mod começam com pouca ou nenhuma experiência em programação. Você certamente pode aprender ao longo do caminho, se estiver determinado, mas deve estar preparado para uma curva de aprendizado acentuada. Não seja muito ambicioso a princípio; é melhor começar com um mod pequeno quando você descobrir isso. É fácil ficar impressionado no começo e desistir. A comunidade modding é muito acolhedora, portanto, não tenha medo de fazer perguntas!

Se você já tem experiência em programação, deve ficar bem. A experiência de programação em C# ou Java facilitará as coisas, mas não é crítica. Se você não está familiarizado com o C#, pode percorrer as referências abaixo de Learning C# para preencher as lacunas.

Posso fazer um mod sem SMAPI?

Sim. Muitos mods SMAPI suportam 'pacotes de conteúdo', que permitem fornecer arquivos de texto JSON, imagens etc. que eles usam. Por exemplo, você pode usar o Content Patcher para editar as imagens e os dados do jogo sem necessidade de programação. O restante deste guia é sobre como criar um novo mod SMAPI; para pacotes de conteúdo, consulte a documentação do mod que o lerá.

Onde posso obter ajuda?

A comunidade de modificação de Stardew Valley é muito acolhedora. Sinta-se livre para pedir ajuda em modding na Stardew Valley Discord.

Introdução

Aprenda C#

Como os mods são escritos em C#, é uma boa idéia familiarizá-lo primeiro. Você não precisa memorizar tudo, mas uma compreensão do básico (como campos, métodos, variáveis ​​e classes) facilitará todo o resto.

Alguns recursos úteis:

Requisitos

Antes que você comece:

  1. Leia o Player Guide. O restante deste guia pressupõe que você já esteja familiarizado com o uso de mods.
  2. Instale o Stardew Valley.
  3. Instale SMAPI.
  4. Instale o IDE (ambiente de desenvolvimento integrado).
  5. * No Linux: instale MonoDevelop.
  6. * No Mac: instale Visual Studio para Mac. (Este é um MonoDevelop renomeado.)
  7. * No Windows: instale Visual Studio Comumnity. Quando o instalador perguntar sobre cargas de trabalho, ative .NET Desktop Development .

Se você não está familiarizado com o Visual Studio (no Windows / Mac) ou o MonoDevelop (no Linux), Modding:IDE reference explica como fazer as coisas importantes necessárias para este guia.

Crie um mod básico

Inicio rápido

Se você tiver experiência suficiente para pular o tutorial, aqui está um rápido resumo desta seção:

Expanda para começo rápido 
  1. Crie uma biblioteca de classes vazia em um projeto com o C#. (não selecione o Biblioteca de Classes(.NET Framework))
  2. Instâncie o .NET 5.
  3. Referencie o Pathoschild.Stardew.ModBuildConfig NuGet package para adicionar automaticamente as referências corretas, dependendo da plataforma em que o mod está sendo compilado.
  4. Crie uma classe com o nome ModEntry com uma subclasse chamada StardewModdingAPI.Mod.
  5. Reescreva o método Entry, e escreva seu código usando SMAPI events and APIs.
  6. Crie um manifest.json que descreva o seu mod para o SMAPI.
  7. Crie um arquivo zip contendo os arquivos do seu mod para o lançamento.

Crie o projeto

Um mod SMAPI é uma biblioteca compilada (DLL) com um método de entrada que é chamado por SMAPI, então vamos configurar isso.

  1. Abra o Visual Studio 2022 ou MonoDevelop.
  2. Crie uma solução com projeto de biblioteca de classes (veja como criar um projeto). (Não escolha Biblioteca de Classes .NET Framework!)
  3. Mude a versão framework para .NET 5 (veja como alterar a versão do framework). Talvez você precise instalar o SDK
  4. Referêncie Pathoschild.Stardew.ModBuildConfig NuGet package (veja como adicionar o pacote).
    • Se você estiver recebendo um erro informando que o tipo ou nome do namespace "StardewModdingAPI" não foi encontrado, é possível que o caminho do jogo não esteja sendo detectado. Você precisará definir a propriedade GamePath para o diretório executável do jogo. Isso pode ser feito adicionando uma propriedade GamePath ao PropertyGroup em suas configurações .csproj.
  5. Reinicie o Visual Studio/MonoDevelop após a instalação do pacote.

Adicione o código

A seguir, vamos adicionar alguns códigos que o SMAPI executará.

  1. Exclua o arquivo Class1.cs ou MyClass.cs (Veja como excluir um arquivo).
  2. Adicione um arquivo C# class Chamado ModEntry.cs ao seu projeto (Veja como adicionar um arquivo).
  3. Coloque este código no arquivo (substitua o YourProjectName pelo nome do seu projeto):
    using System;
    using Microsoft.Xna.Framework;
    using StardewModdingAPI;
    using StardewModdingAPI.Events;
    using StardewModdingAPI.Utilities;
    using StardewValley;
    
    namespace YourProjectName
    {
        /// <summary>O ponto de entrada do mod.</summary>
        public class ModEntry : Mod
        {
            /*********
            ** Métodos públicos
            *********/
            /// <summary>O ponto de entrada do mod, chamado após o mod ser carregado pela primeira vez.</summary>
            /// <param name="helper">Fornece APIs simplificadas para escrever mods</param>
            public override void Entry(IModHelper helper)
            {
                helper.Events.Input.ButtonPressed += this.OnButtonPressed;
            }
    
    
            /*********
            ** Métodos privados
            *********/
            /// <summary>Chamado após o jogador pressionar um botão no teclado, controle ou mouse.</summary>
            /// <param name="sender">O remetente do evento.</param>
            /// <param name="e">Os dados do evento.</param>
            private void OnButtonPressed(object sender, ButtonPressedEventArgs e)
            {
                // ignore se o jogador não tiver carregado o salvamento ainda.
                if (!Context.IsWorldReady)
                    return;
    
                // imprima o botão pressionado na janela do console.
                this.Monitor.Log($"{Game1.player.Name} apertou o botão {e.Button}.");
            }
        }
    }
    

Aqui um detalhamento do que o código faz:

  1. using X; (veja using directive) torna as classes desse namespace disponiveis no seu código.
  2. namespace YourProjectName (see namespace keyword) define o escopo do código do seu mod. Não se preocupe com isso quando estiver começando, o Visual Studio ou o MonoDevelop vai adiciona-lo automaticamente quando você adicionar um arquivo.
  3. public class ModEntry : Mod (veja class keyword) cria a classe principal do seu mod, e subclasses da classe Mod do SMAPI. O SMAPI vai detectar as subclasses do Mod automaticamente, e o Mod lhe dará acesso as APIs do SMAPI.
  4. public override void Entry(IModHelper helper) é o método que o SMAPI irá chamar ao seu mod ser carregado no jogo. O helper fornece acesso conveniente à várias APIs do SMAPI.
  5. helper.Events.Input.ButtonPressed += this.OnButtonPressed; adiciona um 'manipulador de eventos' (i.e., um método para chamar) quando o evento do button-pressed (botão pressionado) ocorrer. Em outras palavras, quando um botão é pressionado (O evento helper.Events.Input.ButtonPressed), O SMAPI vai chamar o seu método this.OnButtonPressed. Veja events in the SMAPI reference para mais informações.

Adicionando seu manifest

O manifest conta ao SMAPI sobre seu mod.

  1. Adicione um arquivo chamado manifest.json ao seu projeto.
  2. Cole esse código dentro do arquivo (substituindo os <...> pelas informações):
    {
       "Name": "<nome do seu projeto>",
       "Author": "<seu nome>",
       "Version": "1.0.0",
       "Description": "<Uma ou duas frases sobre seu mod>",
       "UniqueID": "<seu nome>.<nome do seu projeto>",
       "EntryDll": "<nome do seu projeto>.dll",
       "MinimumApiVersion": "2.9",
       "UpdateKeys": []
    }
    

Isso será listado na saída do console quando o jogo for iniciado. Para obter mais informações, consulte a documentação do manifest.

Experimente o seu mod

  1. Compile o projeto. (Para compilar o projeto: Visual Studio - Compilação > Compilar [Nome do seu projeto])
    Se você executou as etapas crie o projeto corretamente, isso adicionará automaticamente seu mod aos Mods do jogo.
  2. Execute o jogo através do SMAPI.

O mod até agora enviará uma mensagem para a janela do console sempre que você pressionar uma tecla no jogo.

Solucionar problemas

Se o mod tutorial não funcionar ...

  1. Revise as etapas acima para garantir que você não pulou alguma coisa.
  2. Verifique as mensagens de erro que podem explicar por que não está funcionando:
  3. * No Visual Studio, clique em Build > Rebuild Solution e verifique o painel Output ou a lista Error.
  4. * No MonoDevelop, clique em Build > Rebuild All e aguarde até que esteja pronto. Em seguida, clique na barra "Build: XX errors, XX warnings" na parte superior e verifique as guias XX Errors e Build Output.
  5. Consulte o Guia do Modder/Guia de Teste e Solução de Problemas.
  6. Se tudo mais falhar, peça ajuda na #modding na Stardew Valley Discord. :)

Vá além

APIs do SMAPI

O SMAPI fornece um conjunto de APIs na qual você pode usar para criar mais. veja a referencia SMAPI para mais informações.

Suporte multiplataforma

O SMAPI irá ajustar automaticamente seu mod para funcionar no Linux, Mac e Windows. Entretanto, há alguma coisas que você deveria fazer para evitar problemas:

  1. Use o pacote configuração de compilação multiplataforma para ajustar as referencias do seu projeto automaticamente. Isso facilita a compatibilidade entre plataformas, além de deixar seu código compilar em qualquer plataforma. (Se você tiver seguido o guia acima, já tem isso.)
  2. Use Path.Combine para criar caminhos de arquivo, não codifique os separadores de caminho, pois poderão não funcionar em todas as plataformas.
  3. // ✘ Não faça isso! Do contrario irá crashar (travar) no Linux/Mac.
    string path = Helper.DirectoryPath + "\assets\asset.xnb";
    
    // ✓ Isso é OK
    string path = Path.Combine(Helper.DirectoryPath, "assets", "asset.xnb");
    
  4. Use o Helper.DirectoryPath, Não tente determinar o caminho do mod sozinho.
    // ✘ Não faça isso! Ele vai crashar (travar) se o SMAPI reescrever o assembly. (''exp.'' para atualiza-lo ou torna-lo multiplataforma).
    string modFolder = Assembly.GetCallingAssembly().Location;
    
    // ✓ Isso é OK
    string modFolder = Helper.DirectoryPath;
    

Decompile o código do jogo

Quando você começar a trabalhar em mod mais complexos, você pode precisar olhar como o código do jogo funciona.

Para descompilar o código do jogo de modo que você possa lê-lo (embora não seja totalmente funcional devido à limitações do descompilador):

  • No Windows:
    1. Abra o StardewValley.exe no dotPeek.
    2. Clique com o botão direito em Stardew Valley e escolha Export to Project. Aceite as opções padrões para criar um projeto decompilado que você poderá abrir no Visual Studio.
  • No Linux/Mac:
    1. Abra o StardewValley.exe no MonoDevelop por meio do File > Open.
    2. Altere a Language do Summary para C#.

Para descompactar os arquivos XNB de dados/imagem, veja Modding:Editing XNB files.