# Hodnosti, hlasy a tab list

> Povýšení, která proběhnou sama, odměny za hlas, které počkají na hráče, a tab list, co říká, kdo je kdo.

Source: https://stygion.eu/cs/docs/keystone/ranks-and-votes
Updated: 2026-10-10

## Hodnosti za odehraný čas

`progress.toml`. `promotions` je ten žebřík: kolik toho musí mít někdo odehráno
a co dostane, když tam dojde. Keystone kontroluje každých `check-every` a
zapisuje postup každých `write-every`, takže pád serveru stojí nanejvýš půl
minuty něčího večera.

- `count-idle-time` rozhoduje, jestli se počítá stání v rohu. Vypnuté, a
  `idle-after` (výchozí pět minut) je okamžik, kdy se člověk přestane počítat
  jako hrající.
- `announce` to řekne nahlas, když někdo postoupí. To je celý smysl hodnosti;
  povýšení, které nikdo nevidí, je řádek v databázi.

`/playtime` řekne, kolik má člověk odehráno; `/playtime <hráč>` na někoho
jiného, za oprávnění `keystone.playtime.others`.

Nikdo nemusí nic procházet každý týden. To je ta featura.

## Hlasy

`votes.toml`. Keystone poslouchá hlas sám — `address` a `port` (výchozí 8192)
je, kam na něj hlasovací weby dosáhnou, a `sites` je, kde jsi zapsaný.
`/keystone votes keys` vypíše, co od tebe web potřebuje.

**`address` je ve výchozím stavu prázdná a nic neposlouchá, dokud ji nenastavíš.**
Je to schválně: otevřít port je rozhodnutí.

- `rewards` je, co hlas znamená. **Odměna počká na hráče, co byl zrovna pryč**
  místo aby se vypařila — to je věc, kterou většina sestav dělá špatně. Odměnou
  může být i klíč do bedny: `keystone crate give {player} 1`.
- `streaks` odměňuje hlasování několik dní po sobě. Odměna za sérii se vyplatí
  jednou ve svůj den, ne jednou za každý hlas toho dne.
- `party-goal`, `party-window` a `party-rewards` jsou verze pro celý server:
  nasbírejte tolik hlasů v tomhle okně a dostane každý.
- `announce` a `announce-cooldown` to řeknou v chatu, aniž by z rušného večera
  udělaly zeď.
- `time-zone` rozhoduje, kdy se přehoupne den — a den je to, co série počítá.
- `services` jsou jména webů, která hlas smí nést, přesně tak, jak je píše log
  (`Ada voted on Czech-Craft.eu`). Hlas s jiným jménem se nepočítá — jméno je,
  co odesílatel napíše. Prázdný seznam bere každé jméno a log to při startu řekne.

Podporované jsou **oba** protokoly, které hlasovací weby používají (NuVotifier v1
i v2), naráz — takže to funguje na všech, ne na polovině.

**Které hlasy se počítají (0.2.2).** Pravidlo volí `votes.count`:

- `every-reset` — výchozí — počítá každý hlas, který web člověku dovolí,
  s jediným omezením `votes.site-cooldown` (výchozí `1h30m`) na web a osobu.
  Weby, kde se hlasuje každé dvě hodiny, platí každé dvě hodiny. Web hlas před
  svým resetem stejně odmítne, takže to nikdy nevyplatí víc, než web dovolí.
  `site-cooldown` nastav o něco pod vlastní reset webů (aspoň `1m`);
  `votes.site-cooldowns` dá webu vlastní interval, jeden `web=doba` na řádek —
  `minecraft-mp.com=23h`.
- `once-a-day` počítá jeden hlas na web a hlasovací den, tak jako Keystone před
  0.2.2 a většina pluginů pro Votifier — pro server, kde chtějí, aby odměny za
  den byly stejné, ať hráči hlasují na kterých seznamech chtějí.

V obou případech platí denní strop `votes.limit.per-day`. Při 0 — výchozí — se
spočítá z intervalů: každý web v `services` tolikrát, kolikrát se jeho interval
vejde do dne (když nejsou vypsaná jména, každý řádek `sites` při `site-cooldown`,
a deset webů, když není nic), takže kdo hlasuje po každém resetu, na něj nikdy
nenarazí, kdežto odesílatel, který hlasy vymýšlí, ano. Celý port přijme nejvýš
`votes.limit.per-minute` (30) hlasů za minutu, počítaných po webech, takže jeden
hlučný odesílatel nezavře ty poctivé. Hlas se počítá k okamžiku, kdy dorazil sem,
ne k datu, které napsal odesílatel; hlas datovaný o víc než den od hodin serveru
se odmítne. Původní protokol je šifrovaný klíčem, který mají všechny weby, takže
jeho data a jména webů jsou, co odesílatel chtěl. `votes.accept-v1 = false` bere
jen podepsané hlasy v2. Odesílatel, který posílá bajty po kapkách, se po deseti
vteřinách odpojí a otevřených je nejvýš 32 spojení. Série dál počítají dny.

**Hlas, který se nepočítá, to hráči ve hře řekne:** příliš brzy na tom webu (a
kdy se zase počítá) nebo denní strop — hned, je-li hráč online, jinak při příštím
připojení — vedle řádků, které už říkaly, že hlas čeká na odehraný čas nebo
propojení s Discordem. Jeden takový řádek na hráče za pět minut, aby hlasy
vymyšlené jeho jménem nemohly zaplnit jeho chat. Jméno webu se s `services`
porovnává bez ohledu na zápis, takže velká písmena a mezery hlas přes jeho interval
neprotlačí. Obrazovka **Votes** v editoru ukazuje platná pravidla.

**Hlas platí člověku, ne jménu.** Na serveru v offline režimu jméno nestojí nic,
takže se hlas vždy zapíše, ale vyplatí se jen tomu, kdo tu odehrál
`votes.pay.played` (výchozí 30 minut) — jméno, pod kterým nikdo nehrál, nedostane
nic — a s `votes.pay.discord` jen tomu, kdo má propojený Discord. Propojené účty
se počítají jako jejich Discord účet: víc jmen na jednom Discordu sdílí interval
jednoho webu, `limit.per-day` jednoho hlasovacího dne a jednu odměnu za sérii
denně. Čekající hlasy se vyplatí, jakmile jsou podmínky splněné, a hráč se při
připojení dozví, co mu chybí.

**Odměny za hlasy mění jen vlastník.** Odměny, série, party odměny i obsah beden
běží jako konzole, a proto je z hry smí měnit jen vlastník (operátor úrovně 4).

## Tab list

`tablist.toml` — co seznam ukazuje a jak často se překresluje (výchozí tři
vteřiny). Hlavička, patička, prefix a suffix u jména se skládají z hodností,
takže kdo je podporovatel i moderátor, čte se jako obojí.

**Prefix každé hodnosti (0.2.2).** `{prefix}` je prefix nejtěžší skupiny, kterou
hráč má. `{prefixes}` je prefix každé skupiny, kterou má, nejtěžší první, mezi
nimi mezera — `[Staff] [VIP+]`. Skupina, kterou jiná z jeho skupin dědí, se
vynechá (VIP+ postavené na VIP ukáže jen `[VIP+]`) a každý prefix začíná čistým
stylem. Funguje v tab listu (`name`, hlavička a patička), ve formátu chatu
(`chat.format`) a v řádcích o připojení a odpojení (`chat.presence`); `{prefix}`
zůstává pro servery, které chtějí jen ten nejtěžší.

**Řazení** jde tam, kde na něj hra má pojem: od Minecraftu 1.21.2 seřadí klient
seznam podle čísla, které mu server pošle, a tím číslem je váha hodnosti. Na
starších verzích by to šlo jen přes scoreboard týmy, které si přitom berou barvy
jmen, viditelnost cedulek a friendly fire od čehokoliv jiného, co je používá —
takže se to tam nedělá.

**Co tab list dneska umí, umí server sám** a vanilla klient to vidí. Sloupce,
obličeje a odznaky ve vlastním písmu potřebují klientskou půlku modu a
nepředstírají se tu jako „seznam jmen v závorkách".
