Appearance
Release 17
February 18th, 2022
Appearance
February 18th, 2022
PersistedEntity in the database. The tool allows inspecting the storage size from individual PlayerModel fields to their subfields and all the way to the serialization format signaling. Try it out by clicking on the “Save file size” in the player or guild page in the dashboard, or by opening a specific entity via Technical → Environment → Inspect Entities.PlayerAction that modifies model fields without causing a checksum mismatch. The client cannot modify or refuse the execution of such an action, making these are convenient for updating trusted, checksummed data in PlayerModel. See the details and limitations in PlayerModel Server Updates.LogicVersion to force a synchronized client/server update.http://localhost:5551 instead of the old http://localhost:8080 address. If you need to access a locally deployed game server’s API, it is now available on http://localhost:5550/api instead of the old http://localhost:5000/api address.npm install once to update to the latest dependencies before running the dashboard locally.IPlayerModelClientListener) no longer inherit SDK-side listeners (such as IPlayerModelClientListenerCore, previously called IPlayerModelClientListenerBase). The game and SDK listeners are now separate members of the model. The game-specific events no longer need to adhere to the interface pattern but can choose to use other callback mechanisms. RandomPCG default constructor has been made private as it was easy to accidentally use it incorrectly. The RandomPCG is now initialized with either RandomPCG.CreateNew() for randomized (non-deterministic) initialization or RandomPCG.CreateFromSeed(ulong seed) to initialize from a predetermined seed. MetaInGameMail classes to the new format. The mail-related action semantics have been updated to better match existing needs, and therefore many game-specific actions can be deprecated and replaced with SDK-provided versions. 


MetaplayClient provides better connection error information, with a cleaner division between player-facing error information and technical information intended for analytics and debugging.SessionStartFailed Player Incident and the report is report uploaded to the server immediately.RequireInAppProduct to false to allow not having an associated IAP. This can be used to build offers that are purchased via other means, for example, soft currencies.Infrastructure and Helm chart compatibilities for this release:
infra-modules version 0.1.6 or later for infrastructuremetaplay-gameserver Helm chart version 0.2.2 or later for deploymentinfra-modules version 0.1.8 or later for infrastructuremetaplay-gameserver Helm chart version 0.3.1 or later for deploymentClient Platform communicated by game clients to the server during the login flow.IMetaplayClientAnalyticsDelegate. This allows easy streaming of events to 3rd party analytics libraries.AnalyticsEventFirebaseConverter helper class to easily convert analytics events for Firebase Analytics in the client. Only simple parameter types are supported for now.PlayerModel.ServerOptions.DeletionRequestSafetyDelay to allow inspecting deletion delay before issuing a deletion request.MetaplayClient now provides player-facing English-language error messages in ConnectionLostEvent.MetaplayClient now registers Firebase messaging tokens to the server if the Firebase Messaging package is detected.IMetaplayClientAnalyticsDelegate, and are also available in ConnectionLostEvent.MessageDispatcher listeners.GameConfigBuildUtil class that contains some useful utility methods for building GameConfigs (see Idler for usage examples).PlayerActor.EnqueueServerAction.DeploymentOptions (requires Helm chart v0.3.1 to be populated): AdminUri for the public dashboard url and ApiUri for the public admin API uri (eg, for uploading game configs).DatabaseOptions.MaxConnectionsPerShard for controlling the database connection pool size. The pool is applied to each shard separately, so total number of connections is NumShards*MaxConnectionsPerShard.MetaOfferInfoBase.RequireInAppProduct that can be set to false for implementing soft-currency MetaOffers.game_session_start_fails_total for observing the number of successfully logged-in connection that fail to start a session.http://localhost:5550).System.Net.Http and System.Text.RegularExpressions to ensure new enough versions that have known vulnerabilities fixed.FacebookLoginService is split into FacebookLoginService which manages only Login API and FacebookAppService which manages only App Access Token.AnalyticsEventRegistry has been moved to shared code. The AnalyticsEventSpec is now a top-level class.RandomPCG.CreateNew() for initializing to non-deterministic random state, and RandomPCG.CreateFromSeed(ulong) to initialize to a specific seed.NumEntriesToKeepInModel from event log configuration in runtime options to simplify the implementation. Always keeping a number of entries in the entity model has turned out to be unnecessary.PlayerModels are now initialized with parameterless constructor followed by an initializer method, instead of a parameter-taking constructor.IPlayerModelServerListenerBase has been renamed to IPlayerModelServerListenerCore and is no longer intended to be inherited by the game-specific IPlayerModelServerListener, but rather to exist alongside it in the model. Same applies to client listeners, and for GuildModel's corresponding listeners.MetaplayClient is now a static class, with the Initialize method replacing the old constructor.WireProtocolVersion range. This allow migrating all projects to the new standard WireProtocolVersion 10 in the future.ModelActionExecuteFlags and is no longer dependent on type hierarchy. This enables actions that may be issued by both the server and the client.PlayerMailItem classes. Existing mails are migrated to the new inbox in PlayerActor migration. The base PlayerMailItem class maintains generally useful state info about mail items in the form of timestamps.PlayerSynchronizedServerAction execution strategy and therefore the inbox data is no longer tagged NoChecksum.PlayerConsumeMail action no longer deletes a mail item. The previously server-only action PlayerDeleteMail can now be issued from client as well instead.MetaplaySDK/Backend/CloudCore/./api/localizations, it now returns 409 with an error message instead of a generic 500.http://localhost:5550/api.http://localhost:5551.MetaTeleport component to dynamically change page header bar titles based on page content. Initially wired up to always display the current player name in the player details page.update-cloudcore-versions.sh now gets invoked with an explicit /bin/bash prefix so that it doesn't need the executable bit set (it is easily lost when working on the files in Windows).