# System blokad CodeStrike
**Kompletny system blokad dla gry Counter-Strike 1.6 z prawdziwą bazą danych, nowoczesnym menu, integracją z Discordem i ponad 100 opcjami.**
W pełni zastępuje system blokad wbudowany w AMX Mod X. Zamiast blokad zapisywanych w pliku tekstowym na jednym serwerze otrzymujesz pełnoprawną bazę danych, pełną historię każdego gracza, przejrzyste menu w grze oraz powiadomienia na żywo na Discordzie.
---
## Jak to działa
Gdy zablokowany gracz próbuje dołączyć do gry, system identyfikuje go na podstawie identyfikatora SteamID i adresu IP, wyrzuca go z gry i wyświetla w konsoli informację o przyczynie blokady, pozostałym czasie blokady oraz sposobie złożenia odwołania. Cały ten tekst jest tworzony przez Ciebie — żadna z tych informacji nie jest wbudowana w wtyczkę.
Kiedy administrator blokuje użytkownika, wszyscy na serwerze widzą to na czacie i na ekranie; informacja o zablokowaniu trafia do bazy danych, do pliku dziennika oraz na Twój kanał na Discordzie wraz ze wszystkimi szczegółami.
Gdy dołącza gracz, który ma już na koncie blokady, wasi administratorzy otrzymują ostrzeżenie na czacie. Wiecie, że ta osoba została już wcześniej ukarana, zanim zdąży cokolwiek zrobić.
---
## Główne cechy
### Baza danych
* **SQLite domyślnie** — działa od razu, bez serwera bazy danych, nie trzeba niczego konfigurować
* **MySQL** — wystarczy jedna linijka w pliku konfiguracyjnym, żeby to zmienić
* Jedna baza danych MySQL może obsługiwać kilka serwerów, więc **blokada na jednym z nich dotyczy wszystkich z nich**
* Każde zapytanie jest realizowane w wątku — baza danych nigdy nie powoduje zawieszenia serwera, nawet przy wolnym połączeniu
* Indeksowane według SteamID, adresu IP, nazwy i statusu, dzięki czemu wyszukiwanie przebiega szybko nawet przy dziesiątkach tysięcy blokad
### Zakazy
* Blokada na podstawie **identyfikatora SteamID**, **adresu IP** oraz opcjonalnie na podstawie **pseudonimu**
* **Tymczasowe i stałe** blokady
* Elastyczny format czasu: `30`, `30m`, `2h`, `3d`, `1w`, lub `0`dla czasu stałego
* **Blokady offline** na podstawie identyfikatora SteamID lub adresu IP, nawet gdy gracz nie znajduje się na serwerze
* Gotowa lista powodów, dla których sam dokonujesz edycji, a także opcja umożliwiająca administratorowi wpisanie własnych powodów
* Powód może mieć przypisany własny czas trwania, więc po jego wybraniu pomija się etap określania czasu trwania i przechodzi od razu do potwierdzenia
* Wygasłe zakazy są automatycznie oznaczane
### Menu
* Rozpoczyna się słowami `amx_banmenu`
* Blokada w trzech krokach: gracz → powód → czas trwania → ekran potwierdzenia z podsumowaniem
* Aktywna lista zablokowanych użytkowników, pełna historia oraz wyszukiwanie według SteamID, adresu IP lub fragmentu nazwy
* Zdejmij blokadę z menu albo całkowicie usuń wpis o blokadzie — to dwie odrębne czynności, więc to ty decydujesz, czy gracz zachowa swoją historię
* Oznaczone kolorami: obowiązujące zakazy zaznaczono na czerwono, zniesione – na szaro, a czas trwania zmienia kolor w zależności od surowości kary
### Discord
* Prawidłowe osadzenie przy każdym zablokowaniu i odblokowaniu
* Wyświetla informacje o graczu, identyfikatorze SteamID, adresie IP, administratorze, przyczynie, czasie trwania, dacie wygaśnięcia oraz identyfikatorze blokady
* Każde pole można ukryć osobno
* Kolory, tytuły, stopka, nazwa bota i awatar – wszystko to można dostosować
* Adres IP można zamaskować (`85.11.44.xxx`), jeśli nie chcesz go ujawniać na Discordzie
### Historia blokad
* Pełna historia każdego gracza, zachowywana nawet po zniesieniu blokady
* Administratorzy posiadający wybraną przez Ciebie flagę otrzymują powiadomienie na czacie, gdy dołącza gracz, który był wcześniej zablokowany
* **Ostrzeżenie o obejściu blokady** — gdy ktoś dołącza do serwera przy użyciu nowego identyfikatora SteamID z adresu IP objętego aktywną blokadą, administratorzy otrzymują o tym powiadomienie. Nikt nie zostaje z tego powodu zablokowany, więc korzystanie ze wspólnego połączenia nigdy nie kosztuje niewinnego gracza utraty miejsca w grze
* Wyszukiwanie według identyfikatora SteamID, adresu IP lub nazwy – z menu lub z konsoli
* `amx_banstats` pokazuje sumy, liczbę blokad z ostatnich 7 dni oraz to, którzy administratorzy nakładają najwięcej kar
### HUD i dźwięk
* Komunikat wyświetlany na ekranie dotyczący zablokowania i odblokowania
* Klasyczny HUD lub DHUD – wybór należy do Ciebie
* Kolory, położenie, efekty i czasy pochodzą z pliku konfiguracyjnego
* Dźwięk informujący o zablokowaniu i odblokowaniu użytkownika, słyszalny dla wszystkich graczy na serwerze (domyślnie nic nie jest ustawione)
### Dzienniki
* Baner startowy w konsoli serwera, przedstawiający aktywną konfigurację oraz aktualne liczniki blokad
* Osobny plik dziennika z datą w nazwie
* Każde zablokowanie, odblokowanie i wyczyszczenie listy jest rejestrowane — kto, kogo, kiedy, na jak długo i dlaczego
---
## Polecenia
| Polecenie | Jak to działa |
|---|---|
| `amx_banmenu` | Otwiera menu główne |
| `amx_unbanmenu` | Otwiera bezpośrednio listę aktywnych blokad |
| `amx_ban <nazwa\|#identyfikator_użytkownika\|STEAM_ID\|IP> <time>[powód]` | Blokuje gracza |
| `amx_unban <STEAM_ID\|IP\|#banid\|nazwa> [powód]` | Znosi zakaz |
| `amx_bans` | Wyświetla listę aktywnych blokad w konsoli |
| `amx_banhistory <STEAM_ID\|IP\|nazwa>` | Pełna historia jednego gracza |
| `amx_banstats` | Łączna liczba blokad oraz administratorzy, którzy nałożyli ich najwięcej |
| `amx_bans_reload` | Ponownie wczytuje ustawienia bez zmiany mapy |
| `amx_clearbans <active\|wszystkie> POTWIERDŹ` | Czyści całą listę |
Przejmuje również i`amx_banip` `amx_addban`, więc nic nie wraca do domyślnego systemu blokad AMX Mod X.
Każde polecenie ma własny, konfigurowalny znacznik.
---
## Ochrona przed błędami
Wtyczka została zaprogramowana w taki sposób, że błąd administratora ani uszkodzona konfiguracja nie mogą spowodować żadnych szkód.
* **Odporność** — gracze posiadający wybraną przez ciebie flagę nie mogą zostać zablokowani, chyba że zrobi to administrator posiadający flagę wyższego poziomu
* **Limity czasowe** — należy ograniczyć maksymalny czas trwania blokady, jaką może nałożyć zwykły administrator, a blokady stałe zarezerwować wyłącznie dla właściciela
* **Wymagane potwierdzenie** — `amx_clearbans`wymaga wyraźnego potwierdzenia`CONFIRM`, a usunięcie pojedynczego wpisu z menu powoduje wyświetlenie pytania. Obie opcje mają swoje własne flagi, więc nic nie zostanie przypadkowo usunięte
* **Brak ataków typu SQL injection** — pseudonimy i uzasadnienia są filtrowane, zanim trafią do zapytania
* **Uszkodzona konfiguracja niczego nie psuje** — każda wartość jest sprawdzana podczas ładowania i przywracana do bezpiecznego zakresu
---
## Wymagania
* AMX Mod X **1.9 lub nowsza wersja** — skompilowana i przetestowana na wersji 1.10
* Moduł **SQLite** lub **MySQL** (SQLite jest dostarczany w ramach standardowej instalacji)
* Moduł **EasyHttp** — tylko jeśli chcesz otrzymywać powiadomienia z Discorda
Wtyczka jest dostarczana **w postaci skompilowanej wraz z pełnym kodem źródłowym**.
---
## Instalacja
1. Prześlij `codestrike_bans.amxx`do `addons/amxmodx/plugins/`
2. Dodaj to do **powyższego**`plugins.ini` `admincmd.amxx`i `plmenu.amxx`
3. Uruchom ponownie serwer
Oba pliki konfiguracyjne tworzą się automatycznie przy pierwszym uruchomieniu w katalogu `addons/amxmodx/configs/CodeStrikePlugins/`. Nie trzeba tworzyć żadnej bazy danych ani importować żadnej tabeli — SQLite zajmuje się tym wszystkim samodzielnie.
---
## Konfiguracja
Wszystko opiera się na dwóch plikach, bez konieczności wprowadzania ani jednej linii kodu:
**`codestrike_bans.ini`** — 110 opcji w 14 sekcjach: dostęp i flagi, baza danych, sprawdzanie połączeń, historia, Discord, logi, menu, HUD, dźwięki, wiadomości na czacie, lista powodów i lista czasów trwania.
**`codestrike_bans_info.ini`** — wszystko, co widzi zablokowany gracz: komunikaty konsoli, tekst w oknie wyrzucenia oraz instrukcje dotyczące składania odwołania.
Teksty obsługują symbole zastępcze, które są wypełniane automatycznie:
```
%name% %steamid% %ip% %reason% %admin% %length%
%expire% %timeleft% %banid% %date% %server% %bancount% %banname%
```
Wszelkie zmiany są wprowadzane za pomocą `amx_bans_reload`, bez modyfikowania mapy.
---
## W skrócie
| | |
|---|---|
| Wersja | 1.0 |
| Autor | illusion @ CodeStrike |
| Baza danych | SQLite czy MySQL |
| Ustawienia | 110 opcji w 2 plikach ini |
| Kod | Ponad 5450 wierszy, kompiluje się bez ani jednego ostrzeżenia |
| Język | Każdy widoczny ciąg znaków znajduje się w plikach ini i można go przetłumaczyć |
---
*Każdy fragment tekstu wyświetlany przez wtyczkę można edytować w pliku konfiguracyjnym. Nie musisz w ogóle ingerować w kod, aby go przetłumaczyć lub dostosować do swojego serwera.*