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

# CustomMove

Additional slash-command teleports layered on top of Move.txt. Define up to 20 commands like `/pvp1` or `/arena1` with per-command coordinate targets and access gates (level, reset, master reset, VIP, PK).

## File Location

```
Data/Plugins/World/CustomMove.xml
```

Loaded once at GameServer startup. Supports hot reload via plugin admin command.

## Schema

```xml
<CustomMoves>
    <Move Index="..." Name="..."
          Map="..." X="..." Y="..."
          MinLevel="..." MaxLevel="..."
          MinReset="..." MaxReset="..."
          MinMReset="..." MaxMReset="..."
          AccountLevel="..." PkMove="..." />
</CustomMoves>
```

## Attributes

| Attribute                 | Type        | Effect                                                                                                                                                                                            |
| ------------------------- | ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `Index`                   | int         | Unique slot ID. Duplicate indices: only the first entry loaded wins, later duplicates are silently dropped. Compiled cap is 20 entries per server                                                 |
| `Name`                    | string      | Command name including leading `/`. Matched case-insensitively against the first whitespace-separated token of the chat line. Max 31 characters                                                   |
| `Map`                     | int         | Target map number                                                                                                                                                                                 |
| `X`, `Y`                  | int         | Destination tile coordinates on that map                                                                                                                                                          |
| `MinLevel` / `MaxLevel`   | int or `-1` | Character level range. `-1` = no limit on that side                                                                                                                                               |
| `MinReset` / `MaxReset`   | int or `-1` | Reset count range. `-1` = no limit on that side                                                                                                                                                   |
| `MinMReset` / `MaxMReset` | int or `-1` | Master reset range. `-1` = no limit on that side                                                                                                                                                  |
| `AccountLevel`            | int         | Minimum VIP tier required. Compared against the player's stored AccountLevel with a simple `>=` check. Default `0` (everyone allowed). Use `0`-`3` for the standard Free/Bronze/Silver/Gold tiers |
| `PkMove`                  | 0 or 1      | `1` (default) allows PK characters through. `0` blocks any character with PKLevel >= 5                                                                                                            |

## Relationship to Move.txt

[Move.txt](/docs/data/gate/move.md) handles the vanilla `/move <name>` command with gate-referencing teleports. CustomMove introduces **new command strings** (e.g. `/pvp1`) with direct coordinate targets and richer access gates including master reset and PK tolerance.

Coordinates go to `(Map, X, Y)` directly; the warp does not pass through [Gate.txt](/docs/data/gate.md).

## Hardcoded Map Restrictions

In addition to the gates you define, the engine enforces a few hardcoded rules on specific maps:

* **Atlans** - blocks if the player has Uniria or Dinorant equipped in the pet slot
* **Icarus / Kanturu 3** - requires wings in the wings slot, or Dinorant or Fenrir equipped in the pet slot
* **Gens battle maps** - requires Gens faction membership (Season 5+ builds)

Players are also blocked if a UI is open, they are already teleporting, they are in the death-respawn state, or a personal shop is open.

## Cross-File Dependencies

| Attribute                              | Related in                                                                                                 |
| -------------------------------------- | ---------------------------------------------------------------------------------------------------------- |
| `Map`                                  | [MapManager.xml](/docs/data/mapmanager.md)                                                                 |
| Coordinates must land on walkable tile | Terrain for that map                                                                                       |
| PK tolerance + `AccountLevel`          | [Common.dat](/docs/gameserver/common-dat.md)                                                               |
| Summon whitelist                       | [MoveSummon.txt](/docs/data/gate/movesummon.md) (CustomMove warps bypass this; listed for admin awareness) |

## Common Issues

* **Command does nothing** - `Name` missing leading `/`, or a different plugin/command handler intercepts first
* **Warp drops player in a wall** - coordinates invalid; use a walkable tile
* **PK characters rejected for a PK-friendly destination** - `PkMove="0"`; flip to `1` on PVP arenas
* **Map-specific restriction rejects valid player** - hardcoded rule (Atlans mount check, Icarus flight check); no XML override
* **Only `/command1` works, `/command2` ignored** - duplicate `Index` value; only the first entry loads
