Изменения

Перейти к навигации Перейти к поиску
Строка 4: Строка 4:  
В этой статье описываются основные возможности SMAPI. '''Перед прочтением данной статьи, рекомендуется прочитать [[Modding:Modder Guide|Modder Guide]] и [[Modding:Modder Guide/Game Fundamentals|Game Fundamentals]].'''
 
В этой статье описываются основные возможности SMAPI. '''Перед прочтением данной статьи, рекомендуется прочитать [[Modding:Modder Guide|Modder Guide]] и [[Modding:Modder Guide/Game Fundamentals|Game Fundamentals]].'''
   −
==Basic techniques==
+
==Основы==
===Tracking changes to a value===
+
===Отслеживание изменений переменной===
Mods often need to know when a value changed. If there's no SMAPI event for the value, you can create a private [https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/classes-and-structs/fields field] to track the value, and update it using the update tick event. For example, here's a fully functional mod which prints a console message when the player's stamina changes:
+
Модам часто приходится отслеживать изменение какого-либо значения. Если для значения в SMAPI нет события, можно создать [https://docs.microsoft.com/ru-ru/dotnet/csharp/programming-guide/classes-and-structs/fields приватное поле] для отслеживания значения, и обновлять его, используя событие обновления. Например, вот полностью работающий мод, который выводит сообщение в консоль, когда выносливость игрока изменяется:
    
<source lang="c#">
 
<source lang="c#">
/// <summary>The mod entry point.</summary>
+
/// <summary>Входная точка мода.</summary>
 
internal class ModEntry : Mod
 
internal class ModEntry : Mod
 
{
 
{
 
     /*********
 
     /*********
     ** Properties
+
     ** Свойства
 
     *********/
 
     *********/
     /// <summary>The player's last stamina value.</summary>
+
     /// <summary>Последнее значение выносливости игрока.</summary>
 
     private float LastStamina;
 
     private float LastStamina;
       
     /*********
 
     /*********
     ** Public methods
+
     ** Публичные методы
 
     *********/
 
     *********/
     /// <summary>The mod entry point, called after the mod is first loaded.</summary>
+
     /// <summary>При первой загрузке мода вызывается метод Entry</summary>
 
     /// <param name="helper">Provides simplified APIs for writing mods.</param>
 
     /// <param name="helper">Provides simplified APIs for writing mods.</param>
 
     public override void Entry(IModHelper helper)
 
     public override void Entry(IModHelper helper)
Строка 32: Строка 32:     
     /*********
 
     /*********
     ** Private methods
+
     ** Приватные методы
 
     *********/
 
     *********/
     /// <summary>The method invoked when the player loads a save.</summary>
+
     /// <summary>Метод вызываемый при загрузке сохранения.</summary>
 
     /// <param name="sender">The event sender.</param>
 
     /// <param name="sender">The event sender.</param>
 
     /// <param name="e">The event arguments.</param>
 
     /// <param name="e">The event arguments.</param>
Строка 42: Строка 42:  
     }
 
     }
   −
     /// <summary>The method invoked after the game updates (roughly 60 times per second).</summary>
+
     /// <summary>Метод вызывается после события обновления (около 60 раз в секунду).</summary>
 
     /// <param name="sender">The event sender.</param>
 
     /// <param name="sender">The event sender.</param>
 
     /// <param name="e">The event arguments.</param>
 
     /// <param name="e">The event arguments.</param>
 
     private void GameEvents_UpdateTick(object sender, EventArgs e)
 
     private void GameEvents_UpdateTick(object sender, EventArgs e)
 
     {
 
     {
         // skip if save not loaded yet
+
         // выходим, если сохранение еще не загружено
 
         if (!Context.IsWorldReady)
 
         if (!Context.IsWorldReady)
 
             return;
 
             return;
   −
         // skip if stamina not changed
+
         // выходим, если значение выносливости не изменилось
 
         float currentStamina = Game1.player.Stamina;
 
         float currentStamina = Game1.player.Stamina;
 
         if (currentStamina == this.LastStamina)
 
         if (currentStamina == this.LastStamina)
 
             return;
 
             return;
   −
         // print message & update stamina
+
         // выводим сообщение и обновляем значение свойства LastStamina
 
         this.Monitor.Log($"Player stamina changed from {currentStamina} to {this.LastStamina}");
 
         this.Monitor.Log($"Player stamina changed from {currentStamina} to {this.LastStamina}");
 
         this.LastStamina = currentStamina;
 
         this.LastStamina = currentStamina;
5

правок

Навигация