Core Functions and Hooks #

The Hiro interface defines core functions and hooks that aren’t part of any specific system. You can use these hooks to insert your custom code, which will often need reference to certain Hiro systems that you can access by using the various methods listed below.

System specific functions and hooks live on their own pages, such as: Achievements or Economy.

How To Access Hiro Systems #

The following code snipped is an example from our Level-Based Stats Guide where we take systems after initializing it, and pass it into our Personalizer. You can pass systems into any code that you have which needs access to Hiro systems.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
// ...
systems, err := hiro.Init(ctx, logger, nk, initializer, binPath, hiroLicense,
	hiro.WithBaseSystem(fmt.Sprintf("base-system-%s.json", env), true),
	hiro.WithEnergySystem(fmt.Sprintf("base-energies-%s.json", env), true),
	hiro.WithStatsSystem(fmt.Sprintf("base-stats-%s.json", env), true))
if err != nil {
	return err
}

staminaPersonalizer, err := NewStaminaPersonalizer(nk, systems.GetStatsSystem(), "stamina-personalizer.json")
if err != nil {
	return err
}
// ...

Functions #

AddPersonalizer #

Add a Personalizer to the chain that is resolved when getting Hiro config data.

1
systems.AddPersonalizer(hiro.NewStoragePersonalizerDefault(logger, initializer, true))

AddPublisher #

Add a Publisher that wishes to receive and process analytics-style events generated server-side by the various available Hiro systems.

1
systems.AddPublisher(MyCustomPublisher)

GetAchievementsSystem #

Get reference to the Achievements System if found in the registered systems.

1
systems.GetAchievementsSystem()

GetAuctionsSystem #

Get reference to the Auctions System if found in the registered systems.

1
systems.GetAuctionsSystem()

GetBaseSystem #

Get reference to the Base System if found in the registered systems.

1
systems.GetBaseSystem()

GetEconomySystem #

Get reference to the Economy System if found in the registered systems.

1
systems.GetEconomySystem()

GetEnergySystem #

Get reference to the Energy System if found in the registered systems.

1
systems.GetEnergySystem()

GetEventLeaderboardsSystem #

Get reference to the Event Leaderboards System if found in the registered systems.

1
systems.GetEventLeaderboardsSystem()

GetIncentivesSystem #

Get reference to the Incentives System if found in the registered systems.

1
systems.GetIncentivesSystem()

GetInventorySystem #

Get reference to the Inventory System if found in the registered systems.

1
systems.GetInventorySystem()

GetLeaderboardsSystem #

Get reference to the Leaderboards System if found in the registered systems.

1
systems.GetLeaderboardsSystem()

GetProgressionSystem #

Get reference to the Progression System if found in the registered systems.

1
systems.GetProgressionSystem()

GetStatsSystem #

Get reference to the Stats System if found in the registered systems.

1
systems.GetStatsSystem()

GetStreaksSystem #

Get reference to the Streaks System if found in the registered systems.

1
systems.GetStreaksSystem()

GetTeamsSystem #

Get reference to the Teams System if found in the registered systems.

1
systems.GetTeamsSystem()

GetTutorialsSystem #

Get reference to the Tutorials System if found in the registered systems.

1
systems.GetTutorialsSystem()

GetUnlockablesSystem #

Get reference to the Unlockables System if found in the registered systems.

1
systems.GetUnlockablesSystem()

Hooks #

SetAfterAuthenticate #

Set a custom function which will run after a user authenticates.

1
2
3
4
5
6
systems.SetAfterAuthenticate(AfterAuthenticateFn)

func AfterAuthenticateFn(ctx context.Context, logger runtime.Logger, db *sql.DB, nk runtime.NakamaModule, session *api.Session) error {
  // Trigger additional processes upon a user creating their account or logging in.
  return nil
}