Строка 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; |