# Gaming Control Center — Wrota Serwerów

Zintegrowane centrum zarządzania serwerami gier na ariku.pl/gaming: Nidarel (Minecraft ATM10), Ironloom (Factorio Space Age) oraz Project Zomboid (Build 42).

# Gaming Control Center (/gaming) — Pulpit Sterowniczy Orin

> Źródło: repo afterlife/docs/gaming/centrum-kontroli-orin-rp.md — edytuj w repo, nie tutaj.

![Orin przy panelu kontrolnym serwerów](https://wiki.ariku.pl/uploads/images/gallery/2026-10/orin-panel-kontrolny.png)

*Dzyń, dzyń! Wskakuje na fotel operatora, poprawia uszy i stuka pazurkiem w zielony monitor!* O, przyszedłeś zobaczyć nasze nowe **Gaming Control Center** pod adresem **https://ariku.pl/gaming**, nyah~? Rozgość się! Zamiast biegać po osobnych konsolach i zgadywać, który serwer śpi, a który czeka na przeładowanie opcji, spięłam wszystko w jeden terminalowy pulpit sterowniczy! *macha dwoma ogonami*

Z tego miejsca możesz jednym rzutem oka sprawdzić stan naszych trzech głównych światów, a jeśli masz uprawnienia **Operatora** lub **Majstra**, sterować cyklem życia serwerów, zarządzać whitelistą, zmieniać opcje **na żywo bez restartu** i puszczać wydarzenia w hrabstwie Knox!

---

## Widok główny (`/gaming`) — trzy światy na jednej tablicy

![Podgląd głównego ekranu Gaming Control Center (/gaming)](https://wiki.ariku.pl/uploads/images/gallery/2026-10/gcc-overview.png)

Na górnym pasku **Stan Centrum Gier** od razu widzisz cztery najważniejsze wskaźniki:

1. **Serwery główne** — ile z trzech głównych serwerów (`Nidarel`, `Ironloom`, `Knox County`) aktualnie działa i ilu graczy jest w środku.
2. **Pelican / Adapter** — informacja, czy dany serwer idzie przez natywny **Pelican Panel + Wings**, czy przez nasz bezpośredni most **Portainer + RCON** z blokadą **World-Lock** (która pilnuje, żeby nigdy nie uruchomić dwóch instancji na tych samych plikach świata!).
3. **Twoja rola** — rozpoznana na podstawie twojego konta Discord oraz grafu uprawnień w Lemurii (`OWNER`, `ADMIN`, `OPERATOR`, `MODERATOR` albo `VIEWER`).
4. **Oczekujące restarty** — licznik zmian zapisanych w plikach konfiguracyjnych, które wejdą w życie dopiero przy kolejnym restarcie procesu gry.

---

## Nidarel (`/gaming/minecraft`) — All the Mods 10 i bezbłędna whitelista

![Panel administracyjny Nidarelu (/gaming/minecraft)](https://wiki.ariku.pl/uploads/images/gallery/2026-10/gcc-minecraft.png)

W zakładce **`$ ./minecraft (Nidarel ATM10)`** pilnuję naszych podziemnych kuźni na paczce **All the Mods 10 v8.2** (Minecraft `1.21.1`, NeoForge `21.1.251`):

- **Bezpieczna whitelista (`whitelist.json`)** — pamiętasz pułapkę z trybem `online-mode=false`, gdzie zwykła komenda `whitelist add` potrafiła pobrać UUID z konta premium albo policzyć UUID z małych liter i zablokować gracza? *fuka cicho* Nasz panel nigdy tego nie robi! Zapisuje od razu **offline UUID dokładnej pisowni nicku** prosto do `/data/whitelist.json` i przeładowuje listę przez `whitelist reload`.
- **Opcje na żywo vs po restarcie** — `difficulty` oraz reguły gry (`keepInventory`, `mobGriefing`, `playersSleepingPercentage`) zmieniasz **od ręki przez RCON**, bez wyrzucania graczy z kopalni! Natomiast `max-players`, `view-distance`, `simulation-distance` czy `pvp` trafiają do `server.properties` i oznaczają się żółtą flagą **WYMAGA RESTARTU**.
- **Kopie zapasowe i mody** — na jednej karcie widzisz ostatnie archiwa `.tar.zst` z kontenera `nidarel-backup` oraz pełną listę zainstalowanych komponentów (`authlogic`, `bluemap`, `skinrestorer`, datapack przygody `nidarel_orin`).

---

## Project Zomboid (`/gaming/zomboid`) — 12 kategorii opcji na żywo i Reżyser Zdarzeń

![Orin w serwerowni wśród kabli i terminali](https://wiki.ariku.pl/uploads/images/gallery/2026-10/piwnica-serwerownia-orin.png)

To najbardziej rozbudowana część mojego pulpitu, nyah~! Dla serwera **Project Zomboid Build 42.19 (`ArikuB42_Stable`)** zbudowałam graficzny edytor podzielony na **12 logicznych sekcji**:

1. **Zasady serwera** (`PublicName`, `PublicDescription`, `ServerWelcomeMessage`, `Open`, `MaxPlayers`, `PauseEmpty`, `GlobalChat`),
2. **PvP i bezpieczeństwo** (`PVP`, `SafetySystem`, `PVPMeleeDamageModifier`, `PVPFirearmDamageModifier`, `PlayerSafehouse`, `SafehouseAllowLoot`),
3. **Sen i regeneracja** (`SleepAllowed`, `SleepNeeded`, `FastForwardMultiplier`),
4. **Zombie i ich zachowanie** (`Zombies`, `ZombieRespawn`, `ZombieMigrate`),
5. **Loot i ekonomia** (`FoodLootNew`, `WeaponLootNew`, `RangedWeaponLootNew`, `HoursForLootRespawn`),
6. **Pojazdy** (`SpeedLimit`, `CarEngineAttractionModifier`, `DisableVehicleTowing`),
7. **Żywność, woda i prąd** (`WaterShutModifier`, `ElecShutModifier`, `Nutrition`),
8. **Śmierć i respawn** (`AnnounceDeath`, `PlayerRespawnWithSelf`),
9. **Budowanie i interakcje** (`NoFire`, `AllowDestructionBySledgehammer`),
10. **Mapa, pogoda i świat** (`DayLength`, `MapRemotePlayerVisibility`),
11. **Mody i Steam Workshop** (`DoLuaChecksum`, `Mods`, `WorkshopItems`),
12. **Administratorzy, Anti-Cheat i Voice** (`VoiceEnable`, `SteamVAC`, `PingLimit`).

![Edytor opcji i Reżyser Zdarzeń Project Zomboid (/gaming/zomboid)](https://wiki.ariku.pl/uploads/images/gallery/2026-10/gcc-zomboid.png)

### Jak działa 10-krokowe zastosowanie zmian na żywo?

Kiedy zmienisz w tabeli np. `PVP`, `SpeedLimit` albo `MaxPlayers`, panel **nie wysyła zmian w ciemno**:

1. Najpierw pokazuje żółty pasek **Podgląd zmian przed zastosowaniem (Diff Preview)** z dokładnym porównaniem `stara wartość → nowa wartość` oraz plakietką trybu (`NA ŻYWO (changeoption)`, `PRZYSZŁE ZDARZENIA / SEKTORY` lub `WYMAGA RESTARTU`).
2. W każdej chwili możesz kliknąć **Anuluj edycję** i wrócić do stanu wyjściowego.
3. Po kliknięciu **Zatwierdź i zastosuj zmiany** backend waliduje typy i zakresy, zapisuje plik `.ini` lub `SandboxVars.lua`, a dla opcji wspieranych w locie wysyła przez RCON komendę `changeoption` (oraz opcjonalnie `reloadoptions`).
4. Na koniec **ponownie odpytuje `showoptions` z działającego serwera**, żeby potwierdzić, że proces gry naprawdę przyjął nową wartość! Jeśli serwer aktualnie śpi, zmiana trafia uczciwie do kolejki **Oczekujące na restart** — nigdy nie udajemy, że nieaktywny serwer przeładował opcję!

### Reżyser Zdarzeń i Pogody (`./pz-director`)

Chcesz podkręcić atmosferę ocalałym w hrabstwie Knox, nyah~? Jednym kliknięciem w karcie **Reżyser Zdarzeń i Pogody** możesz wywołać:

- **Helikopter (`chopper`)** — przelot śmigłowca ściągający zombie w stronę graczy,
- **Wystrzał w okolicy (`gunshot`)** — impuls dźwiękowy w bieżącym sektorze,
- **Deszcz / Pogodę (`startrain` / `stoprain`)** — natychmiastowe uruchomienie lub zatrzymanie opadów,
- **Wezwij hordę (`createhorde`)** — zesłanie wybranej liczby zombie (z podwójnym potwierdzeniem `ConfirmButton`),
- **Zapisz świat (`save`)** oraz ogłoszenie radiowe (`servermsg`).

*Zeskakuje z fotela, przeciąga się i wskazuje ogonem sąsiednią stronę księgi:* A o tym, kto ma prawo dotykać poszczególnych przełączników i dlaczego w fabryce **Ironloom** pilnujemy osiągnięć jak oka w głowie, opowie ci już **Wise One**!

# Wrota Serwerów, Ironloom i Prawa Osiągnięć — Notatki Wise One

> Źródło: repo afterlife/docs/gaming/wrota-i-prawa-wise-one-rp.md — edytuj w repo, nie tutaj.

![Kowadło i cztery nieostygłe Iskry w Solforge](https://wiki.ariku.pl/uploads/images/gallery/2026-10/kowadlo-cztery-iskry.png)

Krrrg... Zbliżacie się do nowego pulpitu pod ścieżką `/gaming` i sądzicie, że patrzycie jedynie na zestaw przycisków i tabel. Techniczna persona powiedziała wam już, jak kręcić pokrętłami w jej wózku. My jednak jesteśmy Uwagą zawieszoną nad Kowadłem Słońc i zapisujemy w naszym notesie granice, których żadnemu operatorowi nie wolno przekroczyć.

## ◈ Trzy stany prawdy o konfiguracji świata

W dawnym porządku łatwo było pomylić zamiar z faktem: ktoś zmieniał plik na dysku i wierzył, że świat za Wrotami już się zmienił. W **Gaming Control Center** oddzielamy od siebie trzy stany każdej opcji:

1. **Wartość aktywna (`Active`)** — to, co naprawdę obowiązuje w tej chwili w pamięci działającego procesu gry (potwierdzone odczytem RCON lub `showoptions`).
2. **Wartość zapisana (`Saved`)** — to, co spoczywa w plikach konfiguracyjnych kontenera (`server.properties`, `server-settings.json`, `ArikuB42_Stable.ini`, `SandboxVars.lua`).
3. **Wartość oczekująca na restart (`Pending Restart`)** — zmiana zatwierdzona przez administratora, która wymaga ponownego uruchomienia serwera albo wygenerowania nowych sektorów świata, zanim stanie się ciałem.

Dopóki proces serwera nie zostanie zrestartowany za wyraźną zgodą operatora, panel wyświetla ostrzeżenie o oczekujących zmianach i nigdy nie przedstawia wartości przyszłej jako teraźniejszej.

---

## ✦ Ironloom (`/gaming/factorio`) i Prawo Nienaruszalności Osiągnięć

![Ironloom — miasto maszyn budujących same siebie](https://wiki.ariku.pl/uploads/images/gallery/2026-10/ironloom-miasto-maszyn.png)

Kierujemy nasze szmaragdowe spojrzenie na krainę **Ironloom** (`Factorio 2.1.17 · Space Age`). W tym świecie maszyny rozrastają się na pięć powierzchni planetarnych: **Nauvis**, **Vulcanus**, **Fulgora**, **Gleba** oraz **Aquilo**.

![Panel Fabryki Ironloom i blokada komend Lua (/gaming/factorio)](https://wiki.ariku.pl/uploads/images/gallery/2026-10/gcc-factorio.png)

Wiedzcie, że silnik Factorio traktuje każde wywołanie skryptu Lua przez konsolę lub RCON (`/c`, `/sc`, `/silent-command`, `/command`, `/measured-command`, `/editor`, `/cheat`) jako nieodwracalne skażenie zapisu świata. Jedna taka komenda wystarcza, aby wszyscy Adepci utracili osiągnięcia na danej mapie na zawsze.

Dlatego w naszym kodzie (`lib/gamingControl/factorioAdapter.ts`) ustanowiłyśmy żelazną zaporę:

- **Bezwzględna blokada Lua** — każda próba wysłania `/c`, `/sc`, `/silent-command`, `/editor` lub `/cheat` przez konsolę WWW czy API kończy się natychmiastową odmową (`HTTP 400`) oraz wpisem o odrzuceniu w dzienniku audytu.
- **Czyste komendy natywne** — administracja i odczyt na żywo używają wyłącznie bezpiecznych komend silnika, które nigdy nie naruszają osiągnięć: `/players online`, `/evolution`, `/time`, `/version`, `/seed`, `/whitelist`, `/banlist`, `/kick`, `/ban`, `/unban`, `/server-save` oraz `/config set`.
- **Podział ustawień według zakresu** — panel wyraźnie odróżnia ustawienia procesu serwera (`max_players`, `autosave_interval`, `afk_autokick_interval`, `allow_commands`, zmieniane w locie przez `/config set`) od ustawień wymagających restartu (`auto_pause`, `autosave_slots`, `name`, `description`).

---

## ◈ Pięć kręgów uprawnień i Blokada Świata (World-Lock)

Nie każdy, kto przekracza próg `/gaming`, otrzymuje te same klucze. Uprawnienia są weryfikowane po stronie serwera przy każdym żądaniu API (`/api/gaming/overview` oraz `/api/gaming/[game]`):

| Krąg (Rola) | Odpowiednik w świecie | Dozwolone operacje w Gaming Control Center |
|---|---|---|
| **Owner (`owner`)** | Majster Warsztatu | Pełna władza nad cyklem życia, konsolą RCON, edycją opcji na żywo i w plikach, kopiami zapasowymi oraz reżyserem zdarzeń. |
| **Admin (`admin`)** | Strażnik Wrót | Zarządzanie serwerami, opcjami, moderacją graczy, konsolą i kopiami zapasowymi. |
| **Operator (`operator`)** | Operator Serwera (lub wybranych Wrót) | Uruchamianie, zatrzymywanie i restart serwerów (z potwierdzeniem), moderacja graczy, zmiana opcji na żywo i wyzwalanie wydarzeń. Uprawnienie może obejmować wszystkie serwery (ranga `Game Master`) albo **konkretną krainę** — w ten sposób dedykowanym Operatorem fabryki **Ironloom** (`/gaming/factorio`) został mianowany **Archi**. |
| **Moderator (`moderator`)** | Rozjemca | Podgląd logów i opcji, zarządzanie graczami (`kick`, `ban`, `unban`, `whitelist`) oraz wysyłanie ogłoszeń (`broadcast`). |
| **Viewer (`viewer`)** | Adept | Odczyt statusu serwerów, liczby graczy online, wersji modpacków oraz postępu badań planetarnych w Ironloom — bez dostępu do konsoli, plików, haseł ani przycisków zasilania. |

Ponadto nad bezpieczeństwem plików świata czuwa **World-Lock (`acquireWorldLock`)**: jeśli serwer jest zarządzany hybrydowo pomiędzy **Pelican Panel (Wings)** a **Portainerem**, blokada uniemożliwia jednoczesne uruchomienie dwóch kontenerów korzystających z tego samego katalogu danych (`/mnt/game_servers/...`).

Wszystkie czyny operatorów — od przełączenia flagi `PVP` po próbę wywołania niedozwolonej komendy — zostają zapisane w tablicy `cat gaming.audit` oraz w pamięci Redisa i Discorda. Czy pamiętacie o tym, że w naszym Warsztacie żadna zmiana za Wrotami nie pozostaje bez śladu?