What a Server Object is
What a Server Object is, what it gives a game (server-owned values every player sees change, and functions only the server can carry out), how its parts fit, and what you need before you use one.
Create a Server Object type
Describe a type of Server Object with a UCrowdyServerObjectDefinition data asset in its Blueprint-style editor (toolbar, Server Code tab, Server Object panel with its Variables, Functions and Server Messages, and a Details tab that follows the selection), variables, inputs and outputs added in the asset or taken from a struct, the messages the server sends to everyone listening and who may hear them, every setting on it (including Kind, and the Scaling of a Server Function Library) and the platform term behind each, who can call each Server Function, the field types a Server Object can carry, and how to change a type without losing data.
Access, members and timers
The settings that make the server enforce who may read a Server Object and who may call each Server Function (Readable By, who receives each variable of a record, the Platform Data settings such as Reads World Data and Changes the World, a type players cannot reach, Callable By, Cooldown, Value Range), give it members (Members From This Object or a Crowdy Team, Max Members, the Join, Leave, Add Member, Remove Member, Make Leader and Set Open for Joining functions, Open for Joining, the leader rules), run timers and player events, and let one type call another (Call other Server Objects, a Server Function Library, or any type with Can Call Any Type) or hear another's messages (Listen To), with what a refused player sees and the names logic.rs gets.
Relate Server Objects to each other
How to model relations with Server Objects: one to one (a player, an actor or a team and its own object), one to many (a registry that lists other objects by Instance Id), many to one (many players on one shared object, many objects reporting to one), many to many (players and lobbies, teams and their objects), and good practice for ids, ownership, calls between types, limits and Readable By.
Write its server logic
Generate a Server Object type's server code (a Rust crate) from its definition asset with Generate Server Code, the Server Code tab of the asset's editor, what each generated file holds, how to write your Server Functions in logic.rs or in a file of your own with Code Source, viewing, comparing and restoring what an earlier deploy sent, the revisions.json record to commit, sending a message to everyone listening and listening to another type's messages from server code, the server code of a Server Function Library (the Library struct, a library calling a Server Object, a Server Object calling a library, what a library cannot do), what the generated code already does for you, regenerating after a change, and how to build and deploy the crate today.
Deploy it with Server Compute
Build and deploy a project's Server Object code from the Server Compute page in Crowdy Studio, which types changed since the live version, what a deploy sends and replaces, a deploy built in several parts and server code reused by its digest, adding a Game Kit starter, removing a type, versions and rolling back, switching one type or the whole app off and on, restarting a type and moving running Server Objects to a new deploy, the app's use against its limits, calling a Server Only or Developers Only function as the developer, reading logs and following one call, call activity, the Settings tab, and the same operations from the command line for CI, including generating server code, checking the sign-in, defining a Server Object type from a JSON file, and removing, renaming or restarting types.
Use the Game Kit starters
Add the platform's Game Kit starters (world, matchmaker, session, leaderboard, player, market, npcs, minigame, tactics, director, instance, territory, zone, deck, arena, race and ball) to a project as ordinary Server Object types with Add starter in Server Compute or -op=addstarter, world as the app's root and Get Players Online, using them from Blueprint and C++ with the nodes you already know, a starter's collection as records (the world's resource nodes), a session posting its scores to a leaderboard, the Find Match node and Is My Turn, the Refused outcome and its Code, a starter's actors with Kit Actors and the Crowdy Kit Actor component, Send Once, snake_case field names, the C++ value structs, the functions only a developer calls, running a duel, a battle, a wave defence, a dungeon run, a war or a shrinking circle with the six game-mode starters, a card game with a hand only its player sees with the deck starter, reporting where the player is with the Crowdy Server Object component, fighting in an arena with the arena starter, a value that may be none and its Has flag, reacting to a director's waves with its Encounter Event message, changing a starter's Rust and asset, and removing starters with -op=removestarter.
From Blueprint
6 items
Keep a record per entity
Give every entity in a crowd its own values on the server with Holds set to A Record per Entity - when to use it instead of one Server Object per entity, the settings (Holds, the audience of each variable, Max Records, Send Changes Every, Area Size, Areas Followed Around a Player, Reads World Data), who receives Everyone, Owner Only and Team Only values and when, This Actor's Area, the Records functions in logic.rs and a census of nearby actors, reading records from Blueprint (Find Record, Get Record Ids, Watch Record, On Records Changed, On Records Updated) and from C++, crowd rows that read the same values, sizing, and the limits and reserved names.
From C++
5 items
Make a Server Function Library
What a Server Function Library is (a Server Object type with functions and nothing else, like a Blueprint Function Library), when to use one and when to use a Server Object, the loot roller in Oakford, setting Kind on a definition, what the editor hides and ignores, the Scaling settings (Min Instances, Max Instances, Parallel Calls per Instance), the checks made when you save, switching Kind and what happens to the saved data, the instance limit, and where to call one and write its server code.
Troubleshooting
What to check when a Server Object stays in Connecting or fails, a value is not what you expect, a message never arrives (Players Can Listen, a closed connection, a refused listen, the subscription limits), or a call is refused (every call outcome, a Game Kit starter's Refused with its Code, Paused for a switched-off or paused server, and the refusals that come from your server code), a call to a Server Function Library from server code that fails on its first, cold call, a library that will not save (Members and Leader callers, a Cooldown, Max Instances below Min Instances), and how to watch one work with crowdy.exec.trace. It applies to Blueprint and C++ alike.
Unreal and ck-exec names
The Unreal SDK's name for each part of a Server Object next to the name ck-exec uses for it, for reading the platform's pages, its operations tools and its logs.
Examples
5 items
Move from Game Models
What the removal of the Game Model API takes out of a project, the steps to take before you upgrade (compile first, search for CrowdyModel, clean cook), the C++ API that is gone, which Server Object feature replaces each Game Model one, and why Server Objects are not marked on a class.