Release Notes #

See the updates and improvements in the latest releases of Hiro.

1.16.0 #

New features #

  • Added Discord In-App Purchases to the Virtual store.
  • Added targetCount, subscoreMin, and subscoreMax as optional parameters to the Event Leaderboard debug functions.

Improvements #

  • The Inventory System will keep zero count items in the player’s storage if the new keep_zero config property is enabled.
  • Use named return arguments in Go interfaces for improved readability.
  • Any active reward modifiers are returned in EconomyUpdateAck responses.
  • Unlockables which have completed but are not yet claimed do not count towards the active (in-use) slots.
  • Fake users in Event Leaderboards are given zero scores rather than have no score set.
  • The Stats System now observes resolveCollection for gameplay system’s state.

Unity #

  • Updated the ExampleCoordinator to implement the improved offline mode flow.
  • Removed various usages of System.Linq from the codebase.

Fixes #

  • Fixed RewardGrant error when the Energy System is not in use.
  • Fixed an error on publish of Satori events about store items with no rewards.
  • Fixed the Energy System Spend function not returning aggregate rewards in the response.

Unity #

  • Confirm pending purchase even if non-consumable products exist on an Apple ID, but are not known to the Virtual Store.
  • Fixed queued unlocks which are not updated in the gameplay system’s state.

1.15.0 #

New features #

  • Unlockables can now be queued to unlock when stored within slots.
  • Added max_queued_unlocks param to restrict how many Unlockables can be queued to unlock at once.
  • Client libraries/packages now have functions for the new queued Unlockables.
  • Added metadata field to Event Leaderboard score updates.

Improvements #

  • The OnReward hooks now include the ID of the gameplay system entity which is the source of the reward.
  • PlacementStart can take additional metadata as the context of what started the rewarded video placement.
  • Do not return an error when Inventory grant operations result in no change.
  • Unlockables can be started even if another Unlockable is active and unclaimed, so long as it is completed.

Unity #

  • Switch all enumerable data types to use IReadOnlyCollection to expose the Count field.

Fixes #

  • Any active Reward Modifiers are returned in various gameplay system ACK responses.
  • The Unlockables state now retains null in the list to indicate their position in the available slots.

1.14.0 #

Improvements #

  • Updated to Nakama 3.22.0 version on the nakama-common 1.32.0 release.
  • Updated dependencies which include Protobuf 1.34.1 release.
  • Leaderboard record metadata can be passed into score writes with Event Leaderboards.

Unity #

  • Fixed the request object sent with the DebugRandomScores function in Event Leaderboards.
  • Handle edge cases where incorrectly defined Rewards within a hard currency purchase could leave the purchase in the pending state.
  • Renamed DebugRandomScores to DebugRandomScoresAsync to follow C# naming conventions.

Fixes #

  • Prevent a panic when consuming an Inventory Item but the Energy system has not been initialized.
  • Fixed non-stackable Inventory Item grants which could go beyond the max count defined.
  • Use the reward key name in the Achievements JSON schema definition.

1.13.0 #

New features #

  • Added a Nakama Console import file to make it easy to set up storage objects for the StoragePersonalizer type.
  • Added debug functions to help with QA on Event Leaderboards.
  • Added UnregisterDebugRpc to clear the implementation of all debug functions across all gameplay systems.

Improvements #

  • Refactored the SatoriPersonalizer for more modularity.
  • Event Leaderboards now contain CurrentTimeSec (UNIX time), like the Achievement type.

Unity #

  • When the NakamaSystem is refreshed, the user will be reauthenticated if needed. This is useful when a logout has been performed or auto refresh in the Nakama.Client has been disabled.
  • Updated Nakama and Satori client dependencies to their 3.12.0 releases.

Fixes #

  • In some reward types, ensure we create multiple inventory items when non-stackable is enabled.
  • Don’t return stale wallet values in sync RPC responses.

1.12.0 #

New features #

  • Support for custom matchmaker properties with Event Leaderboards.
  • Inventory items and Economy store items can now be disabled.

Unity #

  • Added GetWallet by enum as an extension to the IApiAccount type.
  • Added GetPublicStats by enum as an extension to the IApiUser type.
  • Added GetPrivateStats by enum as an extension to the IApiUser type.

Improvements #

Unity #

  • GetRecordsAsync in the LeaderboardsSystem can now return more than 100 records.
  • GetItemCodexAsync in the InventorySystem can now take category as an optional input.

Fixes #

  • Fix JSON schema tier_change validation rule in Event Leaderboards.

1.11.0 #

New features #

  • Added UnregisterRpc to clear the implementation of one or more of the RPCs registered by gameplay systems in Hiro.
  • New helper function to convert AvailableRewardsContents type to an EconomyConfigRewardContents type.
  • The SatoriPersonalizer can now cache data definitions within the lifecycle of a request if enabled.

Improvements #

  • The ForceNetworkProbe can now be switched between true/false at runtime.
  • The collection name used to store data per player can be (optionally) set.
  • Explicitly include unordered_map in C++ generated output for Windows platform.
  • Run Economy initialize user before any custom after authentication hook.

Fixes #

  • Fixed how currencies are decoded when values are larger than int32.MaxSize.
  • Fixed incorrect WARN message at startup with some Economy reward data definition validations.
  • Added type field to JSON schemas for Incentives, Progressions, and Stats.
  • Added max_count field to JSON schema in Economy.

1.10.0 #

New features #

Unity #

  • Added a function to write scores to regional leaderboards.

Improvements #

  • Use omitempty in marshaler settings with data definition structs.
  • Improve error response codes in inventory and economy operations.
  • max_repeat_rolls is now returned in the AvailableRewards type.
  • Update to nakama-common v1.31.0 to be compatible with newer Nakama releases.
  • Inventory GrantItems now returns the modified inventory and also the specific item instances which were granted.
  • Use unsigned integers with the reward range type.
  • Inventory items granted as part of a reward can now have their instance properties rolled at the same time.

Unity #

  • Expose client and session types in the SatoriSystem type.
  • Update to latest Nakama and Satori SDK dependencies.

Fixes #

  • Fixed unrecognized Inventory system type in storage personalizer.
  • Restore behavior where inventory items inherit their properties from the definition and those property keys are not stored in storage.
  • Satori integration to publish analytics events correctly reads configuration parameters.

Unity #

  • Fixed batch update function with player stats.
  • Detect UnityPurchasing ‘fake’ store and warn prices will have mock values.

1.9.0 #

New features #

  • Added a new option max_repeat_rolls to set how many duplicate rows of rolled rewards can occur.
  • The StoragePersonalizer can now update data definitions with a S2S RPC function.
  • Progressions can now be programmatically reset.

Improvements #

  • The SatoriPersonalizer can optionally send analytics events for each gameplay system.

Fixes #

  • Set energy modifiers into server response with Energies spend function.
  • Fixed item properties not being set when items are granted as part of user initialization.
  • Fixed unlockable slots populated in the wrong order when overflow slots are enabled.

Unity #

  • Fix visibility modifier with StatUpdate class.

1.8.1 #

New features #

  • Added UnmarshalWalletfunction to get a Hiro wallet from a Nakama *api.Account type.

Improvements #

  • Clearer error messages in Personalizer middleware.
  • Apply Satori identity authorization before Economy initialize user is processed.

Fixes #

  • Use stable order when inter-dependent achievement progress updates are counted.
  • Don’t throw an error on reward grants if Energies system is uninitialized.

1.8.0 #

New features #

  • Added switches for core and authenticate events to be sent by the SatoriPersonalizer.
  • Added instance_id field to response in Inventory Item type.
  • The Personalizer type can now be added as a chain of transforms to each gameplay’s data definition.
  • Achievement updates can now be sent as a batch to change different counts on multiple achievements at the same time.
  • Progressions can now define a reset schedule similar to Achievements.
  • Added a new StoragePersonalizer type which can use Nakama’s storage engine to manage gameplay data definitions.
  • Progression Reset can be used to manually reset progress on a progression node (i.e. to reset a quest).
  • Stats can update multiple different stats in a single request.

Unity #

  • VContainer DI example is now packaged with the Unity package.
  • Added IsClaimed computed field to Achievement type.
  • Wrap Satori.IClient methods in SatoriSystem type for simpler code.
  • Progression IDs can optionally be sent to receive deltas for a portion of the progression graph.

Improvements #

  • Updated nakama-common to v1.30.1 release.
  • For Unreal and TypeScript, updated HiroClient with newest features.
  • Return instanced item rewards in response type when consumed.
  • The refill and refill_sec fields are always populated in an Energy type (even if at max value).
  • The builtin SatoriPersonalizer now (optionally) uses Satori Live Events to configure Event Leaderboards.
  • Economy Grant now takes an optional wallet metadata input to record a reason in the Nakama ledger.
  • A user who has not submitted any score to an Event Leaderboard is not eligible for rewards or promotions.
  • Use Nakama’s builtin Facebook Instant purchase validation function in the Economy system.
  • If Satori is configured and enabled always authenticate server-side (rather than just new players).

Fixes #

  • Outdated or missing definitions and schemas have been updated.
  • Don’t throw an error when the sender claim has no reward defined.
  • Energies granted in rewards should be returned immediately rather than the previous stale value.
  • Fix variable shadow error with how data definition of sub-achievements are populated in responses.
  • Economy weighted table rewards should escape early if a valid reward row has already been granted.

Unity #

  • Add the Preserve attribute to some types at the class level to avoid code stripping issues in Unity IL2CPP.
  • Notify observers should not be called twice in the Progression system.
  • Don’t throw an error if Achievement category is unset or empty.
  • Use platform specific preprocessor statements with Unity Mobile Notifications system.

1.7.0 #

New features #

  • Added a new error type ErrItemsNotConsumable for Inventory items which are not consumable.

Improvements #

  • When granting Energies, the player’s updated energies are now returned.
  • Event Leaderboard Get operations will return an empty state when a player has never had a previous cohort.
  • Added locked field to the storage engine index used with Event Leaderboard cohort generation.
  • For Unity, improved InventorySystem to use observer pattern.

Fixes #

  • Use PurchaseFailureDescription.reason with Unity IAP package for error messages.
  • Sender claim uses the newer internal operation in the Incentives system.
  • Do not shadow parent Reward when it is created to be granted in Achievements system.
  • For Unity, use an async pattern in IStoreListener.ProcessPurchase with Unity IAP package.

1.6.0 #

New features #

  • Event Leaderboards now have the added fields is_active, can_claim, and can_roll for simpler client code.
  • New Incentives System added to the Unity SDK.
  • Added a MaxOverflow field to the data definition for Energies.

Improvements #

  • Both IEconomyListStoreItem and IEconomyLocalizedStoreItem can now be used in purchase flows in C#.

Fixes #

  • Use Inventory after the Progression purchase has been applied to calculate the latest Progression deltas.
  • Energy counts granted as an Economy Reward are kept as overflow.
  • Batch economy changes which resolve to items removed are now marked correctly.
  • Correctly serialize the input for Inventory update items request to JSON in C#.
  • Fixed to progression deltas computations.

1.5.0 #

New features #

  • Added the server interface for the Incentives gameplay system.
  • Cohort selection in Event Leaderboards can now be overridden with a custom function.

Improvements #

  • Get in the Progression gameplay system now returns a delta of Progression Nodes with changed state if a previous graph is passed to it.

1.4.0 #

New features #

  • Event Leaderboards now have a new function to Roll a new cohort in an active phase.
  • Each Progression Node can now contain multiple counts for local progress to be expressed.

1.3.0 #

New features #

  • Progression gameplay system added.
  • Event Leaderboards can now express promotion and demotion zones with percentages.

1.2.0 #

New features #

  • Added the server interface for the Stats gameplay system.

Improvements #

  • All Reward Tiers are now returned when an Event Leaderboard is fetched for the current user.

Fixes #

  • Fixed weighted reward error when definition is empty (instead of nil).

1.1.0 #

New features #