Appearance
Appearance
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 succesfully 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.PlayerModel
s 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).