---
name: g-less-unreal-telemetry
description: Install and integrate the G-Less Unreal Engine 5 telemetry plugin in PC or Steam games. Use when adding G-Less to an Unreal project, configuring DefaultGame.ini, instrumenting Blueprint or C++ sessions, runs, matchmaking, progression, economy, combat or custom events, or validating fail-safe offline delivery and player opt-out.
---

# G-Less Unreal Telemetry

Integrate G-Less through the game-instance subsystem while keeping HTTP, persistence and aggregation away from gameplay-critical paths.

## Workflow

1. Inspect the Unreal version, project/plugin layout, game-instance lifecycle, Blueprint/C++ ownership and existing privacy setting.
2. Download `https://g-less.com/sdk/unreal/GlessTelemetry-0.6.0.zip`, copy `GlessTelemetry` into `<Project>/Plugins/`, regenerate project files and enable the plugin.
3. Ask the user for the project UUID and append-only write key if missing. Never invent, log or commit credentials.
4. Add the `[GlessTelemetry]` block to `Config/DefaultGame.ini` with API v1, channel and a unique Build ID.
5. Expose a localized anonymous-telemetry toggle and call `SetTelemetryEnabled` immediately when it changes.
6. Retrieve `UGlessTelemetrySubsystem` from the game instance. Verify the automatic session first, then instrument run boundaries and low-cardinality game semantics.
7. Test PIE under Development, one packaged player build, offline replay and opt-out.

## Required configuration

```ini
[GlessTelemetry]
EnabledByDefault=true
CapturePlatformAccountId=true
Endpoint="https://g-less.com/api/v1/telemetry/ingest"
ProjectId=YOUR_PROJECT_UUID
WriteKey=gls_pk_YOUR_WRITE_KEY
Channel=demo
BuildId=YOUR_GAME_BUILD
HeartbeatSeconds=30
FlushSeconds=5
CombatSummarySeconds=15
NetworkSummarySeconds=30
```

## Integration rules

- Use `StartRunWithCategory` and `EndRun` for each playable attempt; use stable outcome vocabulary.
- Emit matchmaking attempts before searching and results after a terminal result.
- Record economy, upgrade, chest, quest, death and interaction events only after the action is accepted.
- Per-hit combat calls may use `TrackDamageDealt`, `TrackDamageTaken` and `TrackEnemyKilled`; the SDK aggregates them in memory. Do not add network work to hit paths.
- Keep categories, modes, event names and custom-property keys stable and low-cardinality.
- Do not send raw Steam/EOS IDs, names, emails, chat, paths, hardware identifiers or player-generated text.
- Never wait for HTTP or queue persistence during gameplay or shutdown.
- Preserve optional Online Subsystem lookup and anonymous installation-ID fallback.
- Use `TrackCustomEvent` only for game-specific measurements that do not fit typed methods.

## Minimal example

```cpp
UGlessTelemetrySubsystem* Telemetry =
    GetGameInstance()->GetSubsystem<UGlessTelemetrySubsystem>();

Telemetry->StartRunWithCategory(
    TEXT("cooperative"), TEXT("standard"), 1, 0, false, false);
Telemetry->TrackProgression(TEXT("tutorial"), TEXT("complete"), 1.0f);
Telemetry->EndRun(TEXT("completed"), FinalScore);
```

## Validate

- Confirm plugin version `0.6.0`, API `v1` and protocol version `4`.
- Confirm missing required configuration leaves the subsystem inactive without affecting gameplay.
- Confirm `SetTelemetryEnabled(false)` makes public calls no-ops and removes unsent data asynchronously.
- Confirm different packaged binaries use different Build IDs.
- Consult the human-readable API reference at `https://g-less.com/sdk/unreal/api`; do not treat this skill as the API reference.
