# Skills

RageMode comes with built-in skill system for players, which can boost the experience and enjoyment in game. Skills boosts specific items damage, player experience or points receive and many other things.

{% hint style="warning" %}
This skill system is currently in **beta**, its functionality is not guaranteed, bugs may occur, and it is still missing features.
{% endhint %}

## Features

* Configurable starting experience for each new player
* Option to set maximum experience a player can reach
* Mathematical-based operations
  * Experience required to level up
  * Experience gaining by killing in different game type
  * Distribution of points per level
* Create any amount of skills manually from configuration
* A GUI menu for purchasing and upgrading skills

## How it works

Players can gain skill experience in game to level up and receive skill points. They can purchase and upgrade specific skills with defined amount of skill points and price as well. You can configure of how players earn skill points per level and experience gain per kill depending on game type.

## Skill types

* `damage_modify` - Modifying damage of a specific item
  * Can be applied to `RageArrow`, `RageKnife`
* `hit_reduction` - Can be used to reduce the incoming hit damage from a specific item
  * Can be applied to `RageKnife`, `RageArrow`, `Explosion`, `Players`
* `hp_increase` - Increases the HP (health) of the player
  * Can be applied to players only
* `experience_boost` - Used to boost skill experience gaining
  * Can be applied to players only
* `points_boost` - Used to boost player points gaining in game
  * Can be applied to players only
* `freeze_ball_duration` - Increases the `FreezeBall` ticks duration
  * Can be applied to players only
* `freeze_ball_radius` - Increases the effect radius of the `FreezeBall` weapon on use
  * Can be applied to players only
* `more_barricade` - Increases the barricade item quantity in the player inventory
  * Can be applied to players only
* `barricade_damage` - Gives the ability to barricades to cause damage to entities in game
  * Can be applied to players only
* `cloak` - Gives a temporal invisibility ability for players for x duration
  * Can be activated using the <kbd>Drop</kbd> <kbd>Q</kbd> button or the assigned one on keyboard
* `set_fire` - Gives a temporal ability for specific items to set target on fire for x duration
  * Can be applied to `RageArrow`, `RageKnife`

## Configuration

```yml
starting-experience: 0
max-experience: 500000
experience-required-levelup: 5000 * (mainlevel + 1)
experience-gaining:
  zombiekill: current + RNG(15, 500)
  playerkill: current + RNG(20, 400)
points-per-level: current + 1
```

* `starting-experience` - Starting experience each new player receives. Can not be negative
* `max-experience` - Maximum experience a player can reach
  * Can not be negative and should be higher than > 0
* `experience-required-levelup` - [Math-based](/ragemode-docs/mathematical-operations.md) experience requirement for level up
* ```yml
  experience-gaining:
    zombiekill: current + RNG(15, 500)
    playerkill: current + RNG(20, 400)
  ```
  * `zombiekill` - [Math-based](/ragemode-docs/mathematical-operations.md) experience gaining setting for zombie game mode
  * `playerkill` - [Math-based](/ragemode-docs/mathematical-operations.md) experience gaining setting for player (classic) game mode
  * `RNG` expression is a built-in [random number generator](https://en.wikipedia.org/wiki/Random_number_generation) with a minimum and maximum bound
* `points-per-level` - Distribution of points by level for players

```yml
skills:
  exampleSkill:
    type: damage_modify
    max-level: 3
    expression: current + upgrade + (level + 3)
    gui-icon:
      buy: exampleSkillItem
      upgrade: exampleSkillItemUpgrade
      max-level: exampleSkillItemUpgradeMax
    activate-for:
    - rageknife
    requirements:
      buy:
        skill-points: 3
        cost: 0
        skills-to-unlock-before:
        - skillName
      upgrade:
        skill-points: level + 3
        cost: 0
```

* `exampleSkill` - The name of the skill
* `type` - [Skill type](#skill-types)
* `max-level` - The maximum level that this skill can be upgraded to
* `expression` - [Mathematical-based operation](/ragemode-docs/mathematical-operations.md) for calculating the value of upgrade
  * Variables:
    * `current` - The current value without skill upgrade
      * `mainlevel` - Total skill level
      * `level` - Current level of a skill
      * `upgrade` - Current upgrade of a skill
* `gui-icon` - The icons displaying in skill GUI menu
  * `buy` - The [custom item](/ragemode-docs/guides/custom-items.md) for purchasing skill
  * `upgrade` - The [custom item](/ragemode-docs/guides/custom-items.md) for upgrading skill
  * `max-level` - The [custom item](/ragemode-docs/guides/custom-items.md) for displaying "maxed out" skill
* `activate-for` - Used only for `damage_modify` and `hit_reduction` skills for what item/player activate this skill
* `requirements` - The purchase and upgrade requirements for this skill
  * `buy`
    * `skills-to-unlock-before` - A list of skills to unlock before buying this skill
  * `skill-points` - The required skill points to buy or upgrade this skill
  * `cost` - The required cost to buy or upgrade this skill


---

# Agent Instructions: Querying This Documentation

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

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://mdswork.gitbook.io/ragemode-docs/guides/skills.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
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.
