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
, andsubscoreMax
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 theCount
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-common1.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
toDebugRandomScoresAsync
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 theNakama.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 theIApiAccount
type. - Added
GetPublicStats
by enum as an extension to theIApiUser
type. - Added
GetPrivateStats
by enum as an extension to theIApiUser
type.
Improvements #
Unity #
GetRecordsAsync
in theLeaderboardsSystem
can now return more than 100 records.GetItemCodexAsync
in theInventorySystem
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 anEconomyConfigRewardContents
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 theAvailableRewards
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
UnmarshalWallet
function 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 inSatoriSystem
type for simpler code. - Progression IDs can optionally be sent to receive deltas for a portion of the progression graph.
Improvements #
- Updated
nakama-common
tov1.30.1
release. - For Unreal and TypeScript, updated
HiroClient
with newest features. - Return instanced item rewards in response type when consumed.
- The
refill
andrefill_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
, andcan_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
andIEconomyLocalizedStoreItem
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 #
- Added the server interface for the Event Leaderboards gameplay system.