# Komendy

Komendy to serce produktu — wykonują się **z konsoli serwera**, więc działają tak samo, jak gdybyś wpisał je w konsoli.

- Wpisuj je **bez ukośnika** na początku (ukośnik i tak zostanie usunięty).
- Jedna komenda = jedna linia, maksymalnie 1000 znaków.
- Produkt może mieć do **50 komend**.

## Ustawienia komendy

Przy każdej komendzie wybierasz:

| Ustawienie | Opcje |
| --- | --- |
| **Kiedy** | **Po zakupie** — od razu po opłaceniu. **Gdy gracz wejdzie na serwer** — przy najbliższym wejściu gracza (zawsze wymaga gracza online). |
| **Wariant** | **Każdy wariant** albo tylko wybrany wariant. |
| **Serwer** | **Wszystkie serwery** albo jeden wybrany. |
| **Gracz online** | Domyślnie jak w ustawieniu produktu „Wymaga gracza online”; możesz to wymusić: **Czekaj, aż gracz będzie online** albo **Wykonaj od razu, nawet offline**. |

!!!warning „Po wygaśnięciu” i „Po zwrocie pieniędzy”
W edytorze są też wyzwalacze **Po wygaśnięciu** i **Po zwrocie pieniędzy**, ale **obecnie się nie wykonują**. Do rang czasowych używaj `addtemp` w LuckPerms (przykład niżej) — wtedy ranga zniknie sama, nawet gdy serwer był wyłączony.
!!!

## Placeholdery

Kliknij **Wstaw:** nad komendą, żeby dodać placeholder. Przed wysłaniem na serwer zostaną podmienione na dane zamówienia.

| Placeholder | Wartość | Przykład |
| --- | --- | --- |
| `{player}` | Nick gracza z zamówienia | `Notch` |
| `{uuid}` | UUID gracza (puste, jeśli nieznane) | `069a79f4-44e9-4726-a5be-fca90e38aaf5` |
| `{price}` | Zapłacona kwota | `20.00` |
| `{tier}` | Nazwa wybranego wariantu | `30 dni` |
| `{quantity}` | Liczba sztuk | `1` |
| `{order_number}` | Numer zamówienia w sklepie | `1042` |
| `{transaction_id}` | Identyfikator zamówienia | `cm3x…` |
| `{expires_at}` | Data wygaśnięcia (ISO 8601) lub puste | `2026-12-05T12:00:00.000Z` |

!!!
Nick jest sprawdzany przed wstawieniem do komendy (2–16 znaków: litery, cyfry, `_`, opcjonalnie prefiks `.` lub `*` dla graczy Bedrock). Gracz nie przemyci więc do konsoli spacji ani dodatkowych argumentów.
!!!

## Przykłady

+++ Ranga czasowa (LuckPerms)
```
lp user {player} parent addtemp vip 30d
```
LuckPerms sam zdejmie rangę po 30 dniach. Kolejny zakup przy aktywnej randze — w zależności od ustawień LuckPerms — przedłuży ją albo nadpisze (`addtemp … accumulate` sumuje czas).

```
lp user {player} parent addtemp vip 30d accumulate
```

+++ Ranga na zawsze
```
lp user {player} parent add vip
```

+++ Przedmiot
```
give {player} diamond 64
```
Ustaw **Kiedy: Gdy gracz wejdzie na serwer** albo włącz **Wymaga gracza online** — `/give` nie zadziała, gdy gracza nie ma na serwerze.

+++ Klucz do skrzynki
```
crates key give {player} legendarny 1
```
Składnia zależy od Twojego pluginu skrzynek (np. ExcellentCrates, CrazyCrates).

+++ Waluta
```
eco give {player} 10000
```

+++ Ogłoszenie
```
broadcast &d{player} &7kupił &fVIP&7! Dziękujemy!
```
+++

## Szablony w edytorze

Nad listą komend są gotowe szablony:

- **Ranga LuckPerms** — dodaje `lp user {player} parent add {ranga}`. Dla rang czasowych zamień ją na `addtemp` z liczbą dni, jak w przykładzie wyżej, i usuń dodaną komendę „Po wygaśnięciu”.
- **Ogłoszenie na czacie** — `broadcast` z nickiem gracza.
- **Przedmiot do ekwipunku** — `give {player} diamond 1`, wykonywane po wejściu gracza.

## Różne komendy dla wariantów

Produkt `VIP` z wariantami **30 dni**, **90 dni** i **Na zawsze**:

| Komenda | Wariant |
| --- | --- |
| `lp user {player} parent addtemp vip 30d accumulate` | Tylko: 30 dni |
| `lp user {player} parent addtemp vip 90d accumulate` | Tylko: 90 dni |
| `lp user {player} parent add vip` | Tylko: Na zawsze |
| `broadcast &d{player} &7kupił &fVIP {tier}&7!` | Każdy wariant |

## Gracz offline

Komendy oznaczone jako wymagające gracza online plugin zapisuje w lokalnej bazie na serwerze i wykonuje, gdy gracz wejdzie — także po restarcie serwera. Domyślnie czeka 2 sekundy po wejściu, żeby LuckPerms zdążył wczytać gracza (`join-delay-ticks` w [konfiguracji](/plugin/konfiguracja.md)).

Liczbę czekających dostaw dla gracza pokażesz placeholderem `%stillshop_pending%` (PlaceholderAPI).

## Ponowne próby

Jeśli serwer nie potwierdzi wykonania (np. padł w trakcie), komenda wraca do kolejki i jest ponawiana z rosnącym odstępem — do 5 razy. Każda komenda wykonuje się **najwyżej raz**: plugin pamięta wykonane komendy i nie powtórzy ich po ponownym dostarczeniu.
