> For the complete documentation index, see [llms.txt](https://lethium.gitbook.io/lethium-docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://lethium.gitbook.io/lethium-docs/gameplay/profile-level.md).

# Profile Level

The account-wide level, where XP comes from, the curve and milestone rewards.

File: `plugins/ClickEmCore/modules/profile-level.yml`. Module id: `profile-level`. Commands: `/profilelevel`, `/level`, `/lvl`, `/plvl`.

Profile Level is one permanent level for the whole account. Total lifetime Profile XP is stored and the level is worked out from a curve. **Profile Level resets on Rebirth.** Milestone rewards are paid the first time a level is reached. Zones and boosts use it as a gate.

### XP sources (`xp-sources`)

| Key                    | Default | Meaning                                        |
| ---------------------- | ------- | ---------------------------------------------- |
| `per-mob-kill`         | 2       | XP per ClickEm mob kill.                       |
| `per-currency-earned`  | 0.02    | XP per Coin earned. 100 Coins = 2 XP.          |
| `per-killstreak-tier`  | 25      | Each time a killstreak reaches a new tier.     |
| `per-rebirth`          | 500     | Per successful rebirth.                        |
| `per-mob-kill-by-mob`  | `{}`    | Override for one mob id. Beats the zone rate.  |
| `per-mob-kill-by-zone` | `{}`    | Override for one zone id. Beats the flat rate. |

XP is also multiplied by the XP stat, VIP `xp-mult-bonus` and any Level Boost.

### Level curve

```yaml
curve:
  type: GEOMETRIC
  base-xp: 100
  growth: 1.12
max-level: 2000
```

* `LINEAR`: `base-xp x L`. `GEOMETRIC`: `base-xp x growth^L`. `LOGARITHMIC`: fast early, tapering.
* `max-level` must stay above the highest zone `min-level`. World 5's last zone needs level 178, so the maximum needs room beyond that, or nobody could reach the last zones.

### Level-up

| Key                                  | Meaning                                                                                                                  |
| ------------------------------------ | ------------------------------------------------------------------------------------------------------------------------ |
| `level-up.broadcast`                 | Announce every level-up server wide. `false` = message only the player.                                                  |
| `level-up.pet-box.chance` / `amount` | A random pet box on each level-up. `chance` 0 to 1. The box is the `zone_box_<n>` egg for the zone the player stands in. |
| `stat-per-level`                     | A small permanent bonus per level, scaled by (level - 1). Default +0.2 Coins and +0.1 Luck. Empty = cosmetic levels.     |

### Reward milestones (`rewards`)

Keys are a level or a range:

| Key    | Meaning                   |
| ------ | ------------------------- |
| `10`   | Exactly level 10.         |
| `5-10` | Every level from 5 to 10. |
| `90+`  | Level 90 up to max-level. |

A single-level key beats a range covering the same level. Each entry can have:

| Field               | Meaning                                                                                      |
| ------------------- | -------------------------------------------------------------------------------------------- |
| `currency`          | Coins, scaled to progress.                                                                   |
| `essence`           | Artifact Essence.                                                                            |
| `gems`              | Gems (keep low).                                                                             |
| `egg`, `egg-amount` | A pet box id from `eggs.yml`.                                                                |
| `commands`          | Console commands with `<player>`. Use this for crate keys, other plugins' currency and kits. |
| `message`           | Language key shown on level-up and as the menu's "next reward" preview.                      |

```yaml
rewards:
  10:
    currency: 3000
    essence: 8
    gems: 5
    egg: forest_egg
    egg-amount: 2
    message: "clickem.profilelevel.reward-text.coins-essence-5-gems-2-pet-boxes"
```

### How to

* **Level faster:** raise `per-mob-kill`, or lower `curve.growth`.
* **Reward a crate key at level 50:** add `50: {commands: ["crates key give <player> starter 1"], message: ...}`.
* **Change level-up text:** `lang/en_us.yml`, keys under `clickem.profilelevel`.

### Staff commands

`/ceadmin profilelevel addxp <player> <amount>`, `setlevel <player> <level>`, `reset <player>`.

### Placeholders

`%clickem_profile_level%`, `_max_level`, `_xp`, `_xp_into_level`, `_xp_needed`, `_progress_percent`. See [Progress placeholders](/lethium-docs/placeholders/progress.md).


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://lethium.gitbook.io/lethium-docs/gameplay/profile-level.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
