- net8.0
+ net10.0
enable
enable
diff --git a/github/avatars/discord_20f902436962.png b/github/avatars/discord_20f902436962.png
new file mode 100644
index 0000000..995cf32
Binary files /dev/null and b/github/avatars/discord_20f902436962.png differ
diff --git a/github/avatars/discord_7ee4547c02f2.png b/github/avatars/discord_7ee4547c02f2.png
new file mode 100644
index 0000000..bc75cac
Binary files /dev/null and b/github/avatars/discord_7ee4547c02f2.png differ
diff --git a/github/avatars/discord_a3b321b84dc6.png b/github/avatars/discord_a3b321b84dc6.png
new file mode 100644
index 0000000..5f12a3d
Binary files /dev/null and b/github/avatars/discord_a3b321b84dc6.png differ
diff --git a/github/avatars/discord_f7017ab921b5.png b/github/avatars/discord_f7017ab921b5.png
new file mode 100644
index 0000000..0f698f6
Binary files /dev/null and b/github/avatars/discord_f7017ab921b5.png differ
diff --git a/github/readme-pl.md b/github/readme-pl.md
new file mode 100644
index 0000000..0d64645
--- /dev/null
+++ b/github/readme-pl.md
@@ -0,0 +1,1311 @@
+
+
+
+
+## 📌 Oznaczenie
+> [!NOTE]
+> Te repozytorium jest to fork [projektu](https://github.com/jakubbartosik/dRandomSkills) stworzonego przez [Jakuba Bartosika (D3X)](https://github.com/jakubbartosik).
+
+## 💡 Opis
+jRandomSkills to plugin do CounterStrike 2, który wprowadza chaos i frajdę do rozgrywki! W każdej rundzie losowo otrzymujesz jedną z unikalnych supermocy - od niewidzialności, przez wybuchowe strzały, po manipulację kamerą. Zaskocz przeciwników, przejmij kontrolę nad meczem i odkryj dziesiątki kreatywnych umiejętności, które zmieniają dynamikę gry!
+
+#### Wybierz język:
+
+
+
+
+
+
+
+## 💬 Dostępne języki
+- **Angielski**
+- **Polski**
+- **Francuski** [by: [@felyjyn](https://github.com/felyjyn)]
+- **Portugalski (Brazylijski)** [by: [@vinicius-trev](https://github.com/vinicius-trev)]
+- **Niemiecki** [by: [@Enrory](https://github.com/Enrory)]
+- **Turecki** [by: [@brkvlr](https://github.com/brkvlr), [@ByDexterTR](https://github.com/ByDexterTR)]
+- **Rosyjski** [by: [@213sdfsdgf](https://github.com/213sdfsdgf)]
+- **Chiński uproszczony** [GrokAI / ChatGPT]
+
+## 🖼️ Prezentacja Pluginu
+
+
+
+## 🌐 Serwer Testowy
+Dołącz do serwera testowego 3v3 i wypróbuj plugin jRandomSkills:
+- **Adres**: `jRandomSkills@pukawka.pl`
+- **Hasło**: `public`
+- **Godziny otwarcia**: `00:00-19:00`
+- **Połącz URL**: `steam://connect/51.38.122.215:27215/public`
+- **Połącz**: `connect 51.38.122.215:27215; password public`
+
+Kupujesz serwer na pukawce? Skorzystaj z mojego [kodu polecającego](https://pukawka.pl/pp,juzlus.html).
+
+## ✨ Aktualne Supermoce (124)
+
+Poniższa tabela przedstawia wszystkie dostępne supermoce w grze, wraz z ich opisami.
+
+| Nazwa | Opis | Czas odnowienia / Zakres |
+| - | - | -|
+| Aimbot | Każdy twój trafiony pocisk liczy się jako strzał w głowę | - |
+| Aim Lock | Kliknij [css_useSkill], aby wycelować na najbliższego wroga | 20 s |
+| Anomalia | Cofasz się o 5 sekund do tyłu | 15 s |
+| Anty Flash | Posiadasz odporność na flash'e, a twoje flash'e trwają 7 sekund | - |
+| Żelazna Głowa | Nie otrzymujesz obrażeń w głowę | - |
+| Niszczyciel Stref | Możesz wybrać strefę detonacji, którą chcesz dezaktywować | - |
+| Gruby | Masz losowy mnożnik otrzymywanych obrażeń | (0.65 - 0.85)x |
+| Skrytobójca | Zadajesz podwójne obrażenia przeciwnikowi od tyłu | - |
+| Astronauta | Na początku rundy otrzymujesz losową wartość grawitacji | (0.1 - 0.7)x |
+| Bankrut | Wybierz gracza, który straci wszystkie swoje pieniądze | - |
+| Bejsbolista | Twój wabik odbija się od ścian i natychmiastowo zabija wroga po trafieniu | - |
+| Obrót Wroga | Masz losową szansę na obrócenie wroga o 180 stopni po trafieniu go | (20 - 40)% |
+| Mistrz Ostrza | Trzymając nóż, masz duże szanse na odparcie strzału | - |
+| Królik | Otrzymujesz auto "BunnyHopa" | - |
+| C4 Kamuflaż | Kiedy trzymasz bombę, jesteś niewidzialny | - |
+| Ostrożne pociski | Wybierz gracza, który otrzymuje obrażenia za każdy niecelny strzał | - |
+| Katapulta | Masz losową szanse na podrzucenie wroga | (20 - 40)% |
+| Kurczak | Otrzymujesz model kurczaka + jesteś o 10% szybszy - 50hp | - |
+| Wyluzowany | Podłożenie bomby zajmuje 10 sekund | - |
+| Scyzoryk | Natychmiastowe zabójstwo nożem | - |
+| Kamera | Kliknij [css_useSkill], aby utworzyć/przełączyć się na kamerę | 30 s |
+| Mrok | Nadaje efekt ciemności wybranemu przeciwnikowi | - |
+| Deaktywator | Wybierasz gracza, którego supermoc chcesz wyłączyć | - |
+| Głuchy | Wybierasz gracza, dla którego chcesz wyłączyć wszystkie dźwięki | - |
+| Ludzka bomba | Po śmierci eksplodujesz i zabijasz graczy znajdujących się w zasięgu | - |
+| Rozbrojenie | Masz losową szanse na wyrzucenie broni wroga po trafieniu | (20 - 35)% |
+| Odległościomierz | Możesz zobaczyć odległość do najbliższego przeciwnika | - |
+| Doskok | Wykonaj drugi skok, aby wykonać doskok | - |
+| Drakula | Po trafieniu ofiary odzyskujesz zdrowie równe pewnemu procentowi zadanych obrażeń | - |
+| Duplikator | Wybierasz gracza, od którego chcesz skopiować supermoc | - |
+| Mini Majk | Losowa wielkość postaci na początku rundy | (60 - 95)% |
+| Resp Wroga | Kliknij [css_useSkill], aby teleportować się na resp wroga | 15 s |
+| Strzał Wybuchowy | Losowa szansa wystrzelenia pocisku wybuchowego podczas strzelania | (15 - 30)% |
+| Oko Sokoła | Kliknij [css_useSkill], aby aktywować kamerę z lotu ptaka | - |
+| Szybkie Rączki | Kliknij [css_useSkill], aby przeładować broń, którą obecnie trzymasz | - |
+| Flash | Losowa prędkość postaci na początku rundy | (1.2 - 3.0)x |
+| Fortnite | Kliknij [css_useSkill], aby stworzyć barykadę, którą można zniszczyć | 2 s |
+| Krucha Bomba | Strzelanie do bomby powoduje jej uszkodzenie | - |
+| Ogień Przyjacielski | Strzelanie do członków drużyny leczy ich | - |
+| Zamrażający Wabik | Twój decoy zamraża wszystkich graczy w pobliżu | - |
+| Hazardzista | Wybierz umiejętność z podanej listy | - |
+| Duszek | Jesteś całkowicie niewidzialny | - |
+| Glaz | Nie widzisz granatów dymnych | - |
+| Glitch | Wyłączasz radar wybranemu przeciwnikowi | - |
+| Klej | Twoje granaty przyklejają się do ścian | - |
+| Nieśmiertelność | Kliknij [css_useSkill], aby stać się nieśmiertelnym na krótką chwilę | 30 s |
+| Granatnik | Masz nieskończone granaty odłamkowe | - |
+| Leczący Dym | Twoje granaty dymne leczą | - |
+| Pustelnik | Zabijanie przywraca amunicję i część zdrowia | - |
+| Święty Granat Ręczny | Twoje granaty uderzeniowe zadają podwójne obrażenia i mają podwójny zasięg | - |
+| Naprowadzane Granaty | Twoje granaty (z wyjątkiem dymnych) są przyciągane do wrogów | - |
+| Gorąca Bomba | Dopóki żyjesz, bomba zadaje obrażenia osobie, która ją niesie | - |
+| Hologram | Kliknij [css_useSkill], aby sterować hologramem przez kilka sekund | - |
+| Analfabeta | Dopóki żyjesz, Twoi wrogowie nie potrafią czytać | - |
+| Iluzjonista | Naciśnij [css_useSkill], aby wypuścić replikę idącą prosto przed siebie | 30 s |
+| Szpieg | Na początku rundy otrzymujesz model postaci przeciwnika | - |
+| Nieskończone Ammo | Otrzymujesz nieskończoną ilość amunicji do wszystkich broni | - |
+| Stópkarz | Wybierasz gracza, który pozostawi za sobą ślad | - |
+| Zakłócacz | Wybierasz gracza, dla którego chcesz wyłączyć celownik | - |
+| Błazen | W trybie błazna nie możesz zadawać ani otrzymywać obrażeń. Tryb zmienia się co kilka sekund | (10 - 25) s |
+| Beznogi | Wybierasz gracza, który nie będzie mógł skakać | - |
+| Pajacyk | Skakanie przywraca zdrowie | - |
+| Zabójczy Flash | Każdy całkowicie oślepiony twoim granatem umiera (również ty) | - |
+| Zamiana Żyć | Wybierasz gracza, z którym chcesz wymienić się zdrowiem | - |
+| Długi Nóż | Podstawowy atak nożem zadaje obrażenia niezależnie od odległości | - |
+| Długi Zeus | Zeus zadaje obrażenia niezależnie od odległości | - |
+| Magnetyczny Wabik | Twój wabik przyciąga pobliskich graczy do siebie | - |
+| Magneto | Wszystkie granaty wroga są odpychane od Ciebie | - |
+| Lupa | Przybiżasz ekran wybranemu przeciwnikowi | - |
+| Medyk | Kliknij [css_useSkill], aby użyć ładunku leczniczego, który przywraca 50 punktów zdrowia | 1 s |
+| Bomberman | Twoje granaty HE wybuchają tylko wtedy, gdy w pobliżu jest wróg | - |
+| Skarbówka | Wybierasz gracza, z którym chcesz zamienić się pieniędzmi | - |
+| Ninja | Stojąc nieruchomo zwiększasz swoją niewidzialność o 33%, kucając o 33%, a trzymając nóż o 33% | - |
+| Pancernik | Granaty nie zadają Ci obrażeń | - |
+| Skupienie | Brak odrzutu podczas strzelania | - |
+| NoClip | Kliknij [css_useSkill], aby włączyć noclip na krótki czas | 30 s |
+| Jednostrzałowiec | Po trafieniu natychmiast zabijasz przeciwnika | - |
+| Tylko Głowa | Otrzymujesz obrażenia tylko w głowę | - |
+| Pawel Jumper | Otrzymujesz dodatkowy skok | - |
+| Feniks | Masz losową szans na odrodzenie się po śmierci | (20 - 40)% |
+| Pilot | Latanie przez określony czas. Przytrzymaj [USE - E], aby latać | - |
+| Samowolka | Bombę można podłożyć w dowolnym miejscu, a czas detonacji wynosi 60 sekund | - |
+| Trutka | Wybierasz gracza, który co kilka sekund będzie otrzymywał obrażenia | - |
+| Brak Karabinów | Wybierasz gracza, który nie może używać karabinów | - |
+| Proteza | Ramiona i nogi są kuloodporne | - |
+| Zdalne Rozbrajanie | Kiedy jesteś blisko bomby, zaczynasz ją rozbrajać | 10 s |
+| Odpychacz | Masz losową szansę na odepchnięcie wroga po trafieniu go | 100% |
+| Pyro | Molotow przywraca zdrowie | - |
+| Szybkostrzelność | Wszystkie pociski są wystrzeliwane bardzo szybko | - |
+| Radarowiec | Na radarze widać wrogów | - |
+| Rambo | Na początku rundy otrzymujesz losową ilość zdrowia | +(50 - 501) HP |
+| Losowa Broń | Kliknij [css_useSkill], aby otrzymać losową broń | 15 s |
+| Pancerz Reaktywny | Pancerz pochłania pierwsze otrzymane obrażenia | 15 s |
+| Regeneracja | Co kilka sekund odnawiasz zdrowie | - |
+| Replikator | Kliknij [css_useSkill], aby stworzyć swoją replikę, która zadaje obrażenia po trafieniu | 15 s |
+| Odwrót | Kliknij [css_useSkill], aby powrócić na resp | 15 s |
+| Zwrot do Nadawcy | Pierwsze trafienie wroga powoduje, że wraca on na swój resp | - |
+| Re-Zombie | Po śmierci odradzasz się jako zombie z większym zdrowiem i bez broni | - |
+| Bogacz | Na początku rundy otrzymujesz losową kwotę gotówki | (5000 - 15000)$ |
+| Robin Hood | Zadanie obrażeń przeciwnikowi powoduje kradzież jego pieniędzy | - |
+| Gumowe Kule | Twoje pociski znacznie spowalniają graczy | - |
+| Saper | Możesz szybciej podłożyć bombę i ją rozbroić | - |
+| Druga Szansa | Po śmierci odradzasz się z taką samą ilością zdrowia | - |
+| Cień | Teleportujesz się za plecy trafionego wroga | - |
+| Krótka Bomba | Bomba wybucha znacznie szybciej | - |
+| Cichociemny | Twoje kroki i skoki są niesłyszalne dla INNYCH graczy | - |
+| Zadymiarz | Twoje granaty dymne nigdy się nie kończą | - |
+| Papito | Kliknij [css_useSkill], aby zamienić aktualną broń na AWP | 0 s |
+| Żołnierz | Masz losowy mnożnik obrażeń | (1.15 - 1.35)x |
+| Dźwiękowiec | Kliknij [css_useSkill], aby wywołać dźwięk u każdego przeciwnika | 5 s |
+| Obserwator | Kliknij [css_useSkill], aby obserwować losowego przeciwnika | 0 s |
+| Zamiana Miejsc | Kliknij [css_useSkill], aby zamienić się miejscami z losowym przeciwnikiem | 30 s |
+| Zamiana Broni | Kliknij [css_useSkill], aby zamienić się bronią z losowym przeciwnikiem | 30 s |
+| Teleporter | Zamieniasz się miejscami z trafionym przeciwnikiem | - |
+| Złodziej | Możesz ukraść supermoc wybranemu graczowi | - |
+| Trzecie Oko | Kliknij [css_useSkill], aby aktywować trzecią osobę | 0 s |
+| Ciernie | Twój przeciwnik otrzymuje część obrażeń, które zadał ci | - |
+| TNóż do Rzucania | Naciśnij [css_useSkill], aby rzucić nożem. Ale uważaj na innych | - |
+| Toksyczny Dym | Twoje granaty dymne zadają obrażenia | - |
+| Wallhack | Widzisz wrogów przez ściany | - |
+| Zegarmistrz | Każdy rzut granatem zmienia czas rundy o -10 lub +10 sekund | - |
+| Nieważkość | Twoje granaty nie podlegają grawitacji i lecą szybciej | - |
+| Dzikie Rzuty | Wybierz gracza, który będzie miał trudności z rzucaniem granatami | - |
+| Zeus | Zeus x27 natychmiastowo się odnawia | - |
+
+
+## 💻 Instalacja
+1. Zainstaluj / Kup **serwer CS2**
+ - Dobry poradnik jak stworzyć własny serwer CS2 [[Film]](https://www.youtube.com/watch?v=1ZrEn0CiMi4&ab_channel=TroubleChute), [[Strona]](https://hub.tcno.co/games/cs2/dedicated_server/).
+2. Zainstaluj **Metamod**
+ - Pobierz [Metamod:Source 2.x](https://www.sourcemm.net/downloads.php/?branch=master)
+ - Wypakuj go do folderu `C2Server/game/csgo/`
+ - Edytuj plik `gameinfo.gi` dodając nową linijkę
+ ```json
+ Game_LowViolence csgo_lv // Perfect World content override
+ Game csgo/addons/metamod // <-- Linijka do dodania (kolejność ma znaczenie)
+
+ Game csgo
+ ```
+3. Zainstaluj **CounterStrikeSharp**
+ - Pobierz [CounterStrikeSharp-With-Runtime](https://github.com/roflmuffin/CounterStrikeSharp/releases)
+ - Wypakuj go do folderu `C2Server/game/csgo/`
+4. Zainstaluj **Ray-Trace**
+ - Pobierz [RayTrace-CSS-API](https://github.com/FUNPLAY-pro-CS2/Ray-Trace/releases)
+ - Wypakuj folder `conterstrikesharp` do folderu `CS2Server/game/csgo/addons/`.
+ - Pobierz [RayTrace-MM](https://github.com/FUNPLAY-pro-CS2/Ray-Trace/releases)
+ - Wypakuj go do folderu `CS2Server/game/csgo/addons/`.
+5. Zainstaluj **jRandomSkills**
+ - Pobierz [jRandomSkills](https://github.com/Juzlus/jRandomSkills/releases)
+
+## > Komendy Serwerowe
+> [!TIP]
+> **Bind do używania supermocy:** `bind x css_useSkill`
+
+
+Poniższa tabela przedstawia wszystkie dostępne komendy w grze, wraz z ich opisami.
+
+| Komenda | Przykład | Opis | Uprawnienia |
+| - | - | - | - |
+| `!setskill ` | `!setskill Juzlus Aimbot` | Przypisanie supermocy do gracza | `@jRandomSkills/admin` |
+| `!lang ` | `!lang pl` | Zmień język | - |
+| `!skills` | `!skills` | Lista supermocy | - |
+| `!map ` | `!map de_nuke` | Zmiana mapy | `@jRandomSkills/admin` |
+| `!map ` | `!map 3332005394` | Zmiana mapy z warsztatu | `@jRandomSkills/admin` |
+| `!start` | `!start` | Rozpoczęcie gry z parametrami: `mp_forcecamera 0, mp_freezetime 15, mp_overtime_enable 1, sv_cheats 0` | `@jRandomSkills/admin` |
+| `!start sv` | `!start sv` | Rozpoczęcie gry z parametrami: `mp_forcecamera 0, mp_freezetime 0, mp_overtime_enable 1, sv_cheats 1` | `@jRandomSkills/admin` |
+| `!console ` | `!console sv_cheats 1` | Uruchomienie komendy na serwerze | `@jRandomSkills/owner` |
+| `!swap` | `!swap` | Zamiana stron | `@jRandomSkills/admin` |
+| `!shuffle` | `!shuffle` | Losowe dobranie graczy do drużyn | `@jRandomSkills/admin` |
+| `!pause` | `!pause` | Wstrzymanie gry | `@jRandomSkills/admin` |
+| `!heal` | `!heal` | Przywrócenie 100 punktów zdrowia | `@jRandomSkills/admin` |
+| `!hud` | `!hud` | Włącz/Wyłącz HUD | - |
+| `!setscore ` | `!setscore 10 7` | Ustawienie wyniku gry | `@jRandomSkills/owner` |
+| `!setstaticskill ` | `!setstaticskill Juzlus Aimbot` | Przypisanie supermocy do gracza na stałe | `@jRandomSkills/admin` |
+| `!setstaticskill None` | `!setstaticskill Juzlus None` | Powrót do normalności | `@jRandomSkills/admin` |
+| `!botplace [slot] [godmode]` | `!botplace 2 1` | Teleportuj bota do swojej lokalizacji | `@jRandomSkills/admin` |
+| `!next_skill [idx]` | `!next_skill Juzlus` | Przełącza umiejętność gracza (następna, poprzednia -1 lub konkretny idx) | `@jRandomSkills/admin` |
+| `!plantedbomb [time]` | `!plantedbomb 35` | Stwórz podłożoną bombę C4 w miejscu, w którym stoisz, z niestandardowym lub domyślnym (40 s) czasem detonacji | `@jRandomSkills/admin` |
+| `!sethealth ` | `!sethealth 150` | Ustala określoną ilość zdrowia dla samego siebie | `@jRandomSkills/admin` |
+| `!reload` | `!reload` | Odśwież tłumaczenia | - |
+
+_Większość poleceń wymaga uprawnień, które należy ustawić w pliku: `game/csgo/addons/counterstrikesharp/configs/admins.json`_
+
+
+## 🔑 Uprawnienia
+Aby nadać uprawnienia administracyjne w CounterStrikeSharp:
+1. W folderze **`game/csgo/addons/counterstrikesharp/configs/`** utwórz plik **`admins.json`**.
+2. Dodaj do niego poniższą zawartość:
+ ```json
+ {
+ "Juzlus": {
+ "identity": "STEAM_0:0:94913632",
+ "flags": ["@jRandomSkills/admin", "@jRandomSkills/owner"]
+ }
+ }
+ ```
+ `steamID` można znaleźć przy pomocy strony [steamidfinder](www.steamidfinder.com).
+3. Zapisz plik i uruchom serwer, aby zastosować zmiany.
+
+## ⚙️ Konfiguracja
+Wszystkie sypermoce można dostosować w pliku **`config.cfg`** / **`skillsInfo.json`** znajdującym się w folderze **`game/csgo/addons/counterstrikesharp/plugins/jRandomSkills/configs/`**
+
+- ##### config.json
+```json
+{
+ "Settings": {
+ "GameMode": 3, // Tryb gry:
+ // 0 - Losowa supermoc dla każdego gracza (Brak powtórek z rzędu)
+ // 1 - Ta sama supermoc dla całej drużyny
+ // 2 - Ta sama supermoc dla wszystkich graczy
+ // 3 - Losowa supermoc dla każdego gracza (Brak powtórek na mapie)
+ // 4 - Losowa supermoc dla każdego gracza (Pełna losowość)
+ // 5 - Debug: Supormoce są przydzielane po kolei
+ "YourSkillChatInfo": true, // Pokazuj swoją supermoc na czacie
+ "KillerSkillChatInfo": true, // Pokazuj supermoc zabójcy na czacie
+ "TeamMateSkillChatInfo": true, // Pokazuj supermoc sojuszników na czacie
+ "SummaryAfterTheRound": true, // Pokazuj podsumowanie z ostatniej rundy
+ "EnableBotSkills": true, // Włącz umiejętności dla botów
+ "EnableBotKickDebug": false, // Co 45 sekund wyrzuć losowego bota (do celów debugowania/testowania)
+ "DebugMode": false, // Zapisuj aktywność do folderu 'Debug'
+ "AlternativeSkillButton": null, // Możliwe przyciski:
+ // null, "Attack", "Jump", "Duck", "Forward", "Back",
+ // "Use", "Cancel", "Left", "Right", "Moveleft",
+ // "Moveright", "Attack2", "Run", "Reload", "Alt1",
+ // "Alt2", "Speed", "Walk", "Zoom", "Weapon1",
+ // "Weapon2", "Bullrush", "Grenade1", "Grenade2",
+ // "Attack3", "Scoreboard", "Inspect"
+ "SkillTimeBeforeStart": 7.0, // Ile sekund przed końcem freeze time należy zakończyć
+ // losowanie umiejętności? (freezetime - SkillTimeBeforeStart)
+ "SkillHudDuration": -1.0, // Jak długo HUD HTML powinien być widoczny?
+ "SkillDescriptionDuration": 7.0, // Jak długo opis umiejętności powinien być widoczny?
+ "DisplayAlwaysDescription":false,// Zawsze wyświetlaj opis umiejętności
+ "DisableSpectateHUD": false, // Wyłącz HUD HTML bedąc martwym
+ "EnableFlashingHtmlHudFix": false,// Włącz FlashingHtmlHudFix
+ "TraceRayBeam": false, // Włącz widoczność ścieżki dla 'Długi Nóż', 'Długi Zeus'
+ "DisableHUDOnDeathPermission": "@jRandomSkills/death", // Wyłącz HUD po śmierci dla graczy z tym uprawnieniem
+ "DisableSkillsOnRoundEnd": false,// Wyłącz wszystkie umiejętności na koniec rundy (gdy widoczne jest podsumowanie)
+
+ "LanguageSystem": {
+ "DefaultLangCode": "en", // Język domyślny: en, pl, fr, pt-br, zh
+ "DisableGeoLite": false, // Wyłącz wyszukiwanie języka gracza według geolokalizacji GeoLite2 (MaxMind)
+ "LanguageInfos": [...] // Ustawienie zmiany języków ISO na tłumaczenia
+ },
+
+ "HtmlHudCustomisation": { // Ustawienia zmiany kolorów i rozmiarów czcionek
+ ... // xxxl: 64px, xxl: 40px, xl: 32px
+ } // l: 24px, ml: 20px, m: 18px
+ ... // sm: 16px, s: 12px, xs: 8px
+ },
+```
+
+- ##### skillsInfo.json
+```json
+[
+ {
+ "NeedsTeammates": false, // Wymaga innych graczy w drużynie
+ "DisableOnFreezeTime": false, // Wyłącz umiejętność podczas freeze time
+ "OnlyTeam": 0, // Dostępność supermocy:
+ // 0 - Wszyscy
+ // 2 - Terrorist
+ // 3 - CounterTerrorist
+ "Color": "#ff0000", // Kolor supermocy
+ "Active": true, // Włączona przy uruchamianiu
+ "Name": "Aimbot", // Nazwa supermocy
+ "RequiredPermission": "", // Wymagane uprawnienie
+ "MaxPerServer": -1, // Maksymalna liczba graczy, którzy mogą posiadać tę
+ // umiejętność na serwerze (-1 dla "nieograniczona")
+ "Rarity": "Common" // Poziom rzadkości umiejętności:
+ // Common (70x), Uncommon (14x),
+ // Rare (10x), Epic (5x), Legendary (1x)
+ },
+ ...
+]
+```
+
+- ##### playersLanguage.json
+```json
+{
+ "76561198150092992": "pl", // "SteamID": "nazwa pliku tłumaczenia"
+ ...
+}
+```
+
+## 🔗 Uznanie
+Plugin korzysta z zawartości następujących projektów:
+- [dRandomSkills](https://github.com/jakubbartosik/dRandomSkills) autorstwa [Jakub Bartosik (D3X)](https://github.com/jakubbartosik) - System losowych umiejętności
+- [CS2TraceRay](https://github.com/schwarper/CS2TraceRay) autorstwa [schwarper](https://github.com/schwarper) - Stary system śledzenia promieni (Trace Ray)
+- [Ray-Trace](https://github.com/FUNPLAY-pro-CS2/Ray-Trace) autorstwa [SlynxCZ](https://github.com/SlynxCZ) - Nowy system śledzenia promieni (Trace Ray)
+- [CS2FlashingHtmlHudFix](https://github.com/girlglock/CS2FlashingHtmlHudFix) autorstwa [girlglock](https://github.com/girlglock) - Poprawka migotania okienka z supermocą
+- [ChaseMod](https://github.com/ipsvn/ChaseMod/blob/master/Utils/Memory/CCSMatch.cs) autorstwa [ipsvn](https://github.com/ipsvn) - Ustawianie wyniku rund
+- [WASDMenuAPI](https://github.com/Interesting-exe/WASDMenuAPI) autorstwa [Interesting-exe](https://github.com/Interesting-exe) - API do łatwego tworzenia menu za pomocą klawiszy WASD
+- [GeoLocationLanguageManagerPlugin](https://github.com/aprox2/GeoLocationLanguageManagerPlugin) autorstwa [aprox2](https://github.com/aprox2) - Zarządzenie geolokalizacją
+- [GeoLite2](https://dev.maxmind.com/geoip/geolite2-free-geolocation-data) autorstwa [MaxMind](https://www.maxmind.com/) - Dane geolokalizacyjne
+- [CServerSideClient](https://discord.com/channels/1160907911501991946/1508172390863994910/1508180670659166348) autorstwa [SLAYER](https://github.com/zakriamansoor47)
+
+## ❤️ Szczególne podziękowania
+[CONTRIBUTORS]
+ㅤ
+[THANKS]
+
+## 📋 Lista Zmian
+
+
+v1.2.2.b2
+
+- #### Ogólne:
+ - ###### Zaktualizowano zależność CSS do wersji 1.0.369.
+ - ###### Przeniesiono projekt z .NET 8.0 na .NET 10.0.
+ - ###### Zaktualizowano tłumaczenie na język turecki przez [@ByDexterTR](https://github.com/ByDexterTR)].
+ - ###### Dodano tłumaczenie na język rosyjski autorstwa [@213sdfsdgf](https://github.com/213sdfsdgf)].
+ - ###### Naprawiono problem z błędnym wyświetlaniem arabskich pseudonimów.
+ - ###### Wykorzystano ForceFullUpdate, aby naprawić crash "FATAL ERROR: CopyExistingEntity".
+ - ###### Wyłączono nieaktualny hook HandleCommandDrop, aby uniknąć crashy, gdy gracz dołącza do drużyny (podziękowania dla [@vladimir214sd](https://github.com/vladimir214sd)).
+ - ###### Dodano nowe sygnatury do gamedata.
+ - ###### Dodano możliwość ustawienia ilości granatów dla każdej mocy, która korzysta z granatów jako części swojej umiejętności (np. Bomberman, Anty Flash, Magnetyczny Wabik itp.).
+
+- #### Poprawki mocy:
+ - ###### Re-Zombie:
+ - ###### Naprawiono błędy z przełączaniem broni, gdy gracz trzyma Zeusa i nóż.
+ - ###### Bronie są teraz usuwane dla botów w trybie zombie.
+ - ###### Naprawiono błąd, przez który gracze czasami nie odradzali się, jeśli otrzymali zbyt duże obrażenia w zbyt krótkim czasie.
+ - ###### Duszek:
+ - ###### Zablokowano możliwość korzystania z Zeusa.
+ - ###### Zablokowano możliwość korzystania z SG556 (`weapon_sg556`).
+ - ###### Ciernie:
+ - ###### Dodano konfigurowalny maksymalny limit zdrowia (37 HP) dla obrażeń, które mogą zostać odbite.
+ - ###### Druga Szansa:
+ - ###### Naprawiono błąd, przez który gracze czasami nie odradzali się, jeśli otrzymali zbyt duże obrażenia w zbyt krótkim czasie.
+ - ###### Feniks:
+ - ###### Naprawiono błąd, przez który gracze czasami nie odradzali się, jeśli otrzymali zbyt duże obrażenia w zbyt krótkim czasie.
+ - ###### Kurczak:
+ - ###### Zablokowano możliwość korzystania z SG556 (`weapon_sg556`).
+ - ###### Wallhack:
+ - ###### Naprawiono błąd, który powodował tymczasowe podświetlanie wrogów natychmiast po śmierci.
+ - ###### Kamera:
+ - ###### Dodano zapamiętywanie pozycji kamery.
+ - ###### Nieśmiertelność:
+ - ###### Naprawiono błąd z permanentną nieśmiertelnością aktywującą się po osiągnięciu dokładnie 0 HP.
+ - ###### Zamiana Broni:
+ - ###### Ilość amunicji jest teraz również przenoszona podczas zamiany broni.
+ - ###### Ludzka bomba:
+ - ###### Zmieniono nazwę umiejętności na "DeathBomb".
+ - ###### Obserwator:
+ - ###### Naprawiono błąd, przez który gracz z umiejętnością Kurczak po śmierci nadal wyświetlał się jako ragdoll podczas bycia obserwowanym.
+ - ###### Ogień Przyjacielski:
+ - ###### Umiejętność działa teraz nawet wtedy, gdy serwerowa funkcja mp_friendlyfire jest ustawiona na 0.
+ - ###### Bejsbolista:
+ - ###### Wyłączono zabijanie członków drużyny.
+
+
+
+
+v1.2.2.b1
+
+- #### Ogólne:
+ - ###### Zaktualizowano zależności projektu.
+ - ###### Zaimplementowano `EntityManager` w celu automatycznego czyszczenia encji i zarządzania pamięcią.
+ - ###### Dodano konfigurację umożliwiającą włączenie lub wyłączenie umiejętności dla botów.
+ - ###### Poprawki stabilności i wydajności.
+
+- #### Poprawki mocy:
+ - ###### Umiejętności oparte na niewidzialności: Są teraz widoczne dla członków drużyny oraz obserwatorów.
+ - ###### Fortnite:
+ - ###### Naprawiono problem z niezniszczalnymi barykadami po śmierci gracza.
+ - ###### Wallhack:
+ - ###### Ulepszono logikę wykrywania niewidzialnych graczy.
+ - ###### Dźwiękowiec / Stópkarz / Obserwator:
+ - ###### Zaktualizowano kod, aby poprawnie współpracował z niewidzialnymi graczami.
+ - ###### I więcej...
+
+
+
+
+v1.2.1.b9
+
+- #### Ogólne:
+ - ###### Dodano Crash Handler w celu poprawy stabilności serwera (Podziękowania dla cj za pomoc).
+ - ###### Dodano rzadkość umiejętności (Skill Rarity - wprowadzono poziomy rzadkości dla mocy).
+ - ###### Dodano limit 'MaxPerServer' (ogranicza liczbę osób, które mogą korzystać z tej samej umiejętności jednocześnie).
+ - ###### Zastąpiono model "ghost_speaker.vmd" modelem "spray_plane.vmdl".
+
+- #### Poprawki mocy:
+ - ###### Skupienie:
+ - ###### Naprawiono i ulepszono kontrolę odrzutu (recoil control).
+ - ###### Re-Zombie / Feniks:
+ - ###### Zablokowano możliwość nadużywania (exploitu) odradzania się podczas zmiany drużyny.
+
+
+
+
+v1.2.1.b8
+
+- #### Ogólne:
+ - ###### Zastąpiono [CS2TraceRay](https://github.com/schwarper/CS2TraceRay) biblioteką [RayTraceApi](https://github.com/FUNPLAY-pro-CS2/Ray-Trace).
+ - ###### Zaktualizowano CounterStrikeSharp do najnowszej wersji.
+ - ###### Nowa komenda do testowania umiejętności: `css_next_skill <(null)/-1/index>`.
+ - ###### Zaktualizowano sygnatury gamedata.
+ - ###### Zastąpiono bezpośrednie referencje do obiektów indeksami encji (entity indices) w celu poprawy bezpieczeństwa pamięci.
+ - ###### Naprawiono ścieżki modeli agentów.
+ - ###### Umiejętności są teraz automatycznie wyłączane, gdy gracz opuszcza serwer.
+ - ###### Dodano sprawdzenia wartości null (null-pointer checks) dla poprawy stabilności.
+
+- #### Poprawki mocy:
+ - ###### Aim Lock:
+ - ###### Ulepszono celowanie w głowę przeciwnika.
+ - ###### Anomalia / Skrytobójca / Kamera / Odpychacz / Zamiana Miejsc / Teleporter:
+ - ###### Ulepszono pozycjonowanie kamery podczas teleportacji.
+ - ###### Ostrożne pociski / Strzał Wybuchowy / Krucha Bomba:
+ - ###### Zaprojektowano na nowo logikę z powodu zmian w zdarzeniu `OnTakeDamage`.
+ - ###### Ogień Przyjacielski:
+ - ###### Naprawiono działanie umiejętności, gdy ogień przyjacielski jest wyłączony na serwerze (tryb Uproszczony/Casual).
+ - ###### Hologram:
+ - ###### Zablokowano możliwość wyrzucania i podnoszenia broni podczas bycia w formie hologramu.
+ - ###### Analfabeta:
+ - ###### Naprawiono błąd z poprawnym wyświetlaniem tekstu.
+ - ###### Stópkarz:
+ - ###### Naprawiono problemy związane z licznikami czasu (timerami).
+ - ###### Ninja:
+ - ###### Naprawiono błąd, przez który początkowy stan niewidzialności nigdy się nie aktualizował.
+ - ###### Skupienie / Szybkostrzelność:
+ - ###### Zaktualizowano kod, aby pasował do nowej struktury `AimPunchServices`.
+ - ###### NoClip / Cień / Iana:
+ - ###### Przeniesiono logikę na `TraceHullShape` w celu dokładniejszego wykrywania kolizji.
+ - ###### Re-Zombie:
+ - ###### Zablokowano możliwość używania broni w trybie zombie oraz zwiększono zdrowie do 500 HP.
+
+- #### Znane problemy:
+ - ###### Długi Nóż:
+ - ###### Wykrywanie prawego przycisku myszy jest obecnie zepsute na systemach Linux (pomimo poprawnych sygnatur).
+ - ###### Iluzjonista:
+ - ###### Błąd z T-Pose: Po dodaniu animgraph_2, modele postaci nie mają wbudowanych żadnych animacji. Na ten moment nie ma możliwości naprawienia tego bez dodawania własnych animacji z Warsztatu Steam.
+
+
+
+
+v1.2.1.b7
+
+- #### Ogólne:
+ - ###### Podniesiono wersję modułu do **1.2.1.b7**.
+ - ###### Zaimplementowano **HTMLEncoder** w celu zwiększenia bezpieczeństwa wiadomości i ich ochrony.
+ - ###### Zaktualizowano funkcję `SkillAction`, aby zwracała wynik wywołanej metody (`object?`) lub `null`, jeśli nie została znaleziona.
+ - ###### Przebudowano system dystrybucji zdarzeń graczy, aby wywoływał `SkillAction` **tylko raz na każdą unikalną aktywną umiejętność**, co zmniejsza liczbę nadmiarowych wywołań.
+ - ###### Przełączono logikę pomiaru czasu na używanie `Server.CurrentTime` zamiast `EngineTime`.
+ - ###### Dodano informacje w konsoli podczas uruchamiania oraz automatyczne **sprawdzanie wersji** przy ładowaniu wtyczki.
+ - ###### Zaimplementowano **automatyczne kopiowanie** plików gamedata, bibliotek DLL oraz plików językowych podczas procesu budowania (autor: @vinicius-trev).
+ - ###### Zaktualizowano główne zależności: `CounterStrikeSharp.API` do wersji **1.0.364** oraz `MaxMind.Db` do wersji **5.0.0** (autor: @vinicius-trev).
+ - ###### Dodano **obsługę geolokalizacji** dla Turcji (`tr`) i Czech (`cz`).
+ - ###### Dodano obsługę **języka tureckiego (`tr`)** (autor: @brkvlr) oraz ulepszono tłumaczenia dla **języka portugalskiego brazylijskiego (`pt-br`)** (autor: @vinicius-trev).
+ - ###### W przypadku braku tłumaczenia system **używa teraz tekstu angielskiego** zamiast wyświetlania surowego klucza tłumaczenia.
+ - ###### **SkillUtils:** Naprawiono błędy wyboru punktów odrodzenia, problemy z referencjami pamięci oraz dodano obsługę parametru `maxHealth` dla funkcji `AddHealth`.
+ - ###### Naprawiono błąd, przez który **klawisz E** (interakcja/rozbrajanie) był przerywany przez użycie umiejętności; gracze mogą teraz rozbrajać bombę i wchodzić w interakcję z obiektami bez zakłóceń.
+ - ###### Licznik czasu systemu głosowania resetuje się teraz poprawnie po każdym głosowaniu.
+
+- #### Poprawki mocy:
+ - ##### Pilot (Rework):
+ - ###### Całkowicie przepisano logikę skoku. Lot wymaga teraz **podwójnego kliknięcia** klawisza skoku, aby go aktywować.
+ - ##### Błazen (Rework):
+ - ###### Zrefaktoryzowano system na działający indywidualnie dla każdego gracza (**per-player system**) wraz z poprawą stabilności licznika czasu. Licznik czasu Błazna **resetuje się** teraz, gdy gracz próbuje podłożyć lub rozbroić bombę.
+ - ##### NoClip (Rework):
+ - ###### Całkowita Rework logiki ruchu; ulepszono wykrywanie kolizji, aby **zapobiec utykaniu** w obiektach oraz zapewniono płynniejszy lot.
+ - ##### Duszek / C4 Kamuflaż / Ninja:
+ - ###### **Obserwatorzy widzą teraz niewidzialnych graczy.**
+ - ###### Ulepszono funkcję ukrywania bomby i naprawiono problem ze spamowaniem konsoli.
+ - ##### Odwrót / Resp Wroga:
+ - ###### Naprawiono błąd związany z niepoprawną interpretacją punktu odrodzenia.
+ - ##### Teleporter:
+ - ###### Mechanika została zmieniona na **procentową szansę** na zamianę miejsc z wrogiem, zamiast gwarantowanych 100%.
+ - ##### Hazardzista:
+ - ###### Naprawiono błąd, który pozwalał na odświeżenie umiejętności bez posiadania wymaganych pieniędzy.
+ - ##### Cień:
+ - ###### Naprawiono problemy związane z logiką teleportacji.
+ - ##### Ludzka bomba:
+ - ###### Zablokowano możliwość korzystania z umiejętności podczas zmiany drużyny, aby zapobiec nadużyciom (exploitom).
+ - ##### Bejsbolista:
+ - ###### Granaty wabiące (decoy) mają teraz taką samą kolizję jak gracze (**PlayerClip**).
+ - ##### Papito:
+ - ###### Główna refaktoryzacja oraz **naprawa crashy serwera** związanych z wymianą broni.
+ - ##### Replikator:
+ - ###### Dodano **animacje kucania** dla replik, aby dopasować je do ruchu gracza.
+ - ##### Mistrz Ostrza / Scyzoryk / Rozbrojenie / Długi Nóż / Długi Zeus / Zabójczy Flash:
+ - ###### Ulepszono obsługę broni typu **Bagnet** (Bayonet).
+ - ###### Dodano opcje konfiguracyjne **friendlyFire** dla `LongKnife`, `LongZeus` oraz `KillerFlash`.
+ - ##### Samowolka / Krótka Bomba / Wyluzowany:
+ - ###### Powiadomienia docierają teraz do wszystkich prawidłowych graczy, niezależnie od tego, czy żyją; dodano obsługę `BombAbortPlant`.
+ - ##### Niszczyciel Stref:
+ - ###### Dodano komunikat podczas przebywania na wyłączonym bombsite.
+ - ##### Wallhack:
+ - ###### Podświetlenie (glow) jest teraz poprawnie wyłączane dla martwych graczy.
+ - ##### Dźwiękowiec (Rework):
+ - ###### Przerobiono umiejętność tak, aby automatycznie odtwarzała dźwięk co 2 sekundy (słyszalny tylko dla gracza z tą umiejętnością).
+
+- #### Nowe moce:
+ - ##### Aim Lock:
+ - ###### Ustawia celownik na najbliższym przeciwniku przez ograniczony czas.
+ - ##### Naprowadzane Granaty:
+ - ###### Twoje granaty (z wyjątkiem dymnych) are przyciągane do pobliskich wrogów.
+ - ##### Magneto:
+ - ###### Odpycha nadlatujące granaty wroga od gracza.
+ - ##### Bomberman:
+ - ###### Rozmieszcza granaty odłamkowe (HE), które wybuchają tylko wtedy, gdy wróg znajdzie się w ich zasięgu.
+ - ##### Analfabeta:
+ - ###### Dopóki użytkownik żyje, wrogowie nie mogą czytać czatu ani informacji na HUD-zie.
+ - ##### Gorąca Bomba:
+ - ###### C4 zadaje stałe obrażenia osobie niosącej bombę tak długo, jak żyje właściciel umiejętności.
+ - ##### Iluzjonista:
+ - ###### Tworzy replikę, która idzie prosto przed siebie, aby odwrócić uwagę wrogów.
+ - ##### Magnetyczny Wabik:
+ - ###### Granaty wabiące (decoy) przyciągają pobliskich graczy do swojego środka.
+ - ##### TNóż do Rzucania:
+ - ###### Dodaje możliwość rzucania we wrogów zabójczym nożem.
+ - ##### Nieważkość:
+ - ###### Granaty lecą szybciej i nie działa już na nie grawitacja.
+ - ##### Dzikie Rzuty:
+ - ###### Sprawia, że wybrany gracz "zapomina swoich lineupów", co skutkuje losowymi trajektoriami rzutów granatów.
+ - ##### Zadymiarz:
+ - ###### Twoje granaty dymne nigdy się nie kończą.
+
+- #### Nowe komendy:
+ - ###### `css_bot_place ` - Teleportuje bota na pozycję gracza z opcjonalnym trybem godmode.
+ - ###### `!sethealth ` - Komenda dla administratora do zarządzania zdrowiem i testowania.
+ - ###### `!plantedbomb ` - Komenda do testowania stanów i logiki związanej z podłożoną bombą.
+
+
+
+v1.2.0
+
+- #### Ogólne:
+ - ###### Zmieniono nazwę pluginu z `!jRandomSkills` na `jRandomSkills`.
+ - ###### Poprawiono literówkę w uprawnieniach z `@jRandmosSkills` na `@jRandomSkills`.
+ - ###### Domyślnie wyłączono `DebugMode` w konfiguracji (przez: [@vinicius-trev](https://github.com/vinicius-trev)).
+ - ###### Zaktualizowano zależności GeoLite (przez: [@vinicius-trev](https://github.com/vinicius-trev)).
+ - ###### Poprawiono tłumaczenia w języku `pt-br` (przez: [@vinicius-trev](https://github.com/vinicius-trev)).
+ - ###### Dodano wsparcie dla języka niemieckiego (przez: [@Enrory](https://github.com/Enrory)).
+ - ###### Naprawiono wykrywanie języka na podstawie kodów ISO.
+ - ###### Naprawiono błędne odniesienia do plików językowych.
+
+- #### Poprawki mocy:
+ - ##### Resp Wroga:
+ - ###### Naprawiono błąd z błędną interpretacją punktu odrodzenia (spawnpoint).
+ - ##### Kamera:
+ - ###### Poprawiono pozycjonowanie kamery.
+ - ###### Ograniczono możliwość tworzenia kamery tylko do ścian.
+ - ###### Kluczowe poprawki stabilności.
+ - ##### Mrok / Hologram:
+ - ###### Dodano dodatkową walidację.
+ - ###### Naprawiono problem z niekończącym się timerem.
+ - ##### Stópkarz:
+ - ###### Lekka optymalizacja i naprawienie błędu, przez który ślady były widoczne dla wszystkich.
+ - ##### C4 Kamuflaż / Duszek / Ninja:
+ - ###### Poprawiono funkcję ukrywania bomby.
+ - ###### Naprawiono problem ze spamem w konsoli.
+ - ##### Żelazna Głowa / Mistrz Ostrza / Błazen / Pancernik / Tylko Głowa / Proteza / Pyro / Pancerz Reaktywny:
+ - ###### Poprawiono funkcję przywracania zdrowia.
+ - ##### Pancernik:
+ - ###### Dodano niewrażliwość na granaty decoy.
+ - ##### Bogacz:
+ - ###### Naprawiono błąd, przez który wszystkie pieniądze były usuwane po rundzie.
+ - ###### Pieniądze są odejmowane na podstawie wydatków, a ostateczna kwota nie może być niższa niż $3,000.
+ - ##### Doskok:
+ - ###### Dodano opcję `anyDirection` do konfiguracji, która określa, czy doskok może być wykonany w dowolnym kierunku, czy tylko do przodu.
+ - ##### Królik / Doskok / Pawel Jumper:
+ - ###### Poprawiono logikę skoku.
+ - ###### Moce mogą być teraz aktywowane za pomocą scrolla myszki.
+ - ##### Pajacyk / Beznogi:
+ - ###### Wymuszono ConVar `sv_legacy_jump 1`, aby umożliwić wykrywanie skoków.
+ - ##### Długi Zeus / Długi Nóż:
+ - ###### Strzały są teraz obliczane na podstawie hitboxów, a nie kolizji.
+ - ###### Naprawiono funkcjonalność RayTrace.
+ - ##### Cień:
+ - ###### Naprawiono funkcjonalność RayTrace.
+ - ##### Saper / Krótka Bomba:
+ - ###### Dodano komunikat powiadamiający o podłożeniu bomby.
+ - ##### SzeliS:
+ - ###### Ogólna refaktoryzacja.
+ - ###### Naprawiono błąd, przez który broń nie była poprawnie zamieniana.
+ - ###### Naprawiono błąd z duplikowaniem broni.
+ - ##### Toksyczny Dym:
+ - ###### Umiejętność jest teraz włączona tylko dla systemów Linux.
+ - ##### Zegarmistrz:
+ - ###### Usunięto timer rundy ze środkowego HUD-u.
+ - ###### Timer rundy aktualizuje się teraz dla wszystkich po rzuceniu granatów.
+
+- #### Nowe moce:
+ - ##### Ostrożne pociski:
+ - ###### Wybierz gracza, który traci HP za każdy niecelny strzał w innego przeciwnika.
+
+
+
+v1.1.9f
+
+- #### Ogólne:
+ - ###### Zaktualizowano zależności do najnowszej wersji (CSS v1.0.361).
+ - ###### Zaktualizowano kompatybilność WSADMenu z najnowszą wersją CSS.
+
+- #### Poprawki mocy:
+ - ##### Trzęsienie ziemi:
+ - ###### Tymczasowo wyłączono.
+ - ##### Kamera:
+ - ###### Tymczasowo wyłączono.
+ - ###### Poprawiono pozycjonowanie kamery.
+ - ##### Hologram:
+ - ###### Tymczasowo wyłączono.
+ - ###### Replika może teraz otrzymywać obrażenia od strzałów w głowę.
+ - ##### Toksyczny Dym:
+ - ###### Zmieniono sposób obliczania odległości na triggerów.
+
+
+
+v1.1.9e
+
+- #### Ogólne:
+ - ###### Poprawiono wyświetlanie ramek tekstowych oraz ich zawartości.
+ - ###### Dodano opcje personalizacji wyglądu wiadomości na czacie.
+
+
+
+v1.1.9d
+
+- #### Ogólne:
+ - ###### Zaktualizowano wygląd wiadomości na czacie.
+
+- #### Poprawki mocy:
+ - ##### C4 Kamuflaż / Duszek / Ninja:
+ - ###### Teraz ukrywany jest cały model postaci, zamiast tylko broni i ustawiania przezroczystości modelu.
+
+ - ##### Re-Zombie:
+ - ###### Zwiększono punkty życia zombie z 200 HP do 250 HP.
+
+ - ##### Replikator:
+ - ###### Zwiększono obrażenia zadawane przez repliki: Twoja drużyna: 10 HP; Drużyna przeciwna: 20 HP.
+ - ###### Dodano możliwość dostosowania obrażeń repliki w pliku `skillsInfo.json`.
+
+ - ##### Toksyczny Dym:
+ - ###### Umiejętność tymczasowo wyłączona w celu przetestowania logiki triggerów.
+
+ - ##### Zegarmistrz:
+ - ###### Zmniejszono zmianę czasu z 10 sekund do 7 sekund.
+
+- #### Nowe moce:
+ - ##### Kamera:
+ - ###### Kliknij [css_useSkill], aby utworzyć/przełączyć się na kamerę.
+
+ - ##### Hologram:
+ - ###### Kliknij [css_useSkill], aby sterować hologramem przez kilka sekund (hologram nie może strzelać).
+
+
+
+v1.1.9c
+
+- #### Ogólne:
+ - ###### Zaktualizowano zależności do najnowszej wersji.
+ - ###### Dodano nowy tryb gry "FullRandom", który losuje losowe umiejętności w każdej rundzie (umiejętności mogą się powtarzać).
+ - ###### Dodano opcję `requiredPermission` do konfiguracji każdej umiejętności, określającą uprawnienia wymagane do jej otrzymania.
+
+- #### Poprawki mocy:
+ - ##### Hazardzista:
+ - ###### Dodano powiadomienie tekstowe, gdy gracz nie ma pieniędzy.
+
+ - ##### Mrok:
+ - ###### Usunięto starą logikę post-processingu (nie działała na każdej mapie).
+ - ###### Dodano UTIL_ScreenFade dla bardziej niezawodnego i spójnego efektu ciemności.
+
+ - ##### Odległościomierz:
+ - ###### Ograniczono maksymalną wyświetlaną odległość do 3000 jednostek.
+
+ - ##### Fortnite:
+ - ###### Poprawiono kąt ustawiania barykad.
+
+ - ##### Stópkarz:
+ - ###### Przeprojektowano logikę śladu (bean trail) na system cząsteczek (particles) dla lepszej wydajności.
+
+ - ##### Trutka:
+ - ###### Nieznacznie zwiększono szybkość zadawania obrażeń.
+ - ###### Dodano minimalny próg zdrowia (30 HP), poniżej którego trucizna przestaje działać (konfigurowalne).
+
+ - ##### Obserwator:
+ - ###### Naprawiono problem z kamerą po śmierci.
+
+
+
+v1.1.9b
+
+- #### Ogólne:
+ - ###### Zaktualizowano zależności do najnowszej wersji.
+ - ###### Naprawiono problem z pustymi uprawnieniami dla komend.
+ - ###### Dodano opcję `SkillHudExpired` do pliku konfiguracyjnego, która kontroluje czas wyświetlania (w sekundach) środkowego HUD-u.
+ - ###### Dodano logikę obsługi zdarzeń trigger enter / exit.
+ - ###### Automatyczne dopasowanie wielkości liter dla opcji `AlternativeSkillButton` w konfiguracji.
+ - ###### Naprawiono problem z automatycznym wykrywaniem języka.
+ - ###### Próba naprawy błędu ze zmianą rozmiaru modeli.
+
+- #### Poprawki mocy:
+ - ###### Bankrut:
+ - ###### Mrok:
+ - ###### Deaktywator:
+ - ###### Głuchy:
+ - ###### Glitch:
+ - ###### Zakłócacz:
+ - ###### Beznogi:
+ - ###### Zamiana Żyć:
+ - ###### Lupa:
+ - ###### Skarbówka:
+ - ###### Trutka:
+ - ###### Brak Karabinów:
+ - ###### Złodziej:
+ - ###### Naprawiono wyświetlanie wiadomości w języku drugiego gracza.
+
+ - ###### C4 Kamuflaż:
+ - ###### Duszek:
+ - ###### Glaz:
+ - ###### Stópkarz:
+ - ###### Ninja:
+ - ###### Wallhack:
+ - ###### Potencjalna naprawa błędu brakującego bytu (entity) podczas ponownego pokazywania modelu.
+
+ - ###### Niszczyciel Stref:
+ - ###### Naprawiono błędną kolejność wyświetlania bombsite'ów.
+
+ - ###### Hazardzista:
+ - ###### Naprawiono błąd, przez który gracze mogli ponownie losować umiejętność nawet bez posiadania pieniędzy.
+
+ - ###### Dźwiękowiec:
+ - ###### Dodano osobne dźwięki dla obu drużyn (konfigurowalne).
+
+ - ###### Toksyczny Dym:
+ - ###### Zaktualizowano logikę, aby używała triggerów (brak offsetu dla systemów Windows).
+
+ - ###### Zegarmistrz:
+ - ###### Dodano dźwięk podczas aktualizacji czasu (konfigurowalny).
+
+
+
+v1.1.9a
+
+- #### Ogólne:
+ - ###### Zaktualizowano zależności do najnowszej wersji.
+ - ###### Aktualizacja sygnatur (jRandomSkills.gamedata.json).
+ - ###### FlashingHtmlHudFix jest teraz wyłączony podczas rozgrzewki.
+ - ###### Naprawiono błędne wyświetlanie tekstu debugowania podczas używania komendy.
+ - ###### Poprawiono funkcjonalność komendy !map.
+ - ###### Dodano opcję `YourSkillChatInfo` do konfiguracji, umożliwiającą wyłączenie opisu własnej umiejętności na czacie.
+ - ###### Wyłączanie umiejętności graczy podczas zmiany mapy.
+- #### Poprawki mocy:
+ - ##### Trzecie Oko:
+ - ###### Dodano model do kamery.
+ - ##### Obserwator:
+ - ###### Dodano model do kamery.
+ - ##### Oko Sokoła:
+ - ###### Dodano model do kamery.
+ - ##### Stópkarz:
+ - ###### Tymczasowo wyłączono w celu napisania kodu na nowo.
+
+
+
+v1.1.8
+
+- #### Ogólne:
+ - ###### Dodano opcję `DisableHUDOnDeathPermission` do pliku konfiguracyjnego, aby wyłączyć HUD po śmierci dla graczy posiadających to konkretne uprawnienie.
+ - ###### Dodano opcję `DisableSkillsOnRoundEnd` do pliku konfiguracyjnego, aby wyłączyć wszystkie umiejętności na koniec rundy (gdy widoczne jest podsumowanie).
+ - ###### Uprawnienie `@jRandomSkills/root` zostało zmienione na `@jRandomSkills/owner`, aby zapobiec problemom z domeną.
+ - ###### Dodano polecenie `!hud` do włączania/wyłączania HUD (gdy HUD jest wyłączony, menu WSAD nie będzie wyświetlane).
+ - ###### Wyłączenie pierwszej umiejętności, jeżeli podczas pierwszej rundy wylosowano dwie umiejętności.
+ - ###### Komenda `!reload` odświeża również status aktywności umiejętności.
+- #### Poprawki mocy:
+ - ##### Replikator:
+ - ###### Naprawiono błąd powodujący awarie serwera po wybuchu bomby.
+ - ###### Kolizje replik są teraz bardziej dokładne.
+
+
+
+v1.1.7
+
+- #### Ogólne:
+ - ###### Zaktualizowano zależności do najnowszej wersji.
+ - ###### Informacje o umiejętnościach są teraz dostępne w `skillsInfo.json` zamiast w `config.json`.
+ - ###### Dodano plik `jRandomSkills.gamedata.json`.
+ - ###### Dodano opcję wyłączenia konkretnej mocy podczas freeze time (domyślnie wyłączone: Zamiana Miejsc, Odwrót, Replikator, Trutka, Samowolka, Pilot, NoClip, Medyk, Nieśmiertelność, Fortnite, Resp Wroga, Anomalia).
+ - ###### Dodano opcje `LanguageSystem` do pliku konfiguracyjnego dla szczegółowego zarządzania przypisywaniem języka.
+ - ###### Komenda `StartGameCommand` ma teraz zmienny parametr startowy w pliku konfiguracyjnym.
+ - ###### Dodano opcję `DisplayAlwaysDescription` w pliku konfiguracyjnym, aby opis umiejętności był widoczny cały czas.
+ - ###### Dodano opcje `HtmlHudCustomisation` w pliku konfiguracyjnym do ustawiania kolorów i rozmiaru czcionki.
+ - ###### Można ustawić pusty tekst: your_skill/drawing_skill/observer_skill/XXX_select_info.
+ - ###### Opcja ustawienia uzyskanej wartości w nazwie/opisie umiejętności (`{0}`).
+ - ###### Naprawiono wyświetlanie czasu odnowienia umiejętności (zaokrąglenie w górę).
+ - ###### Komenda `!reload` odświeża teraz wszystkie parametry ze wszystkich plików konfiguracyjnych.
+ - ###### Większość kolekcji została zastąpiona strukturami bezpiecznymi dla wątków, aby uniknąć crashy serwera (pomysł: @ebat_kopat777).
+- #### Poprawki mocy:
+ - ##### Długi Nóż:
+ - ###### Prawy atak nożem również zadaje obrażenia.
+ - ###### Naprawiono błąd, w którym po śmierci umiejętność gracza była pokazywana jako `Brak`.
+ - ##### Wallhack:
+ - ###### Poświaty tworzą się tylko raz, zamiast dla każdego gracza osobno.
+ - ###### Naprawiono błąd, w którym po śmierci umiejętność gracza była pokazywana jako `Brak`.
+ - ##### Stópkarz:
+ - ###### Naprawiono błąd, w którym po śmierci umiejętność gracza była pokazywana jako `Brak`.
+ - ##### Zamiana Miejsc:
+ - ###### Dodano konfigurowalny czas blokady na początku rundy.
+ - ##### Obserwator:
+ - ###### Zmieniła się metoda poruszania się kamery.
+ - ##### NoClip:
+ - ###### Powrót do ostatniego miejsca użycia umiejętności, jeśli gracz spadnie poniżej 3000 jednostek.
+ - ###### Dodano opcję wyłączenia noclipu, gdy jest aktywny.
+ - ##### Ninja:
+ - ###### Naprawiono problem z niewidoczną bronią po śmierci.
+ - ##### Muhammed:
+ - ###### Komunikat przy eksplozji jest teraz konfigurowalny (w languages/).
+ - ###### Naprawiono błąd, w którym granat nie wybuchał.
+ - ##### Duszek:
+ - ###### Naprawiono problem z niewidoczną bronią po śmierci.
+ - ##### Strzał Wybuchowy:
+ - ###### Naprawiono błąd, w którym granat nie wybuchał.
+ - ##### Resp Wroga:
+ - ###### Dodano konfigurowalny czas blokady na początku rundy.
+ - ##### Rozbrojenie:
+ - ###### Powrót do upuszczania broni zamiast zmiany na slot3.
+ - ###### Zmniejszono szansę na upuszczenie broni: (20-50)% → (20-35)%.
+ - ##### Kurczak:
+ - ###### Zmieniła się metoda poruszania się kurczaka.
+ - ###### Gracz widzi model swojego kurczaka.
+ - ###### Naprawiono hitboxy po powrocie do normalnego modelu.
+ - ###### Naprawiono błąd, w którym po dezaktywacji umiejętności gracz otrzymywał nadmiarowe HP.
+ - ##### C4 Kamuflaż:
+ - ###### Naprawiono problem z niewidoczną bronią po śmierci.
+ - ##### Mistrz Ostrza:
+ - ###### Zmniejszono prędkość ruchu z nożem o 10% (konfigurowalne).
+ - ##### Anty Flash:
+ - ###### Dodano opcję w pliku konfiguracyjnym, umożliwiającą zmianę czasu trwania błysku twojego flash'a.
+ - ##### Błazen:
+ - ###### Naprawiono problem, w którym gracz mógł otrzymywać obrażenia od innych umiejętności lub wybuchu bomby.
+ - ###### Naprawiono błąd, w którym gracz zawsze był fioletowy.
+ - ##### Cień:
+ - ###### Dodano opcję ustawienia szansy na teleportację po trafieniu przeciwnika (w pliku konfiguracyjnym).
+ - ##### Szpieg:
+ - ###### Ustawianie modelu gracza po dezaktywacji umiejętności.
+ - ###### Domyślny model terrorystów został zmieniony.
+
+
+
+v1.1.6
+
+- #### Ogólne:
+ - ###### Dodano język francuski (autorstwa [@felyjyn](https://github.com/felyjyn)).
+- #### Poprawki mocy:
+ - ##### Doskok:
+ - ###### Dodano możliwość wykonywania doskoku w dowolnym kierunku.
+
+
+
+v1.1.5
+
+- #### Ogólne:
+ - ###### Zaktualizowano zależności do najnowszej wersji.
+ - ###### Dodano rozpoznawanie języka na podstawie geolokalizacji (MaxMind GeoLite2).
+ - ###### Każdy gracz może wybrać inny język.
+ - ###### Zmieniono nazwy katalogów.
+ - ###### Usunięto automatyczne odświeżanie pliku konfiguracyjnego.
+ - ###### Dodano opcję `DisableSpectateHUD` do pliku konfiguracyjnego, umożliwiającą wyłączenie HUD HTML dla martwych graczy.
+ - ###### Nazwa projektu została zmieniona z `jRandomSkills` na `!jRandomSkills`, aby umożliwić późniejsze ładowanie innych wtyczek do pamięci.
+ - ###### Dodano polecenie `!lang en`, aby zmienić język.
+ - ###### Dodano polecenie `!reload`, aby ponownie załadować tłumaczenia.
+ - ###### Zniesiono ograniczenia dotyczące wiadomości powitalnych.
+- #### Poprawki mocy:
+ - ##### Zamiana Broni:
+ - ###### Naprawiono błąd związany z powielaniem bomby na HUD.
+ - ##### Złodziej:
+ - ###### Możliwość kradzieży umiejętności niedostępnych dla twojej drużyny została zablokowana.
+ - ###### Menu HTML jest wyłączone, gdy nie znaleziono żadnych graczy.
+ - ##### SzeliS:
+ - ###### Naprawiono wszystkie błędy i włączono tę umiejętność.
+ - ##### Druga Szansa:
+ - ###### Powrót do pierwotnego stanu zdrowia po wyłączeniu umiejętności.
+ - ##### Samowolka:
+ - ###### Zablokowano możliwość podkładania bomby podczas freezetime.
+ - ##### Stópkarz:
+ - ###### Dodano sprawdzanie "null".
+ - ##### Astronauta:
+ - ###### Naprawiono brak wyświetlania skali grawitacji w HTML.
+ - ##### Duplikator:
+ - ###### Menu HTML jest wyłączone, gdy nie znaleziono żadnych graczy.
+ - ##### Deaktywator:
+ - ###### Menu HTML jest wyłączone, gdy nie znaleziono żadnych graczy.
+- #### Nowe moce:
+ - ##### Granatnik:
+ - ###### Masz nieskończone granaty odłamkowe.
+ - ##### Doskok:
+ - ###### Wykonaj drugi skok, aby wykonać doskok.
+
+
+
+v1.1.4
+
+- #### Ogólne:
+ - ###### Do pliku konfiguracyjnego dodano opcję `SkillTimeBeforeStart`, która określa, na ile sekund przed końcem freezetime powinno się zakończyć losowanie umiejętności.
+ - ###### Do pliku konfiguracyjnego dodano opcję `SkillDescriptionDuration`, która określa, ile sekund opis umiejętności w wiadomości HTML powinien być widoczny.
+ - ###### Umiejętności nie są już wyłączane pod koniec rundy.
+ - ###### Zmieniono logikę przydzielania umiejętności.
+ - ###### Zbyt długie pseudonimy są skracane podczas oglądania graczy.
+ - ###### Wybór gracza został zmieniony z Chat Menu na WSAD Menu.
+ - ###### Na początku rundy dodano opisy umiejętności wyświetlane za pomocą PrintToCenterHtml.
+ - ###### Skrócono opisy umiejętności przy wyborze gracza.
+ - ###### Naprawiono problem, w którym komendy css_setskill i css_setstaticskill nie mogły być wykonywane z serwera.
+ - ###### Parametry polecenia `!start` zostały zmienione.
+- #### Poprawki mocy:
+ - ##### Beznogi:
+ - ###### Umiejętność Beznogi całkowicie wyłącza umiejętność Królik.
+ - ##### Bogacz:
+ - ###### Limit został ustawiony na $16,000.
+ - ##### Pilot:
+ - ###### Plecak odrzutowy został przeprojektowany.
+ - ###### Zwiększono ilość paliwa.
+ - ###### Od teraz ilość paliwa jest zawsze widoczna.
+ - ###### Nie można już używać plecaka odrzutowego podczas rozbrajania bomby.
+ - ##### Strzał Wybuchowy:
+ - ###### Obrażenia i zasięg ataku zostały nieznacznie zwiększone.
+ - ##### Flash:
+ - ###### Naprawiono błąd powodujący "wystrzelenie w górę" graczy na schodach/rampach.
+ - ##### Lupa:
+ - ###### Usunięto niepotrzebne wywołania Server.PrintToChatAll.
+ - ##### Zamiana Broni:
+ - ###### Naprawiono błąd z możliwością wymiany broni z martwym graczem.
+ - ##### Mini Majk:
+ - ###### Naprawiono błąd z niezmienionymi hitboxami.
+ - ##### Kurczak:
+ - ###### Naprawiono błąd z niezmienionymi hitboxami.
+- #### Nowe moce:
+ - ##### Błazen:
+ - ###### W trybie błazna nie możesz zadawać ani otrzymywać obrażeń. Tryb zmienia się co kilka sekund.
+ - ##### Hazardzista:
+ - ###### Wybierz umiejętność z podanej listy.
+ - ##### Bankrut:
+ - ###### Wybierz gracza, który straci wszystkie swoje pieniądze.
+
+
+
+v1.1.3
+
+- #### Ogólne:
+ - ###### Dodano opcje `AlternativeSkillButton` do pliku konfiguracyjnego, aby przycisk gracza mógł być używany do aktywowania umiejętności.
+ - ###### Obserwatorzy nie są już uwzględniani przy wyborze konkretnego gracza podczas używania umiejętności.
+- #### Poprawki mocy:
+ - ##### Stópkarz:
+ - ###### Teraz wszyscy przeciwnicy pozostawiają ślad, a nie tylko wybrany.
+ - ##### Mrok:
+ - ###### Wszystkie woluminy postprocessingu są zastępowane, a nie tylko pierwszy z nich.
+
+
+
+v1.1.2
+
+- #### Ogólne:
+ - ###### Umiejętności zostały wyłączone podczas rozgrzewki.
+ - ###### Dodano walidację dla wartości nieokreślonych.
+ - ###### Dodano użycie poleceń i zmiany mapy do debug.
+ - ###### Dodano polecenie `!setstaticskill`, które na stałe przypisuje graczowi określoną umiejętność.
+ - ###### Polecenia mogą mieć niestandardowe uprawnienia ustawione w pliku konfiguracyjnym.
+ - ###### Nowy tryb gry: Umiejętności nie mogą być powtarzane, dopóki mapa się nie zmieni (ustawione jako domyślne).
+ - ###### Dodano system głosowania dla poleceń takich jak: `!start`, `!map`, `!swap`, `!shuffle`, `!pause`, `!setscore` (konfigurowalne)
+ - ###### Dodano możliwość wyszukiwania graczy według identyfikatora SteamID dla polecenia !setskill.
+- #### Poprawki mocy:
+ - ##### Pawel Jumper:
+ - ###### Daje losową liczbę dodatkowych skoków zamiast tylko jednego.
+ - ###### Dodano do konfiguracji: minimalną i maksymalną liczbę dodatkowych skoków.
+ - ##### Kurczak:
+ - ###### Kurczak jest niewidoczny dla gracza posiadającego tę umiejętność.
+ - ##### Fortnite:
+ - ###### Barykada ma teraz 115 HP zamiast znikać po jednym strzale.
+ - ###### Dodano do konfiguracji: hp barykady i model barykady.
+ - ##### Glaz:
+ - ###### Gracze obserwujący cię również nie widzą granatów dymnych.
+ - ##### Wallhack:
+ - ###### Gracze obserwujący cię mogą również widzieć przez ściany.
+ - ##### Gumowe kule:
+ - ###### Naprawiono błąd związany z dodawaniem istniejącego klucza.
+ - ##### Ninja:
+ - ###### Transmisja broni została wyłączona, dzięki czemu charms i nametags nie są widoczne.
+ - ##### Duch:
+ - ###### Transmisja broni została wyłączona, dzięki czemu charms i nametags nie są widoczne.
+ - ##### C4 Kamuflaż:
+ - ###### Transmisja broni została wyłączona, dzięki czemu charms i nametags nie są widoczne.
+- #### Nowe moce:
+ - ##### Lupa:
+ - ###### Powoduje powiększenie ekranu przeciwnika, ograniczając jego pole widzenia.
+ - ##### Ciernie:
+ - ###### Twój przeciwnik otrzyma część obrażeń, które zadał tobie.
+
+
+
+
+v1.1.1
+
+ - #### Ogólne:
+ - ###### Dodano walidację dla wartości nieokreślonych dla umiejętności: Cichociemny i Flash.
+
+
+
+v1.1.0
+
+- #### Ogólne:
+ - ###### Dodano język Brazylijski (Portugalski) (Grok AI).
+ - ###### Dodano język Chiński (Grok AI).
+ - ###### Dodano tryby gry.
+ - ###### Dodano konfigurację dla każdej supermocy.
+ - ###### Dodano tryb Debug Mode.
+ - ###### Dodano otrzymywanie broni dla klas z nimi związanymi (sugestia od [ToRRent1812](https://github.com/Juzlus/jRandomSkills/issues/1)).
+ - ###### Wprowadzono ogólne poprawki i naprawiono błedy.
+- #### Nowe moce:
+ - ##### Anomalia:
+ - ###### Cofasz się o 5 sekund do tyłu. Cooldown: 15 s.
+ - ##### Niszczyciel Stref:
+ - ###### Możesz wybrać strefę detonacji, którą chcesz dezaktywować.
+ - ##### Skrytobójca:
+ - ###### Zadajesz podwójne obrażenia przeciwnikowi od tyłu.
+ - ##### Bejsbolista:
+ - ###### Twój wabik odbija się od ścian i natychmiastowo zabija wroga po trafieniu.
+ - ##### Mistrz Ostrza:
+ - ###### Trzymając nóż, masz duże szanse na odparcie strzału.
+ - ##### C4 Kamuflaż:
+ - ###### Kiedy trzymasz bombę, jesteś niewidzialny.
+ - ##### Wyluzowany:
+ - ###### Podłożenie bomby zajmuje 10 sekund.
+ - ##### Scyzoryk:
+ - ###### Natychmiastowe zabójstwo nożem.
+ - ##### Mrok:
+ - ###### Nadaje efekt ciemności wybranemu przeciwnikowi.
+ - ##### Deaktywator:
+ - ###### Wybierasz gracza, którego supermoc chcesz wyłączyć.
+ - ##### Głuchy:
+ - ###### Wybierasz gracza, dla którego chcesz wyłączyć wszystkie dźwięki.
+ - ##### Odległościomierz:
+ - ###### Możesz zobaczyć odległość do najbliższego przeciwnika.
+ - ##### Duplikator:
+ - ###### Wybierasz gracza, od którego chcesz skopiować supermoc.
+ - ##### Strzał Wybuchowy:
+ - ###### Losowa szansa wystrzelenia pocisku wybuchowego podczas strzelania. Szansa: (15 - 30)%.
+ - ##### Oko Sokoła:
+ - ###### Kliknij [css_useSkill], aby aktywować kamerę z lotu ptaka.
+ - ##### Szybkie Rączki:
+ - ###### Kliknij [css_useSkill], aby przeładować broń, którą obecnie trzymasz.
+ - ##### Fortnite:
+ - ###### Kliknij [css_useSkill], aby stworzyć barykadę, którą można zniszczyć. Cooldown: 2 s.
+ - ##### Krucha Bomba:
+ - ###### Strzelanie do bomby powoduje jej uszkodzenie.
+ - ##### Ogień Przyjacielski:
+ - ###### Strzelanie do członków drużyny leczy ich.
+ - ##### Glaz:
+ - ###### Nie widzisz granatów dymnych.
+ - ##### Glitch (wymyślone przez [ToRRent1812](https://github.com/Juzlus/jRandomSkills/issues/1)):
+ - ###### Wyłączasz radar wybranemu przeciwnikowi.
+ - ##### Klej (wymyślone przez [ToRRent1812](https://github.com/Juzlus/jRandomSkills/issues/1)):
+ - ###### Twoje granaty przyklejają się do ścian.
+ - ##### Leczący Dym:
+ - ###### Twoje granaty dymne leczą.
+ - ##### Pustelnik (wymyślone przez [ToRRent1812](https://github.com/Juzlus/jRandomSkills/issues/1)):
+ - ###### Zabijanie przywraca amunicję i część zdrowia.
+ - ##### Święty Granat Ręczny:
+ - ###### Twoje granaty uderzeniowe zadają podwójne obrażenia i mają podwójny zasięg.
+ - ##### Stópkarz:
+ - ###### Wybierasz gracza, który pozostawi za sobą ślad.
+ - ##### Zakłócacz (wymyślone przez [ToRRent1812](https://github.com/Juzlus/jRandomSkills/issues/1)):
+ - ###### Wybierasz gracza, dla którego chcesz wyłączyć celownik.
+ - ##### Beznogi:
+ - ###### Wybierasz gracza, który nie będzie mógł skakać.
+ - ##### Pajacyk:
+ - ###### Skakanie przywraca zdrowie.
+ - ##### Zamiana Żyć:
+ - ###### Wybierasz gracza, z którym chcesz wymienić się zdrowiem.
+ - ##### Długi Nóż:
+ - ###### Podstawowy atak nożem zadaje obrażenia niezależnie od odległości.
+ - ##### Długi Zeus:
+ - ###### Zeus zadaje obrażenia niezależnie od odległości.
+ - ##### Skarbówka:
+ - ###### Wybierasz gracza, z którym chcesz zamienić się pieniędzmi.
+ - ##### Ninja:
+ - ###### Stojąc nieruchomo zwiększasz swoją niewidzialność o 33%, kucając o 33%, a trzymając nóż o 33%.
+ - ##### Pancernik:
+ - ###### Granaty nie zadają Ci obrażeń.
+ - ##### Skupienie (wymyślone przez [ToRRent1812](https://github.com/Juzlus/jRandomSkills/issues/1)):
+ - ###### Brak odrzutu podczas strzelania.
+ - ##### NoClip:
+ - ###### Kliknij [css_useSkill], aby włączyć noclip na krótki czas. Cooldown: 30 s.
+ - ##### Tylko Głowa:
+ - ###### Otrzymujesz obrażenia tylko w głowę.
+ - ##### Trutka:
+ - ###### Wybierasz gracza, który co kilka sekund będzie otrzymywał obrażenia.
+ - ##### Brak Karabinów:
+ - ###### Wybierasz gracza, który nie może używać karabinów.
+ - ##### Proteza:
+ - ###### Ramiona i nogi są kuloodporne.
+ - ##### Zdalne Rozbrajanie:
+ - ###### Kiedy jesteś blisko bomby, zaczynasz ją rozbrajać. Cooldown: 10 s.
+ - ##### Odpychacz:
+ - ###### Masz losową szansę na odepchnięcie wroga po trafieniu go. Szansa: 100%.
+ - ##### Pyro:
+ - ###### Molotow przywraca zdrowie.
+ - ##### Pancerz Reaktywny:
+ - ###### Pancerz pochłania pierwsze otrzymane obrażenia. Cooldown: 15 s.
+ - ##### Regeneracja:
+ - ###### Co kilka sekund odnawiasz zdrowie.
+ - ##### Replikator:
+ - ###### Kliknij [css_useSkill], aby stworzyć replikę, która zadaje obrażenia po trafieniu. Cooldown: 15 s.
+ - ##### Zwrot do Nadawcy:
+ - ###### Pierwsze trafienie wroga powoduje, że wraca on na swój resp.
+ - ##### Re-Zombie:
+ - ###### Po śmierci odradzasz się jako zombie z większym zdrowiem i bez broni.
+ - ##### Robin Hood (wymyślone przez [ToRRent1812](https://github.com/Juzlus/jRandomSkills/issues/1)):
+ - ###### Zadanie obrażeń przeciwnikowi powoduje kradzież jego pieniędzy.
+ - ##### Gumowe Kule (wymyślone przez [ToRRent1812](https://github.com/Juzlus/jRandomSkills/issues/1)):
+ - ###### Twoje pociski znacznie spowalniają graczy.
+ - ##### Druga Szansa:
+ - ###### Po śmierci odradzasz się z taką samą ilością zdrowia.
+ - ##### Krótka Bomba (wymyślone przez [ToRRent1812](https://github.com/Juzlus/jRandomSkills/issues/1)):
+ - ###### Bomba wybucha znacznie szybciej.
+ - ##### SzeliS:
+ - ###### Kliknij [css_useSkill], aby zamienić aktualną broń na AWP.
+ - ##### Dźwiękowiec:
+ - ###### Kliknij [css_useSkill], aby wywołać dźwięk u każdego przeciwnika. Cooldown: 5 s.
+ - ##### Obserwator:
+ - ###### Kliknij [css_useSkill], aby obserwować losowego przeciwnika.
+ - ##### Złodziej:
+ - ###### Możesz ukraść supermoc wybranemu graczowi.
+ - ##### Trzecie Oko:
+ - ###### Kliknij [css_useSkill], aby aktywować trzecią osobę.
+ - ##### Toksyczny Dym:
+ - ###### Twoje granaty dymne zadają obrażenia.
+ - ##### Wallhack:
+ - ###### Widzisz wrogów przez ściany.
+ - ##### Zegarmistrz:
+ - ###### Każdy rzut granatem zmienia czas rundy o -10 lub +10 sekund.
+- #### Poprawki mocy:
+ - ###### Poprawiono opisy supermocy.
+ - ###### Naprawiono wszyskie zauważalne błedy.
+
+
+
+v1.0.3
+
+- #### Ogólne:
+ - ###### Dodano język angielski.
+ - ###### Dodano wiadomość powitalną.
+ - ###### Dodano podsumowanie z ostatniej rundy.
+ - ###### Dodano podgląd supermocy obserwowanego gracza.
+ - ###### Zabklokowano możliwość posiadania tej samej supermocy dwa razy pod rząd.
+ - ###### Dodano prostą konfigurację dla każdej supermocy.
+ - ###### Przerobiono wszystkie supermoce aby można manipulować nimi w każdej chwili (Naprawiono komendy do ustawiania supermocy).
+ - ###### Zmieniono aktywację supermocy na bind css_useSkill.
+- #### Nowe moce:
+ - ##### Zamrażający Decoy
+ - ###### Twój decoy zamraża wszystkich pobliskich graczy.
+ - ##### Żołnierz:
+ - ###### Masz losowy mnożnik obrażeń (1.15 - 1.35)x.
+ - ##### Gruby:
+ - ###### Masz losowy mnożnik otrzymywanych obrażeń (0.65 - 0.85)x.
+ - ##### Aimbot:
+ - ###### Każdy twój trafiony pocisk jest liczony jako głowa.
+ - ##### Odwrót:
+ - ###### Powrót na spawna. Kliknij [css_useSkill], cooldown 15s.
+ - ##### Resp Wroga:
+ - ###### Teleportacja na spawn wroga. Kliknij [css_useSkill], cooldown 15s.
+ - ##### Zeus:
+ - ###### Zeus x27 natychmiastowo się odnawia.
+ - ##### Radarowiec:
+ - ###### Widzisz wrogów na radarze.
+ - ##### Szybkostrzelność:
+ - ###### Brak cooldown przy strzelaniu.
+ - ##### Samowolka:
+ - ###### Możesz podłożyć bombę w dowolnym miejscu, czas detonacji bomby trwa 60s.
+ - ##### Cichociemny:
+ - ###### Twoje kroki i skoki są niesłyszalne dla INNYCH graczy.
+ - ##### Zabójczy Flash:
+ - ###### Każdy całkowicie oślepiony twoim granatem umiera (również ty).
+ - ##### Spowlnienie Czasu:
+ - ###### Spowolnienie czasu dla wszystkich na 6 sekundy. Kliknij [css_useSkill], cooldown 30s.
+ - ##### Nieśmiertelność:
+ - ###### Jesteś nieśmiertelny przez 2 sekundy. Kliknij [css_useSkill], cooldown 30s.
+ - ##### Losowa Broń:
+ - ###### Dostajesz losową broń. Kliknij [css_useSkill], cooldown 15s.
+ - ##### Zamiana Broni:
+ - ###### Zamieniasz się bronią z losowym wrogiem. Kliknij [css_useSkill], cooldown 30s.
+- #### Poprawki mocy:
+ - ##### Saper:
+ - ###### Naprawiono bład z natychmiastowym podkładaniem bomby jak ktokolwiek na serwerze miał moc 'Saper'.
+ - ##### Duszek:
+ - ###### Naprawiono bycie niewidzialnym po śmierci.
+ - ###### Drobne poprawki dla reszty mocy.
+
+
+
+v1.0.2
+
+- #### Nowe moce:
+ - ##### Mini Majk:
+ - ###### Losowa wielkość postaci w przedziale (60% - 95%).
+ - ##### Zamiana Miejsc:
+ - ###### Zamiana miejscami z losowym wrogiem, po kliknięciu przyciska [css_useSkill]. Cooldown to 30s.
+- #### Poprawki mocy:
+ - ##### Anty Flash:
+ - ###### Dodano: Twoje flash'e trwają dłużej (7s).
+ - ##### Astronauta:
+ - ###### Zmieniono: Mnożnik grawitacji z (0.2 - 0.7) na (0.1 - 0.7).
+ - ###### Dodano: Gracz widzi teraz mnożnik swojej grawitacji na czacie.
+ - ##### Drakula:
+ - ###### Zmieniono: Drakula od teraz może mieć nadwyżkę zdrowia.
+ - ##### Duszek:
+ - ###### Dodano: Zabklokowanie korzystania z broni innej niż nóż.
+ - ###### Dodano: Każda podniesiona broń przez duszka staje się niewidzialna.
+ - ##### Flash:
+ - ###### Naprawiono nie dostawanie prędkości.
+ - ###### Zmieniono: Mnożnik prędkości z (1.2 - 2.5) na (1.2 - 3.0).
+ - ###### Dodano: Gracz widzi teraz mnożnik swojej prędkości na czacie.
+ - ##### Katapulta:
+ - ###### Dodano: Losowe szanse na podrzucenie (20% - 40%).
+ - ###### Dodano: Gracz widzi teraz swoje szanse na czacie.
+ - ##### Kurczak:
+ - ###### Naprawiono nie dostawanie modelu kurczaka.
+ - ###### Dodano: Zabklokowanie korzystania z broni innej niż nóż lub pistolet.
+ - ###### Dodano: Kurczak może posiadać tylko 50 hp.
+ - ##### Medyk:
+ - ###### Naprawiono nie dostawanie apteczek.
+ - ###### Zmieniono: Od teraz wszyscy tracą apteczki na końcu rundy.
+ - ##### Nieskończone Ammo:
+ - ###### Dodano: Od teraz granaty również są nieskończone.
+ - ##### Obrót Wroga:
+ - ###### Dodano: Losowe szanse na obrót wroga (20% - 40%).
+ - ###### Dodano: Gracz widzi teraz swoje szanse na czacie.
+ - ##### Phoenix:
+ - ###### Naprawiono nie odradzanie się po śmierci.
+ - ###### Dodano: Losowe szanse na odrodzenie (20% - 40%).
+ - ###### Dodano: Gracz widzi teraz swoje szanse na czacie.
+ - ##### Pilot:
+ - ###### Zmieniono: Poprawiono opis supermocy.
+ - ##### Rambo:
+ - ###### Naprawiono nie dostawanie dodatkowego życia.
+ - ##### Rozbrojenie:
+ - ###### Dodano: Losowe szanse na wyrzucenie broni wroga (20% - 40%).
+ - ###### Dodano: Gracz widzi teraz swoje szanse na czacie.
+ - ###### Zmieniono: Wyrzuca teraz tylko aktywną broń wroga (naprawiono błąd wyrzucenia kosy).
+ - ##### Eliminator -> Saper:
+ - ###### Zmieniono: Zmineiono nazwę mocy z 'Eliminator' na 'Saper'.
+ - ##### Teleporter:
+ - ###### Naprawiono błąd, gdzie tylko gracz z supermocą był przeteleportowywany.
+
+
+## 💝 Wsparcie
+
+
+
+
+ ⠀
+
+
+
+
+
+## 📝 Kontakt
+
+Jeśli masz jakieś pytanie, napisz na juzlus.biznes@gmail.com lub [jRandomSkills Discord](https://discord.gg/9H8EZYBpPF).
\ No newline at end of file
diff --git a/github/readme.md b/github/readme.md
new file mode 100644
index 0000000..c28ade2
--- /dev/null
+++ b/github/readme.md
@@ -0,0 +1,1321 @@
+
+
+
+
+## 📌
+> [!NOTE]
+> This repository is a fork of the [project](https://github.com/jakubbartosik/dRandomSkills) created by [Jakub Bartosik (D3X)](https://github.com/jakubbartosik).
+
+## 💡 About
+jRandomSkills is a plugin for CounterStrike 2 that brings chaos and fun to gameplay! In each round, you randomly receive one of the unique skills - from invisibility and explosive shots to camera manipulation. Surprise your opponents, take control of the match, and discover dozens of creative abilities that transform the game's dynamics!
+
+#### Choose language:
+
+
+
+
+
+
+
+## 💬 Available languages
+- **English**
+- **Polish**
+- **French** [by: [@felyjyn](https://github.com/felyjyn)]
+- **Portuguese (Brazilian)** [by: [@vinicius-trev](https://github.com/vinicius-trev)]
+- **German** [by: [@Enrory](https://github.com/Enrory)]
+- **Turkish** [by: [@brkvlr](https://github.com/brkvlr), [@ByDexterTR](https://github.com/ByDexterTR)]
+- **Russian** [by: [@213sdfsdgf](https://github.com/213sdfsdgf)]
+- **Simplified Chinese** [GrokAI / ChatGPT]
+
+## 🖼️ Preview
+
+
+
+## 🌐 Test Server
+Join the 3v3 test server and try out the jRandomSkills plugin:
+- **Address**: `jRandomSkills@pukawka.pl`
+- **Password**: `public`
+- **Opening Hours**: `22:00-17:00 UTC`
+- **Connect URL**: `steam://connect/51.38.122.215:27215/public`
+- **Connect**: `connect 51.38.122.215:27215; password public`
+
+Buying a server on pukawka? Use my [referral code](https://pukawka.pl/pp,juzlus.html).
+
+
+## ✨ Current Skills (124)
+
+The table below lists all available skills in the game, along with their descriptions.
+
+| Name | Description | Cooldown / Range |
+| - | - | - |
+| Aimbot | Every bullet you hit counts as a headshot | - |
+| Aim Lock | Click [css_useSkill] to lock your aim on the nearest enemy | 20 s |
+| Anomaly | You rewind a few seconds back in time | 15 s |
+| Anti-Flash | You are immune to flashbangs, and your flashbangs last 7 seconds | - |
+| Iron Head | You take no damage from headshots | - |
+| Zone Reaper | You can choose a bomb site to deactivate | - |
+| Armored | You have a random damage taken multiplier | (0.65 - 0.85)x |
+| Assassin | You deal increased damage to enemies from behind | - |
+| Astronaut | You receive a random gravity value at the start of the round | (0.1 - 0.7)x |
+| Bankrupt | Choose the player who will lose all their money | - |
+| Baseball Player | Your decoy bounces off walls and instantly kills an enemy on impact | - |
+| Enemy Spin | You have a random chance to turn an enemy 180° when hitting them | (20 - 40)% |
+| Blademaster | While holding a knife, you have a high chance to deflect a shot | - |
+| Bunny | You get auto "BunnyHop" | - |
+| C4 Camouflage | You are invisible while holding the bomb | - |
+| Careful Bullets | Select a player who takes damage for every missed shot | - |
+| Catapult | You have a random chance to launch an enemy upwards | (20 - 40)% |
+| Chicken | You get a chicken model + 10% faster movement - 50 HP | - |
+| Chillout | Planting the bomb takes significantly longer | - |
+| Cutter | Instant kill with a knife | - |
+| Cypher | Click [css_useSkill] to create/switch to a camera | 30 s |
+| Darkness | Applies a darkness effect to a chosen enemy | - |
+| Deactivator | Choose a player whose skill you want to disable | - |
+| Deaf | Choose a player to mute all sounds for | - |
+| Death Bomb | You explode upon death, killing nearby players | - |
+| Disarmament | You have a random chance to make an enemy drop their weapon on hit | (20 - 35)% |
+| Rangefinder | You can see the distance to the nearest enemy | - |
+| Dash | Perform a second jump to dash | - |
+| Dracula | Hitting an enemy restores health equal to a percentage of the damage dealt | - |
+| Duplicator | Choose a player to copy their skill | - |
+| Dwarf | Random character size at the start of the round | (60 - 95)% |
+| Enemy Spawn | Click [css_useSkill] to teleport to the enemy spawn | 15 s |
+| Explosive Shot | Random chance to fire an explosive bullet while shooting | (15 - 30)% |
+| Falcon Eye | Click [css_useSkill] to activate a bird's-eye view camera| - |
+| Fastreload | Click [css_useSkill] to reload the weapon you are currently holding | - |
+| Flash | Random player speed at the beginning of the round | (1.2 - 3.0)x |
+| Fortnite | Click [css_useSkill] to create a destructible barricade | 2 s |
+| Fragile Bomb | Shooting the bomb damages it | - |
+| Friendly Fire | Shooting teammates heals them | - |
+| Freezing Decoy | Your decoy freezes all nearby players | - |
+| Gambler | Select a skill from the list provided | - |
+| Ghost | You are completely invisible | - |
+| Glaz | You can see through smoke grenades | - |
+| Glitch | Disables the radar for a chosen enemy | - |
+| Glue | Your grenades stick to walls | - |
+| God Mode | Click [css_useSkill] to become immortal for a short time | 30 s |
+| Grenadier | You have infinite hegranade | - |
+| Healing Smoke | Your smoke grenades heal | - |
+| Hermit | Killing restores ammo and a portion of health | - |
+| Holy Hand Grenade | Your HE grenades deal double damage and have double range| - |
+| Homing Grenades | Your grenades (except smokes) are attracted to enemies | - |
+| Hot Bomb | As long as you are alive, the bomb deals damage to its carrier | - |
+| Hologram | Click [css_useSkill] to control your hologram for a few seconds | 30 s |
+| Illiterate | As long as you are alive, your enemies cannot read | - |
+| Illusionist | Click [css_useSkill] to deploy a replica that walks straight ahead | 30 s |
+| Impostor | You start the round with an enemy player model | - |
+| Infinite Ammo | You receive infinite ammo for all your weapons | - |
+| Tracker | Choose a player who will leave a trail behind them | - |
+| Jammer | Choose a player to disable their crosshair | - |
+| Jester | In jester mode, you cannot get or take any damage. This mode changes every few seconds | (10 - 25) s |
+| Legless | Choose a player who cannot jump | - |
+| Jumping Jack | Jumping restores health | - |
+| Killer Flash | Anyone fully blinded by your flashbang dies (including you) | - |
+| Life Swap | Choose a player to swap health with | - |
+| Long Knife | A primary knife attack deals damage regardless of distance | - |
+| Long Zeus | Zeus deals damage regardless of distance | - |
+| Magnetic Decoy | Your decoy attracts nearby players towards itself | - |
+| Magneto | All enemy grenades are repelled away from you | - |
+| Magnifier | Forces the enemy's screen to zoom in, reducing their field of view | - |
+| Medic | Click [css_useSkill] to use a healing charge that restores 50 health | 1 s |
+| Bomb Miner | Your HE grenade only explode when there is an enemy nearby | - |
+| Taxman | Choose a player to swap money with | - |
+| Ninja | Standing still increases your invisibility by 33%, crouching by 33%, and holding a knife by 33% | - |
+| No-Nades | Grenades deal no damage to you | - |
+| Focus | No recoil while shooting | - |
+| NoClip | Click [css_useSkill] to enable noclip for a short time | 30 s |
+| One-Shot | Hitting an enemy instantly kills them | - |
+| Head Only | You only take damage to the head | - |
+| Pawel Jumper | You get an extra jump | - |
+| Phoenix | You have a random chance to respawn after death | (20 - 40)% |
+| Psychic Defusing | When you are near the bomb, you start defusing it | 10 s |
+| Pilot | Fly for a limited time. Hold [USE - E] to fly | - |
+| Free Planter | You can plant the bomb anywhere, with a detonation time of 60 seconds | - |
+| Poison | Choose a player who will take damage every few seconds | - |
+| No Rifles | Choose a player who cannot use rifles | - |
+| Prosthesis | Arms and legs are bulletproof | - |
+| Pusher | You have a random chance to push an enemy back when hitting them | 100% |
+| Pyro | Molotov restores health | - |
+| Rapid Fire | All bullets are fired very quickly | - |
+| Radar Hack | Enemies are visible on the radar | - |
+| Rambo | You receive a random amount of health at the start of the round | +(50 - 501) HP |
+| Random Weapon | Click [css_useSkill] to receive a random weapon | 15 s |
+| Re-Zombie | After death, you respawn as a zombie with increased health and no weapons | - |
+| Reactive Armor | Armor absorbs the first damage taken | 15 s |
+| Regeneration | You restore health every few seconds | - |
+| Replicator | Click [css_useSkill] to create a replica that deals damage on hit | 15 s |
+| Retreat | Click [css_useSkill] to return to spawn | 15 s |
+| Return to Sender | The first hit on an enemy sends them back to their spawn | - |
+| Rich Boy | You receive a random amount of money at the start of the round | (5000 - 15000)$ |
+| Robin Hood | Dealing damage to an enemy steals their money | - |
+| Rubber Bullets | Your bullets significantly slow down players | - |
+| Sapper | You can plant and defuse bombs faster | - |
+| Second Chance | After death, you respawn with the same amount of health | - |
+| Shade | You teleport behind the back of a hit enemy | - |
+| Short Fuse | The bomb explodes much faster | - |
+| Silent | Your footsteps and jumps are silent to other players | - |
+| Smoker | Your smoke grenades never run out | - |
+| Sniper Elite | Click [css_useSkill] to swap your current weapon for an AWP | 0 s |
+| Soldier | You have a random damage multiplier | (1.15 - 1.35)x |
+| Soundmaker | Click [css_useSkill] to trigger a sound for every enemy | 5 s |
+| Spectator | Click [css_useSkill] to spectate a random enemy | 0 s |
+| Position Swap | Click [css_useSkill] to swap places with a random enemy | 30 s |
+| Teleporter | You swap places with the hit enemy | - |
+| Thief | You can steal a skill from a chosen player | - |
+| Third Eye | Click [css_useSkill] to activate third-person view | 0 s |
+| Thorns | Your opponent will receive a portion of the damage that they inflicted on you | - |
+| Throwing Knife | Click [css_useSkill] to throw a knife. But watch out for others | - |
+| Toxic Smoke | Your smoke grenades deal damage | - |
+| Wallhack | You can see enemies through walls | - |
+| Watchmaker | Every grenade throw alters the round time | - |
+| Weapon Swap | Click [css_useSkill] to swap weapons with a random enemy | 30 s |
+| Weightlessness | Your grenades are not affected by gravity and fly faster | - |
+| Wild Throws | Choose a player who will have trouble throwing grenades | - |
+| Zeus | Zeus x27 instantly recharges | - |
+
+
+
+## 💻 Installation
+1. install / buy a **CS2 server**.
+ - Good tutorial on how to create your own CS2 server [[Video]](https://www.youtube.com/watch?v=1ZrEn0CiMi4&ab_channel=TroubleChute), [[Website]](https://hub.tcno.co/games/cs2/dedicated_server/).
+2. Install **Metamod**.
+ - Download [Metamod:Source 2.x](https://www.sourcemm.net/downloads.php/?branch=master)
+ - Extract it to the `C2Server/game/csgo/` folder.
+ - Edit the `gameinfo.gi` file by adding a new line
+ ```json
+ Game_LowViolence csgo_lv // Perfect World content override
+ Game csgo/addons/metamod // <-- Line to add
+
+ Game csgo
+ ```
+3. Install **CounterStrikeSharp**.
+ - Download [CounterStrikeSharp-With-Runtime](https://github.com/roflmuffin/CounterStrikeSharp/releases).
+ - Extract it to the `C2Server/game/csgo/` folder.
+4. Install **Ray-Trace**
+ - Download [RayTrace-CSS-API](https://github.com/FUNPLAY-pro-CS2/Ray-Trace/releases)
+ - Extract folder `conterstrikesharp` to the `CS2Server/game/csgo/addons/` folder.
+ - Download [RayTrace-MM](https://github.com/FUNPLAY-pro-CS2/Ray-Trace/releases)
+ - Extract it to the `CS2Server/game/csgo/addons/` folder.
+5. Install **jRandomSkills**
+ - Download [jRandomSkills](https://github.com/Juzlus/jRandomSkills/releases)
+
+## > Server Commands
+> [!TIP]
+> **Bind to use skills:** `bind x css_useSkill`
+
+
+The table below lists all available commands in the game, along with their descriptions.
+
+| Command | Example | Description | Permissions |
+| - | - | - | - |
+| `!setskill ` | `!setskill Juzlus Aimbot` | Giving skill to a player | `@jRandomSkills/admin` |
+| `!lang ` | `!lang en` | Change the language | - |
+| `!skills` | `!skills` | List of skills | - |
+| `!map ` | `!map de_nuke` | Change map | `@jRandomSkills/admin` |
+| `!map ` | `!map 3332005394` | Change map from workshop | `@jRandomSkills/admin` |
+| `!start` | `!start` | Start game with conditions: `mp_forcecamera 0, mp_freezetime 15, mp_overtime_enable 1, sv_cheats 0` | `@jRandomSkills/admin` |
+| `!start sv` | `!start sv` | Start the game with conditions: `mp_forcecamera 0, mp_freezetime 0, mp_overtime_enable 1, sv_cheats 1` | `@jRandomSkills/admin` |
+| `!console ` | `!console sv_cheats 1` | Run a command on the server | `@jRandomSkills/owner` |
+| `!swap` | `!swap` | Switch sides | `@jRandomSkills/admin` |
+| `!shuffle` | `!shuffle` | Randomly assign players to teams | `@jRandomSkills/admin` |
+| `!pause` | `!pause` | Pause the game | `@jRandomSkills/admin` |
+| `!heal` | `!heal` | Restore 100 health points | `@jRandomSkills/admin` |
+| `!hud` | `!hud` | Enable/Disable hud | - |
+| `!setscore ` | `!setscore 10 7` | Set the game score | `@jRandomSkills/owner` |
+| `!setstaticskill ` | `!setstaticskill Juzlus Aimbot` | Giving a player a permanent skill | `@jRandomSkills/admin` |
+| `!setstaticskill None` | `!setstaticskill Juzlus None` | Back to normal | `@jRandomSkills/admin` |
+| `!botplace [slot] [godmode]` | `!botplace 2 1` | Teleport a bot to your location | `@jRandomSkills/admin` |
+| `!next_skill [idx]` | `!next_skill Juzlus` | Switch skill for a player (next, previous -1, or specific idx) | `@jRandomSkills/admin` |
+| `!plantedbomb [time]` | `!plantedbomb 35` | Spawn a planted C4 bomb at your position with custom or default (40s) detonation time | `@jRandomSkills/admin` |
+| `!sethealth ` | `!sethealth 150` | Set a specific health amount for yourself | `@jRandomSkills/admin` |
+| `!reload` | `!reload` | Reload translations | - |
+
+_Most commands require permissions, which must be set in the file: `game/csgo/addons/counterstrikesharp/configs/admins.json`_
+
+
+## 🔑 Permissions
+To grant administrative permissions in CounterStrikeSharp:
+1. In the **`game/csgo/addons/counterstrikesharp/configs/`** folder, create a file named **`admins.json`**.
+2. Add the following content to it:
+ ```json
+ {
+ "Juzlus": {
+ "identity": "STEAM_0:0:94913632",
+ "flags": ["@jRandomSkills/admin", "@jRandomSkills/owner"]
+ }
+ }
+ ```
+ You can find your `steamID` using the [steamidfinder](www.steamidfinder.com) website.
+3. Save the file and restart the server to apply the changes.
+
+## ⚙️ Configuration
+All skills can be customized in the **`config.cfg`** / **`skillsInfo.json`** file located in the **`game/csgo/addons/counterstrikesharp/plugins/jRandomSkills/configs/`** folder.
+
+- ##### config.json
+```json
+{
+ "Settings": {
+ "GameMode": 3, // Game mode:
+ // 0 - Random skills for each player (It can't be the same twice in a row)
+ // 1 - Same skills for the whole team
+ // 2 - Same skills for all players
+ // 3 - Random skills for each player (It can't be the same until the map changes)
+ // 4 - Random skills for each player (Full random)
+ // 5 - Debug: Skills are assigned in turn
+ "YourSkillChatInfo": true, // Show your skill in chat
+ "KillerSkillChatInfo": true, // Show killer's skill in chat
+ "TeamMateSkillChatInfo": true, // Show allies' skills in chat
+ "SummaryAfterTheRound": true, // Show summary of the last round
+ "EnableBotSkills": true, // Enable skills for bots
+ "EnableBotKickDebug": false, // Kick a random bot every 45s (for debug/testing)
+ "DebugMode": false, // Write activity to the ‘Debug’ folder
+ "AlternativeSkillButton": null, // Possible buttons:
+ // null, "Attack", "Jump", "Duck", "Forward", "Back",
+ // "Use", "Cancel", "Left", "Right", "Moveleft",
+ // "Moveright", "Attack2", "Run", "Reload", "Alt1",
+ // "Alt2", "Speed", "Walk", "Zoom", "Weapon1",
+ // "Weapon2", "Bullrush", "Grenade1", "Grenade2",
+ // "Attack3", "Scoreboard", "Inspect"
+ "SkillTimeBeforeStart": 7.0, // How many seconds before freeze time ends should skills
+ // drawing be completed? (freezetime - SkillTimeBeforeStart)
+ "SkillHudDuration": -1.0, // How long should the HUD be visible for?
+ "SkillDescriptionDuration": 7.0, // How long should the skill description be visible for?
+ "DisplayAlwaysDescription":false,// Always display skill description (SkillDescriptionDuration = 9999)
+ "DisableSpectateHUD": false, // Disable HTML HUD when spectating
+ "EnableFlashingHtmlHudFix": false,// Enable FlashingHtmlHudFix
+ "TraceRayBeam": false, // Enable trail visibility for 'Long Knife', 'Long Zeus'
+ "DisableHUDOnDeathPermission": "@jRandomSkills/death", // Disable the HUD after death for players with this permission
+ "DisableSkillsOnRoundEnd": false,// Disable all skills at the end of the round (when the summary is visible)
+
+ "LanguageSystem": {
+ "DefaultLangCode": "en", // Default language: en, pl, fr, pt-br, zh
+ "DisableGeoLite": false, // Disable player language search by geolocation GeoLite2 (MaxMind)
+ "LanguageInfos": [...] // Setting to change ISO languages to translations
+ },
+
+ "HtmlHudCustomisation": { // Settings for changing colours and font sizes
+ ... // xxxl: 64px, xxl: 40px, xl: 32px
+ } // l: 24px, ml: 20px, m: 18px
+ ... // sm: 16px, s: 12px, xs: 8px
+ },
+```
+
+- ##### skillsInfo.json
+```json
+[
+ {
+ "NeedsTeammates": false, // Requires other players on the team
+ "DisableOnFreezeTime": false, // Disable the skill during freeze time
+ "OnlyTeam": 0, // Skill availability:
+ // 0 - Everyone
+ // 2 - Terrorist
+ // 3 - CounterTerrorist
+ "Color": "#ff0000", // Skill color
+ "Active": true, // Enabled on startup
+ "Name": "Aimbot", // Skill name
+ "RequiredPermission": "", // Required permission
+ "MaxPerServer": -1, // Maximum number of players allowed to have
+ // this skill on the server (-1 for unlimited)
+ "Rarity": "Common" // Rarity tier of the skill:
+ // Common (70x), Uncommon (14x),
+ // Rare (10x), Epic (5x), Legendary (1x)
+ },
+ ...
+]
+```
+
+- ##### playersLanguage.json
+```json
+{
+ "76561198150092992": "en", // "SteamID": "name of the translation file"
+ ...
+}
+```
+
+## 🔗 Credits
+This plugin uses content from the following projects:
+- [dRandomSkills](https://github.com/jakubbartosik/dRandomSkills) by [Jakub Bartosik (D3X)](https://github.com/jakubbartosik) - Random skills system
+- [CS2TraceRay](https://github.com/schwarper/CS2TraceRay) by [schwarper](https://github.com/schwarper) - Old Trace Ray system
+- [Ray-Trace](https://github.com/FUNPLAY-pro-CS2/Ray-Trace) by [SlynxCZ](https://github.com/SlynxCZ) - New Trace Ray system
+- [CS2FlashingHtmlHudFix](https://github.com/girlglock/CS2FlashingHtmlHudFix) by [girlglock](https://github.com/girlglock) - A fix for window flickering
+- [ChaseMod](https://github.com/ipsvn/ChaseMod/blob/master/Utils/Memory/CCSMatch.cs) by [ipsvn](https://github.com/ipsvn) - Round score management
+- [WASDMenuAPI](https://github.com/Interesting-exe/WASDMenuAPI) by [Interesting-exe](https://github.com/Interesting-exe) - API to easily create WASD menus
+- [GeoLocationLanguageManagerPlugin](https://github.com/aprox2/GeoLocationLanguageManagerPlugin) by [aprox2](https://github.com/aprox2) - Geolocation language manager
+- [GeoLite2](https://dev.maxmind.com/geoip/geolite2-free-geolocation-data) by [MaxMind](https://www.maxmind.com/) - Geolocation data
+- [CServerSideClient](https://discord.com/channels/1160907911501991946/1508172390863994910/1508180670659166348) by [SLAYER](https://github.com/zakriamansoor47)
+
+## ❤️ Special thanks
+[CONTRIBUTORS]
+ㅤ
+[THANKS]
+
+## 📋 Changelog
+
+
+v1.2.2.b2
+
+- #### General:
+ - ###### Updated CSS dependency to version 1.0.369.
+ - ###### Upgraded the project from .NET 8.0 to .NET 10.0.
+ - ###### Updated Turkish language translation by [@ByDexterTR](https://github.com/ByDexterTR)].
+ - ###### Added Russian language translation by [@213sdfsdgf](https://github.com/213sdfsdgf)].
+ - ###### Fixed an issue with incorrect display of Arabic nicknames.
+ - ###### Used ForceFullUpdate to resolve the "FATAL ERROR: CopyExistingEntity" crash.
+ - ###### Disabled stale HandleCommandDrop hook to avoid crashes when a player joins a team (thanks to [@vladimir214sd](https://github.com/vladimir214sd)).
+ - ###### Added new signatures to gamedata.
+ - ###### Added the ability to configure the number of grenades for every skill that uses grenades as part of its ability (e.g., Miner, AntyFlash, MagneticDecoy, etc.).
+
+- #### Skill improvements:
+ - ###### Re-Zombie:
+ - ###### Fixed weapon switching issues when a player is holding a Zeus and a knife.
+ - ###### Weapons are now removed for bots in zombie mode.
+ - ###### Fixed an issue where players would occasionally fail to respawn if they took too much damage too quickly.
+ - ###### Ghost:
+ - ###### Blocked the ability to use the Zeus.
+ - ###### Blocked the ability to use the SG556 (`weapon_sg556`).
+ - ###### Thorns:
+ - ###### Added a configurable maximum health limit (37 HP) for the damage that can be reflected.
+ - ###### Second Life:
+ - ###### Fixed an issue where players would occasionally fail to respawn if they took too much damage too quickly.
+ - ###### Phoenix:
+ - ###### Fixed an issue where players would occasionally fail to respawn if they took too much damage too quickly.
+ - ###### Chicken:
+ - ###### Blocked the ability to use the SG556 (`weapon_sg556`).
+ - ###### Wallhack:
+ - ###### Fixed a bug that caused temporary enemy highlighting right after death.
+ - ###### Cypher:
+ - ###### Added camera position persistence.
+ - ###### God Mode:
+ - ###### Fixed an issue with permanent immortality triggering after reaching exactly 0 HP.
+ - ###### Weapons Swap:
+ - ###### The ammo count is now also transferred when weapons are swapped.
+ - ###### Muhammed:
+ - ###### Renamed the skill to "DeathBomb".
+ - ###### Spectator:
+ - ###### Fixed a bug where a player with the Chicken skill would still display as a ragdoll after death when spectated.
+ - ###### Friendly Fire:
+ - ###### The skill now works even when the server's mp_friendlyfire setting is set to 0.
+ - ###### Baseball:
+ - ###### Disabled teammate killing.
+
+
+
+
+v1.2.2.b1
+
+- #### General:
+ - ###### Updated project dependencies.
+ - ###### Implemented `EntityManager` for automated entity cleanup and memory management.
+ - ###### Added configuration to enable or disable skills for bots.
+ - ###### Stability and performance improvements.
+
+- #### Skill improvements:
+ - ###### Invisibility-based skills: Now visible to teammates and spectators.
+ - ###### Fortnite:
+ - ###### Fixed an issue with indestructible barricades after player death.
+ - ###### Wallhack:
+ - ###### Improved detection logic for invisible players.
+ - ###### Soundmaker / Jackal / Spectator:
+ - ###### Updated to correctly work with invisible players.
+ - ###### And more...
+
+
+
+
+v1.2.1.b9
+
+- #### General:
+ - ###### Added Crash Handler to improve server stability (Thanks to cj for help).
+ - ###### Added Skill Rarity (added rarity levels to skills).
+ - ###### Added 'MaxPerServer' limit (limits how many people can use the same skill).
+ - ###### Replaced model "ghost_speaker.vmd" with "spray_plane.vmdl".
+
+- #### Skill improvements:
+ - ###### Focus:
+ - ###### Fixed and improved recoil control.
+ - ###### ReZombie / Phoenix:
+ - ###### Blocked respawn exploit when changing teams.
+
+
+
+
+v1.2.1.b8
+
+- #### General:
+ - ###### Replaced [CS2TraceRay](https://github.com/schwarper/CS2TraceRay) with [RayTraceApi](https://github.com/FUNPLAY-pro-CS2/Ray-Trace).
+ - ###### Updated CounterStrikeSharp to the latest version.
+ - ###### New command for skill testing: `css_next_skill <(null)/index>`.
+ - ###### Updated gamedata signatures.
+ - ###### Replaced CS2TraceRay with `RayTraceApi`.
+ - ###### Replaced direct object references with entity indices to improve memory safety.
+ - ###### Fixed agent model paths.
+ - ###### Skills are now automatically disabled when a player leaves the server.
+ - ###### Added null-pointer checks for improved stability.
+
+- #### Skill improvements:
+ - ###### AimLock:
+ - ###### Aiming at the opponent's head has been improved.
+ - ###### Anomaly / Behind / Cypher / Push / SwapPosition / Teleporter:
+ - ###### Improved camera positioning during teleportation.
+ - ###### CarefulBullets / ExplosiveShot / FragileBomb:
+ - ###### Redesigned logic due to changes in the `OnTakeDamage` event.
+ - ###### FriendlyFire:
+ - ###### Fixed skill functionality when friendly fire is disabled on the server (Casual mode).
+ - ###### Hologram:
+ - ###### Blocked weapon dropping and picking up while in hologram form.
+ - ###### Illiterate:
+ - ###### Fixed a bug with correct text display.
+ - ###### Tracker:
+ - ###### Fixed issues related to timers.
+ - ###### Ninja:
+ - ###### Fixed a bug where the initial invisibility state never update.
+ - ###### NoRecoil / QuickShot:
+ - ###### Updated to match the new `AimPunchServices` structure.
+ - ###### Noclip / Shade / Iana:
+ - ###### Migrated to `TraceHullShape` for more accurate collision detection.
+ - ###### ReZombie:
+ - ###### Disabled weapon usage in zombie mode and increased HP to 500.
+
+- #### Known Issues:
+ - ###### LongKnife:
+ - ###### Right-click detection is currently broken on Linux (despite valid signatures).
+ - ###### Illusionist:
+ - ###### T-Pose bug: After adding animgraph_2, the character models don't have any animations built in. So, for now, there isn't really any way to do this without adding your own from the Workshop.
+
+
+
+
+v1.2.1.b7
+
+- #### General:
+ - ###### Bumped module version to **1.2.1.b7**.
+ - ###### Implemented **HTMLEncoder** for improved message security and protection.
+ - ###### Updated `SkillAction` to return the invoked method result (`object?`) or `null` if not found.
+ - ###### Reworked player event dispatching to call `SkillAction` **once per distinct active skill**, reducing redundant invocations.
+ - ###### Switched timing logic to use `Server.CurrentTime` instead of `EngineTime`.
+ - ###### Added startup console information and an automated **version check** on plugin load.
+ - ###### Implemented **automatic copying** of gamedata, DLLs, and language files during the build process (by @vinicius-trev).
+ - ###### Updated core dependencies: `CounterStrikeSharp.API` to **1.0.364** and `MaxMind.Db` to **5.0.0** (by @vinicius-trev).
+ - ###### Added **geolocation support** for Turkey (`tr`) and Czechia (`cz`).
+ - ###### Added **Turkish (`tr`)** language support (by @brkvlr) and improved **Portuguese-Brazil (`pt-br`)** translations (by @vinicius-trev).
+ - ###### If a translation is missing, the system now **falls back to English text** instead of displaying the raw translation key.
+ - ###### **SkillUtils:** Fixed spawn point selection bugs, memory referencing issues, and added `maxHealth` parameter support for `AddHealth`.
+ - ###### Fixed an issue where the **E key** (interact/defuse) was interrupted by skill usage; players can now defuse and interact with objects without interference.
+ - ###### Vote system timer now correctly resets after each vote.
+
+- #### Skill improvements:
+ - ##### Pilot (Rework):
+ - ###### Completely rewritten jump and fuel logic. Flight now requires a **double-click** of the jump key to activate.
+ - ##### Jester (Rework):
+ - ###### Refactored to a **per-player system** with improved timer stability. The Jester timer now **resets** when the player attempts to plant or defuse the bomb.
+ - ##### Noclip (Rework):
+ - ###### Total rework of the movement logic; improved collision detection to **prevent getting stuck** in objects and ensured smoother flight.
+ - ##### Ghost / C4 Camouflage / Ninja:
+ - ###### **Observers can now see invisible players.**
+ - ###### Improved bomb hiding function and fixed console spam issues.
+ - ##### Retreat / Enemy Spawn:
+ - ###### Fixed an error with incorrect spawn point interpretation.
+ - ##### Teleporter:
+ - ###### The mechanic has been changed to a **percentage chance** of swapping places with an enemy, rather than a guaranteed 100%.
+ - ##### Gambler:
+ - ###### Fixed a bug that allowed the skill to be refreshed without having the required money.
+ - ##### Shade:
+ - ###### Fixed issues related to teleportation logic.
+ - ##### Muhammed:
+ - ###### Blocked skill usage during team switching to prevent exploits.
+ - ##### Baseball:
+ - ###### Decoy grenades now have the same collision as players (**PlayerClip**).
+ - ##### Sniper Elite:
+ - ###### Major refactoring and **fix for server crashes** related to weapon swapping.
+ - ##### Replicator:
+ - ###### Added **crouching animations** for replicas to match player movement.
+ - ##### Blade Master / Cutter / Disarmament / Long Knife / Long Zeus / Killer Flash:
+ - ###### Improved handling for **Bayonet** weapon types.
+ - ###### Added **friendlyFire** configuration options for `LongKnife`, `LongZeus`, and `KillerFlash`.
+ - ##### Planter / Short Bomb / Chill Out:
+ - ###### Notifications now reach all valid players regardless of life status; added `BombAbortPlant` support.
+ - ##### Area Reaper:
+ - ###### Added a message while being on a disabled bombsite.
+ - ##### Wallhack:
+ - ###### Glow is now correctly disabled for dead players.
+ - ##### Sound Maker (Rework):
+ - ###### Reworked to automatically play a sound every 2 seconds (audible only for the player with skill).
+
+- #### New skills:
+ - ##### Aim Lock:
+ - ###### Lock your aim on the nearest enemy for a limited duration.
+ - ##### Homing Nades:
+ - ###### Your grenades (except smokes) are attracted to nearby enemies.
+ - ##### Magneto:
+ - ###### Pushes incoming enemy grenades away from the player.
+ - ##### Miner:
+ - ###### Deploys HE grenades that only detonate when an enemy is within range.
+ - ##### Illiterate:
+ - ###### While the user is alive, enemies are unable to read chat or HUD information.
+ - ##### Hot Bomb:
+ - ###### The C4 deals constant damage to the carrier as long as the skill owner is alive.
+ - ##### Illusionist:
+ - ###### Deploys a replica that walks straight ahead to distract enemies.
+ - ##### Magnetic Decoy:
+ - ###### Decoy grenades attract nearby players towards the center of the decoy.
+ - ##### Throwing Knife:
+ - ###### Adds the ability to throw a lethal knife at enemies.
+ - ##### Weightless:
+ - ###### Grenades fly faster and are no longer affected by gravity.
+ - ##### Wild Throw:
+ - ###### Causes a selected player to "forget their lineups," resulting in randomized grenade trajectories.
+ - ##### Smoker:
+ - ###### Your smoke grenades never run out.
+
+- #### New commands:
+ - ###### `css_bot_place ` - Teleports a bot to the player's position with optional godmode.
+ - ###### `!sethealth ` - Admin command for health management and testing.
+ - ###### `!plantedbomb ` - Command for testing bomb-related states and logic.
+
+
+
+v1.2.0
+
+- #### General:
+ - ###### Renamed the plugin from `!jRandomSkills` to `jRandomSkills`.
+ - ###### Fixed a typo in permissions from `@jRandmosSkills` to `@jRandomSkills`.
+ - ###### Disabled `DebugMode` by default in the config. (by: [@vinicius-trev](https://github.com/vinicius-trev))
+ - ###### Updated GeoLite dependencies. (by: [@vinicius-trev](https://github.com/vinicius-trev))
+ - ###### Improved `pt-br` language translations. (by: [@vinicius-trev](https://github.com/vinicius-trev))
+ - ###### Added German language support. (by: [@Enrory](https://github.com/Enrory))
+ - ###### Fixed language detection based on ISO codes.
+ - ###### Fixed incorrect references to language files.
+
+- #### Skill improvements:
+ - ##### Enemy Spawn:
+ - ###### Fixed an error with incorrect spawn point interpretation.
+ - ##### Cypher:
+ - ###### Improved camera positioning.
+ - ###### Restricted camera placement to walls only.
+ - ###### Key stability fixes.
+ - ##### Darkness / Hologram:
+ - ###### Added additional validation.
+ - ###### Fixed an issue with an infinite timer.
+ - ##### Jackal:
+ - ###### Minor optimization and fixed a bug where tracks were visible to everyone.
+ - ##### C4 Camouflage / Ghost / Ninja:
+ - ###### Improved bomb hiding function.
+ - ###### Fixed console spam issues.
+ - ##### AntyHead / BladeMaster / Jester / NoNades / OnlyHead / Posthesis / Pyro / Reactive Armor:
+ - ###### Fixed the health restoration function.
+ - ##### NoNades:
+ - ###### Added immunity to Decoy grenades.
+ - ##### RichBoy:
+ - ###### Fixed a bug where all money was removed after a round.
+ - ###### Money is deducted based on spending, where the final amount cannot be less than $3,000.
+ - ##### Dash:
+ - ###### Added `anyDirection` options to the configuration, which define whether a dash can be performed in any direction or only forwards.
+ - ##### BunnyHop / Dash / Pawel Jumper:
+ - ###### Improved jump logic.
+ - ###### Skills can now be triggered using the mouse scroll wheel.
+ - ##### Jumping Jack / Legless:
+ - ###### The ConVar `sv_legacy_jump` has been set to `1` to enable jump detection.
+ - ##### Long Zeus / Long Knife:
+ - ###### Shots are now calculated based on hitboxes instead of collisions.
+ - ###### Fixed RayTrace functionality.
+ - ##### Shade:
+ - ###### Fixed RayTrace functionality.
+ - ##### Planter / Short Bomb:
+ - ###### Added a notification message when the bomb is planted.
+ - ##### Sniper Elite:
+ - ###### General refactoring.
+ - ###### Fixed an issue where weapons were not swapped correctly.
+ - ###### Fixed a weapon duplication bug.
+ - ##### Toxic Smoke:
+ - ###### Skill is now enabled only for Linux systems.
+ - ##### Watchmaker:
+ - ###### Removed the round timer from the center HUD.
+ - ###### Round timer now updates for everyone after throwing utilities.
+
+- #### New skills:
+ - ##### Careful Bullets:
+ - ###### Select a player who loses HP for every missed shot at another player.
+
+
+
+v1.1.9f
+
+- #### General:
+ - ###### Updated dependencies to the latest version (CSS v1.0.361).
+ - ###### Updated WSADMenu compatibility to the latest CSS version.
+
+- #### Skill improvements:
+ - ###### Earthquake:
+ - ###### Temporarily disabled.
+
+ - ###### Cypher:
+ - ###### Temporarily disabled.
+ - ###### Improved camera positioning.
+
+ - ###### Hologram:
+ - ###### Temporarily disabled.
+ - ###### Replica can now receive headshot damage.
+
+ - ###### Toxic Smoke:
+ - ###### Changed distance calculation for triggers.
+
+
+
+v1.1.9e
+
+- #### General:
+ - ###### Improved display of text frame / content.
+ - ###### Added customisation options for chat message appearance.
+
+
+
+v1.1.9d
+
+- #### General:
+ - ###### Updated the appearance of chat messages.
+
+- #### Skill improvements:
+ - ###### C4Camouflage:
+ - ###### Ghost:
+ - ###### Ninja:
+ - ###### Now the entire model is hidden instead of just the weapon and setting the model's transparency.
+
+ - ###### ReZombie:
+ - ###### Increased zombie health from 200 HP to 250 HP.
+
+ - ###### Replicator:
+ - ###### ncreased damage dealt by replicas: Your team: 10 HP; Enemy team: 20 HP
+ - ###### Added the option to customize replica damage in `skillsInfo.json`.
+
+ - ###### ToxicSmoke:
+ - ###### Skill temporarily disabled to test trigger logic.
+
+ - ###### Watchmaker:
+ - ###### Reduced time change from 10 seconds to 7 seconds.
+
+- #### New skills:
+ - ###### Cypher:
+ - ###### Click [css_useSkill] to create/switch to a camera.
+
+ - ###### Hologram:
+ - ###### Click [css_useSkill] to control your hologram for a few seconds (the hologram cannot shoot).
+
+
+
+v1.1.9c
+
+- #### General:
+ - ###### Updated dependency to the latest version.
+ - ###### Added a new game mode, ‘FullRandom,’ which randomly assigns skills each round (skills may be repeated).
+ - ###### Added the `requiredPermission` option to every skill config, defining the permission required for a player to receive that skill.
+
+- #### Skill improvements:
+ - ###### Gambler:
+ - ###### Added text notification when the player has no money.
+
+ - ###### Darkness:
+ - ###### Removed the old post-processing logic (did not work on every map).
+ - ###### Added UTIL_ScreenFade for a more reliable and consistent darkness effect.
+
+ - ###### Distancer:
+ - ###### Limited the maximum display distance to 3000 units.
+
+ - ###### Fortnite:
+ - ###### mproved the placement angle of barricades.
+
+ - ###### Jackal:
+ - ###### Reworked the bean trail logic to a particle system for better performance.
+
+ - ###### Poison:
+ - ###### Slightly increased the poison tick speed.
+ - ###### Added a minimum health threshold (30 HP) below which poison no longer works (configurable).
+
+ - ###### Spectator:
+ - ###### Fixed an issue with the camera after death.
+
+
+
+v1.1.9b
+
+- #### General:
+ - ###### Updated dependency to the latest version.
+ - ###### Fixed an issue with empty permissions for commands.
+ - ###### Added `SkillHudExpired` option to the config file that controls how long (in seconds) the central HUD is visible.
+ - ###### Added logic for trigger enter / exit handling.
+ - ###### Automatic case adjustment for the `AlternativeSkillButton` option in the config.
+ - ###### Fixed an issue with automatic language detection.
+ - ###### Attempt to fix model resizing issue.
+
+- #### Skill improvements:
+ - ###### Bankrupt:
+ - ###### Darkness:
+ - ###### Deactivator:
+ - ###### Deaf:
+ - ###### Glitch:
+ - ###### Jammer:
+ - ###### JumpBan:
+ - ###### LifeSwap:
+ - ###### Magnifier:
+ - ###### MoneySwap:
+ - ###### Poison:
+ - ###### PrimaryBan:
+ - ###### Thief:
+ - ###### Fixed message being shown in the other player's language.
+
+ - ###### C4Camouflage:
+ - ###### Ghost:
+ - ###### Glaz:
+ - ###### Jackal:
+ - ###### Ninja:
+ - ###### Wallhack:
+ - ###### Possible fix for missing entity when showing the entity again.
+
+ - ###### AreaReaper:
+ - ###### Fixed incorrect bomb placement order.
+
+ - ###### Gambler:
+ - ###### Fixed issue where players could reroll their skill even without money.
+
+ - ###### SoundMaker:
+ - ###### Added separate sounds for both teams (configurable).
+
+ - ###### ToxicSmoke:
+ - ###### Updated logic to use triggers (offset not found for Windows system).
+
+ - ###### Watchmaker:
+ - ###### Added a sound when the time updates (configurable).
+
+
+
+v1.1.9a
+
+- #### General:
+ - ###### Update the dependency to the latest version.
+ - ###### Signature update (jRandomSkills.gamedata.json).
+ - ###### FlashingHtmlHudFix is disabled during warm-up.
+ - ###### Fixed incorrect debug text display when using the command.
+ - ###### Improved the functionality of the !map command.
+ - ###### Added the `YourSkillChatInfo` option to the configuration to disable the description of your skill in chat.
+ - ###### Disabling player skill when changing maps.
+- #### Skill improvements:
+ - ##### Third Eye:
+ - ###### Model added to camera.
+ - ##### Spectator:
+ - ###### Model added to camera.
+ - ##### Falcon Eye:
+ - ###### Model added to camera.
+ - ##### Jackal:
+ - ###### Temporarily disabled for rewrite.
+
+
+
+v1.1.8
+
+- #### General:
+ - ###### Added `DisableHUDOnDeathPermission` options to the config, to disable the HUD after death for players with this specific permission.
+ - ###### Added `DisableSkillsOnRoundEnd` option to the config, to disable all skills at the end of the round (when the summary is visible).
+ - ###### The permission `@jRandomSkills/root` has been changed to `@jRandomSkills/owner` to prevent domain issues.
+ - ###### Added `!hud` command to toggle the HUD on/off (When the HUD is off, the WSAD Menu will not appear).
+ - ###### Disabling first skill if two skills are drawn during the first round.
+ - ###### The `!reload` command also refreshes the skill activity status.
+- #### Skill improvements:
+ - ##### Replicator:
+ - ###### Fixed a bug causing server crashes after a bomb explosion.
+ - ###### Replica collisions are now more accurate.
+
+
+
+v1.1.7
+
+- #### General:
+ - ###### Update the dependency to the latest version.
+ - ###### Information about skills is available in `skillsInfo.json` instead of `config.json`.
+ - ###### Added the `jRandomSkills.gamedata.json` file.
+ - ###### Added the option to disable a specific power during freeze time (Disabled by default: Position Swap, Retreat, Replicator, Poison, Planter, Pilot, Noclip, Medic, God Mode, Fortnite, Enemy Spawn, Anomaly).
+ - ###### Added `LanguageSystem` options to the config for detailed language assignment management.
+ - ###### The `StartGameCommand` command now includes a changeable start parameter in config.
+ - ###### Added `DisplayAlwaysDescription` option to the config to show the description all the time.
+ - ###### Added `HtmlHudCustomisation` options to config for setting colours and font size.
+ - ###### Can be set to empty text: your_skill/drawing_skill/observer_skill/XXX_select_info.
+ - ###### Option to set the obtained value in the name/description of the skill (`{0}`).
+ - ###### Fixed skill cooldown time display (Rounding up).
+ - ###### The `!reload` command now refreshes all parameters from the all configs.
+ - ###### Most of the collection has been replaced with safe-threading to avoid server crashes (idea by: @ebat_kopat777).
+- #### Skill improvements:
+ - ##### Long Knife:
+ - ###### A secondary knife attack also deals damage.
+ - ###### Fixed a mistake where the player's skill was shown as `None` after death.
+ - ##### Wallhack:
+ - ###### Glows are created just once, instead of being created again for each player.
+ - ###### Fixed a mistake where the player's skill was shown as `None` after death.
+ - ##### Jackal:
+ - ###### Fixed a mistake where the player's skill was shown as `None` after death.
+ - ##### Position Swap:
+ - ###### Added a configurable cooldown at the start of the round.
+ - ##### Spectator:
+ - ###### The method used to attach the camera has changed.
+ - ##### NoClip:
+ - ###### Return to the last place where you used skill if you fall below 3,000 units.
+ - ###### Added an option to disable the noclip when it is active.
+ - ##### Ninja:
+ - ###### Fixed an issue with weapons not being visible after death.
+ - ##### Muhammed:
+ - ###### The message at the explosion is configurable (in languages/).
+ - ###### Fixed a bug with the grenade not detonating.
+ - ##### Ghost:
+ - ###### Fixed an issue with weapons not being visible after death.
+ - ##### Explosive Shot:
+ - ###### Fixed a bug with the grenade not detonating.
+ - ##### Enemy Spawn:
+ - ###### Added a configurable cooldown at the start of the round.
+ - ##### Disarmament:
+ - ###### Back to dropping weapons instead of changing to slot3.
+ - ###### The chance of dropping weapons has been reduced: (20-50)% → (20-35)%
+ - ##### Chicken:
+ - ###### The method used to attach the chicken has changed.
+ - ###### Player with skill can see a model of your chicken.
+ - ###### Fixed hitboxes after returning to normal model.
+ - ###### Fixed a bug that added extra health after deactivating skill.
+ - ##### C4 Camouflage:
+ - ###### Fixed an issue with weapons not being visible after death.
+ - ##### Blade Master:
+ - ###### Movement speed with a knife has been reduced by 10% (configurable).
+ - ##### AntyFlash:
+ - ###### Added the option in config to change the flash duration of your flashes.
+ - ##### Jester:
+ - ###### Fixed an issue where you could take damage from other skills or bombs.
+ - ###### Fixed a bug where the player was always purple.
+ - ##### Shade:
+ - ###### Added an option to set the chance of teleportation after hitting an enemy in the config.
+ - ##### Impostor:
+ - ###### Setting the player model after deactivating the skill.
+ - ###### The default model for terrorists has been changed.
+
+
+
+v1.1.6
+
+- #### General:
+ - ###### Added French language (by [@felyjyn](https://github.com/felyjyn)).
+- #### Skill improvements:
+ - ##### Dash:
+ - ###### Added the ability to dash in any direction.
+
+
+
+v1.1.5
+
+- #### General:
+ - ###### Update the dependency to the latest version.
+ - ###### Added language recognition based on geolocation (MaxMind GeoLite2).
+ - ###### Each player can choose a different language.
+ - ###### Directory names have been changed.
+ - ###### Automatic config refresh has been removed.
+ - ###### Added the `FlashingHtmlHudFix` option to the config.
+ - ###### Added the `CS2TraceRayDebug` option to the config, showing the "bullet" path for the LongKnife and LongZeus skills.
+ - ###### Added the `DisableSpectateHUD` option to the config, allowing the HTML HUD to be disabled for spectators.
+ - ###### The name of the project has been changed from `jRandomSkills` to `!jRandomSkills` to allow other plugins to load into memory later.
+ - ###### Added the command `!lang en` to change the language
+ - ###### Added the `!reload` command to reload translations.
+ - ###### Restrictions on welcome messages removed.
+- #### Skill improvements:
+ - ##### Weapon Swap:
+ - ###### Fixed a bug with bomb duplication on the HUD.
+ - ##### Thief:
+ - ###### The ability to steal skill that is unavailable to your team has been blocked.
+ - ###### The HTML Menu is disabled when no players are found.
+ - ##### Sniper Elite:
+ - ###### Fixed all bugs and enabled the skill.
+ - ##### Second Chance:
+ - ###### Return to original health when skill are deactivated.
+ - ##### Planter:
+ - ###### Planting a bomb during freezing has been blocked.
+ - ##### Jackal:
+ - ###### Added 'null' check.
+ - ##### Astronaut:
+ - ###### Fixed gravity scale not showing on HTML.
+ - ##### Duplicator:
+ - ###### The HTML Menu is disabled when no players are found.
+ - ##### Deactivator:
+ - ###### The HTML Menu is disabled when no players are found.
+- #### New skills:
+ - ##### Grenadier:
+ - ###### You have infinite hegranade.
+ - ##### Dash:
+ - ###### Perform a second jump to dash.
+
+
+
+v1.1.4
+
+- #### General:
+ - ###### The `SkillTimeBeforeStart` option has been added to the config file, which specifies how many seconds before the end of freeze time the skills drawing should stop.
+ - ###### The `SkillDescriptionDuration` option has been added to the config file, which specifies how many seconds the skill description HTML message should be visible.
+ - ###### Skills are no longer disabled at the end of the round.
+ - ###### The logic for granting skills has been changed.
+ - ###### Nicknames that are too long are shortened when spectating players.
+ - ###### The player selection has been changed via the Chat Menu to the WSAD Menu.
+ - ###### Skill descriptions added at the start of the round using PrintToCenterHtml.
+ - ###### Skill descriptions with player selection have been shortened.
+ - ###### Fixed a problem where the css_setskill and css_setstaticskill commands could not be executed from the server.
+ - ###### The parameters of the `!start` command have been changed.
+- #### Skill improvements:
+ - ##### Legless:
+ - ###### Legless's skill completely disables Bunny's skill.
+ - ##### Rich Boy:
+ - ###### The cap has been set at $16,000.
+ - ##### Pilot:
+ - ###### The jetpack has been redesigned.
+ - ###### The amount of fuel has been increased.
+ - ###### From now on, the amount of fuel is always visible.
+ - ###### It is no longer possible to use a jetpack while defusing a bomb.
+ - ##### Explosive Shot:
+ - ###### The damage and range of attack have increased a little.
+ - ##### Flash:
+ - ###### Fixed a bug causing players to be launched upwards on stairs/ramps.
+ - ##### Magnifier:
+ - ###### Unnecessary Server.PrintToChatAll have been removed.
+ - ##### Weapon Swap:
+ - ###### Fixed a bug with the option to change weapons with a dead player.
+ - ##### Dwarf:
+ - ###### Fixed a bug with unchanged hitboxes.
+ - ##### Chicken:
+ - ###### Fixed a bug with unchanged hitboxes.
+- #### New skills:
+ - ##### Jester:
+ - ###### In jester mode, you cannot get or take any damage. This mode changes every few seconds.
+ - ##### Gambler:
+ - ###### Select a skill from the list provided.
+ - ##### Bankrupt:
+ - ###### Choose the player who will lose all their money.
+
+
+
+v1.1.3
+
+- #### General:
+ - ###### Added `AlternativeSkillButton` options to the config file so that the player button can be used to activate skills.
+ - ###### Spectators are no longer selected when choosing a specific player when using a skill.
+- #### Skill improvements:
+ - ##### Jackal:
+ - ###### Now, all opponents are leaving a trail, not just the selected ones.
+ - ##### Darkness:
+ - ###### All postprocessing volumes are replaced instead of just the first one.
+
+
+
+v1.1.2
+
+- #### General:
+ - ###### Skills disabled during warm-up.
+ - ###### Added general validation for undefined values.
+ - ###### Added command usage and map changes to debug log.
+ - ###### The `!setstaticskill` command has been added, which permanently assigns a specific skill to a player.
+ - ###### Commands can have custom permissions set in the config file.
+ - ###### New game mode: Skills can't be repeated until the map changes (Set as default).
+ - ###### Added a voting system for commands such as: `!start`, `!map`, `!swap`, `!shuffle`, `!pause`, `!setscore` (configurable)
+ - ###### Added the ability to search for players by steamID for the !setskill command.
+- #### Skill improvements:
+ - ##### Pawel Jumper:
+ - ###### Gives a random number of extra jumps instead of just one.
+ - ###### Added to config: minimum and maximum number of extra jumps.
+ - ##### Chicken:
+ - ###### The chicken is invisible to the player with skill.
+ - ##### Fortnite:
+ - ###### The barricade now has 115 HP instead of disappearing after one shot.
+ - ###### Added to config: hp barricade and barricade model.
+ - ##### Glaz:
+ - ###### Players observing you also cannot see smoke grenades.
+ - ##### Wallhack:
+ - ###### Players observing you can also see through walls.
+ - ##### Rubber Bullets:
+ - ###### Fixed an error with adding an existing key.
+ - ##### Ninja:
+ - ###### Weapon transmit has been disabled, so charms and name tags are not visible.
+ - ##### Ghost:
+ - ###### Weapon transmit has been disabled, so charms and name tags are not visible.
+ - ##### C4 Camouflage:
+ - ###### Weapon transmit has been disabled, so charms and name tags are not visible.
+- #### New skills:
+ - ##### Magnifier:
+ - ###### Forces the enemy's screen to zoom in, reducing their field of view.
+ - ##### Thorns:
+ - ###### Your opponent will receive a portion of the damage that they inflicted on you.
+
+
+
+
+v1.1.1
+
+ - #### General:
+ - ###### Added validation for undefined values for the skills: Silent and Flash.
+
+
+
+v1.1.0
+
+- #### General:
+ - ###### Added Brazilian Portuguese language (Grok AI).
+ - ###### Added Chinese language (Grok AI).
+ - ###### Added game modes.
+ - ###### Added configuration for each skill.
+ - ###### Added Debug Mode.
+ - ###### Added weapon receiving for skills associated with them (suggested by [ToRRent1812](https://github.com/Juzlus/jRandomSkills/issues/1)).
+ - ###### Introduced general fixes and resolved bugs.
+- #### New skills:
+ - ##### Anomaly:
+ - ###### You rewind a few seconds back in time. Cooldown: 15 s.
+ - ##### Zone Reaper:
+ - ###### You can choose a bomb site to deactivate.
+ - ##### Assassin:
+ - ###### You deal increased damage to enemies from behind.
+ - ##### Baseball Player:
+ - ###### Your decoy bounces off walls and instantly kills an enemy on impact.
+ - ##### Blademaster:
+ - ###### While holding a knife, you have a high chance to deflect a shot.
+ - ##### C4 Camouflage:
+ - ###### You are invisible while holding the bomb.
+ - ##### Chillout:
+ - ###### Planting the bomb takes significantly longer.
+ - ##### Cutter:
+ - ###### Instant kill with a knife.
+ - ##### Darkness:
+ - ###### Applies a darkness effect to a chosen enemy.
+ - ##### Deactivator:
+ - ###### Choose a player whose skill you want to disable.
+ - ##### Deaf:
+ - ###### Choose a player to mute all sounds for.
+ - ##### Rangefinder:
+ - ###### You can see the distance to the nearest enemy.
+ - ##### Duplicator:
+ - ###### Choose a player to copy their skill.
+ - ##### Explosive Shot:
+ - ###### Random chance to fire an explosive bullet while shooting. Chance: (15 - 30)%.
+ - ##### Falcon Eye:
+ - ###### Click [css_useSkill] to activate a bird's-eye view camera.
+ - ##### Fastreload:
+ - ###### Click [css_useSkill] to reload the weapon you are currently holding.
+ - ##### Fortnite:
+ - ###### Click [css_useSkill] to create a destructible barricade. Cooldown: 2 s.
+ - ##### Fragile Bomb:
+ - ###### Shooting the bomb damages it.
+ - ##### Friendly Fire:
+ - ###### Shooting teammates heals them.
+ - ##### Glaz:
+ - ###### You can see through smoke grenades.
+ - ##### Glitch (suggested by [ToRRent1812](https://github.com/Juzlus/jRandomSkills/issues/1)):
+ - ###### Disables the radar for a chosen enemy.
+ - ##### Glue (suggested by [ToRRent1812](https://github.com/Juzlus/jRandomSkills/issues/1)):
+ - ###### Your grenades stick to walls.
+ - ##### Healing Smoke:
+ - ###### Your smoke grenades heal.
+ - ##### Hermit (suggested by [ToRRent1812](https://github.com/Juzlus/jRandomSkills/issues/1)):
+ - ###### Killing restores ammo and a portion of health.
+ - ##### Holy Hand Grenade:
+ - ###### Your HE grenades deal double damage and have double range.
+ - ##### Tracker:
+ - ###### Choose a player who will leave a trail behind them.
+ - ##### Jammer (suggested by [ToRRent1812](https://github.com/Juzlus/jRandomSkills/issues/1)):
+ - ###### Choose a player to disable their crosshair.
+ - ##### Legless:
+ - ###### Choose a player who cannot jump.
+ - ##### Jumping Jack:
+ - ###### Jumping restores health.
+ - ##### Life Swap:
+ - ###### Choose a player to swap health with.
+ - ##### Long Knife:
+ - ###### A primary knife attack deals damage regardless of distance.
+ - ##### Long Zeus:
+ - ###### Zeus deals damage regardless of distance.
+ - ##### Taxman:
+ - ###### Choose a player to swap money with.
+ - ##### Ninja:
+ - ###### Standing still increases your invisibility by 33%, crouching by 33%, and holding a knife by 33%.
+ - ##### No-Nades:
+ - ###### Grenades deal no damage to you.
+ - ##### Focus (suggested by [ToRRent1812](https://github.com/Juzlus/jRandomSkills/issues/1)):
+ - ###### No recoil while shooting.
+ - ##### NoClip:
+ - ###### Click [css_useSkill] to enable noclip for a short time. Cooldown: 30 s.
+ - ##### Head Only:
+ - ###### You only take damage to the head.
+ - ##### Poison:
+ - ###### Choose a player who will take damage every few seconds.
+ - ##### No Rifles:
+ - ###### Choose a player who cannot use rifles.
+ - ##### Prosthesis:
+ - ###### Arms and legs are bulletproof.
+ - ##### Psychic Defusing:
+ - ###### When you are near the bomb, you start defusing it. Cooldown: 10 s.
+ - ##### Pusher:
+ - ###### You have a random chance to push an enemy back when hitting them. Chance: 100%.
+ - ##### Pyro:
+ - ###### Molotov restores health.
+ - ##### Reactive Armor:
+ - ###### Armor absorbs the first damage taken. Cooldown: 15 s.
+ - ##### Regeneration:
+ - ###### You restore health every few seconds.
+ - ##### Replicator:
+ - ###### Click [css_useSkill] to create a replica that deals damage on hit. Cooldown: 15 s.
+ - ##### Return to Sender:
+ - ###### The first hit on an enemy sends them back to their spawn.
+ - ##### Re-Zombie:
+ - ###### After death, you respawn as a zombie with increased health and no weapons.
+ - ##### Robin Hood (suggested by [ToRRent1812](https://github.com/Juzlus/jRandomSkills/issues/1)):
+ - ###### Dealing damage to an enemy steals their money.
+ - ##### Rubber Bullets (suggested by [ToRRent1812](https://github.com/Juzlus/jRandomSkills/issues/1)):
+ - ###### Your bullets significantly slow down players.
+ - ##### Second Chance:
+ - ###### After death, you respawn with the same amount of health.
+ - ##### Short Fuse (suggested by [ToRRent1812](https://github.com/Juzlus/jRandomSkills/issues/1)):
+ - ###### The bomb explodes much faster.
+ - ##### Sniper Elite:
+ - ###### Click [css_useSkill] to swap your current weapon for an AWP.
+ - ##### Soundmaker:
+ - ###### Click [css_useSkill] to trigger a sound for every enemy. Cooldown: 5 s.
+ - ##### Spectator:
+ - ###### Click [css_useSkill] to spectate a random enemy.
+ - ##### Thief:
+ - ###### You can steal a skill from a chosen player.
+ - ##### Third Eye:
+ - ###### Click [css_useSkill] to activate third-person view.
+ - ##### Toxic Smoke:
+ - ###### Your smoke grenades deal damage.
+ - ##### Wallhack:
+ - ###### You can see enemies through walls.
+ - ##### Watchmaker:
+ - ###### Every grenade throw alters the round time.
+- #### Skill improvements:
+ - ###### Improved skill descriptions.
+ - ###### Fixed all noticeable bugs.
+
+
+
+v1.0.3
+
+- #### General:
+ - ###### English language added.
+ - ###### Added welcome message.
+ - ###### Added summary of last round.
+ - ###### Added preview of spectated player's skills.
+ - ###### Blocked the possibility of having the same skill twice in a row.
+ - ###### Added simple configuration for each skill.
+ - ###### Reworked all skills so they can be manipulated at any time (Fixed setskill command)
+ - ###### Changed activation of skills to bind css_useSkill
+- #### New skills:
+ - ##### Freezing Decoy
+ - ###### Your decoy freezes all nearby players.
+ - ##### Soldier:
+ - ###### You have a random damage multiplier (1.15 - 1.35)x.
+ - ##### Tank:
+ - ###### You have a random received damage multiplier (0.65 - 0.85)x.
+ - ##### Aimbot:
+ - ###### Each bullet you hit is counted as a head.
+ - ##### Retreat:
+ - ###### Return to spawn. Click [css_useSkill], cooldown 15s.
+ - ##### Enemy Respawn:
+ - ###### Teleport to enemy spawn. Click [css_useSkill], cooldown 15s.
+ - ##### Zeus:
+ - ###### Zeus x27 instant reload.
+ - ##### Radar Hack:
+ - ###### You see enemies on radar.
+ - ##### Quick-Shot:
+ - ###### No cooldown when shooting.
+ - ##### Planter:
+ - ###### You can plant a bomb anywhere, bomb detonation time is 60s.
+ - ##### Silent:
+ - ###### Your steps and jumps are unheard by OTHER players.
+ - ##### Deadly Flash:
+ - ###### Anyone completely blinded by your grenade dies (including you).
+ - ##### Time Slow:
+ - ###### Time slowdown for everyone for 6 seconds. Click [css_useSkill], cooldown 30s.
+ - ##### God Mode:
+ - ###### You are immortal for 2 seconds. Click [css_useSkill], cooldown 30s.
+ - ##### Random Weapon:
+ - ###### You are given a random weapon. Click [css_useSkill], cooldown 15s.
+ - ##### Weapon Swap:
+ - ###### You swap weapons with a random enemy. Click [css_useSkill], cooldown 30s.
+- #### Skill improvements:
+ - ##### Sapper:
+ - ###### Fixed bug with instantly planting a bomb as anyone on the server had the skill ‘Sapper’.
+ - ##### Ghost:
+ - ###### Fixed being invisible after death.
+ - ###### Minor fixes for the rest of the powers.
+
+
+
+v1.0.2
+
+- #### New skills:
+ - ##### Dwarf:
+ - ###### Random character size range (60% - 95%).
+ - ##### Swapper:
+ - ###### Swap places with a random enemy when clicking the [css_useSkill] button. Cooldown is 30s.
+- #### Skill improvements:
+ - ##### Anti-Flash:
+ - ###### Added: Your flash takes longer (7s).
+ - ##### Astronaut:
+ - ###### Changed: Gravity multiplier from (0.2 - 0.7) to (0.1 - 0.7).
+ - ###### Added: Player can now see their gravity multiplier in chat.
+ - ##### Dracula:
+ - ###### Changed: Dracula can now have excess health from now on.
+ - ##### Ghost:
+ - ###### Added: Blocking the use of weapons other than a knife.
+ - ###### Added: Any weapon picked up by a ghost becomes invisible.
+ - ##### Flash:
+ - ###### Fixed not getting speed.
+ - ###### Changed: Speed multiplier from (1.2 - 2.5) to (1.2 - 3.0).
+ - ###### Added: Player can now see their speed multiplier in chat.
+ - ##### Catapult:
+ - ###### Added: Random toss chances (20% - 40%).
+ - ###### Added: The player now sees their chances in chat.
+ - ##### Chicken:
+ - ###### Fixed not getting the chicken model.
+ - ###### Added: Blocking the use of weapons other than a knife or gun.
+ - ###### Added: Chicken can only have 50 hp.
+ - ##### Medic:
+ - ###### Fixed not getting first aid kits.
+ - ###### Changed: From now on everyone loses first aid kits at the end of the round.
+ - ##### Infinite Ammo:
+ - ###### Added: From now on, grenades are also infinite.
+ - ##### Enemy Rotation:
+ - ###### Added: Random chance of enemy rotation (20% - 40%).
+ - ###### Added: Player can now see their chances in chat.
+ - ##### Phoenix:
+ - ###### Fixed not being reborn after death.
+ - ###### Added: Random revival chances (20% - 40%).
+ - ###### Added: Player can now see their chances in chat.
+ - ##### Pilot:
+ - ###### Changed: The description of this skill has been improved.
+ - ##### Rambo:
+ - ###### Fixed not getting extra health.
+ - ##### Disarmament:
+ - ###### Added: Random chances to throw away enemy weapons after hit (20% - 40%).
+ - ###### Added: Player can now see their chances in chat.
+ - ###### Changed: Now only active enemy weapon is thrown (Knife throwing bug fixed).
+ - ##### Eliminator -> Sapper:
+ - ###### Changed: Renamed the power from ‘Eliminator’ to ‘Sapper’.
+ - ##### Teleporter:
+ - ###### Fixed a bug where only the player with the skill was being teleported.
+
+
+## 💝 Donate
+
+
+
+
+ ⠀
+
+
+
+
+
+## 📝 Contact
+
+If you have a question, please write to juzlus.biznes@gmail.com or [jRandomSkills Discord](https://discord.gg/9H8EZYBpPF).
diff --git a/github/update_thanks.py b/github/update_thanks.py
index dd23926..f54c2ba 100644
--- a/github/update_thanks.py
+++ b/github/update_thanks.py
@@ -1,57 +1,220 @@
-import requests
import os
+import hashlib
+import requests
+from dotenv import load_dotenv
-# Konfiguracja
-USER_IDS = ["284780352042434570"]
-MARKER = "[THANKS]"
+load_dotenv()
-def get_html_for_user(user_id):
+def _env_list(key):
+ value = os.getenv(key, "")
+ return [item.strip() for item in value.split(",") if item.strip()]
+
+REPOSITORY = "Juzlus/jRandomSkills"
+DISCORD_USER_IDS = _env_list("DISCORD_USER_IDS")
+EXTRA_USERS_GITHUB = _env_list("EXTRA_USERS_GITHUB")
+
+CONTRIBUTORS_URL = "https://github.com/Juzlus/jRandomSkills/graphs/contributors"
+AVATARS_DIR = "./avatars"
+AVATARS_RAW_URL = "https://raw.githubusercontent.com/Juzlus/jRandomSkills/main/.github/avatars"
+
+MARKER_GITHUB = "[CONTRIBUTORS]"
+MARKER_DISCORD = "[THANKS]"
+
+
+def build_table(cells, max_per_row=6):
+ rows = []
+ for i in range(0, len(cells), max_per_row):
+ row_cells = "".join(cells[i:i + max_per_row])
+ rows.append(f" {row_cells}
")
+ return "\n" + "\n".join(rows) + "\n
"
+
+
+def make_cell(avatar_url, name, profile_url=None):
+ if profile_url:
+ return (
+ f''
+ f''
+ f' '
+ f' {name}'
+ f''
+ f' | '
+ )
+ return (
+ f''
+ f' '
+ f' {name}'
+ f' | '
+ )
+
+
+def save_avatar(source_url, filename):
+ os.makedirs(AVATARS_DIR, exist_ok=True)
+ filepath = os.path.join(AVATARS_DIR, filename)
+ response = requests.get(source_url, timeout=10)
+ if response.status_code != 200:
+ print(f"Failed to download avatar: {source_url}")
+ return None
+ with open(filepath, "wb") as f:
+ f.write(response.content)
+ return f"{AVATARS_RAW_URL}/{filename}"
+
+
+def fetch_github_user(login):
+ response = requests.get(f"https://api.github.com/users/{login}", timeout=10)
+ if response.status_code != 200:
+ print(f"GitHub API Error for user '{login}': Status {response.status_code}")
+ return None
+ return response.json()
+
+
+def get_github_contributors(repo, extra_logins):
try:
- url = f"https://pfpfinder.com/api/discord/user/{user_id}"
+ url = f"https://api.github.com/repos/{repo}/contributors"
response = requests.get(url, timeout=10)
- data = response.json()
+ if response.status_code != 200:
+ print(f"GitHub API Error: Status {response.status_code}")
+ return ""
- name = data.get("global_name") or data.get("username")
- avatar = data.get("avatar")
- github_user = data.get("username")
+ seen = set()
+ cells = []
+
+ for user in response.json():
+ name = user.get("login")
+ if not name or name == "web-flow":
+ continue
+ seen.add(name.lower())
+ cells.append(make_cell(
+ avatar_url=f"{user['avatar_url']}&s=75",
+ name=name,
+ profile_url=user["html_url"],
+ ))
+
+ for login in extra_logins:
+ if login.lower() in seen:
+ print(f"Skipping duplicate extra user: {login}")
+ continue
+ user = fetch_github_user(login)
+ if not user:
+ continue
+ seen.add(login.lower())
+ cells.append(make_cell(
+ avatar_url=f"{user['avatar_url']}&s=75",
+ name=user["login"],
+ profile_url=user["html_url"],
+ ))
+
+ return build_table(cells) if cells else ""
- return f"""
-
-
-
-"""
except Exception as e:
- print(f"Błąd API: {e}")
+ print(f"GitHub Fetch Error: {e}")
return ""
-def update_file(file_path, html_content):
- if not os.path.exists(file_path):
- print(f"❌ Plik {file_path} nie istnieje!")
+
+def get_discord_users(user_ids):
+ cells = []
+ for uid in user_ids:
+ try:
+ response = requests.get(
+ f"https://pfpfinder.com/api/discord/user/{uid}", timeout=10
+ )
+ if response.status_code != 200:
+ print(f"Discord API: Status {response.status_code} for {uid}")
+ continue
+
+ data = response.json()
+ global_name = data.get("global_name")
+ username = data.get("username")
+ if global_name:
+ name = global_name
+ else:
+ print(f"Warning: {uid} has no global_name, falling back to username '{username}' (can be used for invites)")
+ name = username or f"User {uid}"
+
+ source_url = (data.get("avatar") or "").replace(".gif", ".png")
+ if not source_url:
+ default_index = (int(uid) >> 22) % 6
+ source_url = f"https://cdn.discordapp.com/embed/avatars/{default_index}.png"
+
+ uid_hash = hashlib.sha1(uid.encode()).hexdigest()[:12]
+ filename = f"discord_{uid_hash}.png"
+ avatar_url = save_avatar(source_url, filename)
+ if not avatar_url:
+ continue
+
+ cells.append(make_cell(avatar_url=avatar_url, name=name))
+
+ except Exception as e:
+ print(f"Discord API Error for {uid}: {e}")
+
+ return build_table(cells) if cells else ""
+
+
+def process_file(filename, github_elements, discord_elements, is_pl):
+ input_path = f"./{filename}"
+ output_path = f"../{filename}"
+
+ if not os.path.exists(input_path):
+ print(f"Error: File {input_path} does not exist")
return
- with open(file_path, "r", encoding="utf-8") as f:
+ with open(input_path, "r", encoding="utf-8") as f:
content = f.read()
- if MARKER not in content:
- print(f"⚠️ Marker {MARKER} nie został znaleziony w {file_path}")
- return
+ if is_pl:
+ info_github = (
+ f'Jeśli jesteś współtwórcą i chcesz, '
+ f'aby Twój profil został usunięty z tej listy, skontaktuj się ze mną.'
+ )
+ info_discord = (
+ "Jeśli jesteś na tej liście i chcesz usunąć swój profil, skontaktuj się ze mną."
+ )
+ else:
+ info_github = (
+ f'If you are a contributor and want your profile '
+ f'removed from this list, please contact me.'
+ )
+ info_discord = (
+ "If you are on this list and want your profile removed, please contact me."
+ )
- # Zamiana markera na HTML
- new_content = content.replace(MARKER, html_content)
+ if MARKER_GITHUB in content and github_elements:
+ content = content.replace(MARKER_GITHUB, (
+ f'\n\n'
+ f'{github_elements}\n\n'
+ f'{info_github}\n\n'
+ f'
'
+ ))
+ elif MARKER_GITHUB in content:
+ print(f"Warning: No GitHub data to replace marker in {input_path}")
- with open(file_path, "w", encoding="utf-8") as f:
- f.write(new_content)
+ if MARKER_DISCORD in content and discord_elements:
+ content = content.replace(MARKER_DISCORD, (
+ f'\n\n'
+ f'{discord_elements}\n\n'
+ f'{info_discord}\n\n'
+ f'
'
+ ))
+ elif MARKER_DISCORD in content:
+ print(f"Warning: No Discord data to replace marker in {input_path}")
+
+ with open(output_path, "w", encoding="utf-8") as f:
+ f.write(content)
+
+ print(f"Success: Created {output_path}")
- print(f"✅ Zaktualizowano: {file_path}")
def main():
- elements = "".join([get_html_for_user(uid) for uid in USER_IDS])
- full_html = f'\n{elements}\n
'
+ print("Fetching GitHub contributors...")
+ github_elements = get_github_contributors(REPOSITORY, EXTRA_USERS_GITHUB)
- files = ["../README.md", "../README-PL.md"]
+ print("Fetching Discord users...")
+ discord_elements = get_discord_users(DISCORD_USER_IDS)
+
+ files = [("README.md", False), ("README-PL.md", True)]
+
+ for filename, is_pl in files:
+ process_file(filename, github_elements, discord_elements, is_pl)
- for file in files:
- update_file(file, full_html)
if __name__ == "__main__":
main()
\ No newline at end of file
diff --git a/jRandomSkills - SRC Files/jRandomSkills.csproj b/jRandomSkills - SRC Files/jRandomSkills.csproj
index 818771c..ad9f274 100644
--- a/jRandomSkills - SRC Files/jRandomSkills.csproj
+++ b/jRandomSkills - SRC Files/jRandomSkills.csproj
@@ -1,7 +1,7 @@
- net8.0
+ net10.0
enable
enable
true
@@ -18,7 +18,7 @@
-
+
@@ -53,7 +53,7 @@
$(MSBuildProjectDirectory)\src\lang
$(MSBuildProjectDirectory)\..\jRandomSkills - Server Files\plugins\jRandomSkills\languages
- $(MSBuildProjectDirectory)\bin\Debug\net8.0
+ $(MSBuildProjectDirectory)\bin\Debug\net10.0
$(MSBuildProjectDirectory)\..\jRandomSkills - Server Files\plugins\jRandomSkills
$(MSBuildProjectDirectory)\src\gamedata
$(MSBuildProjectDirectory)\..\jRandomSkills - Server Files\gamedata
diff --git a/jRandomSkills - SRC Files/src/command/Command.cs b/jRandomSkills - SRC Files/src/command/Command.cs
index 623fe45..e5f5051 100644
--- a/jRandomSkills - SRC Files/src/command/Command.cs
+++ b/jRandomSkills - SRC Files/src/command/Command.cs
@@ -158,7 +158,7 @@ namespace src.command
return;
}
- SkillUtils.PrintToChat(player, $"{player.GetTranslation("done_setskill")}: {ChatColors.LightRed}{player.GetSkillName(skill.Skill)} {ChatColors.Lime}{player.GetTranslation("for_setskill")} {ChatColors.LightRed}{targetPlayer.PlayerName}");
+ SkillUtils.PrintToChat(player, $"{player.GetTranslation("done_setskill")}: {ChatColors.LightRed}{player.GetSkillName(skill.Skill)} {ChatColors.Lime}{player.GetTranslation("for_setskill")} {ChatColors.LightRed}\u202A{targetPlayer.PlayerName}\u202C");
if (skill.Display)
SkillUtils.PrintToChat(player, $"{ChatColors.DarkRed}{player.GetSkillName(skill.Skill)}{ChatColors.Lime}: {player.GetSkillDescription(skill.Skill)}", border: "b");
@@ -518,7 +518,7 @@ namespace src.command
return;
}
- SkillUtils.PrintToChat(player, $"{player.GetTranslation("done_setskill")}: {ChatColors.LightRed}{player.GetSkillName(skill.Skill)} {ChatColors.Lime}{player.GetTranslation("for_setskill")} {ChatColors.LightRed}{targetPlayer.PlayerName}");
+ SkillUtils.PrintToChat(player, $"{player.GetTranslation("done_setskill")}: {ChatColors.LightRed}{player.GetSkillName(skill.Skill)} {ChatColors.Lime}{player.GetTranslation("for_setskill")} {ChatColors.LightRed}\u202A{targetPlayer.PlayerName}\u202C");
if (skill.Display)
SkillUtils.PrintToChat(player, $"{ChatColors.DarkRed}{player.GetSkillName(skill.Skill)}{ChatColors.Lime}: {player.GetSkillDescription(skill.Skill)}", border: "b");
diff --git a/jRandomSkills - SRC Files/src/gamedata/jRandomSkills.gamedata.json b/jRandomSkills - SRC Files/src/gamedata/jRandomSkills.gamedata.json
index 7c8be60..2f7bc51 100644
--- a/jRandomSkills - SRC Files/src/gamedata/jRandomSkills.gamedata.json
+++ b/jRandomSkills - SRC Files/src/gamedata/jRandomSkills.gamedata.json
@@ -27,11 +27,22 @@
"linux": "55 48 89 E5 41 57 49 89 FF 48 89 F7 41 56 41 55 41 54 53 48 81 EC"
}
},
- "CCSPlayerController_HandleCommandDrop": {
- "signatures": {
- "library": "server",
- "windows": "48 89 5C 24 ? 57 48 83 EC ? 48 8B FA E8 ? ? ? ? 48 8B D8",
- "linux": "55 48 89 E5 41 54 49 89 F4 53 E8 ? ? ? ? 48 85 C0 74 ? 48 89 C3"
+ "CServerSideClient_m_nDeltaTick": {
+ "offsets": {
+ "windows": 348,
+ "linux": 348
+ }
+ },
+ "INetworkGameServer_Slots": {
+ "offsets": {
+ "windows": 592,
+ "linux": 592
+ }
+ },
+ "INetworkServerService_GetIGameServer": {
+ "offsets": {
+ "windows": 23,
+ "linux": 24
}
}
}
\ No newline at end of file
diff --git a/jRandomSkills - SRC Files/src/jRandomSkills.cs b/jRandomSkills - SRC Files/src/jRandomSkills.cs
index 7db762b..160b1c6 100644
--- a/jRandomSkills - SRC Files/src/jRandomSkills.cs
+++ b/jRandomSkills - SRC Files/src/jRandomSkills.cs
@@ -28,7 +28,7 @@ namespace src
public override string ModuleName => "[CS2] [ jRandomSkills ]";
public override string ModuleAuthor => "D3X, Juzlus";
public override string ModuleDescription => "Plugin adds random skills every round for CS2 by D3X. Modified by Juzlus.";
- public override string ModuleVersion => "1.2.2.b1";
+ public override string ModuleVersion => "1.2.2.b2";
public override void Load(bool hotReload)
{
diff --git a/jRandomSkills - SRC Files/src/lang/de.json b/jRandomSkills - SRC Files/src/lang/de.json
index f06a831..d0adf2d 100644
--- a/jRandomSkills - SRC Files/src/lang/de.json
+++ b/jRandomSkills - SRC Files/src/lang/de.json
@@ -1,519 +1,519 @@
{
- "none": "Keine",
- "none_desc": "Du hast keine Fertigkeit",
+ "none": "Keine",
+ "none_desc": "Du hast keine Fertigkeit",
- "aimbot": "Aimbot",
- "aimbot_desc": "Jede Kugel, die du triffst, zählt als Kopfschuss",
+ "aimbot": "Aimbot",
+ "aimbot_desc": "Jede Kugel, die du triffst, zählt als Kopfschuss",
- "aimlock": "Aim-Lock",
- "aimlock_desc": "Klicke [css_useSkill], um dein Visier auf den nächsten Gegner zu fixieren",
+ "aimlock": "Aim-Lock",
+ "aimlock_desc": "Klicke [css_useSkill], um dein Visier auf den nächsten Gegner zu fixieren",
- "anomaly": "Anomalie",
- "anomaly_desc": "Du spulst die Zeit um einige Sekunden zurück",
+ "anomaly": "Anomalie",
+ "anomaly_desc": "Du spulst die Zeit um einige Sekunden zurück",
- "antyflash": "Anti-Flash",
- "antyflash_desc": "Du bist immun gegen Blendgranaten und deine Blendgranaten halten 7 Sekunden lang",
+ "antyflash": "Anti-Flash",
+ "antyflash_desc": "Du bist immun gegen Blendgranaten und deine Blendgranaten halten 7 Sekunden lang",
- "antyhead": "Eiserner Kopf",
- "antyhead_desc": "Du erleidest keinen Schaden durch Kopfschüsse",
+ "antyhead": "Eiserner Kopf",
+ "antyhead_desc": "Du erleidest keinen Schaden durch Kopfschüsse",
- "areareaper": "Zone Reaper",
- "areareaper_desc": "Du kannst einen Bombenort auswählen, den du deaktivieren möchtest",
- "areareaper_incorrect_site": "Kein solcher Bombenort gefunden",
- "areareaper_no_site": "Keine Bombenstandorte gefunden.",
- "areareaper_select_info": "Standort zum Deaktivieren auswählen:",
- "areareaper_site_disabled": "Bombenstandort {0} wurde deaktiviert – dort können keine Bomben platziert werden!",
- "areareaper_used_info": "Deine Fähigkeit wurde bereits eingesetzt.",
- "areareaper_bombsite_disabled": "Dieser Bombenplatz wurde deaktiviert!",
+ "areareaper": "Zone Reaper",
+ "areareaper_desc": "Du kannst einen Bombenort auswählen, den du deaktivieren möchtest",
+ "areareaper_incorrect_site": "Kein solcher Bombenort gefunden",
+ "areareaper_no_site": "Keine Bombenstandorte gefunden.",
+ "areareaper_select_info": "Standort zum Deaktivieren auswählen:",
+ "areareaper_site_disabled": "Bombenstandort {0} wurde deaktiviert – dort können keine Bomben platziert werden!",
+ "areareaper_used_info": "Deine Fähigkeit wurde bereits eingesetzt.",
+ "areareaper_bombsite_disabled": "Dieser Bombenplatz wurde deaktiviert!",
- "armored": "Gepanzert",
- "armored_desc": "Du hast einen zufälligen Schadensmultiplikator",
- "armored_desc2": "Dein Schadensmultiplikator beträgt: {0}x",
+ "armored": "Gepanzert",
+ "armored_desc": "Du hast einen zufälligen Schadensmultiplikator",
+ "armored_desc2": "Dein Schadensmultiplikator beträgt: {0}x",
- "assassin": "Attentäter",
- "assassin_desc": "Du fügst Gegnern von hinten erhöhten Schaden zu",
+ "assassin": "Attentäter",
+ "assassin_desc": "Du fügst Gegnern von hinten erhöhten Schaden zu",
- "astronaut": "Astronaut",
- "astronaut_desc": "Du erhältst zu Beginn der Runde einen zufälligen Schwerkraftwert",
- "astronaut_desc2": "Deine zufällige Schwerkraft beträgt: {0}x",
+ "astronaut": "Astronaut",
+ "astronaut_desc": "Du erhältst zu Beginn der Runde einen zufälligen Schwerkraftwert",
+ "astronaut_desc2": "Deine zufällige Schwerkraft beträgt: {0}x",
- "moneyswap": "Steuerbeamter",
- "moneyswap_desc": "Wähle einen Spieler aus, mit dem du Geld tauschen möchtest",
- "moneyswap_enemy_info": "Das Finanzamt hat dich erwischt.",
- "moneyswap_player_info": "Du hast Geld mit dem Spieler \"{0}\" getauscht.",
- "moneyswap_select_info": "Geld mit Spieler tauschen:",
+ "moneyswap": "Steuerbeamter",
+ "moneyswap_desc": "Wähle einen Spieler aus, mit dem du Geld tauschen möchtest",
+ "moneyswap_enemy_info": "Das Finanzamt hat dich erwischt.",
+ "moneyswap_player_info": "Du hast Geld mit dem Spieler \"{0}\" getauscht.",
+ "moneyswap_select_info": "Geld mit Spieler tauschen:",
- "baseball": "Baseballspieler",
- "baseball_desc": "Deine Attrappe prallt von Wänden ab und tötet einen Gegner sofort beim Aufprall.",
+ "baseball": "Baseballspieler",
+ "baseball_desc": "Deine Attrappe prallt von Wänden ab und tötet einen Gegner sofort beim Aufprall.",
- "behind": "Feind drehen",
- "behind_desc": "Du hast eine zufällige Chance, einen Feind um 180 Grad zu drehen, wenn du ihn triffst",
- "behind_desc2": "Deine Chance, einen Feind bei einem Treffer zu drehen, beträgt: {0} %",
+ "behind": "Feind drehen",
+ "behind_desc": "Du hast eine zufällige Chance, einen Feind um 180 Grad zu drehen, wenn du ihn triffst",
+ "behind_desc2": "Deine Chance, einen Feind bei einem Treffer zu drehen, beträgt: {0} %",
- "blademaster": "Schwertmeister",
- "blademaster_desc": "Wenn du ein Messer hältst, hast du eine hohe Chance, einen Schuss abzuwehren",
+ "blademaster": "Schwertmeister",
+ "blademaster_desc": "Wenn du ein Messer hältst, hast du eine hohe Chance, einen Schuss abzuwehren",
- "bunnyhop": "Hase",
- "bunnyhop_desc": "Du erhältst automatisch bunnyhop",
+ "bunnyhop": "Hase",
+ "bunnyhop_desc": "Du erhältst automatisch bunnyhop",
- "c4camouflage": "C4-Tarnung",
- "c4camouflage_desc": "Du bist unsichtbar, während du die Bombe hältst",
+ "c4camouflage": "C4-Tarnung",
+ "c4camouflage_desc": "Du bist unsichtbar, während du die Bombe hältst",
- "carefulbullets": "Vorsichtige Kugeln",
- "carefulbullets_desc": "Wähle einen Spieler aus, der für jeden Fehlschuss Schaden nimmt",
- "carefulbullets_enemy_info": "Von nun an wird Ungenauigkeit buchstäblich wehtun.",
- "carefulbullets_player_info": "‚{0}‘ muss jetzt vorsichtiger sein.",
- "carefulbullets_select_info": "Fehler schaden dem Spieler:",
+ "carefulbullets": "Vorsichtige Kugeln",
+ "carefulbullets_desc": "Wähle einen Spieler aus, der für jeden Fehlschuss Schaden nimmt",
+ "carefulbullets_enemy_info": "Von nun an wird Ungenauigkeit buchstäblich wehtun.",
+ "carefulbullets_player_info": "‚{0}‘ muss jetzt vorsichtiger sein.",
+ "carefulbullets_select_info": "Fehler schaden dem Spieler:",
- "catapult": "Katapult",
- "catapult_desc": "Du hast eine zufällige Chance, einen Gegner nach oben zu schleudern",
- "catapult_desc2": "Deine Chance, einen Gegner bei einem Treffer zu schleudern, beträgt: {0} %",
+ "catapult": "Katapult",
+ "catapult_desc": "Du hast eine zufällige Chance, einen Gegner nach oben zu schleudern",
+ "catapult_desc2": "Deine Chance, einen Gegner bei einem Treffer zu schleudern, beträgt: {0} %",
- "chicken": "Huhn",
- "chicken_desc": "Du erhältst ein Huhn-Modell + 10 % schnellere Bewegung – 50 HP",
+ "chicken": "Huhn",
+ "chicken_desc": "Du erhältst ein Huhn-Modell + 10 % schnellere Bewegung – 50 HP",
- "chillout": "Chillout",
- "chillout_desc": "Das Platzieren der Bombe dauert deutlich länger",
+ "chillout": "Chillout",
+ "chillout_desc": "Das Platzieren der Bombe dauert deutlich länger",
- "cutter": "Cutter",
- "cutter_desc": "Sofortiger Tod mit einem Messer",
+ "cutter": "Cutter",
+ "cutter_desc": "Sofortiger Tod mit einem Messer",
- "cypher": "Kamera",
- "cypher_desc": "Klicken Sie auf [css_useSkill], um eine Kamera zu erstellen/zu wechseln",
- "cypher_nospace": "Die Kamera muss im rechten Winkel zur Wand positioniert werden",
+ "cypher": "Kamera",
+ "cypher_desc": "Klicken Sie auf [css_useSkill], um eine Kamera zu erstellen/zu wechseln",
+ "cypher_nospace": "Die Kamera muss im rechten Winkel zur Wand positioniert werden",
- "darkness": "Dunkelheit",
- "darkness_desc": "Wendet einen Dunkelheitseffekt auf einen ausgewählten Gegner an",
- "darkness_enemy_info": "Lass die Lichter ausgehen",
- "darkness_player_info": "Die Dunkelheit hat den Spieler \"{0}\" überwältigt.",
- "darkness_select_info": "Wähle einen Spieler für die Dunkelheit aus:",
+ "darkness": "Dunkelheit",
+ "darkness_desc": "Wendet einen Dunkelheitseffekt auf einen ausgewählten Gegner an",
+ "darkness_enemy_info": "Lass die Lichter ausgehen",
+ "darkness_player_info": "Die Dunkelheit hat den Spieler \"{0}\" überwältigt.",
+ "darkness_select_info": "Wähle einen Spieler für die Dunkelheit aus:",
- "deactivator": "Deaktivator",
- "deactivator_desc": "Wähle einen Spieler aus, dessen Fähigkeit du deaktivieren möchtest",
- "deactivator_enemy_info": "Deine Fähigkeit wurde deaktiviert",
- "deactivator_player_info": "Die Fähigkeit des Spielers ‚{0}‘ wurde deaktiviert",
- "deactivator_select_info": "Fähigkeit eines Spielers deaktivieren:",
+ "deactivator": "Deaktivator",
+ "deactivator_desc": "Wähle einen Spieler aus, dessen Fähigkeit du deaktivieren möchtest",
+ "deactivator_enemy_info": "Deine Fähigkeit wurde deaktiviert",
+ "deactivator_player_info": "Die Fähigkeit des Spielers ‚{0}‘ wurde deaktiviert",
+ "deactivator_select_info": "Fähigkeit eines Spielers deaktivieren:",
- "deaf": "Taub",
- "deaf_desc": "Wähle einen Spieler aus, für den alle Sounds stummgeschaltet werden sollen",
- "deaf_enemy_info": "Deine Kopfhörer haben das Spiel verlassen.",
- "deaf_player_info": "Der Ton für den Spieler ‚{0}‘ wurde deaktiviert.",
- "deaf_select_info": "Alle Töne für den Spieler stummschalten:",
+ "deaf": "Taub",
+ "deaf_desc": "Wähle einen Spieler aus, für den alle Sounds stummgeschaltet werden sollen",
+ "deaf_enemy_info": "Deine Kopfhörer haben das Spiel verlassen.",
+ "deaf_player_info": "Der Ton für den Spieler ‚{0}‘ wurde deaktiviert.",
+ "deaf_select_info": "Alle Töne für den Spieler stummschalten:",
- "disarmament": "Entwaffnung",
- "disarmament_desc": "Du hast eine zufällige Chance, einen Gegner bei einem Treffer seine Waffe fallen zu lassen.",
- "disarmament_desc2": "Ihre Chance, einen Gegner zu entwaffnen, beträgt: {0} %",
+ "disarmament": "Entwaffnung",
+ "disarmament_desc": "Du hast eine zufällige Chance, einen Gegner bei einem Treffer seine Waffe fallen zu lassen.",
+ "disarmament_desc2": "Ihre Chance, einen Gegner zu entwaffnen, beträgt: {0} %",
- "distancer": "Entfernungsmesser",
- "distancer_desc": "Sie können die Entfernung zum nächsten Gegner sehen",
+ "distancer": "Entfernungsmesser",
+ "distancer_desc": "Sie können die Entfernung zum nächsten Gegner sehen",
- "dash": "Sprinten",
- "dash_desc": "Führe einen zweiten Sprung aus, um zu sprinten",
+ "dash": "Sprinten",
+ "dash_desc": "Führe einen zweiten Sprung aus, um zu sprinten",
- "dracula": "Dracula",
- "dracula_desc": "Wenn du einen Gegner triffst, wird deine Gesundheit um einen Prozentsatz des verursachten Schadens wiederhergestellt",
+ "dracula": "Dracula",
+ "dracula_desc": "Wenn du einen Gegner triffst, wird deine Gesundheit um einen Prozentsatz des verursachten Schadens wiederhergestellt",
- "duplicator": "Duplikator",
- "duplicator_desc": "Wähle einen Spieler aus, dessen Fertigkeit du kopieren möchtest",
- "duplicator_player_info": "Die Fertigkeit des Spielers ‚{0}‘ wurde kopiert.",
- "duplicator_select_info": "Kopiere die Fertigkeit eines Spielers:",
+ "duplicator": "Duplikator",
+ "duplicator_desc": "Wähle einen Spieler aus, dessen Fertigkeit du kopieren möchtest",
+ "duplicator_player_info": "Die Fertigkeit des Spielers ‚{0}‘ wurde kopiert.",
+ "duplicator_select_info": "Kopiere die Fertigkeit eines Spielers:",
- "dwarf": "Zwerg",
- "dwarf_desc": "Zufällige Charaktergröße zu Beginn der Runde",
- "dwarf_desc2": "Dein Größenmultiplikator beträgt: {0}x",
+ "dwarf": "Zwerg",
+ "dwarf_desc": "Zufällige Charaktergröße zu Beginn der Runde",
+ "dwarf_desc2": "Dein Größenmultiplikator beträgt: {0}x",
- "enemyspawn": "Feindes-Spawn",
- "enemyspawn_desc": "Klicke auf [css_useSkill], um zum Feindes-Spawn zu teleportieren",
+ "enemyspawn": "Feindes-Spawn",
+ "enemyspawn_desc": "Klicke auf [css_useSkill], um zum Feindes-Spawn zu teleportieren",
- "explosiveshot": "Explosiver Schuss",
- "explosiveshot_desc": "Zufällige Chance, beim Schießen eine explosive Kugel abzufeuern",
- "explosiveshot_desc2": "Deine Chance, eine explosive Kugel abzufeuern: {0} %",
+ "explosiveshot": "Explosiver Schuss",
+ "explosiveshot_desc": "Zufällige Chance, beim Schießen eine explosive Kugel abzufeuern",
+ "explosiveshot_desc2": "Deine Chance, eine explosive Kugel abzufeuern: {0} %",
- "falconeye": "Falkenauge",
- "falconeye_desc": "Klicke auf [css_useSkill], um eine Vogelperspektive zu aktivieren",
+ "falconeye": "Falkenauge",
+ "falconeye_desc": "Klicke auf [css_useSkill], um eine Vogelperspektive zu aktivieren",
- "fastreload": "Schnellnachladen",
- "fastreload_desc": "Klicke auf [css_useSkill], um die Waffe, die du gerade hältst, nachzuladen",
+ "fastreload": "Schnellnachladen",
+ "fastreload_desc": "Klicke auf [css_useSkill], um die Waffe, die du gerade hältst, nachzuladen",
- "flash": "Blitz",
- "flash_desc": "Zufällige Spielergeschwindigkeit zu Beginn der Runde",
- "flash_desc2": "Dein Geschwindigkeitsmultiplikator beträgt: {0}x",
+ "flash": "Blitz",
+ "flash_desc": "Zufällige Spielergeschwindigkeit zu Beginn der Runde",
+ "flash_desc2": "Dein Geschwindigkeitsmultiplikator beträgt: {0}x",
- "fortnite": "Fortnite",
- "fortnite_desc": "Klicke auf [css_useSkill], um eine zerstörbare Barrikade zu erstellen",
+ "fortnite": "Fortnite",
+ "fortnite_desc": "Klicke auf [css_useSkill], um eine zerstörbare Barrikade zu erstellen",
- "fragilebomb": "Fragile Bombe",
- "fragilebomb_desc": "Das Schießen auf die Bombe beschädigt sie",
- "fragilebomb_bomb_health": "Bombengesundheit",
+ "fragilebomb": "Fragile Bombe",
+ "fragilebomb_desc": "Das Schießen auf die Bombe beschädigt sie",
+ "fragilebomb_bomb_health": "Bombengesundheit",
- "friendlyfire": "Friendly Fire",
- "friendlyfire_desc": "Das Schießen auf Teamkameraden heilt sie",
+ "friendlyfire": "Friendly Fire",
+ "friendlyfire_desc": "Das Schießen auf Teamkameraden heilt sie",
- "frozendecoy": "Eisige Attrappe",
- "frozendecoy_desc": "Deine Attrappe friert alle Spieler in der Nähe ein",
+ "frozendecoy": "Eisige Attrappe",
+ "frozendecoy_desc": "Deine Attrappe friert alle Spieler in der Nähe ein",
- "gambler": "Zocker",
- "gambler_desc": "Wähle eine Fertigkeit aus der Liste aus.",
- "gambler_select_info": "Wähle deine Fähigkeit aus:",
- "gambler_more": "#00FF00|Aktualisieren für ${0}",
- "gambler_no_money": "Nicht genug Geld.",
+ "gambler": "Zocker",
+ "gambler_desc": "Wähle eine Fertigkeit aus der Liste aus.",
+ "gambler_select_info": "Wähle deine Fähigkeit aus:",
+ "gambler_more": "#00FF00|Aktualisieren für ${0}",
+ "gambler_no_money": "Nicht genug Geld.",
- "ghost": "Geist",
- "ghost_desc": "Du bist vollständig unsichtbar",
+ "ghost": "Geist",
+ "ghost_desc": "Du bist vollständig unsichtbar",
- "glaz": "Glaz",
- "glaz_desc": "Du kannst durch Rauchgranaten hindurchsehen",
+ "glaz": "Glaz",
+ "glaz_desc": "Du kannst durch Rauchgranaten hindurchsehen",
- "glitch": "Glitch",
- "glitch_desc": "Deaktiviert das Radar für einen ausgewählten Gegner",
- "glitch_enemy_info": "Dein Radar wurde deaktiviert",
- "glitch_player_info": "Das Radar des Spielers ‚{0}‘ wurde deaktiviert.",
- "glitch_select_info": "Radar des Spielers ausschalten:",
+ "glitch": "Glitch",
+ "glitch_desc": "Deaktiviert das Radar für einen ausgewählten Gegner",
+ "glitch_enemy_info": "Dein Radar wurde deaktiviert",
+ "glitch_player_info": "Das Radar des Spielers ‚{0}‘ wurde deaktiviert.",
+ "glitch_select_info": "Radar des Spielers ausschalten:",
- "glue": "Glue",
- "glue_desc": "Deine Granaten haften an Wänden",
+ "glue": "Glue",
+ "glue_desc": "Deine Granaten haften an Wänden",
- "godmode": "Gott-Modus",
- "godmode_desc": "Klicke auf [css_useSkill], um für kurze Zeit unsterblich zu werden",
- "godmode_off": "Unsterblichkeit deaktiviert",
- "godmode_on": "Unsterblichkeit aktiviert",
+ "godmode": "Gott-Modus",
+ "godmode_desc": "Klicke auf [css_useSkill], um für kurze Zeit unsterblich zu werden",
+ "godmode_off": "Unsterblichkeit deaktiviert",
+ "godmode_on": "Unsterblichkeit aktiviert",
- "grenadier": "Grenadier",
- "grenadier_desc": "Du hast unendlich viele Granaten",
+ "grenadier": "Grenadier",
+ "grenadier_desc": "Du hast unendlich viele Granaten",
- "healingsmoke": "Heilender Rauch",
- "healingsmoke_desc": "Deine Rauchgranaten heilen",
+ "healingsmoke": "Heilender Rauch",
+ "healingsmoke_desc": "Deine Rauchgranaten heilen",
- "hermit": "Einsiedler",
- "hermit_desc": "Durch das Töten von Gegnern werden Munition und ein Teil der Gesundheit wiederhergestellt",
+ "hermit": "Einsiedler",
+ "hermit_desc": "Durch das Töten von Gegnern werden Munition und ein Teil der Gesundheit wiederhergestellt",
- "holyhandgrenade": "Heilige Handgranate",
- "holyhandgrenade_desc": "Deine HE-Granaten verursachen doppelten Schaden und haben doppelte Reichweite",
+ "holyhandgrenade": "Heilige Handgranate",
+ "holyhandgrenade_desc": "Deine HE-Granaten verursachen doppelten Schaden und haben doppelte Reichweite",
- "homingnades": "Zielsuchende Granaten",
- "homingnades_desc": "Deine Granaten (außer Smokes) werden von Gegnern angezogen",
+ "homingnades": "Zielsuchende Granaten",
+ "homingnades_desc": "Deine Granaten (außer Smokes) werden von Gegnern angezogen",
- "hotbomb": "Heiße Bombe",
- "hotbomb_desc": "Solange du am Leben bist, fügt die Bombe ihrem Träger Schaden zu",
- "hotbomb_hint": "Vorsicht, die Bombe ist heiß!",
+ "hotbomb": "Heiße Bombe",
+ "hotbomb_desc": "Solange du am Leben bist, fügt die Bombe ihrem Träger Schaden zu",
+ "hotbomb_hint": "Vorsicht, die Bombe ist heiß!",
- "iana": "Hologramm",
- "iana_desc": "Klicken Sie auf [css_useSkill], um Ihr Hologramm für einige Sekunden zu steuern",
+ "iana": "Hologramm",
+ "iana_desc": "Klicken Sie auf [css_useSkill], um Ihr Hologramm für einige Sekunden zu steuern",
- "illiterate": "Analphabet",
- "illiterate_desc": "Solange du am Leben bist, können deine Feinde nichts lesen",
+ "illiterate": "Analphabet",
+ "illiterate_desc": "Solange du am Leben bist, können deine Feinde nichts lesen",
- "illusionist": "Illusionist",
- "illusionist_desc": "Klicke [css_useSkill], um ein Abbild zu schicken, das geradeaus läuft",
+ "illusionist": "Illusionist",
+ "illusionist_desc": "Klicke [css_useSkill], um ein Abbild zu schicken, das geradeaus läuft",
- "impostor": "Betrüger",
- "impostor_desc": "Du beginnst die Runde mit einem feindlichen Spielermodell",
+ "impostor": "Betrüger",
+ "impostor_desc": "Du beginnst die Runde mit einem feindlichen Spielermodell",
- "infiniteammo": "Unendliche Munition",
- "infiniteammo_desc": "Du erhältst unendliche Munition für alle deine Waffen",
+ "infiniteammo": "Unendliche Munition",
+ "infiniteammo_desc": "Du erhältst unendliche Munition für alle deine Waffen",
- "jackal": "Spürhund",
- "jackal_desc": "Jeder Gegner hinterlässt eine Spur",
+ "jackal": "Spürhund",
+ "jackal_desc": "Jeder Gegner hinterlässt eine Spur",
- "jammer": "Störsender",
- "jammer_desc": "Wähle einen Spieler aus, um dessen Fadenkreuz zu deaktivieren",
- "jammer_enemy_info": "Dein Fadenkreuz wurde deaktiviert.",
- "jammer_player_info": "Das Fadenkreuz von Spieler ‚{0}‘ wurde deaktiviert.",
- "jammer_select_info": "Fadenkreuz des Spielers deaktivieren:",
+ "jammer": "Störsender",
+ "jammer_desc": "Wähle einen Spieler aus, um dessen Fadenkreuz zu deaktivieren",
+ "jammer_enemy_info": "Dein Fadenkreuz wurde deaktiviert.",
+ "jammer_player_info": "Das Fadenkreuz von Spieler ‚{0}‘ wurde deaktiviert.",
+ "jammer_select_info": "Fadenkreuz des Spielers deaktivieren:",
- "jester": "Narr",
- "jester_desc": "Im Narrenmodus kannst du keinen Schaden erleiden oder verursachen. Dieser Modus ändert sich alle paar Sekunden.",
- "jester_mode": "Jester-Modus",
- "jester_on": "EIN",
- "jester_off": "AUS",
+ "jester": "Narr",
+ "jester_desc": "Im Narrenmodus kannst du keinen Schaden erleiden oder verursachen. Dieser Modus ändert sich alle paar Sekunden.",
+ "jester_mode": "Jester-Modus",
+ "jester_on": "EIN",
+ "jester_off": "AUS",
- "jumpban": "Beinlos",
- "jumpban_desc": "Wähle einen Spieler, der nicht springen kann",
- "jumpban_enemy_info": "Jemand hat dir die Beine abgeschnitten.",
- "jumpban_player_info": "Der Spieler ‚{0}‘ kann nicht mehr springen.",
- "jumpban_select_info": "Spieler vom Springen ausschließen:",
+ "jumpban": "Beinlos",
+ "jumpban_desc": "Wähle einen Spieler, der nicht springen kann",
+ "jumpban_enemy_info": "Jemand hat dir die Beine abgeschnitten.",
+ "jumpban_player_info": "Der Spieler ‚{0}‘ kann nicht mehr springen.",
+ "jumpban_select_info": "Spieler vom Springen ausschließen:",
- "jumpingjack": "Jumping Jack",
- "jumpingjack_desc": "Durch Springen wird die Gesundheit wiederhergestellt",
+ "jumpingjack": "Jumping Jack",
+ "jumpingjack_desc": "Durch Springen wird die Gesundheit wiederhergestellt",
- "killerflash": "Killer Flash",
- "killerflash_desc": "Jeder, der durch deine Blendgranate vollständig geblendet wird, stirbt (einschließlich dir selbst)",
+ "killerflash": "Killer Flash",
+ "killerflash_desc": "Jeder, der durch deine Blendgranate vollständig geblendet wird, stirbt (einschließlich dir selbst)",
- "lifeswap": "Lebensaustausch",
- "lifeswap_desc": "Wähle einen Spieler aus, mit dem du deine Gesundheit austauschen möchtest",
- "lifeswap_enemy_info": "Jemand hat sich deine Gesundheit ausgeliehen",
- "lifeswap_player_info": "Du hast deine Gesundheit mit dem Spieler \"{0}\" ausgetauscht",
- "lifeswap_select_info": "Tausche Gesundheit mit Spieler:",
+ "lifeswap": "Lebensaustausch",
+ "lifeswap_desc": "Wähle einen Spieler aus, mit dem du deine Gesundheit austauschen möchtest",
+ "lifeswap_enemy_info": "Jemand hat sich deine Gesundheit ausgeliehen",
+ "lifeswap_player_info": "Du hast deine Gesundheit mit dem Spieler \"{0}\" ausgetauscht",
+ "lifeswap_select_info": "Tausche Gesundheit mit Spieler:",
- "longknife": "Langes Messer",
- "longknife_desc": "Ein Messerangriff verursacht unabhängig von der Entfernung Schaden",
+ "longknife": "Langes Messer",
+ "longknife_desc": "Ein Messerangriff verursacht unabhängig von der Entfernung Schaden",
- "longzeus": "Langer Zeus",
- "longzeus_desc": "Zeus verursacht unabhängig von der Entfernung Schaden",
+ "longzeus": "Langer Zeus",
+ "longzeus_desc": "Zeus verursacht unabhängig von der Entfernung Schaden",
- "magneticdecoy": "Magnetischer Köder",
- "magneticdecoy_desc": "Dein Köder zieht Spieler in der Nähe zu sich heran",
+ "magneticdecoy": "Magnetischer Köder",
+ "magneticdecoy_desc": "Dein Köder zieht Spieler in der Nähe zu sich heran",
- "magneto": "Magneto",
- "magneto_desc": "Alle feindlichen Granaten werden von dir weggestoßen",
+ "magneto": "Magneto",
+ "magneto_desc": "Alle feindlichen Granaten werden von dir weggestoßen",
- "magnifier": "Lupe",
- "magnifier_desc": "Vergrößert den Bildschirm des Gegners und verringert dessen Sichtfeld",
- "magnifier_enemy_info": "Dein Sichtfeld wurde verzerrt!",
- "magnifier_player_info": "Der Spieler ‚{0}‘ wurde in den Zoom-Modus versetzt.",
- "magnifier_select_info": "Bildschirm des Spielers vergrößern:",
+ "magnifier": "Lupe",
+ "magnifier_desc": "Vergrößert den Bildschirm des Gegners und verringert dessen Sichtfeld",
+ "magnifier_enemy_info": "Dein Sichtfeld wurde verzerrt!",
+ "magnifier_player_info": "Der Spieler ‚{0}‘ wurde in den Zoom-Modus versetzt.",
+ "magnifier_select_info": "Bildschirm des Spielers vergrößern:",
- "medic": "Sanitäter",
- "medic_desc": "Klicke auf [css_useSkill], um eine Heilungsladung zu verwenden, die 50 Gesundheitspunkte wiederherstellt",
+ "medic": "Sanitäter",
+ "medic_desc": "Klicke auf [css_useSkill], um eine Heilungsladung zu verwenden, die 50 Gesundheitspunkte wiederherstellt",
- "miner": "Bomben-Miner",
- "miner_desc": "Deine HE-Granate explodiert nur, wenn ein Gegner in der Nähe ist",
+ "miner": "Bomben-Miner",
+ "miner_desc": "Deine HE-Granate explodiert nur, wenn ein Gegner in der Nähe ist",
- "bankrupt": "Bankrott",
- "bankrupt_desc": "Wähle den Spieler aus, der sein gesamtes Geld verlieren wird",
- "bankrupt_enemy_info": "Du bist bankrott.",
- "bankrupt_player_info": "Der Spieler ‚{0}‘ ist bankrott.",
- "bankrupt_select_info": "Wähle einen Spieler aus, der bankrott gehen soll:",
+ "bankrupt": "Bankrott",
+ "bankrupt_desc": "Wähle den Spieler aus, der sein gesamtes Geld verlieren wird",
+ "bankrupt_enemy_info": "Du bist bankrott.",
+ "bankrupt_player_info": "Der Spieler ‚{0}‘ ist bankrott.",
+ "bankrupt_select_info": "Wähle einen Spieler aus, der bankrott gehen soll:",
- "muhammed": "Muhammed",
- "muhammed_desc": "Du explodierst beim Tod und tötest Spieler in deiner Nähe",
- "muhammed_explosion": "ALLAHU AKBAR!!!",
+ "deathbomb": "Todesbombe",
+ "deathbomb_desc": "Du explodierst beim Tod und tötest Spieler in deiner Nähe",
+ "deathbomb_explosion": "Kaboom!",
- "ninja": "Ninja",
- "ninja_desc": "Wenn du stillstehst, erhöht sich deine Unsichtbarkeit um 33 %, wenn du dich duckst um 33 % und wenn du ein Messer hältst um 33 %",
+ "ninja": "Ninja",
+ "ninja_desc": "Wenn du stillstehst, erhöht sich deine Unsichtbarkeit um 33 %, wenn du dich duckst um 33 % und wenn du ein Messer hältst um 33 %",
- "nonades": "No-Nades",
- "nonades_desc": "Granaten fügen dir keinen Schaden zu",
-
- "norecoil": "Fokus",
- "norecoil_desc": "Kein Rückstoß beim Schießen",
+ "nonades": "No-Nades",
+ "nonades_desc": "Granaten fügen dir keinen Schaden zu",
- "noclip": "NoClip",
- "noclip_desc": "Klicke auf [css_useSkill], um NoClip für kurze Zeit zu aktivieren",
+ "norecoil": "Fokus",
+ "norecoil_desc": "Kein Rückstoß beim Schießen",
- "oneshot": "One-Shot",
- "oneshot_desc": "Ein Treffer tötet einen Gegner sofort",
+ "noclip": "NoClip",
+ "noclip_desc": "Klicke auf [css_useSkill], um NoClip für kurze Zeit zu aktivieren",
- "onlyhead": "Nur Kopf",
- "onlyhead_desc": "Du erleidest nur Schaden am Kopf",
+ "oneshot": "One-Shot",
+ "oneshot_desc": "Ein Treffer tötet einen Gegner sofort",
- "paweljumper": "Pawel Jumper",
- "paweljumper_desc": "Du erhältst eine zufällige Anzahl zusätzlicher Sprünge",
- "paweljumper_desc2": "Du erhältst {0} zusätzliche Sprünge",
+ "onlyhead": "Nur Kopf",
+ "onlyhead_desc": "Du erleidest nur Schaden am Kopf",
- "phoenix": "Phönix",
- "phoenix_desc": "Du hast eine zufällige Chance, nach dem Tod wieder zu erscheinen",
- "phoenix_desc2": "Deine Chance, nach dem Tod wieder zu erscheinen: {0} %",
- "phoenix_respawn": "Du bist dank der Kraft von CHATCOLORS.REDPhoenix aus der Asche auferstanden",
+ "paweljumper": "Pawel Jumper",
+ "paweljumper_desc": "Du erhältst eine zufällige Anzahl zusätzlicher Sprünge",
+ "paweljumper_desc2": "Du erhältst {0} zusätzliche Sprünge",
- "psychicdefusing": "Psychic Defusing",
- "psychicdefusing_desc": "Wenn du dich in der Nähe der Bombe befindest, beginnst du, sie zu entschärfen",
- "psychicdefusing_hud_info": "{0} Sekunden verbleibend bis zur Entschärfung",
+ "phoenix": "Phönix",
+ "phoenix_desc": "Du hast eine zufällige Chance, nach dem Tod wieder zu erscheinen",
+ "phoenix_desc2": "Deine Chance, nach dem Tod wieder zu erscheinen: {0} %",
+ "phoenix_respawn": "Du bist dank der Kraft von CHATCOLORS.REDPhoenix aus der Asche auferstanden",
- "pilot": "Pilot",
- "pilot_desc": "Fliege für begrenzte Zeit. Doppelklick auf Sprung zum Fliegen",
- "pilot_hud_info": "Treibstoff",
+ "psychicdefusing": "Psychic Defusing",
+ "psychicdefusing_desc": "Wenn du dich in der Nähe der Bombe befindest, beginnst du, sie zu entschärfen",
+ "psychicdefusing_hud_info": "{0} Sekunden verbleibend bis zur Entschärfung",
- "planter": "Freier Planter",
- "planter_desc": "Du kannst die Bombe überall platzieren, die Detonationszeit beträgt 60 Sekunden.",
- "planter_planting": "Bombe wird gelegt ({0})...",
+ "pilot": "Pilot",
+ "pilot_desc": "Fliege für begrenzte Zeit. Doppelklick auf Sprung zum Fliegen",
+ "pilot_hud_info": "Treibstoff",
- "poison": "Gift",
- "poison_desc": "Wähle einen Spieler aus, der alle paar Sekunden Schaden nimmt",
- "poison_enemy_info": "Du wurdest vergiftet",
- "poison_player_info": "Der Spieler ‚{0}‘ wurde vergiftet",
- "poison_select_info": "Einen Spieler vergiften:",
+ "planter": "Freier Planter",
+ "planter_desc": "Du kannst die Bombe überall platzieren, die Detonationszeit beträgt 60 Sekunden.",
+ "planter_planting": "Bombe wird gelegt ({0})...",
- "primaryban": "Keine Gewehre",
- "primaryban_desc": "Wähle einen Spieler aus, der keine Gewehre verwenden kann",
- "primaryban_enemy_info": "Du kannst keine Gewehre mehr verwenden.",
- "primaryban_player_info": "Der Spieler ‚{0}‘ kann keine Gewehre mehr verwenden.",
- "primaryban_select_info": "Gewehre für Spieler verbieten:",
+ "poison": "Gift",
+ "poison_desc": "Wähle einen Spieler aus, der alle paar Sekunden Schaden nimmt",
+ "poison_enemy_info": "Du wurdest vergiftet",
+ "poison_player_info": "Der Spieler ‚{0}‘ wurde vergiftet",
+ "poison_select_info": "Einen Spieler vergiften:",
- "prosthesis": "Prothese",
- "prosthesis_desc": "Arme und Beine sind kugelsicher",
+ "primaryban": "Keine Gewehre",
+ "primaryban_desc": "Wähle einen Spieler aus, der keine Gewehre verwenden kann",
+ "primaryban_enemy_info": "Du kannst keine Gewehre mehr verwenden.",
+ "primaryban_player_info": "Der Spieler ‚{0}‘ kann keine Gewehre mehr verwenden.",
+ "primaryban_select_info": "Gewehre für Spieler verbieten:",
- "push": "Pusher",
- "push_desc": "Du hast eine zufällige Chance, einen Gegner zurückzustoßen, wenn du ihn triffst",
- "push_desc2": "Deine Chancen, den Gegner zurückzustoßen, betragen: {0} %",
+ "prosthesis": "Prothese",
+ "prosthesis_desc": "Arme und Beine sind kugelsicher",
- "pyro": "Pyro",
- "pyro_desc": "Molotow-Cocktail stellt Gesundheit wieder her",
+ "push": "Pusher",
+ "push_desc": "Du hast eine zufällige Chance, einen Gegner zurückzustoßen, wenn du ihn triffst",
+ "push_desc2": "Deine Chancen, den Gegner zurückzustoßen, betragen: {0} %",
- "quickshot": "Schnellfeuer",
- "quickshot_desc": "Alle Kugeln werden sehr schnell abgefeuert",
+ "pyro": "Pyro",
+ "pyro_desc": "Molotow-Cocktail stellt Gesundheit wieder her",
- "radarhack": "Radar-Hack",
- "radarhack_desc": "Gegner sind auf dem Radar sichtbar",
+ "quickshot": "Schnellfeuer",
+ "quickshot_desc": "Alle Kugeln werden sehr schnell abgefeuert",
- "rambo": "Rambo",
- "rambo_desc": "Du erhältst zu Beginn der Runde eine zufällige Menge an Gesundheit",
+ "radarhack": "Radar-Hack",
+ "radarhack_desc": "Gegner sind auf dem Radar sichtbar",
- "randomweapon": "Zufällige Waffe",
- "randomweapon_desc": "Klicke auf [css_useSkill], um eine zufällige Waffe zu erhalten",
+ "rambo": "Rambo",
+ "rambo_desc": "Du erhältst zu Beginn der Runde eine zufällige Menge an Gesundheit",
- "rezombie": "Re-Zombie",
- "rezombie_desc": "Nach dem Tod spawnst du als Zombie mit erhöhter Gesundheit und ohne Waffen",
+ "randomweapon": "Zufällige Waffe",
+ "randomweapon_desc": "Klicke auf [css_useSkill], um eine zufällige Waffe zu erhalten",
- "reactivearmor": "Reaktive Rüstung",
- "reactivearmor_desc": "Die Rüstung absorbiert den ersten erlittenen Schaden",
+ "rezombie": "Re-Zombie",
+ "rezombie_desc": "Nach dem Tod spawnst du als Zombie mit erhöhter Gesundheit und ohne Waffen",
- "regeneration": "Regeneration",
- "regeneration_desc": "Du stellst alle paar Sekunden Gesundheit wieder her",
+ "reactivearmor": "Reaktive Rüstung",
+ "reactivearmor_desc": "Die Rüstung absorbiert den ersten erlittenen Schaden",
- "replicator": "Replikator",
- "replicator_desc": "Klicke auf [css_useSkill], um eine Replik zu erstellen, die bei Treffer Schaden verursacht",
+ "regeneration": "Regeneration",
+ "regeneration_desc": "Du stellst alle paar Sekunden Gesundheit wieder her",
- "retreat": "Rückzug",
- "retreat_desc": "Klicke auf [css_useSkill], um zum Spawn zurückzukehren",
+ "replicator": "Replikator",
+ "replicator_desc": "Klicke auf [css_useSkill], um eine Replik zu erstellen, die bei Treffer Schaden verursacht",
- "returntosender": "Zurück zum Absender",
- "returntosender_desc": "Der erste Treffer eines Gegners schickt ihn zurück zu seinem Spawn",
+ "retreat": "Rückzug",
+ "retreat_desc": "Klicke auf [css_useSkill], um zum Spawn zurückzukehren",
- "richboy": "Rich Boy",
- "richboy_desc": "Du erhältst zu Beginn der Runde einen zufälligen Geldbetrag",
+ "returntosender": "Zurück zum Absender",
+ "returntosender_desc": "Der erste Treffer eines Gegners schickt ihn zurück zu seinem Spawn",
- "robinhood": "Robin Hood",
- "robinhood_desc": "Wenn du einem Gegner Schaden zufügst, stiehlst du ihm sein Geld",
+ "richboy": "Rich Boy",
+ "richboy_desc": "Du erhältst zu Beginn der Runde einen zufälligen Geldbetrag",
- "rubber": "Gummigeschosse",
- "rubber_desc": "Deine Kugeln verlangsamen Spieler erheblich",
+ "robinhood": "Robin Hood",
+ "robinhood_desc": "Wenn du einem Gegner Schaden zufügst, stiehlst du ihm sein Geld",
- "saper": "Sapper",
- "saper_desc": "Du kannst Bomben schneller legen und entschärfen",
+ "rubber": "Gummigeschosse",
+ "rubber_desc": "Deine Kugeln verlangsamen Spieler erheblich",
- "secondlife": "Zweite Chance",
- "secondlife_desc": "Nach dem Tod spawnst du mit derselben Gesundheitsanzeige wieder",
+ "saper": "Sapper",
+ "saper_desc": "Du kannst Bomben schneller legen und entschärfen",
- "shade": "Schatten",
- "shade_desc": "Du hast eine zufällige Chance, dich hinter einen getroffenen Gegner zu teleportieren",
- "shade_desc2": "Deine Chancen, dich hinter einen getroffenen Gegner zu teleportieren, betragen: {0} %",
- "shade_nospace": "Kein Platz verfügbar",
+ "secondlife": "Zweite Chance",
+ "secondlife_desc": "Nach dem Tod spawnst du mit derselben Gesundheitsanzeige wieder",
- "shortbomb": "Kurze Zündschnur",
- "shortbomb_desc": "Die Bombe explodiert viel schneller",
+ "shade": "Schatten",
+ "shade_desc": "Du hast eine zufällige Chance, dich hinter einen getroffenen Gegner zu teleportieren",
+ "shade_desc2": "Deine Chancen, dich hinter einen getroffenen Gegner zu teleportieren, betragen: {0} %",
+ "shade_nospace": "Kein Platz verfügbar",
- "silent": "Leise",
- "silent_desc": "Deine Schritte und Sprünge sind für ANDERE Spieler lautlos",
+ "shortbomb": "Kurze Zündschnur",
+ "shortbomb_desc": "Die Bombe explodiert viel schneller",
- "smoker": "Smoker",
- "smoker_desc": "Deine Rauchgranaten gehen nie aus",
+ "silent": "Leise",
+ "silent_desc": "Deine Schritte und Sprünge sind für ANDERE Spieler lautlos",
- "sniperelite": "Sniper Elite",
- "sniperelite_customname": "Sniper-Elite-Skill",
- "sniperelite_desc": "Klicke auf [css_useSkill], um deine aktuelle Waffe gegen eine AWP auszutauschen",
+ "smoker": "Smoker",
+ "smoker_desc": "Deine Rauchgranaten gehen nie aus",
- "soldier": "Soldat",
- "soldier_desc": "Du hast einen zufälligen Schadensmultiplikator",
- "soldier_desc2": "Dein Schadensmultiplikator beträgt: {0}x",
+ "sniperelite": "Sniper Elite",
+ "sniperelite_customname": "Sniper-Elite-Skill",
+ "sniperelite_desc": "Klicke auf [css_useSkill], um deine aktuelle Waffe gegen eine AWP auszutauschen",
- "soundmaker": "Soundmaker",
- "soundmaker_desc": "Klicke auf [css_useSkill], um für jeden Gegner einen Sound auszulösen",
+ "soldier": "Soldat",
+ "soldier_desc": "Du hast einen zufälligen Schadensmultiplikator",
+ "soldier_desc2": "Dein Schadensmultiplikator beträgt: {0}x",
- "spectator": "Zuschauer",
- "spectator_desc": "Klicke auf [css_useSkill], um einen zufälligen Gegner zu beobachten",
+ "soundmaker": "Soundmaker",
+ "soundmaker_desc": "Klicke auf [css_useSkill], um für jeden Gegner einen Sound auszulösen",
- "swapposition": "Positionstausch",
- "swapposition_desc": "Klicke auf [css_useSkill], um mit einem zufälligen Gegner die Plätze zu tauschen",
+ "spectator": "Zuschauer",
+ "spectator_desc": "Klicke auf [css_useSkill], um einen zufälligen Gegner zu beobachten",
- "teleporter": "Teleporter",
- "teleporter_desc": "Du hast die Chance, die Plätze mit einem getroffenen Gegner zu tauschen",
- "teleporter_desc2": "Deine Chance auf Platztausch nach einem Treffer: {0}%",
+ "swapposition": "Positionstausch",
+ "swapposition_desc": "Klicke auf [css_useSkill], um mit einem zufälligen Gegner die Plätze zu tauschen",
- "thief": "Dieb",
- "thief_desc": "Du kannst einem ausgewählten Spieler eine Fertigkeit stehlen",
- "thief_enemy_info": "Deine Fertigkeit wurde gestohlen",
- "thief_player_info": "Die Fertigkeit des Spielers ‚{0}‘ wurde gestohlen",
- "thief_select_info": "Fähigkeit eines Spielers stehlen:",
- "thief_incorrect_skill": "Diese Fähigkeit kann nicht ausgewählt werden!",
+ "teleporter": "Teleporter",
+ "teleporter_desc": "Du hast die Chance, die Plätze mit einem getroffenen Gegner zu tauschen",
+ "teleporter_desc2": "Deine Chance auf Platztausch nach einem Treffer: {0}%",
- "thirdeye": "Drittes Auge",
- "thirdeye_desc": "Klicke auf [css_useSkill], um die Third-Person-Ansicht zu aktivieren",
+ "thief": "Dieb",
+ "thief_desc": "Du kannst einem ausgewählten Spieler eine Fertigkeit stehlen",
+ "thief_enemy_info": "Deine Fertigkeit wurde gestohlen",
+ "thief_player_info": "Die Fertigkeit des Spielers ‚{0}‘ wurde gestohlen",
+ "thief_select_info": "Fähigkeit eines Spielers stehlen:",
+ "thief_incorrect_skill": "Diese Fähigkeit kann nicht ausgewählt werden!",
- "thorns": "Dornen",
- "thorns_desc": "Dein Gegner erhält einen Teil des Schadens, den er dir zugefügt hat",
+ "thirdeye": "Drittes Auge",
+ "thirdeye_desc": "Klicke auf [css_useSkill], um die Third-Person-Ansicht zu aktivieren",
- "throwingknife": "Wurfmesser",
- "throwingknife_desc": "Klicke [css_useSkill], um ein Messer zu werfen. Aber nimm dich vor anderen in Acht",
+ "thorns": "Dornen",
+ "thorns_desc": "Dein Gegner erhält einen Teil des Schadens, den er dir zugefügt hat",
- "toxicsmoke": "Giftiger Rauch",
- "toxicsmoke_desc": "Deine Rauchgranaten verursachen Schaden",
+ "throwingknife": "Wurfmesser",
+ "throwingknife_desc": "Klicke [css_useSkill], um ein Messer zu werfen. Aber nimm dich vor anderen in Acht",
- "wallhack": "Wallhack",
- "wallhack_desc": "Du kannst Feinde durch Wände hindurch sehen",
+ "toxicsmoke": "Giftiger Rauch",
+ "toxicsmoke_desc": "Deine Rauchgranaten verursachen Schaden",
- "watchmaker": "Uhrmacher",
- "watchmaker_desc": "Jeder Granatenwurf verändert die Rundenzeit",
- "watchmaker_ct": "Rundenzeit um {0} Sekunden verkürzt",
- "watchmaker_tt": "Rundenzeit um {0} Sekunden verlängert",
+ "wallhack": "Wallhack",
+ "wallhack_desc": "Du kannst Feinde durch Wände hindurch sehen",
- "weaponsswap": "Waffenwechsel",
- "weaponsswap_desc": "Klicke auf [css_useSkill], um mit einem zufälligen Gegner die Waffen zu tauschen",
- "weaponsswap_hud_info2": "Du hast keine Waffe zum Tauschen",
+ "watchmaker": "Uhrmacher",
+ "watchmaker_desc": "Jeder Granatenwurf verändert die Rundenzeit",
+ "watchmaker_ct": "Rundenzeit um {0} Sekunden verkürzt",
+ "watchmaker_tt": "Rundenzeit um {0} Sekunden verlängert",
- "weightless": "Schwerelosigkeit",
- "weightless_desc": "Deine Granaten werden nicht von der Schwerkraft beeinflusst und fliegen schneller",
+ "weaponsswap": "Waffenwechsel",
+ "weaponsswap_desc": "Klicke auf [css_useSkill], um mit einem zufälligen Gegner die Waffen zu tauschen",
+ "weaponsswap_hud_info2": "Du hast keine Waffe zum Tauschen",
- "wildthrow": "Wilder Wurf",
- "wildthrow_desc": "Wähle einen Spieler aus, der Probleme beim Werfen von Granaten haben wird",
- "wildthrow_player_info": "Spieler '{0}' hat all seine Lineups vergessen",
- "wildthrow_select_info": "Wähle einen Spieler aus:",
-
- "zeus": "Zeus",
- "zeus_desc": "Zeus x27 lädt sich sofort wieder auf",
-
- "your_skill": "Deine aktuelle Fertigkeit",
- "enemy_skill": "Fähigkeit des Gegners",
- "observer_skill": "Fähigkeit des Spielers",
- "welcome_message": "Willkommen {PLAYER} bei {SERVER_NAME}",
- "drawing_skill": "Eine Fertigkeit zeichnen",
- "disabled_weapon": "Du kannst diese Waffe nicht verwenden",
-
- "hud_info": "Warte weitere {0} Sekunden",
- "hud_info_no_enemy": "Kein Feind gefunden",
- "active_hud_info": "Noch {0} Millisekunden aktiv",
-
- "skills_menu": "Fähigkeitenliste",
- "no_player": "Kein passender Spieler gefunden.",
- "duplicate_player": "Mehr als ein Spieler mit demselben Namen gefunden.",
- "selectplayerskill_command": "Gib /t ein",
- "selectplayerskill_incorrect_enemy_index": "Es wurden keine Spieler gefunden, die ausgewählt werden können.",
-
- "skill_not_found_setskill": "Keine solche CHATCOLORS.REDskill gefunden",
- "player_not_found_setskill": "Kein solcher CHATCOLORS.REDplayer gefunden",
- "correct_form_setskill": "Korrekte Verwendung: CHATCOLORS.RED!setskill ",
- "correct_form_setscore": "Korrekte Verwendung: CHATCOLORS.RED!setscore ",
- "done_setskill": "Fähigkeit festgelegt",
- "error_setskill": "CHATCOLORS.REDskill konnte nicht festgelegt werden",
- "for_setskill": "für",
-
- "invalid_map": "Kartenname falsch eingegeben!",
- "loading_map": "Neue Karte wird geladen",
-
- "pause": "Spiel wurde unterbrochen",
- "unpause": "Spiel wurde fortgesetzt",
- "healed": "Du wurdest geheilt.",
- "game_start": "Spiel gestartet!",
- "reload": "Sprachen und Konfigurationen wurden neu geladen.",
- "hud_on": "HUD wurde aktiviert.",
- "hud_off": "HUD wurde deaktiviert.",
-
- "vote_started": "Abstimmung gestartet: ‚{0}‘",
- "vote_timeout": "Zeitlimit für Abstimmung ‚{0}‘ abgelaufen!",
- "vote_wait": "Sie müssen warten, bevor Sie eine weitere Abstimmung starten können!",
- "vote_same_wait": "Sie müssen warten, bevor Sie dieselbe Abstimmung erneut starten können!",
- "vote_not_enough_players": "Nicht genügend Spieler, um eine Abstimmung zu starten!",
- "vote_alredy_voted": "Du hast bereits abgestimmt!",
- "vote_vote": "Abstimmen",
-
- "bombsite_a": "Bombenplatz A",
- "bombsite_b": "Bombenplatz B",
- "bombplanted": "Die Bombe wurde gelegt\n{0} Sekunden bis zur Detonation",
-
- "teammate_skills": "Die Fähigkeiten Ihrer Teamkollegen",
- "summary": "Zusammenfassung der letzten runde",
-
- "menu_controlls_scroll": "W/S – Scrollen",
- "menu_controlls_padding": " | ",
- "menu_controlls_select": "E – Auswählen"
+ "weightless": "Schwerelosigkeit",
+ "weightless_desc": "Deine Granaten werden nicht von der Schwerkraft beeinflusst und fliegen schneller",
+
+ "wildthrow": "Wilder Wurf",
+ "wildthrow_desc": "Wähle einen Spieler aus, der Probleme beim Werfen von Granaten haben wird",
+ "wildthrow_player_info": "Spieler '{0}' hat all seine Lineups vergessen",
+ "wildthrow_select_info": "Wähle einen Spieler aus:",
+
+ "zeus": "Zeus",
+ "zeus_desc": "Zeus x27 lädt sich sofort wieder auf",
+
+ "your_skill": "Deine aktuelle Fertigkeit",
+ "enemy_skill": "Fähigkeit des Gegners",
+ "observer_skill": "Fähigkeit des Spielers",
+ "welcome_message": "Willkommen {PLAYER} bei {SERVER_NAME}",
+ "drawing_skill": "Eine Fertigkeit zeichnen",
+ "disabled_weapon": "Du kannst diese Waffe nicht verwenden",
+
+ "hud_info": "Warte weitere {0} Sekunden",
+ "hud_info_no_enemy": "Kein Feind gefunden",
+ "active_hud_info": "Noch {0} Millisekunden aktiv",
+
+ "skills_menu": "Fähigkeitenliste",
+ "no_player": "Kein passender Spieler gefunden.",
+ "duplicate_player": "Mehr als ein Spieler mit demselben Namen gefunden.",
+ "selectplayerskill_command": "Gib /t ein",
+ "selectplayerskill_incorrect_enemy_index": "Es wurden keine Spieler gefunden, die ausgewählt werden können.",
+
+ "skill_not_found_setskill": "Keine solche CHATCOLORS.REDskill gefunden",
+ "player_not_found_setskill": "Kein solcher CHATCOLORS.REDplayer gefunden",
+ "correct_form_setskill": "Korrekte Verwendung: CHATCOLORS.RED!setskill ",
+ "correct_form_setscore": "Korrekte Verwendung: CHATCOLORS.RED!setscore ",
+ "done_setskill": "Fähigkeit festgelegt",
+ "error_setskill": "CHATCOLORS.REDskill konnte nicht festgelegt werden",
+ "for_setskill": "für",
+
+ "invalid_map": "Kartenname falsch eingegeben!",
+ "loading_map": "Neue Karte wird geladen",
+
+ "pause": "Spiel wurde unterbrochen",
+ "unpause": "Spiel wurde fortgesetzt",
+ "healed": "Du wurdest geheilt.",
+ "game_start": "Spiel gestartet!",
+ "reload": "Sprachen und Konfigurationen wurden neu geladen.",
+ "hud_on": "HUD wurde aktiviert.",
+ "hud_off": "HUD wurde deaktiviert.",
+
+ "vote_started": "Abstimmung gestartet: ‚{0}‘",
+ "vote_timeout": "Zeitlimit für Abstimmung ‚{0}‘ abgelaufen!",
+ "vote_wait": "Sie müssen warten, bevor Sie eine weitere Abstimmung starten können!",
+ "vote_same_wait": "Sie müssen warten, bevor Sie dieselbe Abstimmung erneut starten können!",
+ "vote_not_enough_players": "Nicht genügend Spieler, um eine Abstimmung zu starten!",
+ "vote_alredy_voted": "Du hast bereits abgestimmt!",
+ "vote_vote": "Abstimmen",
+
+ "bombsite_a": "Bombenplatz A",
+ "bombsite_b": "Bombenplatz B",
+ "bombplanted": "Die Bombe wurde gelegt\n{0} Sekunden bis zur Detonation",
+
+ "teammate_skills": "Die Fähigkeiten Ihrer Teamkollegen",
+ "summary": "Zusammenfassung der letzten runde",
+
+ "menu_controlls_scroll": "W/S – Scrollen",
+ "menu_controlls_padding": " | ",
+ "menu_controlls_select": "E – Auswählen"
}
\ No newline at end of file
diff --git a/jRandomSkills - SRC Files/src/lang/en.json b/jRandomSkills - SRC Files/src/lang/en.json
index 80f90d1..f972310 100644
--- a/jRandomSkills - SRC Files/src/lang/en.json
+++ b/jRandomSkills - SRC Files/src/lang/en.json
@@ -275,9 +275,9 @@
"bankrupt_player_info": "Player '{0}' has gone bankrupt.",
"bankrupt_select_info": "Pick a player to go bankrupt:",
- "muhammed": "Muhammed",
- "muhammed_desc": "You explode upon death, killing nearby players",
- "muhammed_explosion": "ALLAHU AKBAR!!!",
+ "deathbomb": "Death Bomb",
+ "deathbomb_desc": "You explode upon death, killing nearby players",
+ "deathbomb_explosion": "Kaboom!",
"ninja": "Ninja",
"ninja_desc": "Standing still increases your invisibility by 33%, crouching by 33%, and holding a knife by 33%",
diff --git a/jRandomSkills - SRC Files/src/lang/fr.json b/jRandomSkills - SRC Files/src/lang/fr.json
index d648e66..02c5543 100644
--- a/jRandomSkills - SRC Files/src/lang/fr.json
+++ b/jRandomSkills - SRC Files/src/lang/fr.json
@@ -275,9 +275,9 @@
"bankrupt_player_info": "Le joueur « {0} » est en faillite.",
"bankrupt_select_info": "Mettre un joueur en faillite :",
- "muhammed": "Bombe",
- "muhammed_desc": "Vous explosez à votre mort, tuant les joueurs proches",
- "muhammed_explosion": "ALLAHU AKBAR!!!",
+ "deathbomb": "Bombe",
+ "deathbomb_desc": "Vous explosez à votre mort, tuant les joueurs proches",
+ "deathbomb_explosion": "Kaboom!",
"ninja": "Ninja",
"ninja_desc": "Rester immobile augmente votre invisibilité de 33%, s’accroupir de 33%, et tenir un couteau de 33%",
diff --git a/jRandomSkills - SRC Files/src/lang/pl.json b/jRandomSkills - SRC Files/src/lang/pl.json
index 2570ed2..321c9d9 100644
--- a/jRandomSkills - SRC Files/src/lang/pl.json
+++ b/jRandomSkills - SRC Files/src/lang/pl.json
@@ -275,9 +275,9 @@
"moneyswap_player_info": "Wymieniłeś swoje pieniądze z graczem '{0}'.",
"moneyswap_select_info": "Zamień się kasą z graczem:",
- "muhammed": "Muhammed",
- "muhammed_desc": "Po śmierci eksplodujesz i zabijasz graczy znajdujących się w zasięgu",
- "muhammed_explosion": "ALLAHU AKBAR!!!",
+ "deathbomb": "Ludzka bomba",
+ "deathbomb_desc": "Po śmierci eksplodujesz i zabijasz graczy znajdujących się w zasięgu",
+ "deathbomb_explosion": "Kaboom!",
"ninja": "Ninja",
"ninja_desc": "Stojąc nieruchomo zwiększasz swoją niewidzialność o 33%, kucając o 33%, a trzymając nóż o 33%",
diff --git a/jRandomSkills - SRC Files/src/lang/pt-br.json b/jRandomSkills - SRC Files/src/lang/pt-br.json
index 2e53cab..b953a61 100644
--- a/jRandomSkills - SRC Files/src/lang/pt-br.json
+++ b/jRandomSkills - SRC Files/src/lang/pt-br.json
@@ -52,10 +52,10 @@
"blademaster": "Mestre das Lâminas",
"blademaster_desc": "Enquanto segura a faca, você tem chance de desviar de um tiro",
-
+
"bunnyhop": "Coelho",
"bunnyhop_desc": "Você ganha \"BunnyHop\" automático",
-
+
"c4camouflage": "Camuflagem C4",
"c4camouflage_desc": "Você fica invisível enquanto segura a bomba",
@@ -68,122 +68,122 @@
"catapult": "Catapulta",
"catapult_desc": "Você tem uma chance aleatória de lançar um inimigo para cima",
"catapult_desc2": "Sua chance de lançar um inimigo ao acertá-lo é: {0}%",
-
+
"chicken": "Galinha",
"chicken_desc": "Você é uma galinha com +10% de movimento mais rápido e -50 HP",
-
+
"chillout": "Esqueci a Senha",
"chillout_desc": "Plantar a bomba leva significativamente mais tempo",
-
+
"cutter": "Corte Rápido",
"cutter_desc": "Você mata instantaneamente com a faca",
"cypher": "CFTV",
"cypher_desc": "Clique em [css_useSkill] para criar/mudar para uma câmera",
"cypher_nospace": "A câmera deve ser posicionada em ângulo reto com a parede",
-
+
"darkness": "Escuridão",
"darkness_desc": "Aplica um efeito de escuridão a um inimigo escolhido",
"darkness_enemy_info": "Que as luzes se apaguem.",
"darkness_player_info": "A escuridão tomou conta do jogador '{0}'.",
"darkness_select_info": "Escolha jogador: escuridão:",
-
+
"deactivator": "Desativador",
"deactivator_desc": "Escolha um jogador para desativar a habilidade",
"deactivator_enemy_info": "Sua habilidade foi desativada.",
"deactivator_player_info": "A habilidade do jogador '{0}' foi desativada.",
"deactivator_select_info": "Desativar skill do jogador:",
-
+
"deaf": "Surdo",
"deaf_desc": "Escolha um jogador para desativar todos os sons",
"deaf_enemy_info": "Seus fones de ouvido saíram do jogo.",
"deaf_player_info": "O som foi desativado para o jogador '{0}'.",
"deaf_select_info": "Silenciar jogador:",
-
+
"disarmament": "Desarmamento",
"disarmament_desc": "Você tem uma chance aleatória de fazer um inimigo dropar a arma ao acertá-lo",
"disarmament_desc2": "Sua chance de desarmar um inimigo é: {0}%",
"distancer": "Medidor de Distância",
"distancer_desc": "Você pode ver a distância até o inimigo mais próximo",
-
+
"dash": "Impulso",
"dash_desc": "Pule novamente para receber um impulso",
-
+
"dracula": "Drácula",
"dracula_desc": "Acertar um inimigo restaura sua vida igual a ao dano causado",
-
+
"duplicator": "ctrl+c ctrl+v",
"duplicator_desc": "Escolha um jogador para copiar a habilidade",
"duplicator_player_info": "A habilidade do jogador '{0}' foi copiada.",
"duplicator_select_info": "Copiar skill do jogador:",
-
+
"dwarf": "Anão",
"dwarf_desc": "Sua altura agora é aleatória",
"dwarf_desc2": "Seu multiplicador de altura é: {0}x",
-
+
"enemyspawn": "Spawn Inimigo",
"enemyspawn_desc": "Clique em [css_useSkill] para se teletransportar para a base inimiga",
-
+
"explosiveshot": "Tiro Explosivo",
"explosiveshot_desc": "Chance aleatória de disparar uma bala explosiva enquanto atira",
"explosiveshot_desc2": "Sua chance de disparar uma bala explosiva: {0}%",
-
+
"falconeye": "Olho de Águia",
"falconeye_desc": "Clique em [css_useSkill] para ativar uma câmera 360 com visão aérea",
-
+
"fastreload": "Recarga Rápida",
"fastreload_desc": "Clique em [css_useSkill] para recarregar a arma que você está segurando",
-
+
"flash": "Ligeirinho",
"flash_desc": "Velocidade de movimentação aleatória no início da rodada",
"flash_desc2": "Seu multiplicador de velocidade é: {0}x",
-
+
"fortnite": "Fortnite",
"fortnite_desc": "Clique em [css_useSkill] para criar uma barreira destrutível",
-
+
"fragilebomb": "Bomba Frágil",
"fragilebomb_desc": "Atirar na bomba a danifica",
"fragilebomb_bomb_health": "Vida da bomba",
-
+
"friendlyfire": "Fogo Amigo",
"friendlyfire_desc": "Atirar em companheiros de equipe os cura",
-
+
"frozendecoy": "Decoy Congelante",
"frozendecoy_desc": "Sua decoy congela os players próximos",
-
+
"gambler": "Tigrinho",
"gambler_desc": "Selecione uma habilidade da lista.",
"gambler_select_info": "Escolha sua habilidade:",
"gambler_more": "#00FF00|Atualizar por ${0}",
"gambler_no_money": "Yetersiz bakiye.",
-
+
"ghost": "Fantasma",
"ghost_desc": "Você é completamente invisível",
-
+
"glaz": "Smoke Transparente",
"glaz_desc": "Smokes tornam-se transparentes para você",
-
+
"glitch": "Sem Mapa",
"glitch_desc": "Desativa o radar de um inimigo escolhido",
"glitch_enemy_info": "Seu radar foi desativado.",
"glitch_player_info": "O radar do jogador '{0}' foi desativado.",
"glitch_select_info": "Desativar radar do jogador:",
-
+
"glue": "Semtex",
"glue_desc": "Suas granadas grudam nas paredes",
-
+
"godmode": "Modo Deus",
"godmode_desc": "Clique em [css_useSkill] para se tornar imortal por alguns segundos",
"godmode_off": "Imortalidade desativada",
"godmode_on": "Imortalidade ativada",
-
+
"grenadier": "Bomberman",
"grenadier_desc": "Você tem HEs infinitas",
-
+
"healingsmoke": "Smoke Amiga",
"healingsmoke_desc": "Suas smokes curam",
-
+
"hermit": "Sanguessuga",
"hermit_desc": "Matar restaura munição e uma parte da sua vida",
@@ -199,7 +199,7 @@
"iana": "Holograma",
"iana_desc": "Clique em [css_useSkill] para controlar seu holograma por alguns segundos",
-
+
"illiterate": "Analfabeto",
"illiterate_desc": "Enquanto você estiver vivo, seus inimigos não conseguem ler",
@@ -208,10 +208,10 @@
"impostor": "Impostor",
"impostor_desc": "Você começa a rodada vestido do time inimigo",
-
+
"infiniteammo": "Munição Infinita",
"infiniteammo_desc": "Você recebe munição infinita para todas as suas armas",
-
+
"jackal": "Lesma",
"jackal_desc": "Cada adversário deixa um rastro atrás de si",
@@ -220,37 +220,37 @@
"jammer_enemy_info": "Sua mira foi desativada.",
"jammer_player_info": "A mira do jogador '{0}' foi desativada.",
"jammer_select_info": "Desativar mira do jogador:",
-
+
"jester": "Palhaço",
"jester_desc": "No modo bobo você não pode causar nem receber dano. Esse modo muda a cada poucos segundos.",
"jester_mode": "Modo Palhaço",
"jester_on": "LIG.",
"jester_off": "DESL.",
-
+
"jumpban": "Perneta",
"jumpban_desc": "Escolha um jogador que não poderá pular",
"jumpban_enemy_info": "Cortaram as suas pernas.",
"jumpban_player_info": "O jogador '{0}' não pode mais pular.",
"jumpban_select_info": "Banir pulo do jogador:",
-
+
"jumpingjack": "Pula-Pula",
"jumpingjack_desc": "Pular restaura vida",
-
+
"killerflash": "Flash Mortal",
"killerflash_desc": "Qualquer pessoa cega pela sua flash morre (incluindo você)",
-
+
"lifeswap": "Troca de Vida",
"lifeswap_desc": "Escolha um jogador para trocar de vida",
"lifeswap_enemy_info": "Alguém pegou sua vida emprestada.",
"lifeswap_player_info": "Você trocou vida com o jogador '{0}'.",
"lifeswap_select_info": "Trocar de vida com jogador:",
-
+
"longknife": "Espada",
"longknife_desc": "Um ataque com faca causa danos independentemente da distância",
-
+
"longzeus": "Zeus Longo",
"longzeus_desc": "Zeus causa dano independentemente da distância",
-
+
"magneticdecoy": "Decoy Magnético",
"magneticdecoy_desc": "Seu decoy atrai jogadores próximos para si mesmo",
@@ -262,10 +262,10 @@
"magnifier_enemy_info": "Seu campo de visão foi distorcido!",
"magnifier_player_info": "O jogador ‘{0}’ foi forçado a entrar no modo zoom.",
"magnifier_select_info": "Ampliar tela do jogador:",
-
+
"medic": "Médico",
"medic_desc": "Clique em [css_useSkill] para usar uma injeção que restaura 50 de vida",
-
+
"miner": "Mineiro de Bombas",
"miner_desc": "Sua granada HE só explode quando há um inimigo por perto",
@@ -274,131 +274,131 @@
"moneyswap_enemy_info": "Você provavelmente virou classe B",
"moneyswap_player_info": "Você trocou dinheiro com o jogador '{0}'.",
"moneyswap_select_info": "Trocar dinheiro c/ jogador:",
-
- "muhammed": "Muhammed",
- "muhammed_desc": "Você explode ao morrer, matando os jogadores próximos",
- "muhammed_explosion": "ALLAHU AKBAR!!!",
-
+
+ "deathbomb": "Bomba mortal",
+ "deathbomb_desc": "Você explode ao morrer, matando os jogadores próximos",
+ "deathbomb_explosion": "Kaboom!",
+
"ninja": "Ninja",
"ninja_desc": "Ficar parado aumenta sua invisibilidade em 33%, agachar em 33%, e segurar uma faca em 33%",
-
+
"nonades": "Imune a Granadas",
"nonades_desc": "Granadas não causam dano a você",
-
+
"norecoil": "Sem Recoil",
"norecoil_desc": "Sem recoil ao atirar",
-
+
"noclip": "NoClip",
"noclip_desc": "Clique em [css_useSkill] para ativar noclip por poucos segundos",
-
+
"oneshot": "Ignorante",
"oneshot_desc": "Acertar um inimigo o mata instantaneamente",
-
+
"onlyhead": "Só na Cabeçinha",
"onlyhead_desc": "Você só recebe headshot",
-
+
"paweljumper": "Parkourista",
"paweljumper_desc": "Você recebe um número aleatório de pulos extras",
"paweljumper_desc2": "Você ganha {0} pulos extras",
-
+
"phoenix": "Fênix",
"phoenix_desc": "Você tem uma chance aleatória de renascer após a morte",
"phoenix_desc2": "Sua chance de renascer após a morte: {0}%",
"phoenix_respawn": "Você foi ressuscitado das cinzas graças ao poder de: CHATCOLORS.REDPhoenix",
-
+
"psychicdefusing": "Desarme Psíquico",
"psychicdefusing_desc": "Quando você está proximo da bomba, começa a desarmá-la automaticamente",
"psychicdefusing_hud_info": "{0} segundos restantes para desarmar",
-
+
"pilot": "Jetpack",
"pilot_desc": "Voe por tempo limitado. Clique duas vezes no pulo para voar",
"pilot_hud_info": "Combustível",
-
+
"planter": "Meu Bombsite Minha Vida",
"planter_desc": "Você pode plantar a bomba em qualquer lugar, com um tempo de detonação de 60 segundos.",
"planter_planting": "Plantando ({0})...",
-
+
"poison": "Veneno",
"poison_desc": "Escolha um jogador que receberá dano a cada poucos segundos",
"poison_enemy_info": "Você foi envenenado.",
"poison_player_info": "O jogador '{0}' foi envenenado.",
"poison_select_info": "Envenenar jogador:",
-
+
"primaryban": "Sem Rifle",
"primaryban_desc": "Escolha um jogador que não poderá usar rifles",
"primaryban_enemy_info": "Você não pode mais usar rifles.",
"primaryban_player_info": "O jogador '{0}' não pode mais usar rifles.",
"primaryban_select_info": "Banir rifles do jogador:",
-
+
"prosthesis": "Prótese",
"prosthesis_desc": "Braços e pernas são à prova de balas",
-
+
"push": "Empurrão",
"push_desc": "Você tem uma chance aleatória de empurrar um inimigo ao acertá-lo",
"push_desc2": "Suas chances de empurrar o inimigo são: {0}%",
-
+
"pyro": "Pirotecnia",
"pyro_desc": "Molotov recupera vida",
-
+
"quickshot": "Tiro Rápido",
"quickshot_desc": "Todas as balas são disparadas extremamente rapidas",
-
+
"radarhack": "Hack de Mapa",
"radarhack_desc": "Inimigos são visíveis no mapa",
-
+
"rambo": "Rambo",
"rambo_desc": "Você recebe uma quantidade aleatória de vida no início da rodada",
-
+
"randomweapon": "Arma Aleatória",
"randomweapon_desc": "Clique em [css_useSkill] para receber uma arma aleatória",
-
+
"rezombie": "Walking Dead",
"rezombie_desc": "Após morrer, você renasce como um zumbi com mais vida porém sem armas",
-
+
"reactivearmor": "Armadura Reativa",
"reactivearmor_desc": "A armadura absorve o primeiro dano recebido",
-
+
"regeneration": "Regeneração",
"regeneration_desc": "Você restaura vida a cada poucos segundos",
-
+
"replicator": "Clone",
"replicator_desc": "Clique em [css_useSkill] para criar um clone que causa dano ao ser atingido",
-
+
"retreat": "De Volta as Origens",
"retreat_desc": "Clique em [css_useSkill] para retornar ao spawn",
-
+
"returntosender": "Devolução ao Remetente",
"returntosender_desc": "O primeiro tiro em um inimigo o envia de volta a sua base",
-
+
"richboy": "Filhinho de Papai",
"richboy_desc": "Você recebe uma quantidade aleatória de dinheiro no início da rodada",
-
+
"robinhood": "Robin Hood",
"robinhood_desc": "Atirar em um inimigo rouba seu dinheiro",
-
+
"rubber": "Balas de Borracha",
"rubber_desc": "Seus tiros deixam os jogadores lentos ao serem atingidos",
-
+
"saper": "Especialista",
"saper_desc": "Você pode plantar e desarmar bombas mais rápido",
-
+
"secondlife": "Segunda Chance",
"secondlife_desc": "Após morrer, você renasce com a mesma quantidade de vida",
-
+
"shade": "Sombra",
"shade_desc": "Você tem uma chance aleatória de teletransportar para trás de um inimigo ao atingi-lo",
"shade_desc2": "Suas chances de se teletransportar para trás de um inimigo atingido são: {0}%",
"shade_nospace": "Sem espaço disponível",
-
+
"shortbomb": "Pavio Longo",
"shortbomb_desc": "A bomba demora muito mais para explodir",
-
+
"silent": "Shhhiu!",
"silent_desc": "Seus passos e pulos são silenciosos para OUTROS jogadores",
"smoker": "Tiryaki",
"smoker_desc": "Sis bombalarınız asla bitmez",
-
+
"sniperelite": "Sniper do BOPE",
"sniperelite_desc": "Clique em [css_useSkill] para trocar sua arma atual por uma AWP",
"sniperelite_customname": "Keskin Nişancı Elit Yeteneği",
@@ -406,51 +406,51 @@
"soldier": "Soldado",
"soldier_desc": "Seus tiros causam mais dano",
"soldier_desc2": "Seu multiplicador de dano é: {0}x",
-
+
"soundmaker": "Criador de Som",
"soundmaker_desc": "Clique em [css_useSkill] para tocar um som para cada inimigo",
-
+
"spectator": "Espectador",
"spectator_desc": "Clique em [css_useSkill] para ver a tela de um inimigo aleatório",
-
+
"swapposition": "Troca de Posição",
"swapposition_desc": "Clique em [css_useSkill] para trocar de lugar com um inimigo aleatório",
-
+
"teleporter": "Teletransportador",
"teleporter_desc": "Você tem a chance de trocar de lugar com um inimigo atingido",
"teleporter_desc2": "Sua chance de trocar de lugar após o acerto: {0}%",
-
+
"thief": "Lula",
"thief_desc": "Você pode roubar uma habilidade de um jogador escolhido",
"thief_enemy_info": "Sua habilidade foi roubada.",
"thief_player_info": "A habilidade do jogador '{0}' foi roubada.",
"thief_select_info": "Roubar skill do jogador:",
"thief_incorrect_skill": "Esta habilidade não pode ser selecionada!",
-
+
"thirdeye": "Terceiro Olho",
"thirdeye_desc": "Clique em [css_useSkill] para ativar a terceira pessoa",
-
+
"thorns": "Porco Espinho",
"thorns_desc": "Seu oponente receberá uma parte do dano que causou a você",
-
+
"throwingknife": "Faca de Arremesso",
"throwingknife_desc": "Clique em [css_useSkill] para lançar uma faca. Mas cuidado com os outros",
"toxicsmoke": "Smoke Tóxica",
"toxicsmoke_desc": "Suas smokes causam dano",
-
+
"wallhack": "Wallhack",
"wallhack_desc": "Você pode ver inimigos através das paredes",
-
+
"watchmaker": "Relojoeiro",
"watchmaker_desc": "Cada arremesso de granada altera o tempo da rodada",
"watchmaker_ct": "Tempo da rodada reduzido em {0} segundos.",
"watchmaker_tt": "Tempo da rodada estendido em {0} segundos.",
-
+
"weaponsswap": "Troca de Armas",
"weaponsswap_desc": "Clique em [css_useSkill] para trocar armas com um inimigo aleatório",
"weaponsswap_hud_info2": "Você não tem arma para trocar",
-
+
"weightless": "Gravidade Zero",
"weightless_desc": "Suas granadas não são afetadas pela gravidade e voam mais rápido",
@@ -461,24 +461,24 @@
"zeus": "Zeus",
"zeus_desc": "Zeus x27 recarrega instantaneamente",
-
+
"your_skill": "Sua habilidade atual",
"enemy_skill": "Habilidade do inimigo",
"observer_skill": "Habilidade do jogador",
"welcome_message": "Bem-vindo {PLAYER} ao {SERVER_NAME}!\nVersão atual do jRandomSkills: {VERSION} ({SKILLS_COUNT} habilidades).\n\nCriado originalmente por:\n{AUTHOR1}\nModificado e aprimorado por:\n{AUTHOR2}\nDiscord oficial: https://discord.gg/9H8EZYBpPF",
"drawing_skill": "Sorteando uma habilidade",
"disabled_weapon": "Você não pode usar esta arma",
-
+
"hud_info": "Espere mais {0} segundos",
"hud_info_no_enemy": "Nenhum inimigo encontrado",
"active_hud_info": "Ativo por mais {0} milissegundos",
-
+
"skills_menu": "Lista de Habilidades",
"no_player": "Nenhum jogador correspondente encontrado.",
"duplicate_player": "Mais de um jogador encontrado com o mesmo nome.",
"selectplayerskill_command": "Digite /t",
"selectplayerskill_incorrect_enemy_index": "Não foram encontrados jogadores para selecionar.",
-
+
"skill_not_found_setskill": "Nenhuma habilidade CHATCOLORS.RED encontrada",
"player_not_found_setskill": "Nenhum jogador CHATCOLORS.RED encontrado",
"correct_form_setskill": "Uso correto: CHATCOLORS.RED!setskill ",
@@ -486,10 +486,10 @@
"done_setskill": "Habilidade definida",
"error_setskill": "Falha ao definir a habilidade CHATCOLORS.RED",
"for_setskill": "para",
-
+
"invalid_map": "Nome do mapa inválido!",
"loading_map": "Carregando um novo mapa",
-
+
"pause": "Partida pausada.",
"unpause": "Partida retomada.",
"healed": "Você foi curado.",
@@ -497,7 +497,7 @@
"reload": "Os idiomas e as configurações foram recarregados.",
"hud_on": "O HUD foi ativado.",
"hud_off": "O HUD foi desativado.",
-
+
"vote_started": "Votação iniciada: '{0}'",
"vote_timeout": "Votação '{0}' expirou!",
"vote_wait": "Você precisa esperar antes de iniciar outra votação!",
@@ -505,14 +505,14 @@
"vote_not_enough_players": "Não há jogadores suficientes para iniciar uma votação!",
"vote_alredy_voted": "Você já votou!",
"vote_vote": "Votar",
-
+
"bombsite_a": "Bombsite A",
"bombsite_b": "Bombsite B",
"bombplanted": "A bomba foi plantada\n{0} segundos até a detonação",
-
+
"teammate_skills": "Habilidades dos seus companheiros de equipe",
"summary": "Resumo da última rodada",
-
+
"menu_controlls_scroll": "W/S - Rolar",
"menu_controlls_padding": " | ",
"menu_controlls_select": "E - Selecionar"
diff --git a/jRandomSkills - SRC Files/src/lang/ru.json b/jRandomSkills - SRC Files/src/lang/ru.json
new file mode 100644
index 0000000..e8fc4c3
--- /dev/null
+++ b/jRandomSkills - SRC Files/src/lang/ru.json
@@ -0,0 +1,519 @@
+{
+ "none": "Нет навыка",
+ "none_desc": "У вас нет навыка",
+
+ "aimbot": "Аимбот",
+ "aimbot_desc": "Каждое ваше попадание считается хедшотом",
+
+ "aimlock": "Захват прицела",
+ "aimlock_desc": "Нажмите [css_useSkill], чтобы зафиксировать прицел на ближайшем враге",
+
+ "anomaly": "Аномалия",
+ "anomaly_desc": "Вы отматываете время на несколько секунд назад",
+
+ "antyflash": "Антифлеш",
+ "antyflash_desc": "Вы невосприимчивы к флешкам, а ваши флешки действуют 7 секунд",
+
+ "antyhead": "Железная голова",
+ "antyhead_desc": "Вы не получаете урон от выстрелов в голову",
+
+ "areareaper": "Жнец зоны",
+ "areareaper_desc": "Вы можете выбрать бомб-сайт для деактивации",
+ "areareaper_incorrect_site": "Такой бомб-сайт не найден.",
+ "areareaper_no_site": "Бомб-сайты не найдены.",
+ "areareaper_select_info": "Выберите сайт для деактивации:",
+ "areareaper_site_disabled": "Бомб-сайт {0} деактивирован — бомбу нельзя установить там!",
+ "areareaper_used_info": "Ваш навык уже был использован.",
+ "areareaper_bombsite_disabled": "Этот бомб-сайт отключён!",
+
+ "armored": "Бронированный",
+ "armored_desc": "У вас случайный множитель получаемого урона",
+ "armored_desc2": "Ваш множитель получаемого урона: {0}x",
+
+ "assassin": "Ассасин",
+ "assassin_desc": "Вы наносите увеличенный урон врагам со спины",
+
+ "astronaut": "Астронавт",
+ "astronaut_desc": "В начале раунда вам выдаётся случайное значение гравитации",
+ "astronaut_desc2": "Ваша случайная гравитация: {0}x",
+
+ "moneyswap": "Налоговик",
+ "moneyswap_desc": "Выберите игрока для обмена деньгами",
+ "moneyswap_enemy_info": "Налоговая служба добралась до вас.",
+ "moneyswap_player_info": "Вы обменялись деньгами с игроком '{0}'.",
+ "moneyswap_select_info": "Обменять деньги с игроком:",
+
+ "baseball": "Бейсболист",
+ "baseball_desc": "Ваша ложная граната отскакивает от стен и мгновенно убивает врага при попадании",
+
+ "behind": "Разворот врага",
+ "behind_desc": "Есть шанс развернуть врага на 180° при попадании",
+ "behind_desc2": "Ваш шанс развернуть врага при попадании: {0}%",
+
+ "blademaster": "Мастер клинка",
+ "blademaster_desc": "С ножом в руках у вас высокий шанс отразить выстрел",
+
+ "bunnyhop": "Заяц",
+ "bunnyhop_desc": "Вы получаете автоматический «БанниХоп»",
+
+ "c4camouflage": "Маскировка бомбы",
+ "c4camouflage_desc": "Вы невидимы, пока несёте бомбу",
+
+ "carefulbullets": "Осторожные пули",
+ "carefulbullets_desc": "Выберите игрока, который будет получать урон за каждое ваше промахивание",
+ "carefulbullets_enemy_info": "Точность теперь буквально имеет значение.",
+ "carefulbullets_player_info": "'{0}' теперь должен быть осторожнее.",
+ "carefulbullets_select_info": "Промахи ранят игрока:",
+
+ "catapult": "Катапульта",
+ "catapult_desc": "Есть шанс подбросить врага вверх при попадании",
+ "catapult_desc2": "Ваш шанс подбросить врага при попадании: {0}%",
+
+ "chicken": "Курица",
+ "chicken_desc": "Вы получаете модель курицы + 10% к скорости передвижения - 50 HP",
+
+ "chillout": "Чилл",
+ "chillout_desc": "Установка бомбы занимает значительно больше времени",
+
+ "cutter": "Резак",
+ "cutter_desc": "Мгновенное убийство ножом",
+
+ "cypher": "Шифровальщик",
+ "cypher_desc": "Нажмите [css_useSkill], чтобы создать/переключиться на камеру",
+ "cypher_nospace": "Камера должна быть расположена под прямым углом к стене",
+
+ "darkness": "Тьма",
+ "darkness_desc": "Накладывает эффекть тьмы на выбранного врага",
+ "darkness_enemy_info": "Пусть свет погаснет.",
+ "darkness_player_info": "Тьма охватила игрока '{0}'.",
+ "darkness_select_info": "Выберите игрока для тьмы:",
+
+ "deactivator": "Деактиватор",
+ "deactivator_desc": "Выберите игрока, чей навык вы хотите отключить",
+ "deactivator_enemy_info": "Ваш навык был отключён.",
+ "deactivator_player_info": "Навык игрока '{0}' был отключён.",
+ "deactivator_select_info": "Отключить навык игрока:",
+
+ "deaf": "Глухой",
+ "deaf_desc": "Выберите игрока, у которого будет отключён весь звук",
+ "deaf_enemy_info": "Ваши наушники покинули игру.",
+ "deaf_player_info": "Звук отключён для игрока '{0}'.",
+ "deaf_select_info": "Отключить звук для игрока:",
+
+ "disarmament": "Разоружение",
+ "disarmament_desc": "Есть шанс заставить врага выронить оружие при попадании",
+ "disarmament_desc2": "Ваш шанс разоружить врага: {0}%",
+
+ "distancer": "Дальномер",
+ "distancer_desc": "Вы можете видеть расстояние до ближайшего врага",
+
+ "dash": "Рывок",
+ "dash_desc": "Выполните второй прыжок для рывка",
+
+ "dracula": "Дракула",
+ "dracula_desc": "Попадание по врагу восстанавливает здоровье в размере процента от нанесённого урона",
+
+ "duplicator": "Дупликатор",
+ "duplicator_desc": "Выберите игрока, чтобы скопировать его навык",
+ "duplicator_player_info": "Навык игрока '{0}' был скопирован.",
+ "duplicator_select_info": "Скопировать навык игрока:",
+
+ "dwarf": "Гном",
+ "dwarf_desc": "Случайный размер персонажа в начале раунда",
+ "dwarf_desc2": "Ваш множитель размера: {0}x",
+
+ "enemyspawn": "Спавн врагов",
+ "enemyspawn_desc": "Нажмите [css_useSkill], чтобы телепортироваться на спавн врагов",
+
+ "explosiveshot": "Взрывной выстрел",
+ "explosiveshot_desc": "Случайный шанс выстрелить взрывной пулей при стрельбе",
+ "explosiveshot_desc2": "Ваш шанс выстрелить взрывной пулей: {0}%",
+
+ "falconeye": "Глаз сокола",
+ "falconeye_desc": "Нажмите [css_useSkill], чтобы активировать камеру с высоты птичьего полёта",
+
+ "fastreload": "Быстрая перезарядка",
+ "fastreload_desc": "Нажмите [css_useSkill], чтобы перезарядить текущее оружие",
+
+ "flash": "Флеш",
+ "flash_desc": "Случайная скорость игрока в начале раунда",
+ "flash_desc2": "Ваш множитель скорости: {0}x",
+
+ "fortnite": "Фортнайт",
+ "fortnite_desc": "Нажмите [css_useSkill], чтобы создать разрушаемую баррикаду",
+
+ "fragilebomb": "Хрупкая бомба",
+ "fragilebomb_desc": "Стрельба по бомбе повреждает её",
+ "fragilebomb_bomb_health": "Здоровье бомбы",
+
+ "friendlyfire": "Дружественный огонь",
+ "friendlyfire_desc": "Стрельба по союзникам лечит их",
+
+ "frozendecoy": "Замораживающая ловушка",
+ "frozendecoy_desc": "Ваша ложная граната замораживает всех ближайших игроков",
+
+ "gambler": "Азартный игрок",
+ "gambler_desc": "Выберите навык из предложенного списка.",
+ "gambler_select_info": "Выберите ваш навык:",
+ "gambler_more": "#00FF00|Обновить за ${0}",
+ "gambler_no_money": "Недостаточно денег.",
+
+ "ghost": "Призрак",
+ "ghost_desc": "Вы полностью невидимы",
+
+ "glaz": "Глаз",
+ "glaz_desc": "Вы видите сквозь дымовые гранаты",
+
+ "glitch": "Глитч",
+ "glitch_desc": "Отключает радар выбранному врагу",
+ "glitch_enemy_info": "Ваш радар был отключён.",
+ "glitch_player_info": "Радар игрока '{0}' был отключён.",
+ "glitch_select_info": "Отключить радар игроку:",
+
+ "glue": "Клей",
+ "glue_desc": "Ваши гранаты прилипают к стенам",
+
+ "godmode": "Режим бога",
+ "godmode_desc": "Нажмите [css_useSkill], чтобы стать неуязвимым на короткое время",
+ "godmode_off": "Неуязвимость отключена",
+ "godmode_on": "Неуязвимость включена",
+
+ "grenadier": "Гренадёр",
+ "grenadier_desc": "У вас бесконечные осколочные гранаты",
+
+ "healingsmoke": "Лечащий дым",
+ "healingsmoke_desc": "Ваши дымовые гранаты лечат",
+
+ "hermit": "Отшельник",
+ "hermit_desc": "Убийства восстанавливают боеприпасы и часть здоровья",
+
+ "holyhandgrenade": "Святая граната",
+ "holyhandgrenade_desc": "Ваши осколочные гранаты наносят двойной урон и имеют двойную дальность",
+
+ "homingnades": "Самонаводящиеся гранаты",
+ "homingnades_desc": "Ваши гранаты (кроме дымовых) притягиваются к врагам",
+
+ "hotbomb": "Горячая бомба",
+ "hotbomb_desc": "Пока вы живы, бомба наносит урон её носителю",
+ "hotbomb_hint": "Осторожно, бомба горячая!",
+
+ "iana": "Голограмма",
+ "iana_desc": "Нажмите [css_useSkill], чтобы управлять своей голограммой несколько секунд",
+
+ "illiterate": "Неграмотный",
+ "illiterate_desc": "Пока вы живы, ваши враги не могут читать (чат)",
+
+ "illusionist": "Иллюзионист",
+ "illusionist_desc": "Нажмите [css_useSkill], чтобы создать копию, идущую вперёд",
+
+ "impostor": "Импостер",
+ "impostor_desc": "Вы начинаете раунд с моделью игрока вражеской команды",
+
+ "infiniteammo": "Бесконечные патроны",
+ "infiniteammo_desc": "Вы получаете бесконечные патроны для всего оружия",
+
+ "jackal": "Трекер",
+ "jackal_desc": "Каждый противник оставляет за собой след",
+
+ "jammer": "Глушилка",
+ "jammer_desc": "Выберите игрока, чтобы отключить его прицел",
+ "jammer_enemy_info": "Ваш прицел был отключён.",
+ "jammer_player_info": "Прицел игрока '{0}' был отключён.",
+ "jammer_select_info": "Отключить прицел игроку:",
+
+ "jester": "Шут",
+ "jester_desc": "В режиме шута вы не можете получать или наносить урон. Режим переключается каждые несколько секунд.",
+ "jester_mode": "Режим шута",
+ "jester_on": "ВКЛ",
+ "jester_off": "ВЫКЛ",
+
+ "jumpban": "Безногий",
+ "jumpban_desc": "Выберите игрока, который не сможет прыгать",
+ "jumpban_enemy_info": "Кто-то отрезал вам ноги.",
+ "jumpban_player_info": "Игрок '{0}' больше не может прыгать.",
+ "jumpban_select_info": "Запретить прыжки игроку:",
+
+ "jumpingjack": "Прыгающий Джек",
+ "jumpingjack_desc": "Прыжки восстанавливают здоровье",
+
+ "killerflash": "Смертельная флешка",
+ "killerflash_desc": "Любой, полностью ослеплённый вашей флешкой, погибает (включая вас)",
+
+ "lifeswap": "Обмен жизнями",
+ "lifeswap_desc": "Выберите игрока для обмена здоровьем",
+ "lifeswap_enemy_info": "Кто-то занял ваше здоровье.",
+ "lifeswap_player_info": "Вы обменялись здоровьем с игроком '{0}'.",
+ "lifeswap_select_info": "Обменять здоровье с игроком:",
+
+ "longknife": "Длинный нож",
+ "longknife_desc": "Удар ножом наносит урон независимо от расстояния",
+
+ "longzeus": "Длинный Зевс",
+ "longzeus_desc": "Зевс наносит урон независимо от расстояния",
+
+ "magneticdecoy": "Магнитная ловушка",
+ "magneticdecoy_desc": "Ваша ложная граната притягивает ближайших игроков к себе",
+
+ "magneto": "Магнето",
+ "magneto_desc": "Все вражеские гранаты отталкиваются от вас",
+
+ "magnifier": "Лупа",
+ "magnifier_desc": "Приближает экран врага, уменьшая его поле зрения",
+ "magnifier_enemy_info": "Ваше поле зрения было искажено!",
+ "magnifier_player_info": "Игрок '{0}' принудительно переведён в режим увеличения.",
+ "magnifier_select_info": "Увеличить экран игрока:",
+
+ "medic": "Медик",
+ "medic_desc": "Нажмите [css_useSkill], чтобы использовать заряд лечения, восстанавливающий 50 HP",
+
+ "miner": "Минёр",
+ "miner_desc": "Ваша осколочная граната взрывается только когда рядом есть враг",
+
+ "bankrupt": "Банкрот",
+ "bankrupt_desc": "Выберите игрока, который потеряет все свои деньги",
+ "bankrupt_enemy_info": "Вы обанкротились.",
+ "bankrupt_player_info": "Игрок '{0}' обанкротился.",
+ "bankrupt_select_info": "Выберите игрока для банкротства:",
+
+ "deathbomb": "Смертельная бомба",
+ "deathbomb_desc": "Вы взрываетесь при смерти, убивая ближайших игроков",
+ "deathbomb_explosion": "АЛЛАХУ АКБАР!!!",
+
+ "ninja": "Ниндзя",
+ "ninja_desc": "Стоя на месте, ваша невидимость увеличивается на 33%, в приседе на 33%, с ножом на 33%",
+
+ "nonades": "Антигранаты",
+ "nonades_desc": "Гранаты не наносят вам урон",
+
+ "norecoil": "Фокус",
+ "norecoil_desc": "Нет отдачи при стрельбе",
+
+ "noclip": "Ноклип",
+ "noclip_desc": "Нажмите [css_useSkill], чтобы включить ноклип на короткое время",
+
+ "oneshot": "Один выстрел",
+ "oneshot_desc": "Попадание по врагу мгновенно убивает его",
+
+ "onlyhead": "Только голова",
+ "onlyhead_desc": "Вы получаете урон только в голову",
+
+ "paweljumper": "Павел-прыгун",
+ "paweljumper_desc": "Вы получаете случайное количество дополнительных прыжков",
+ "paweljumper_desc2": "Вы получаете {0} дополнительных прыжков",
+
+ "phoenix": "Феникс",
+ "phoenix_desc": "Есть шанс возродиться после смерти",
+ "phoenix_desc2": "Ваш шанс возродиться после смерти: {0}%",
+ "phoenix_respawn": "Вы были воскрешены из пепла благодаря силе CHATCOLORS.REDФеникса",
+
+ "psychicdefusing": "Психическое разминирование",
+ "psychicdefusing_desc": "Когда вы рядом с бомбой, вы начинаете её разминировать",
+ "psychicdefusing_hud_info": "{0} секунд осталось до разминирования",
+
+ "pilot": "Пилот",
+ "pilot_desc": "Летайте ограниченное время. Двойной прыжок для полёта",
+ "pilot_hud_info": "Топливо",
+
+ "planter": "Свободная установка",
+ "planter_desc": "Вы можете установить бомбу где угодно, с таймером взрыва 60 секунд.",
+ "planter_planting": "Установка ({0})...",
+
+ "poison": "Яд",
+ "poison_desc": "Выберите игрока, который будет получать урон каждые несколько секунд",
+ "poison_enemy_info": "Вы были отравлены.",
+ "poison_player_info": "Игрок '{0}' был отравлен.",
+ "poison_select_info": "Отравить игрока:",
+
+ "primaryban": "Без винтовок",
+ "primaryban_desc": "Выберите игрока, который не сможет использовать винтовки",
+ "primaryban_enemy_info": "Вы больше не можете использовать винтовки.",
+ "primaryban_player_info": "Игрок '{0}' больше не может использовать винтовки.",
+ "primaryban_select_info": "Запретить винтовки игроку:",
+
+ "prosthesis": "Протез",
+ "prosthesis_desc": "Руки и ноги защищены от пуль",
+
+ "push": "Толкач",
+ "push_desc": "Есть шанс оттолкнуть врага назад при попадании",
+ "push_desc2": "Ваш шанс оттолкнуть врага: {0}%",
+
+ "pyro": "Пироман",
+ "pyro_desc": "Молотов восстанавливает здоровье",
+
+ "quickshot": "Скорострельность",
+ "quickshot_desc": "Все пули выпускаются очень быстро",
+
+ "radarhack": "Взлом радара",
+ "radarhack_desc": "Враги видны на радаре",
+
+ "rambo": "Рэмбо",
+ "rambo_desc": "Вы получаете случайное количество здоровья в начале раунда",
+
+ "randomweapon": "Случайное оружие",
+ "randomweapon_desc": "Нажмите [css_useSkill], чтобы получить случайное оружие",
+
+ "rezombie": "Ре-зомби",
+ "rezombie_desc": "После смерти вы возрождаетесь как зомби с увеличенным здоровьем и без оружия",
+
+ "reactivearmor": "Реактивная броня",
+ "reactivearmor_desc": "Броня поглощает первый полученный урон",
+
+ "regeneration": "Регенерация",
+ "regeneration_desc": "Вы восстанавливаете здоровье каждые несколько секунд",
+
+ "replicator": "Репликатор",
+ "replicator_desc": "Нажмите [css_useSkill], чтобы создать копию, наносящую урон при попадании",
+
+ "retreat": "Отступление",
+ "retreat_desc": "Нажмите [css_useSkill], чтобы вернуться на спавн",
+
+ "returntosender": "Вернуть отправителю",
+ "returntosender_desc": "Первое попадание по врагу отправляет его обратно на спавн",
+
+ "richboy": "Богач",
+ "richboy_desc": "Вы получаете случайную сумму денег в начале раунда",
+
+ "robinhood": "Робин Гуд",
+ "robinhood_desc": "Нанесение урона врагу крадёт его деньги",
+
+ "rubber": "Резиновые пули",
+ "rubber_desc": "Ваши пули значительно замедляют игроков",
+
+ "saper": "Сапёр",
+ "saper_desc": "Вы можете устанавливать и обезвреживать бомбы быстрее",
+
+ "secondlife": "Второй шанс",
+ "secondlife_desc": "После смерти вы возрождаетесь с тем же количеством здоровья",
+
+ "shade": "Тень",
+ "shade_desc": "Есть шанс телепортироваться за спину врагу при попадании",
+ "shade_desc2": "Ваш шанс телепортироваться за спину врагу: {0}%",
+ "shade_nospace": "Нет места",
+
+ "shortbomb": "Короткий фитиль",
+ "shortbomb_desc": "Бомба взрывается гораздо быстрее",
+
+ "silent": "Тишина",
+ "silent_desc": "Ваши шаги и прыжки не слышны ДРУГИМ игрокам",
+
+ "smoker": "Курильщик",
+ "smoker_desc": "Ваши дымовые гранаты никогда не заканчиваются",
+
+ "sniperelite": "Снайпер-элита",
+ "sniperelite_customname": "Навык снайпера-элиты",
+ "sniperelite_desc": "Нажмите [css_useSkill], чтобы заменить текущее оружие на AWP",
+
+ "soldier": "Солдат",
+ "soldier_desc": "У вас случайный множитель урона",
+ "soldier_desc2": "Ваш множитель урона: {0}x",
+
+ "soundmaker": "Звуковик",
+ "soundmaker_desc": "Время от времени вы слышите крики игроков",
+
+ "spectator": "Наблюдатель",
+ "spectator_desc": "Нажмите [css_useSkill], чтобы наблюдать за случайным врагом",
+
+ "swapposition": "Обмен позициями",
+ "swapposition_desc": "Нажмите [css_useSkill], чтобы поменяться местами со случайным врагом",
+
+ "teleporter": "Телепортер",
+ "teleporter_desc": "Есть шанс поменяться местами с врагом при попадании",
+ "teleporter_desc2": "Ваш шанс обмена местами после попадания: {0}%",
+
+ "thief": "Вор",
+ "thief_desc": "Вы можете украсть навык у выбранного игрока",
+ "thief_enemy_info": "Ваш навык был украден.",
+ "thief_player_info": "Навык игрока '{0}' был украден.",
+ "thief_select_info": "Украсть навык у игрока:",
+ "thief_incorrect_skill": "Этот навык нельзя выбрать!",
+
+ "thirdeye": "Третий глаз",
+ "thirdeye_desc": "Нажмите [css_useSkill], чтобы активировать вид от третьего лица",
+
+ "thorns": "Шипы",
+ "thorns_desc": "Противник получает часть урона, который нанёс вам",
+
+ "throwingknife": "Метательный нож",
+ "throwingknife_desc": "Нажмите [css_useSkill], чтобы метнуть нож. Но остерегайтесь других",
+
+ "toxicsmoke": "Токсичный дым",
+ "toxicsmoke_desc": "Ваши дымовые гранаты наносят урон",
+
+ "wallhack": "Воллхак",
+ "wallhack_desc": "Вы видите врагов сквозь стены",
+
+ "watchmaker": "Часовщик",
+ "watchmaker_desc": "Каждый бросок гранаты изменяет время раунда",
+ "watchmaker_ct": "Время раунда сокращено на {0} секунд.",
+ "watchmaker_tt": "Время раунда увеличено на {0} секунд.",
+
+ "weaponsswap": "Обмен оружием",
+ "weaponsswap_desc": "Нажмите [css_useSkill], чтобы обменяться оружием со случайным врагом",
+ "weaponsswap_hud_info2": "У вас нет оружия для обмена",
+
+ "weightless": "Невесомость",
+ "weightless_desc": "Ваши гранаты не подвержены гравитации и летают быстрее",
+
+ "wildthrow": "Дикие броски",
+ "wildthrow_desc": "Выберите игрока, у которого будут проблемы с бросанием гранат",
+ "wildthrow_player_info": "Игрок '{0}' забыл все свои гранатлайны",
+ "wildthrow_select_info": "Выберите игрока:",
+
+ "zeus": "Зевс",
+ "zeus_desc": "Зевс x27 мгновенно перезаряжается",
+
+ "your_skill": "Ваш текущий навык",
+ "enemy_skill": "Навык врага",
+ "observer_skill": "Навык игрока",
+ "welcome_message": "Добро пожаловать {PLAYER} на {SERVER_NAME}!\nТекущая версия jRandomSkills: {VERSION} ({SKILLS_COUNT} навыков).\n\nОригинал создан:\n{AUTHOR1}\nМодифицирован и улучшен:\n{AUTHOR2}\nОфициальный Discord: https://discord.gg/9H8EZYBpPF",
+ "drawing_skill": "Получение навыка",
+ "disabled_weapon": "Вы не можете использовать это оружие",
+
+ "hud_info": "Подождите ещё {0} секунд",
+ "hud_info_no_enemy": "Враг не найден",
+ "active_hud_info": "Активно ещё {0} миллисекунд",
+
+ "skills_menu": "Список навыков",
+ "no_player": "Подходящий игрок не найден.",
+ "duplicate_player": "Найдено несколько игроков с таким именем.",
+ "selectplayerskill_command": "Введите /t",
+ "selectplayerskill_incorrect_enemy_index": "Игроки для выбора не найдены.",
+
+ "skill_not_found_setskill": "Навык не найден",
+ "player_not_found_setskill": "Игрок не найден",
+ "correct_form_setskill": "Правильное использование: CHATCOLORS.RED!setskill <ник> <навык>",
+ "correct_form_setscore": "Правильное использование: CHATCOLORS.RED!setscore ",
+ "done_setskill": "Навык установлен",
+ "error_setskill": "Не удалось установить CHATCOLORS.REDнавык",
+ "for_setskill": "для",
+
+ "invalid_map": "Название карты введено неверно!",
+ "loading_map": "Загрузка новой карты",
+
+ "pause": "Матч приостановлен.",
+ "unpause": "Матч возобновлён.",
+ "healed": "Вы были вылечены.",
+ "game_start": "Игра началась!",
+ "reload": "Языки и конфигурации перезагружены.",
+ "hud_on": "HUD включён.",
+ "hud_off": "HUD выключен.",
+
+ "vote_started": "Голосование начато: '{0}'",
+ "vote_timeout": "Голосование '{0}' истекло!",
+ "vote_wait": "Нужно подождать перед началом нового голосования!",
+ "vote_same_wait": "Нужно подождать перед повторным голосованием по той же теме!",
+ "vote_not_enough_players": "Недостаточно игроков для начала голосования!",
+ "vote_alredy_voted": "Вы уже проголосовали!",
+ "vote_vote": "Голосование",
+
+ "bombsite_a": "Бомб-сайт A",
+ "bombsite_b": "Бомб-сайт B",
+ "bombplanted": "Бомба установлена\n{0} секунд до взрыва",
+
+ "teammate_skills": "Навыки ваших тиммейтов",
+ "summary": "Итоги прошедшего раунда",
+
+ "menu_controlls_scroll": "W/S — Прокрутка",
+ "menu_controlls_padding": " | ",
+ "menu_controlls_select": "E — Выбрать"
+}
diff --git a/jRandomSkills - SRC Files/src/lang/tr.json b/jRandomSkills - SRC Files/src/lang/tr.json
index fddcada..fca1676 100644
--- a/jRandomSkills - SRC Files/src/lang/tr.json
+++ b/jRandomSkills - SRC Files/src/lang/tr.json
@@ -3,52 +3,52 @@
"none_desc": "Hiçbir yeteneğin yok",
"aimbot": "Aimbot",
- "aimbot_desc": "Vurduğun her mermi kafadan vuruş (headshot) sayılır",
+ "aimbot_desc": "Vurduğunda kafadan (HS) sayılır",
- "aimlock": "Nişan Kilidi",
+ "aimlock": "Kitlenme",
"aimlock_desc": "En yakın düşmana nişan almak için [css_useSkill] tuşuna basın",
- "anomaly": "Anomali",
+ "anomaly": "Zaman Büken",
"anomaly_desc": "Zamanı birkaç saniye geriye alırsın",
"antyflash": "Anti-Flash",
- "antyflash_desc": "Flaş bombalarından etkilenmezsin ve senin flaşların 7 saniye sürer",
+ "antyflash_desc": "Flaşa kör olmazsın ve flaşların 7 saniye sürer",
- "antyhead": "Demir Kafa",
- "antyhead_desc": "Kafadan vuruşlardan hasar almazsın",
+ "antyhead": "Beton Kafa",
+ "antyhead_desc": "Kafadan hasar almazsın",
- "areareaper": "Bölge Azraili",
- "areareaper_desc": "Devre dışı bırakmak için bir bomba alanı seçebilirsin",
- "areareaper_incorrect_site": "Böyle bir bomba alanı bulunamadı.",
- "areareaper_no_site": "Hiçbir bomba alanı bulunamadı.",
- "areareaper_select_info": "Devre dışı bırakılacak alanı seçin:",
- "areareaper_site_disabled": "Bomba alanı {0} devre dışı bırakıldı - buraya bomba kurulamaz!",
- "areareaper_used_info": "Yeteneğin zaten kullanıldı.",
- "areareaper_bombsite_disabled": "Bu bomba alanı devre dışı bırakıldı!",
+ "areareaper": "Mekan Kapatan",
+ "areareaper_desc": "Haritadaki bir bomba alanını tamamen devre dışı bırakabilirsin",
+ "areareaper_incorrect_site": "Böyle bir bomba alanı yok uydurma",
+ "areareaper_no_site": "Haritada bomba alanı bulunamadı",
+ "areareaper_select_info": "Kapatılacak bomba alanını seç:",
+ "areareaper_site_disabled": "{0} alanı mühürlendi - artık buraya bomba kurulamaz!",
+ "areareaper_used_info": "Yeteneğini zaten kullandın, açgözlülük yapma",
+ "areareaper_bombsite_disabled": "Bu bomba alanı kullanıma kapatıldı!",
"armored": "Zırhlı",
- "armored_desc": "Rastgele bir hasar alma çarpanına sahip olursun",
- "armored_desc2": "Hasar alma çarpanın: {0}x",
+ "armored_desc": "Rastgele hasar alma çarpanına sahip olursun",
+ "armored_desc2": "Hasar alma: {0}x",
"assassin": "Suikastçı",
- "assassin_desc": "Düşmanlara arkadan vurduğunda daha fazla hasar verirsin",
+ "assassin_desc": "Düşmanlara arkadan daha fazla hasar verirsin",
"astronaut": "Astronot",
- "astronaut_desc": "Raund başında rastgele bir yerçekimi değeri alırsın",
- "astronaut_desc2": "Rastgele yerçekimin: {0}x",
+ "astronaut_desc": "Rastgele bir yerçekimi değerine sahip olursun",
+ "astronaut_desc2": "Yerçekimin: {0}x",
"moneyswap": "Vergi Memuru",
- "moneyswap_desc": "Para takas etmek için bir oyuncu seç",
- "moneyswap_enemy_info": "Vergi dairesi seni yakaladı.",
- "moneyswap_player_info": "'{0}' isimli oyuncuyla paraları takas ettin.",
- "moneyswap_select_info": "Para takası yapılacak oyuncu:",
+ "moneyswap_desc": "Bir düşmanla paranı takasla",
+ "moneyswap_enemy_info": "Maliye kapına dayandı",
+ "moneyswap_player_info": "'{0}' isimli oyuncuyla paraları takas ettin",
+ "moneyswap_select_info": "Para takasla biriyle:",
"baseball": "Beyzbolcu",
- "baseball_desc": "Yanıltıcı bomban (decoy) duvarlardan seker ve çarptığı düşmanı anında öldürür",
+ "baseball_desc": "Yanıltıcı bomban (decoy) duvarlardan seker ve çarptığı düşmanı öldürür",
- "behind": "Düşman Döndürücü",
- "behind_desc": "Düşmana vurduğunda onu 180 derece döndürme şansın olur",
- "behind_desc2": "Vuruşta düşmanı döndürme şansın: %{0}",
+ "behind": "Baş Döndüren",
+ "behind_desc": "Vurduğunda düşmanı 180 derece döndürme şansın olur",
+ "behind_desc2": "Baş döndürme şansın: %{0}",
"blademaster": "Kılıç Ustası",
"blademaster_desc": "Bıçak tutarken mermileri sektirme şansın artar",
@@ -57,105 +57,105 @@
"bunnyhop_desc": "Otomatik \"BunnyHop\" yaparsın",
"c4camouflage": "C4 Kamuflajı",
- "c4camouflage_desc": "Bombayı taşırken görünmez olursun",
+ "c4camouflage_desc": "Elinde C4 varken tamamen görünmez olursun",
"carefulbullets": "Dikkatli Mermiler",
- "carefulbullets_desc": "Iskaladığın her mermi için hasar alacak bir oyuncu seç",
- "carefulbullets_enemy_info": "Artık isabetsiz atışlar canını yakacak.",
- "carefulbullets_player_info": "'{0}' artık daha dikkatli olmalı.",
+ "carefulbullets_desc": "Düşman mermi kaçırırsa hasar alır",
+ "carefulbullets_enemy_info": "Mermi kaçırmak canını yakacak",
+ "carefulbullets_player_info": "'{0}' artık mermi sıkarken iki kere düşünecek",
"carefulbullets_select_info": "İsabetsiz atışların hasar vereceği oyuncu:",
"catapult": "Mancınık",
- "catapult_desc": "Düşmanı havaya fırlatma şansın olur",
- "catapult_desc2": "Vuruşta düşmanı fırlatma şansın: %{0}",
+ "catapult_desc": "Vurduğun rakibi uzaya (yukarı doğru) fırlatma şansın var",
+ "catapult_desc2": "Fırlatma şansın: %{0}",
"chicken": "Tavuk",
- "chicken_desc": "Tavuk modeli + %10 daha hızlı hareket - 50 HP alırsın",
+ "chicken_desc": "Tavuk modeli ve %10 daha hızlısın fakat 50 HP",
- "chillout": "Sakin Ol",
+ "chillout": "Ağırdan Al",
"chillout_desc": "Bombayı kurmak çok daha uzun sürer",
- "cutter": "Kesici",
- "cutter_desc": "Bıçakla tek atışta öldürme",
+ "cutter": "Kasap",
+ "cutter_desc": "Bıçakla tek atarsın",
- "cypher": "Cypher",
- "cypher_desc": "Kamera oluşturmak/kameraya geçmek için E tuşuna bas",
- "cypher_nospace": "Kamera duvara dik açıyla yerleştirilmelidir",
+ "cypher": "Gözcü",
+ "cypher_desc": "Kamera oluşturmak/geçmek için [css_useSkill] tuşuna bas",
+ "cypher_nospace": "Kamerayı duvara dik yerleştir",
"darkness": "Karanlık",
- "darkness_desc": "Seçilen bir düşmana karanlık efekti uygular",
- "darkness_enemy_info": "Işıklar sönsün.",
- "darkness_player_info": "Karanlık, '{0}' isimli oyuncuyu ele geçirdi.",
- "darkness_select_info": "Karanlık uygulanacak oyuncuyu seç:",
+ "darkness_desc": "Bir düşmanın ekranını karart",
+ "darkness_enemy_info": "Işıklar sönsün",
+ "darkness_player_info": "'{0}' isimli oyuncunun dünyasını kararttın",
+ "darkness_select_info": "Karanlık bir oyuncuyu seç:",
- "deactivator": "Devre Dışı Bırakıcı",
- "deactivator_desc": "Yeteneğini kapatmak istediğin bir oyuncu seç",
- "deactivator_enemy_info": "Yeteneğin devre dışı bırakıldı.",
- "deactivator_player_info": "'{0}' isimli oyuncunun yeteneği devre dışı bırakıldı.",
- "deactivator_select_info": "Bir oyuncunun yeteneğini devre dışı bırak:",
+ "deactivator": "Silgi",
+ "deactivator_desc": "Bir düşmanın yeteneğini sil",
+ "deactivator_enemy_info": "Yeteneğin silindi",
+ "deactivator_player_info": "'{0}' isimli oyuncunun yeteneği silindi",
+ "deactivator_select_info": "Yetenek silmek için oyuncu seç:",
"deaf": "Sağır",
- "deaf_desc": "Tüm seslerini kapatmak için bir oyuncu seç",
- "deaf_enemy_info": "Kulaklıkların oyundan ayrıldı.",
+ "deaf_desc": "Bir düşmanın kulağını kapat ve sesleri duymaz hale getir",
+ "deaf_enemy_info": "Kulaklıkların tıkandı",
"deaf_player_info": "'{0}' isimli oyuncu için sesler kapatıldı.",
- "deaf_select_info": "Sesleri kapatılacak oyuncuyu seç:",
+ "deaf_select_info": "Sağır bir oyuncuyu seç:",
"disarmament": "Silahsızlandırma",
- "disarmament_desc": "Vurduğun düşmanın silahını düşürme şansın olur",
- "disarmament_desc2": "Düşmanı silahsızlandırma şansın: %{0}",
+ "disarmament_desc": "Vurduğunda rakibin elindeki silahı yere düşürme şansın olur",
+ "disarmament_desc2": "Silahsızlandırma şansın: %{0}",
- "distancer": "Mesafe Ölçer",
- "distancer_desc": "En yakın düşmana olan mesafeni görebilirsin",
+ "distancer": "Kronometre",
+ "distancer_desc": "En yakın düşmanın mesafesini görürsün",
"dash": "Atılma",
- "dash_desc": "Atılmak (dash) için ikinci kez zıpla",
+ "dash_desc": "Atılmak için ikinci kez zıpla",
- "dracula": "Dracula",
- "dracula_desc": "Düşmana vurmak, verdiğin hasarın bir yüzdesi kadar canını yeniler",
+ "dracula": "Drakula",
+ "dracula_desc": "Rakiplere verdiğin hasarın belirli bir yüzdesi kadar can alırsın",
- "duplicator": "Kopyalayıcı",
+ "duplicator": "Kopyacı",
"duplicator_desc": "Yeteneğini kopyalamak için bir oyuncu seç",
"duplicator_player_info": "'{0}' isimli oyuncunun yeteneği kopyalandı.",
"duplicator_select_info": "Yeteneği kopyalanacak oyuncu:",
"dwarf": "Cüce",
"dwarf_desc": "Raund başında rastgele karakter boyutu",
- "dwarf_desc2": "Boyut çarpanın: {0}x",
+ "dwarf_desc2": "Boyutun: {0}x",
- "enemyspawn": "Düşman Başlangıcı",
- "enemyspawn_desc": "Düşman başlangıç noktasına ışınlanmak için E tuşuna bas",
+ "enemyspawn": "Base Baskını",
+ "enemyspawn_desc": "[css_useSkill] tuşuna basarak düşman doğma noktasına ışınlan",
- "explosiveshot": "Patlayıcı Atış",
- "explosiveshot_desc": "Ateş ederken rastgele patlayıcı mermi atma şansı",
- "explosiveshot_desc2": "Patlayıcı mermi atma şansın: %{0}",
+ "explosiveshot": "Patlayıcı Mermi",
+ "explosiveshot_desc": "Ateş ederken rastgele mermilerin patlayabilir",
+ "explosiveshot_desc2": "Patlayan mermi şansı: %{0}",
"falconeye": "Şahin Gözü",
- "falconeye_desc": "Kuş bakışı kamerayı aktif etmek için E tuşuna bas",
+ "falconeye_desc": "[css_useSkill] tuşuna basarak kuş bakışına geç",
- "fastreload": "Hızlı Şarjör",
- "fastreload_desc": "Eldeki silahı anında doldurmak için E tuşuna bas",
+ "fastreload": "Şipşak Şarjör",
+ "fastreload_desc": "[css_useSkill] tuşuna basarak şarjörünü hızlıca değiştir",
"flash": "Flash",
"flash_desc": "Raund başında rastgele oyuncu hızı",
- "flash_desc2": "Hız çarpanın: {0}x",
+ "flash_desc2": "Hızın: {0}x",
"fortnite": "Fortnite",
- "fortnite_desc": "Parçalanabilir bir barikat oluşturmak için E tuşuna bas",
+ "fortnite_desc": "[css_useSkill] tuşuna basarak barikat kur",
"fragilebomb": "Hassas Bomba",
- "fragilebomb_desc": "Bombaya ateş etmek ona hasar verir",
- "fragilebomb_bomb_health": "Bomba canı",
+ "fragilebomb_desc": "Kurulu bombaya ateş etmek bombanın canını azaltır",
+ "fragilebomb_bomb_health": "Bombanın canı",
- "friendlyfire": "Dost Ateşi",
+ "friendlyfire": "Dost Şifası",
"friendlyfire_desc": "Takım arkadaşlarına ateş etmek onları iyileştirir",
- "frozendecoy": "Dondurucu Yem",
- "frozendecoy_desc": "Yanıltıcı bomban (decoy) yakındaki tüm oyuncuları dondurur",
+ "frozendecoy": "Buz Kıran",
+ "frozendecoy_desc": "Yanıltıcı bomba (decoy) yakındaki tüm oyuncuları dondurur",
"gambler": "Kumarbaz",
"gambler_desc": "Sunulan listeden bir yetenek seç.",
"gambler_select_info": "Yeteneğini seç:",
- "gambler_more": "#00FF00|${0} karşılığında yenile",
+ "gambler_more": "#00FF00|${0} karşılığında yeni yetenekler",
"gambler_no_money": "Yeterli para yok.",
"ghost": "Hayalet",
@@ -165,71 +165,71 @@
"glaz_desc": "Sis bombalarının içini görebilirsin",
"glitch": "Glitç",
- "glitch_desc": "Seçilen bir düşmanın radarını devre dışı bırakır",
- "glitch_enemy_info": "Radarın devre dışı bırakıldı.",
+ "glitch_desc": "Seçilen bir düşmanın radarını kapatır",
+ "glitch_enemy_info": "Radarın kapandı",
"glitch_player_info": "'{0}' isimli oyuncunun radarı devre dışı bırakıldı.",
"glitch_select_info": "Radarı kapatılacak oyuncuyu seç:",
"glue": "Yapıştırıcı",
"glue_desc": "Bombaların duvarlara yapışır",
- "godmode": "Ölümsüzlük",
- "godmode_desc": "Kısa süreliğine ölümsüz olmak için E tuşuna bas",
- "godmode_off": "Ölümsüzlük kapalı",
- "godmode_on": "Ölümsüzlük açık",
+ "godmode": "Ölümsüz",
+ "godmode_desc": "[css_useSkill] tuşuna basarak kısa süreli ölümsüz ol",
+ "godmode_off": "Ölümsüzlük kapandı",
+ "godmode_on": "Ölümsüzlük açıldı",
"grenadier": "Bombacı",
"grenadier_desc": "Sınırsız el bombasına sahipsin",
- "healingsmoke": "İyileştiren Sis",
+ "healingsmoke": "Şifalı Sis",
"healingsmoke_desc": "Sis bombaların iyileştirir",
"hermit": "Münzevi",
- "hermit_desc": "Öldürmek, mermilerini ve canının bir kısmını yeniler",
+ "hermit_desc": "Öldüğünde mernin ve canının biraz yenilenir",
"holyhandgrenade": "Kutsal El Bombası",
- "holyhandgrenade_desc": "El bombaların iki kat hasar verir ve iki kat menzile sahiptir",
+ "holyhandgrenade_desc": "El bomban iki kat hasara ve menzile sahip",
- "homingnades": "Güdümlü El Bombaları",
- "homingnades_desc": "El bombalarınız (sis hariç) düşmanlara yönelir",
+ "homingnades": "Güdümlü Bomba",
+ "homingnades_desc": "Bombalarınız (sis hariç) düşmanlara yönelir",
- "hotbomb": "Sıcak Bomba",
- "hotbomb_desc": "Siz hayatta olduğunuz sürece, bomba taşıyıcısına hasar verir",
- "hotbomb_hint": "Dikkatli ol, bomba çok sıcak!",
+ "hotbomb": "Sıcak C4",
+ "hotbomb_desc": "Yaşadığın sürece bombacının canı azalıyor",
+ "hotbomb_hint": "Bomba çok sıcak!",
"iana": "Hologram",
- "iana_desc": "Hologramını birkaç saniyeliğine kontrol etmek için E tuşuna bas",
+ "iana_desc": "[css_useSkill] tuşuna basarak bir hologram oluştur",
- "illiterate": "Okuryazar Olmayan",
- "illiterate_desc": "Siz hayatta olduğunuz sürece, düşmanlarınız yazıları okuyamaz",
+ "illiterate": "Cahiliye",
+ "illiterate_desc": "Yaşadığın sürece rakibin sohbeti (chat) veya oyun yazılarını okuyamaz",
"illusionist": "İllüzyonist",
- "illusionist_desc": "Düz ilerleyen bir kopya oluşturmak için [css_useSkill] tuşuna basın",
+ "illusionist_desc": "[css_useSkill] tuşuna basarak düz ilerleyen illüzyon oluştur",
"impostor": "Sahtekar",
- "impostor_desc": "Raunda düşman oyuncu modeliyle başlarsın",
+ "impostor_desc": "Düşman oyuncu modeline dönüşürsün",
"infiniteammo": "Sınırsız Mermi",
- "infiniteammo_desc": "Tüm silahların için sınırsız mermi alırsın",
+ "infiniteammo_desc": "Tüm silahların sınırsız mermisi olur",
"jackal": "İzci",
- "jackal_desc": "Her rakip arkasında bir iz bırakır",
+ "jackal_desc": "Her rakip yürüdüğünde ayak izi bırakır",
"jammer": "Sinyal Kesici",
"jammer_desc": "Bir oyuncunun nişangahını (crosshair) kapatmak için seç",
- "jammer_enemy_info": "Nişangahın devre dışı bırakıldı.",
- "jammer_player_info": "'{0}' isimli oyuncunun nişangahı devre dışı bırakıldı.",
+ "jammer_enemy_info": "Nişangahın kapatıldı.",
+ "jammer_player_info": "'{0}' isimli oyuncunun nişangahı kapatıldı.",
"jammer_select_info": "Nişangahı kapatılacak oyuncuyu seç:",
- "jester": "Joker",
- "jester_desc": "Joker modunda hasar alamazsın ve veremezsin. Bu mod birkaç saniyede bir değişir.",
- "jester_mode": "Joker Modu",
+ "jester": "Soytarı",
+ "jester_desc": "Soytarı modunda hasar alamazsın ve veremezsin. Bu mod birkaç saniyede bir değişir.",
+ "jester_mode": "Soytarı Modu",
"jester_on": "AÇIK",
"jester_off": "KAPALI",
"jumpban": "Bacaksız",
"jumpban_desc": "Zıplayamayacak bir oyuncu seç",
- "jumpban_enemy_info": "Birisi bacaklarını kesti.",
+ "jumpban_enemy_info": "Bacakların kesildi",
"jumpban_player_info": "'{0}' artık zıplayamaz.",
"jumpban_select_info": "Zıplaması yasaklanacak oyuncu:",
@@ -237,59 +237,59 @@
"jumpingjack_desc": "Zıplamak canını yeniler",
"killerflash": "Ölümcül Flaş",
- "killerflash_desc": "Flaş bombanla tamamen kör olan herkes ölür (sen dahil)",
+ "killerflash_desc": "Flaşına tamamen kör olan herkes ölür (sen dahil)",
"lifeswap": "Can Takası",
"lifeswap_desc": "Can değerlerini takas etmek için bir oyuncu seç",
- "lifeswap_enemy_info": "Birisi canını ödünç aldı.",
+ "lifeswap_enemy_info": "Birisi canını çaldı",
"lifeswap_player_info": "'{0}' isimli oyuncuyla canlarını takas ettin.",
"lifeswap_select_info": "Can takası yapılacak oyuncu:",
"longknife": "Uzun Bıçak",
- "longknife_desc": "Bıçak saldırısı mesafeden bağımsız olarak hasar verir",
+ "longknife_desc": "Bıçağın uzaktaki rakibe hasar verebilir",
"longzeus": "Uzak Zeus",
- "longzeus_desc": "Zeus mesafeden bağımsız olarak hasar verir",
+ "longzeus_desc": "Zeus uzaktaki rakibe hasar verebilir",
"magneticdecoy": "Manyetik Yanıltıcı",
"magneticdecoy_desc": "Yanıltıcı bombanız yakındaki oyuncuları kendine çeker",
"magneto": "Magneto",
- "magneto_desc": "Tüm düşman el bombaları sizden uzaklaştırılır",
+ "magneto_desc": "Tüm düşman bombaları sizden uzaklaştırılır",
"magnifier": "Büyüteç",
"magnifier_desc": "Düşmanın ekranını yakınlaştırarak görüş alanını daraltır",
- "magnifier_enemy_info": "Görüş alanın bozuldu!",
+ "magnifier_enemy_info": "Görüşün bozuldu!",
"magnifier_player_info": "'{0}' isimli oyuncunun ekranı yakınlaştırıldı.",
"magnifier_select_info": "Ekranı büyütülecek oyuncuyu seç:",
"medic": "Sıhhiye",
- "medic_desc": "50 can yenileyen bir iyileştirme yükü kullanmak için E tuşuna bas",
+ "medic_desc": "[css_useSkill] tuşuna basarak kendine anında 50 HP bas",
- "miner": "Bomba Madencisi",
+ "miner": "Mayın",
"miner_desc": "El bombanız (HE) sadece yakında bir düşman olduğunda patlar",
"bankrupt": "İflas",
"bankrupt_desc": "Tüm parasını kaybedecek bir oyuncu seç",
- "bankrupt_enemy_info": "İflas ettin.",
+ "bankrupt_enemy_info": "İflas ettin!",
"bankrupt_player_info": "'{0}' isimli oyuncu iflas etti.",
"bankrupt_select_info": "İflas edecek oyuncuyu seç:",
- "muhammed": "Bombacı",
- "muhammed_desc": "Öldüğünde patlayarak etraftaki oyuncuları öldürürsün",
- "muhammed_explosion": "ALLAHU EKBER!!!",
+ "deathbomb": "Canlı Bomba",
+ "deathbomb_desc": "Öldüğünde patlayarak etraftaki oyuncuları öldürürsün",
+ "deathbomb_explosion": "BOOM!!!",
"ninja": "Ninja",
- "ninja_desc": "Hareketsiz durmak görünmezliğini %33, çömelmek %33 ve bıçak tutmak %33 artırır",
+ "ninja_desc": "Görünmezliğini sabit durmak %33, eğilmek %33 ve bıçak tutmak %33 artırır",
"nonades": "Bomba Geçirmez",
"nonades_desc": "Bombalar sana hasar vermez",
"norecoil": "Odaklanma",
- "norecoil_desc": "Ateş ederken geri tepme olmaz",
+ "norecoil_desc": "Silahın hiç sekmez",
"noclip": "Noclip",
- "noclip_desc": "Kısa süreliğine noclip açmak için E tuşuna bas",
+ "noclip_desc": "[css_useSkill] tuşuna basarak duvarların içinden geç",
"oneshot": "Tek Atış",
"oneshot_desc": "Düşmana vurmak onu anında öldürür",
@@ -297,18 +297,18 @@
"onlyhead": "Sadece Kafa",
"onlyhead_desc": "Sadece kafadan hasar alırsın",
- "paweljumper": "Ekstra Zıplama",
- "paweljumper_desc": "Rastgele sayıda ekstra zıplama hakkı kazanırsın",
- "paweljumper_desc2": "{0} tane ekstra zıplama hakkın var",
+ "paweljumper": "Zıppır",
+ "paweljumper_desc": "Rastgele sayıda ekstra zıplaman olur",
+ "paweljumper_desc2": "{0} kez ekstra zıplayabilirsin",
"phoenix": "Anka Kuşu",
"phoenix_desc": "Öldükten sonra rastgele yeniden doğma şansın olur",
- "phoenix_desc2": "Ölümden sonra yeniden doğma şansın: %{0}",
- "phoenix_respawn": "Anka Kuşu'nun gücü sayesinde küllerinden yeniden doğdun!",
+ "phoenix_desc2": "Yeniden doğma şansın: %{0}",
+ "phoenix_respawn": "Küllerinden yeniden doğdun!",
"psychicdefusing": "Psişik İmha",
"psychicdefusing_desc": "Bombanın yanındayken onu otomatik imha etmeye başlarsın",
- "psychicdefusing_hud_info": "İmha için {0} saniye kaldı",
+ "psychicdefusing_hud_info": "Bombanın çözülmesi için son {0} saniye",
"pilot": "Pilot",
"pilot_desc": "Sınırlı bir süre uçun. Uçmak için zıplama tuşuna iki kez basın",
@@ -326,7 +326,7 @@
"primaryban": "Tüfek Yasak",
"primaryban_desc": "Tüfek kullanamayacak bir oyuncu seç",
- "primaryban_enemy_info": "Artık tüfek kullanamazsın.",
+ "primaryban_enemy_info": "Tüfek kullanmayı unuttun",
"primaryban_player_info": "'{0}' artık tüfek kullanamaz.",
"primaryban_select_info": "Tüfek kullanımı yasaklanacak oyuncu:",
@@ -335,13 +335,13 @@
"push": "İtici",
"push_desc": "Düşmana vurduğunda onu geri itme şansın olur",
- "push_desc2": "Düşmanı geri itme şansın: %{0}",
+ "push_desc2": "Geri itme şansın: %{0}",
- "pyro": "Piromani",
+ "pyro": "Ateşbaz",
"pyro_desc": "Molotof canını yeniler",
- "quickshot": "Seri Ateş",
- "quickshot_desc": "Tüm mermiler çok hızlı ateşlenir",
+ "quickshot": "Seri Atış",
+ "quickshot_desc": "Silahın daha hızlı ateş eder",
"radarhack": "Radar Hack",
"radarhack_desc": "Düşmanlar radarda görünür",
@@ -349,34 +349,34 @@
"rambo": "Rambo",
"rambo_desc": "Raund başında rastgele miktarda can alırsın",
- "randomweapon": "Rastgele Silah",
- "randomweapon_desc": "Rastgele bir silah almak için E tuşuna bas",
+ "randomweapon": "Silah Kumarı",
+ "randomweapon_desc": "[css_useSkill] tuşuna basarak rastgele bir silah al",
- "rezombie": "Zombi Dönüşümü",
- "rezombie_desc": "Öldükten sonra daha fazla canla ve silahsız bir zombi olarak yeniden doğarsın",
+ "rezombie": "Zombi",
+ "rezombie_desc": "Öldükten sonra daha fazla canla ve silahsız zombi olarak doğarsın",
"reactivearmor": "Reaktif Zırh",
- "reactivearmor_desc": "Zırh alınan ilk hasarı emmer",
+ "reactivearmor_desc": "Zırhın alınan ilk hasarı emmer",
"regeneration": "Yenilenme",
"regeneration_desc": "Birkaç saniyede bir canın yenilenir",
"replicator": "Kopyacı",
- "replicator_desc": "Vurulduğunda hasar veren bir kopya oluşturmak için E tuşuna bas",
+ "replicator_desc": "[css_useSkill] tuşuna basarak kopya oluştur ve ölürse rakibe hasar verir",
- "retreat": "Geri Çekilme",
- "retreat_desc": "Başlangıç noktasına dönmek için E tuşuna bas",
+ "retreat": "Geri Çekil",
+ "retreat_desc": "[css_useSkill] tuşuna basarak başlangıç noktasına ışınlan",
"returntosender": "İade",
- "returntosender_desc": "Düşmana ilk vuruşun onu kendi başlangıç noktasına geri gönderir",
+ "returntosender_desc": "Düşmana ilk vuruşun onu kendi başlangıç noktasına ışınlar",
- "richboy": "Zengin Çocuk",
+ "richboy": "Zengin Bebe",
"richboy_desc": "Raund başında rastgele miktarda para alırsın",
"robinhood": "Robin Hood",
"robinhood_desc": "Düşmana hasar vermek onun parasını çalar",
- "rubber": "Lastik Mermiler",
+ "rubber": "Lastik Mermi",
"rubber_desc": "Mermilerin oyuncuları önemli ölçüde yavaşlatır",
"saper": "İstihkamcı",
@@ -387,48 +387,48 @@
"shade": "Gölge",
"shade_desc": "Vurduğun düşmanın arkasına ışınlanma şansın olur",
- "shade_desc2": "Düşmanın arkasına ışınlanma şansın: %{0}",
+ "shade_desc2": "Arkasına ışınlanma şansın: %{0}",
"shade_nospace": "Uygun alan yok",
"shortbomb": "Kısa Fünye",
"shortbomb_desc": "Bomba çok daha hızlı patlar",
"silent": "Sessiz",
- "silent_desc": "Ayak seslerin ve zıplamaların DİĞER oyunculara duyulmaz",
+ "silent_desc": "Ayak seslerini ve zıplamalarını DİĞER oyuncular duyamaz",
"smoker": "Tiryaki",
"smoker_desc": "Sis bombalarınız asla bitmez",
"sniperelite": "Keskin Nişancı",
- "sniperelite_customname": "Keskin Nişancı Yeteneği",
- "sniperelite_desc": "Mevcut silahını bir AWP ile değiştirmek için E tuşuna bas",
+ "sniperelite_customname": "Keskin Nişancı",
+ "sniperelite_desc": "[css_useSkill] tuşuna basarak silahını AWP ile değiştir",
- "soldier": "Asker",
- "soldier_desc": "Rastgele bir hasar çarpanına sahip olursun",
- "soldier_desc2": "Hasar çarpanın: {0}x",
+ "soldier": "Teğmen",
+ "soldier_desc": "Rastgele bir oranda fazla hasar verirsin",
+ "soldier_desc2": "Hasarın: {0}x",
- "soundmaker": "Gürültücü",
- "soundmaker_desc": "Her düşman için bir ses tetiklemek için E tuşuna bas",
+ "soundmaker": "Halüsinasyon",
+ "soundmaker_desc": "[css_useSkill] tuşuna basarak rakibinin çığlık atmasını sağla",
- "spectator": "İzleyici",
- "spectator_desc": "Rastgele bir düşmanı izlemek için E tuşuna bas",
+ "spectator": "Röntgen",
+ "spectator_desc": "[css_useSkill] tuşuna basarak rakibinin gözünden gör",
"swapposition": "Yer Değiştirme",
- "swapposition_desc": "Rastgele bir düşmanla yer değiştirmek için E tuşuna bas",
+ "swapposition_desc": "[css_useSkill] tuşuna basarak vurduğun düşmanla yer değiştir",
"teleporter": "Işınlayıcı",
"teleporter_desc": "Vurulan bir düşmanla yer değiştirme şansınız var",
- "teleporter_desc2": "Vuruştan sonra yer değiştirme şansınız: %{0}",
+ "teleporter_desc2": "Yer değiştirme şansın: %{0}",
"thief": "Hırsız",
"thief_desc": "Seçilen bir oyuncudan yeteneğini çalabilirsin",
"thief_enemy_info": "Yeteneğin çalındı.",
"thief_player_info": "'{0}' isimli oyuncunun yeteneği çalındı.",
"thief_select_info": "Yetenek çalınacak oyuncu:",
- "thief_incorrect_skill": "Bu yetenek seçilemez!",
+ "thief_incorrect_skill": "Bu yetenek çalınamaz!",
"thirdeye": "Üçüncü Göz",
- "thirdeye_desc": "Üçüncü şahıs bakış açısını aktif etmek için E tuşuna bas",
+ "thirdeye_desc": "[css_useSkill] tuşuna basarak üçüncü göze(thirdperson) geç",
"thorns": "Dikenler",
"thorns_desc": "Rakibin, sana verdiği hasarın bir kısmını geri alır",
@@ -448,13 +448,13 @@
"watchmaker_tt": "Raund süresi {0} saniye uzatıldı.",
"weaponsswap": "Silah Takası",
- "weaponsswap_desc": "Rastgele bir düşmanla silahları takas etmek için E tuşuna bas",
+ "weaponsswap_desc": "[css_useSkill] tuşuna basarak silahını düşmanla takasla",
"weaponsswap_hud_info2": "Takas edilecek silahın yok",
"weightless": "Yerçekimsiz",
- "weightless_desc": "El bombalarınız yerçekiminden etkilenmez ve daha hızlı uçar",
+ "weightless_desc": "El bombalarınız yerçekiminden etkilenmez ve dümdüz gider",
- "wildthrow": "Vahşi Atış",
+ "wildthrow": "Unutkan Bombacı",
"wildthrow_desc": "El bombası atmakta zorluk çekecek bir oyuncu seçin",
"wildthrow_player_info": "'{0}' adlı oyuncu tüm taktiklerini unuttu",
"wildthrow_select_info": "Bir oyuncu seçin:",
@@ -462,25 +462,25 @@
"zeus": "Zeus",
"zeus_desc": "Zeus x27 anında şarj olur",
- "your_skill": "Mevcut yeteneğin",
+ "your_skill": "Yeteneğin",
"enemy_skill": "Düşmanın yeteneği",
"observer_skill": "Oyuncunun yeteneği",
"welcome_message": "{PLAYER}, {SERVER_NAME} sunucusuna hoş geldin!\nGüncel jRandomSkills versiyonu: {VERSION} ({SKILLS_COUNT} yetenek).\n\nOrijinal yapımcı:\n{AUTHOR1}\nGeliştiren:\n{AUTHOR2}\nResmi Discord: https://discord.gg/9H8EZYBpPF",
- "drawing_skill": "Yetenek çekiliyor",
+ "drawing_skill": "Yetenek çarkı dönüyor...",
"disabled_weapon": "Bu silahı kullanamazsın",
"hud_info": "{0} saniye daha bekle",
- "hud_info_no_enemy": "Düşman bulunamadı",
+ "hud_info_no_enemy": "Düşman yok",
"active_hud_info": "{0} milisaniye daha aktif",
"skills_menu": "Yetenek Listesi",
- "no_player": "Eşleşen oyuncu bulunamadı.",
+ "no_player": "Eşleşen oyuncu yok.",
"duplicate_player": "Aynı isimde birden fazla oyuncu bulundu.",
- "selectplayerskill_command": "/t yazın",
- "selectplayerskill_incorrect_enemy_index": "Seçilecek oyuncu bulunamadı.",
+ "selectplayerskill_command": "Sohbete /t yazın",
+ "selectplayerskill_incorrect_enemy_index": "Seçilecek oyuncu yok.",
- "skill_not_found_setskill": "Böyle bir yetenek bulunamadı",
- "player_not_found_setskill": "Böyle bir oyuncu bulunamadı",
+ "skill_not_found_setskill": "Böyle bir yetenek yok",
+ "player_not_found_setskill": "Böyle bir oyuncu yok",
"correct_form_setskill": "Doğru kullanım: !setskill ",
"correct_form_setscore": "Doğru kullanım: !setscore ",
"done_setskill": "yetenek ayarlandı",
@@ -506,12 +506,12 @@
"vote_alredy_voted": "Zaten oy kullandın!",
"vote_vote": "Oy ver",
- "bombsite_a": "Bomba Alanı A",
- "bombsite_b": "Bomba Alanı B",
+ "bombsite_a": "A Bölgesi",
+ "bombsite_b": "B Bölgesi",
"bombplanted": "Bomba kuruldu\nPatlamaya {0} saniye",
- "teammate_skills": "Takım arkadaşlarının yetenekleri",
- "summary": "Son raundun özeti",
+ "teammate_skills": "Takımının yetenekleri",
+ "summary": "Raundun özeti",
"menu_controlls_scroll": "W/S - Kaydır",
"menu_controlls_padding": " | ",
diff --git a/jRandomSkills - SRC Files/src/lang/zh.json b/jRandomSkills - SRC Files/src/lang/zh.json
index c42ef7c..08f05a2 100644
--- a/jRandomSkills - SRC Files/src/lang/zh.json
+++ b/jRandomSkills - SRC Files/src/lang/zh.json
@@ -275,9 +275,9 @@
"moneyswap_player_info": "你与玩家 '{0}' 交换了金钱。",
"moneyswap_select_info": "选择你想与之交换金钱的玩家:",
- "muhammed": "穆罕默德",
- "muhammed_desc": "你死亡时会爆炸,杀死附近的玩家",
- "muhammed_explosion": "真主至大!!!",
+ "deathbomb": "死亡炸弹",
+ "deathbomb_desc": "你死亡时会爆炸,杀死附近的玩家",
+ "deathbomb_explosion": "砰!",
"ninja": "忍者",
"ninja_desc": "站立不动增加33%隐形,蹲下增加33%,持刀增加33%",
diff --git a/jRandomSkills - SRC Files/src/player/ISkill.cs b/jRandomSkills - SRC Files/src/player/ISkill.cs
index f1df3a4..395ee9c 100644
--- a/jRandomSkills - SRC Files/src/player/ISkill.cs
+++ b/jRandomSkills - SRC Files/src/player/ISkill.cs
@@ -79,6 +79,7 @@ public enum Skills
Darkness,
Deactivator,
Deaf,
+ DeathBomb,
Disarmament,
Distancer,
Dash,
@@ -126,7 +127,6 @@ public enum Skills
Medic,
Miner,
MoneySwap,
- Muhammed,
Ninja,
NoNades,
NoRecoil,
diff --git a/jRandomSkills - SRC Files/src/player/PlayerEvents.cs b/jRandomSkills - SRC Files/src/player/PlayerEvents.cs
index 8a66bba..a171a95 100644
--- a/jRandomSkills - SRC Files/src/player/PlayerEvents.cs
+++ b/jRandomSkills - SRC Files/src/player/PlayerEvents.cs
@@ -2,14 +2,12 @@ using CounterStrikeSharp.API;
using CounterStrikeSharp.API.Core;
using CounterStrikeSharp.API.Core.Attributes;
using CounterStrikeSharp.API.Modules.Admin;
-using CounterStrikeSharp.API.Modules.Commands.Targeting;
using CounterStrikeSharp.API.Modules.Cvars;
using CounterStrikeSharp.API.Modules.Events;
using CounterStrikeSharp.API.Modules.Memory;
using CounterStrikeSharp.API.Modules.Memory.DynamicFunctions;
using CounterStrikeSharp.API.Modules.UserMessages;
using CounterStrikeSharp.API.Modules.Utils;
-using Microsoft.Extensions.Logging;
using RayTraceAPI;
using src.player.skills;
using src.utils;
@@ -465,6 +463,9 @@ namespace src.player
CCSPlayerController player = pawn.Controller.Value.As();
if (player == null || !player.IsValid) return HookResult.Continue;
+ var playerInfo = PlayerManager.GetPlayerByIndex(player.Index);
+ if (playerInfo == null) return HookResult.Continue;
+
CCSWeaponBaseVData vdata = VirtualFunctions.GetCSWeaponDataFromKeyFunc.Invoke(-1, econItem.ItemDefinitionIndex.ToString());
if (vdata == null) return HookResult.Continue;
@@ -483,7 +484,8 @@ namespace src.player
break;
}
}
- return block ? HookResult.Stop : HookResult.Continue;
+
+ return block ? HookResult.Handled : HookResult.Continue;
}
}
@@ -510,7 +512,7 @@ namespace src.player
break;
}
}
- return block ? HookResult.Stop : HookResult.Continue;
+ return block ? HookResult.Handled : HookResult.Continue;
}
}
@@ -570,7 +572,7 @@ namespace src.player
string welcomeMsg = player.GetTranslation("welcome_message", "welcome");
foreach (string line in welcomeMsg.Split("\n"))
- player.PrintToChat($" {ChatColors.Green}" + line.Replace("{PLAYER}", $" {ChatColors.Red}{player.PlayerName}{ChatColors.Green}", StringComparison.OrdinalIgnoreCase)
+ player.PrintToChat($" {ChatColors.Green}" + line.Replace("{PLAYER}", $" {ChatColors.Red}\u202A{player.PlayerName}\u202C{ChatColors.Green}", StringComparison.OrdinalIgnoreCase)
.Replace("{SERVER_NAME}", $" {ChatColors.Red}{ConVar.Find("hostname")?.StringValue ?? "Default Server"}{ChatColors.Green}", StringComparison.OrdinalIgnoreCase)
.Replace("{VERSION}", $" {ChatColors.Red}v{Instance.ModuleVersion}{ChatColors.Green}", StringComparison.OrdinalIgnoreCase)
.Replace("{SKILLS_COUNT}", $" {ChatColors.Red}{SkillData.Skills.Count - 1}{ChatColors.Green}", StringComparison.OrdinalIgnoreCase)
@@ -731,16 +733,22 @@ namespace src.player
lock (setLock)
{
isTransmitRegistered = false;
+
Instance.AddTimer(.1f, () => {
DisableAll();
ConVar.Find("sv_legacy_jump")?.SetValue("1");
+
}, CounterStrikeSharp.API.Modules.Timers.TimerFlags.STOP_ON_MAPCHANGE);
+
Instance.RemoveListener(CheckTransmit);
+
playersSkills.Clear();
staticSkills.Clear();
+
ctSkill = noneSkill;
tSkill = noneSkill;
allSkill = noneSkill;
+
PlayerManager.Clear();
}
}
@@ -766,7 +774,7 @@ namespace src.player
var skillInfo = SkillData.Skills.FirstOrDefault(p => p.Skill == _playerSkill.Skill);
var specialSkillInfo = SkillData.Skills.FirstOrDefault(s => s.Skill == _playerSkill.SpecialSkill);
if (skillInfo == null) continue;
- skillsText += $" {ChatColors.DarkRed}{_player.PlayerName}{ChatColors.Lime}: {(_playerSkill.SpecialSkill == Skills.None || specialSkillInfo == null ? player.GetSkillName(skillInfo.Skill, _playerSkill.SkillChance) : $"{player.GetSkillName(specialSkillInfo.Skill)} -> {player.GetSkillName(skillInfo.Skill, _playerSkill.SkillChance)}")}\n";
+ skillsText += $" {ChatColors.DarkRed}\u202A{_player.PlayerName}\u202C{ChatColors.Lime}: {(_playerSkill.SpecialSkill == Skills.None || specialSkillInfo == null ? player.GetSkillName(skillInfo.Skill, _playerSkill.SkillChance) : $"{player.GetSkillName(specialSkillInfo.Skill)} -> {player.GetSkillName(skillInfo.Skill, _playerSkill.SkillChance)}")}\n";
}
}
@@ -824,7 +832,7 @@ namespace src.player
SkillUtils.PrintToChat(victim,
$"{ChatColors.DarkRed}{(attackerInfo.SpecialSkill == Skills.None ? victim.GetSkillName(skillData.Skill) : $"{victim.GetSkillName(specialSkillData.Skill)} -> {victim.GetSkillName(skillData.Skill)}")}{ChatColors.Lime} - {skillDesc}",
- title: $"{victim.GetTranslation("enemy_skill")} {ChatColors.DarkRed}{attacker.PlayerName}{ChatColors.Lime}");
+ title: $"{victim.GetTranslation("enemy_skill")} {ChatColors.DarkRed}\u202A{attacker.PlayerName}\u202C{ChatColors.Lime}");
}
}
return HookResult.Continue;
@@ -1064,9 +1072,9 @@ namespace src.player
float hudExpired = Config.LoadedConfig.SkillHudDuration;
skillPlayer.SkillHudExpired = hudExpired == -1 ? DateTime.MaxValue : DateTime.Now.AddSeconds(hudExpired);
- float descriptionHudExpired = Config.LoadedConfig.SkillHudDuration;
+ float descriptionHudExpired = Config.LoadedConfig.SkillDescriptionDuration;
skillPlayer.SkillDescriptionHudExpired = descriptionHudExpired == -1 ? DateTime.MaxValue : DateTime.Now.AddSeconds(descriptionHudExpired);
-
+
if (Config.LoadedConfig.TeamMateSkillChatInfo)
{
Instance?.AddTimer(.6f, () =>
@@ -1079,7 +1087,7 @@ namespace src.player
if (teammateInfo != null && teammateInfo?.Skill != null)
{
var skillInfo = SkillData.Skills.FirstOrDefault(p => p.Skill == teammateInfo.Skill);
- teammateSkills += $" {ChatColors.DarkRed}{teammate.PlayerName}{ChatColors.Lime}: {(skillInfo == null ? player.GetSkillName(Skills.None) : player.GetSkillName(skillInfo.Skill, teammateInfo.SkillChance))}\n";
+ teammateSkills += $" {ChatColors.DarkRed}\u202A{teammate.PlayerName}\u202C{ChatColors.Lime}: {(skillInfo == null ? player.GetSkillName(Skills.None) : player.GetSkillName(skillInfo.Skill, teammateInfo.SkillChance))}\n";
}
}
diff --git a/jRandomSkills - SRC Files/src/player/PlayerOnTick.cs b/jRandomSkills - SRC Files/src/player/PlayerOnTick.cs
index ba7ac98..3f87eae 100644
--- a/jRandomSkills - SRC Files/src/player/PlayerOnTick.cs
+++ b/jRandomSkills - SRC Files/src/player/PlayerOnTick.cs
@@ -15,6 +15,7 @@ namespace src.player
Instance.RegisterListener(() =>
{
UpdateGameRules();
+ if (Server.TickCount % 2 != 0) return;
foreach (var player in Utilities.GetPlayers())
{
diff --git a/jRandomSkills - SRC Files/src/player/skills/AntyFlash.cs b/jRandomSkills - SRC Files/src/player/skills/AntyFlash.cs
index 8025f0c..b2bac0d 100644
--- a/jRandomSkills - SRC Files/src/player/skills/AntyFlash.cs
+++ b/jRandomSkills - SRC Files/src/player/skills/AntyFlash.cs
@@ -1,13 +1,16 @@
using CounterStrikeSharp.API.Core;
+using CounterStrikeSharp.API.Modules.Cvars;
using CounterStrikeSharp.API.Modules.Entities.Constants;
using CounterStrikeSharp.API.Modules.Utils;
using src.utils;
+using System.Collections.Concurrent;
namespace src.player.skills
{
public class AntyFlash : ISkill
{
private const Skills skillName = Skills.AntyFlash;
+ private readonly static ConcurrentDictionary playersWithSkill = [];
public static void LoadSkill()
{
@@ -38,15 +41,76 @@ namespace src.player.skills
}
}
+ public static void GrenadeThrown(EventGrenadeThrown @event)
+ {
+ var player = PlayerManager.GetPlayerEvent(@event.Userid);
+ if (player == null || !player.IsValid) return;
+
+ var weapon = @event.Weapon;
+ if (weapon != "flashbang") return;
+
+ var playerInfo = PlayerManager.GetPlayerByIndex(player!.Index);
+ if (playerInfo?.Skill != skillName) return;
+
+ if (playersWithSkill.TryGetValue(player.Index, out int grenadesLeft) && grenadesLeft > 1)
+ {
+ playersWithSkill[player.Index] = grenadesLeft - 1;
+ player!.GiveNamedItem($"weapon_{weapon}");
+ SkillUtils.UpdateGrenadeCount(player, CsItem.FlashbangGrenade, grenadesLeft - 1);
+ }
+ }
+
+ public static void WeaponEquip(EventItemEquip @event)
+ {
+ var player = PlayerManager.GetPlayerEvent(@event.Userid);
+ var weapon = @event.Item;
+ if (player == null || !player.IsValid) return;
+
+ if (playersWithSkill.TryGetValue(player.Index, out int grenadesLeft) && grenadesLeft > 1)
+ SkillUtils.UpdateGrenadeCount(player, CsItem.FlashbangGrenade, grenadesLeft);
+ }
+
+ public static void WeaponPickup(EventItemPickup @event)
+ {
+ var player = PlayerManager.GetPlayerEvent(@event.Userid);
+ if (player == null || !player.IsValid) return;
+
+ var weapon = @event.Item;
+ if (string.IsNullOrEmpty(weapon) || weapon != "flashbang") return;
+
+ if (playersWithSkill.TryGetValue(player.Index, out int grenadesLeft) && grenadesLeft > 1)
+ SkillUtils.UpdateGrenadeCount(player, CsItem.FlashbangGrenade, grenadesLeft);
+ }
+
public static void EnableSkill(CCSPlayerController player)
{
if (player == null || !player.IsValid) return;
- SkillUtils.TryGiveWeapon(player, CsItem.FlashbangGrenade);
+
+ int flashbangLimit = ConVar.Find("ammo_grenade_limit_flashbang")?.GetPrimitiveValue() ?? 2;
+ int grenadeLimit = SkillsInfo.GetValue(skillName, "grenadeLimit");
+
+ if (grenadeLimit > flashbangLimit)
+ {
+ playersWithSkill.TryAdd(player.Index, grenadeLimit);
+ SkillUtils.TryGiveWeapon(player, CsItem.FlashbangGrenade);
+ SkillUtils.UpdateGrenadeCount(player, CsItem.FlashbangGrenade, grenadeLimit);
+ }
+ else
+ SkillUtils.TryGiveWeapon(player, CsItem.FlashbangGrenade, grenadeLimit, false);
}
- public class SkillConfig(Skills skill = skillName, bool active = true, string color = "#D6E6FF", CsTeam onlyTeam = CsTeam.None, bool disableOnFreezeTime = false, bool needsTeammates = false, string requiredPermission = "", int maxPerServer = -1, Rarity rarity = Rarity.Common, float flashDuration = 7f) : SkillsInfo.DefaultSkillInfo(skill, active, color, onlyTeam, disableOnFreezeTime, needsTeammates, requiredPermission, maxPerServer, rarity)
+ public static void DisableSkill(CCSPlayerController player)
+ {
+ if (player == null || !player.IsValid) return;
+
+ playersWithSkill.TryRemove(player.Index, out _);
+ SkillUtils.UpdateGrenadeCount(player, CsItem.FlashbangGrenade, 1);
+ }
+
+ public class SkillConfig(Skills skill = skillName, bool active = true, string color = "#D6E6FF", CsTeam onlyTeam = CsTeam.None, bool disableOnFreezeTime = false, bool needsTeammates = false, string requiredPermission = "", int maxPerServer = -1, Rarity rarity = Rarity.Common, float flashDuration = 7f, int grenadeLimit = 2) : SkillsInfo.DefaultSkillInfo(skill, active, color, onlyTeam, disableOnFreezeTime, needsTeammates, requiredPermission, maxPerServer, rarity)
{
public float FlashDuration { get; set; } = flashDuration;
+ public int GrenadeLimit { get; set; } = grenadeLimit;
}
}
}
\ No newline at end of file
diff --git a/jRandomSkills - SRC Files/src/player/skills/Bankrupt.cs b/jRandomSkills - SRC Files/src/player/skills/Bankrupt.cs
index a450d07..da16eb5 100644
--- a/jRandomSkills - SRC Files/src/player/skills/Bankrupt.cs
+++ b/jRandomSkills - SRC Files/src/player/skills/Bankrupt.cs
@@ -41,7 +41,7 @@ namespace src.player.skills
foreach (var e in enemies)
{
int money = e.InGameMoneyServices?.Account ?? 0;
- menuItems.Add(($"{e.PlayerName} : {money}$", e.Index.ToString()));
+ menuItems.Add(($"\u202A{e.PlayerName}\u202C : {money}$", e.Index.ToString()));
}
if (!menuItems.IsEmpty)
@@ -61,7 +61,7 @@ namespace src.player.skills
var enemies = Utilities.GetPlayers().Where(p => p.IsValid && p.PawnIsAlive && p.Team != player.Team && !p.IsHLTV && p.Team != CsTeam.Spectator && p.Team != CsTeam.None).ToArray();
if (enemies.Length > 0)
{
- ConcurrentBag<(string, string)> menuItems = [.. enemies.Select(e => ($"{e.PlayerName} : {(e.InGameMoneyServices?.Account ?? 0)}$", e.Index.ToString()))];
+ ConcurrentBag<(string, string)> menuItems = [.. enemies.Select(e => ($"\u202A{e.PlayerName}\u202C : {(e.InGameMoneyServices?.Account ?? 0)}$", e.Index.ToString()))];
SkillUtils.CreateMenu(player, menuItems);
}
else
diff --git a/jRandomSkills - SRC Files/src/player/skills/Baseball.cs b/jRandomSkills - SRC Files/src/player/skills/Baseball.cs
index e79fa38..8f8ccb3 100644
--- a/jRandomSkills - SRC Files/src/player/skills/Baseball.cs
+++ b/jRandomSkills - SRC Files/src/player/skills/Baseball.cs
@@ -4,7 +4,6 @@ using CounterStrikeSharp.API.Modules.Entities.Constants;
using CounterStrikeSharp.API.Modules.Utils;
using src.utils;
using System.Collections.Concurrent;
-using static src.jRandomSkills;
namespace src.player.skills
{
@@ -12,6 +11,7 @@ namespace src.player.skills
{
private const Skills skillName = Skills.Baseball;
private static readonly ConcurrentDictionary decoys = [];
+ private readonly static ConcurrentDictionary playersWithSkill = [];
public static void LoadSkill()
{
@@ -24,8 +24,17 @@ namespace src.player.skills
var attacker = PlayerManager.GetPlayerEvent(@event.Attacker);
var weapon = @event.Weapon;
- if (weapon != "decoy") return;
- if (!Instance.IsPlayerValid(victim) || !Instance.IsPlayerValid(attacker)) return;
+ if (weapon != "decoy")
+ return;
+
+ if (victim == null || !victim.IsValid || victim.PlayerPawn?.Value == null || !victim.PlayerPawn.Value.IsValid || victim.PlayerPawn.Value.Health <= 0)
+ return;
+
+ if (attacker == null || !attacker.IsValid || attacker.PlayerPawn?.Value == null || !attacker.PlayerPawn.Value.IsValid || attacker.PlayerPawn.Value.Health <= 0)
+ return;
+
+ if (victim.Index == attacker.Index || victim.Team == attacker.Team)
+ return;
var attackerInfo = PlayerManager.GetPlayerByIndex(PlayerManager.GetPlayerEvent(attacker)!.Index);
if (attackerInfo?.Skill != skillName) return;
@@ -108,16 +117,72 @@ namespace src.player.skills
}
}
- public static void EnableSkill(CCSPlayerController player)
+ public static void GrenadeThrown(EventGrenadeThrown @event)
{
- SkillUtils.TryGiveWeapon(player, CsItem.DecoyGrenade);
+ var player = PlayerManager.GetPlayerEvent(@event.Userid);
+ if (player == null || !player.IsValid) return;
+
+ var weapon = @event.Weapon;
+ if (weapon != "decoy") return;
+
+ var playerInfo = PlayerManager.GetPlayerByIndex(player!.Index);
+ if (playerInfo?.Skill != skillName) return;
+
+ if (playersWithSkill.TryGetValue(player.Index, out int grenadesLeft) && grenadesLeft > 1)
+ {
+ playersWithSkill[player.Index] = grenadesLeft - 1;
+ player!.GiveNamedItem($"weapon_{weapon}");
+ SkillUtils.UpdateGrenadeCount(player, CsItem.DecoyGrenade, grenadesLeft - 1);
+ }
}
- public class SkillConfig(Skills skill = skillName, bool active = true, string color = "#2effc7", CsTeam onlyTeam = CsTeam.None, bool disableOnFreezeTime = false, bool needsTeammates = false, string requiredPermission = "", int maxPerServer = -1, Rarity rarity = Rarity.Common, float speedMultipier = 2f, float maxSpeed = 900f, int damageDeal = 9999) : SkillsInfo.DefaultSkillInfo(skill, active, color, onlyTeam, disableOnFreezeTime, needsTeammates, requiredPermission, maxPerServer, rarity)
+ public static void WeaponEquip(EventItemEquip @event)
+ {
+ var player = PlayerManager.GetPlayerEvent(@event.Userid);
+ var weapon = @event.Item;
+ if (player == null || !player.IsValid) return;
+
+ if (playersWithSkill.TryGetValue(player.Index, out int grenadesLeft) && grenadesLeft > 1)
+ SkillUtils.UpdateGrenadeCount(player, CsItem.DecoyGrenade, grenadesLeft);
+ }
+
+ public static void WeaponPickup(EventItemPickup @event)
+ {
+ var player = PlayerManager.GetPlayerEvent(@event.Userid);
+ if (player == null || !player.IsValid) return;
+
+ var weapon = @event.Item;
+ if (string.IsNullOrEmpty(weapon) || weapon != "decoy") return;
+
+ if (playersWithSkill.TryGetValue(player.Index, out int grenadesLeft) && grenadesLeft > 1)
+ SkillUtils.UpdateGrenadeCount(player, CsItem.DecoyGrenade, grenadesLeft);
+ }
+
+ public static void EnableSkill(CCSPlayerController player)
+ {
+ if (player == null || !player.IsValid) return;
+
+ int grenadeLimit = SkillsInfo.GetValue(skillName, "grenadeLimit");
+ playersWithSkill.TryAdd(player.Index, grenadeLimit);
+
+ SkillUtils.TryGiveWeapon(player, CsItem.DecoyGrenade);
+ SkillUtils.UpdateGrenadeCount(player, CsItem.DecoyGrenade, grenadeLimit);
+ }
+
+ public static void DisableSkill(CCSPlayerController player)
+ {
+ if (player == null || !player.IsValid) return;
+
+ playersWithSkill.TryRemove(player.Index, out _);
+ SkillUtils.UpdateGrenadeCount(player, CsItem.DecoyGrenade, 1);
+ }
+
+ public class SkillConfig(Skills skill = skillName, bool active = true, string color = "#2effc7", CsTeam onlyTeam = CsTeam.None, bool disableOnFreezeTime = false, bool needsTeammates = false, string requiredPermission = "", int maxPerServer = -1, Rarity rarity = Rarity.Common, float speedMultipier = 2f, float maxSpeed = 900f, int damageDeal = 9999, int grenadeLimit = 3) : SkillsInfo.DefaultSkillInfo(skill, active, color, onlyTeam, disableOnFreezeTime, needsTeammates, requiredPermission, maxPerServer, rarity)
{
public float SpeedMultipier { get; set; } = speedMultipier;
public float MaxSpeed { get; set; } = maxSpeed;
public float DamageDeal { get; set; } = damageDeal;
+ public int GrenadeLimit { get; set; } = grenadeLimit;
}
}
}
\ No newline at end of file
diff --git a/jRandomSkills - SRC Files/src/player/skills/C4Camouflage.cs b/jRandomSkills - SRC Files/src/player/skills/C4Camouflage.cs
index add268f..6e8e265 100644
--- a/jRandomSkills - SRC Files/src/player/skills/C4Camouflage.cs
+++ b/jRandomSkills - SRC Files/src/player/skills/C4Camouflage.cs
@@ -125,14 +125,18 @@ namespace src.player.skills
var entity = Utilities.GetEntityFromIndex((int)playerPawn.Index);
if (entity == null || !entity.IsValid) continue;
- info.TransmitEntities.Remove(entity.Index);
+
+ if (info.TransmitEntities.Contains(entity.Index))
+ info.TransmitEntities.Remove(entity.Index);
var bombIndex = GetBombIndex();
if (bombIndex == null) continue;
var bombEntity = Utilities.GetEntityFromIndex((int)bombIndex);
if (bombEntity == null || !bombEntity.IsValid) continue;
- info.TransmitEntities.Remove(bombEntity.Index);
+
+ if (info.TransmitEntities.Contains(bombEntity.Index))
+ info.TransmitEntities.Remove(bombEntity.Index);
}
}
}
@@ -141,6 +145,7 @@ namespace src.player.skills
public static void EnableSkill(CCSPlayerController player)
{
Event.EnableTransmit();
+
if (player == null || !player.IsValid) return;
var playerPawn = player.PlayerPawn.Value;
@@ -157,6 +162,8 @@ namespace src.player.skills
invisiblePlayers.TryAdd(player.Index, 0);
SkillUtils.SetPlayerInvisibility(player, .5f);
+
+ SkillUtils.ForceFullUpdateToAll();
}
public static void DisableSkill(CCSPlayerController player)
@@ -164,6 +171,8 @@ namespace src.player.skills
invisiblePlayers.TryRemove(player.Index, out _);
SkillUtils.SetPlayerInvisibility(player, 0);
EntityManager.DestroyPlayerEntities(player.Index);
+
+ SkillUtils.ForceFullUpdateToAll();
}
private static void CreatePlayerPosProp(CCSPlayerController player)
diff --git a/jRandomSkills - SRC Files/src/player/skills/Chicken.cs b/jRandomSkills - SRC Files/src/player/skills/Chicken.cs
index 379af4c..430cc76 100644
--- a/jRandomSkills - SRC Files/src/player/skills/Chicken.cs
+++ b/jRandomSkills - SRC Files/src/player/skills/Chicken.cs
@@ -2,7 +2,6 @@ using System.Drawing;
using CounterStrikeSharp.API;
using CounterStrikeSharp.API.Core;
using CounterStrikeSharp.API.Modules.Utils;
-using static src.jRandomSkills;
using System.Collections.Concurrent;
using src.utils;
@@ -19,7 +18,7 @@ namespace src.player.skills
"weapon_ump45", "weapon_p90", "weapon_mp5sd", "weapon_ssg08",
"weapon_awp", "weapon_scar20", "weapon_g3sg1", "weapon_nova",
"weapon_xm1014", "weapon_mag7", "weapon_sawedoff", "weapon_m249",
- "weapon_negev"
+ "weapon_negev", "weapon_sg556"
];
private static readonly ConcurrentDictionary chickens = [];
@@ -82,8 +81,11 @@ namespace src.player.skills
{
playerPawn.VelocityModifier = 1f;
- playerPawn.Health = Math.Min(playerPawn.Health + 50, 100);
- Utilities.SetStateChanged(playerPawn, "CBaseEntity", "m_iHealth");
+ if (playerPawn.Health > 0)
+ {
+ playerPawn.Health = Math.Min(playerPawn.Health + 50, 100);
+ Utilities.SetStateChanged(playerPawn, "CBaseEntity", "m_iHealth");
+ }
SkillUtils.ChangePlayerScale(player, 1);
diff --git a/jRandomSkills - SRC Files/src/player/skills/Cypher.cs b/jRandomSkills - SRC Files/src/player/skills/Cypher.cs
index ea73bf2..bc39238 100644
--- a/jRandomSkills - SRC Files/src/player/skills/Cypher.cs
+++ b/jRandomSkills - SRC Files/src/player/skills/Cypher.cs
@@ -58,7 +58,8 @@ namespace src.player.skills
NextCamera = 0,
NoSpace = 0,
PlayerCameraRaw = player.PlayerPawn.Value.CameraServices.ViewEntity.Raw,
- LastAngle = QAngle.Zero
+ LastPlayerAngle = QAngle.Zero,
+ LastCameraAngle = QAngle.Zero
});
}
@@ -160,16 +161,20 @@ namespace src.player.skills
if (playerInfo.CameraActive && playerInfo.CameraProp != null)
{
if (pawn.AbsRotation != null)
- playerInfo.LastAngle = new QAngle(pawn.V_angle.X, pawn.V_angle.Y, 0);
+ playerInfo.LastPlayerAngle = new QAngle(pawn.V_angle.X, pawn.V_angle.Y, 0);
var cameraProp = Utilities.GetEntityFromIndex((int)playerInfo.CameraProp);
- if (cameraProp == null || !cameraProp.IsValid) return;
+ if (cameraProp == null || !cameraProp.IsValid || cameraProp.AbsRotation == null) return;
- pawn.Teleport(null, cameraProp.AbsRotation);
+ if (playerInfo.LastCameraAngle == QAngle.Zero)
+ playerInfo.LastCameraAngle = new QAngle(cameraProp.AbsRotation.X, cameraProp.AbsRotation.Y, 0);
+
+ pawn.Look(playerInfo.LastCameraAngle);
}
else if (!forceToDefault)
{
- pawn.Look(playerInfo.LastAngle);
+ playerInfo.LastCameraAngle = new QAngle(pawn.V_angle.X, pawn.V_angle.Y, 0);
+ pawn.Look(playerInfo.LastPlayerAngle);
}
}
@@ -399,7 +404,8 @@ namespace src.player.skills
public bool CameraActive { get; set; }
public float NextCamera { get; set; }
public float NoSpace { get; set; }
- public required QAngle LastAngle { get; set; }
+ public required QAngle LastPlayerAngle { get; set; }
+ public required QAngle LastCameraAngle { get; set; }
}
public class SkillConfig(Skills skill = skillName, bool active = true, string color = "#34ebd5", CsTeam onlyTeam = CsTeam.None, bool disableOnFreezeTime = true, bool needsTeammates = false, string requiredPermission = "", int maxPerServer = -1, Rarity rarity = Rarity.Common, float cooldown = 30) : SkillsInfo.DefaultSkillInfo(skill, active, color, onlyTeam, disableOnFreezeTime, needsTeammates, requiredPermission, maxPerServer, rarity)
diff --git a/jRandomSkills - SRC Files/src/player/skills/Deactivator.cs b/jRandomSkills - SRC Files/src/player/skills/Deactivator.cs
index a36fe35..b664117 100644
--- a/jRandomSkills - SRC Files/src/player/skills/Deactivator.cs
+++ b/jRandomSkills - SRC Files/src/player/skills/Deactivator.cs
@@ -40,7 +40,7 @@ namespace src.player.skills
if (enemyInfo == null) continue;
var skillData = SkillData.Skills.FirstOrDefault(s => s.Skill == enemyInfo.Skill);
if (skillData == null) continue;
- menuItems.Add(($"{enemy.PlayerName} : {player.GetSkillName(skillData.Skill)}", enemy.Index.ToString()));
+ menuItems.Add(($"\u202A{enemy.PlayerName}\u202C : {player.GetSkillName(skillData.Skill)}", enemy.Index.ToString()));
}
SkillUtils.UpdateMenu(player, menuItems);
}
@@ -82,7 +82,7 @@ namespace src.player.skills
if (enemyInfo == null) continue;
var skillData = SkillData.Skills.FirstOrDefault(s => s.Skill == enemyInfo.Skill);
if (skillData == null) continue;
- menuItems.Add(($"{enemy.PlayerName} : {player.GetSkillName(skillData.Skill)}", enemy.Index.ToString()));
+ menuItems.Add(($"\u202A{enemy.PlayerName}\u202C : {player.GetSkillName(skillData.Skill)}", enemy.Index.ToString()));
}
SkillUtils.CreateMenu(player, menuItems);
}
diff --git a/jRandomSkills - SRC Files/src/player/skills/Muhammed.cs b/jRandomSkills - SRC Files/src/player/skills/DeathBomb.cs
similarity index 94%
rename from jRandomSkills - SRC Files/src/player/skills/Muhammed.cs
rename to jRandomSkills - SRC Files/src/player/skills/DeathBomb.cs
index 07f2f92..14c6345 100644
--- a/jRandomSkills - SRC Files/src/player/skills/Muhammed.cs
+++ b/jRandomSkills - SRC Files/src/player/skills/DeathBomb.cs
@@ -4,14 +4,13 @@ using CounterStrikeSharp.API.Modules.Memory.DynamicFunctions;
using CounterStrikeSharp.API.Modules.Utils;
using src.utils;
using System.Collections.Concurrent;
-using static src.jRandomSkills;
using Vector = CounterStrikeSharp.API.Modules.Utils.Vector;
namespace src.player.skills
{
- public class Muhammed : ISkill
+ public class DeathBomb : ISkill
{
- private const Skills skillName = Skills.Muhammed;
+ private const Skills skillName = Skills.DeathBomb;
private static readonly QAngle angle = new(10, -5, 9);
private static readonly ConcurrentDictionary nades = [];
@@ -57,7 +56,7 @@ namespace src.player.skills
SkillUtils.CreateHEGrenadeProjectile(pos, angle, new Vector(0, 0, -10), player.TeamNum);
foreach (var _p in Utilities.GetPlayers().Where(p => p.IsValid && p.Team is CsTeam.CounterTerrorist or CsTeam.Terrorist))
- SkillUtils.PrintToChat(_p, $"{ChatColors.DarkRed}{player.PlayerName}: {ChatColors.Lime}{_p.GetTranslation("muhammed_explosion")}",
+ SkillUtils.PrintToChat(_p, $"{ChatColors.DarkRed}\u202A{player.PlayerName}\u202C: {ChatColors.Lime}{_p.GetTranslation("deathbomb_explosion")}",
border: !Utilities.GetPlayers().Any(p => p.Team == player.Team && p != player) ? "tb" : "t");
var fileNames = new[] { "radiobotfallback01", "radiobotfallback02", "radiobotfallback04" };
@@ -88,7 +87,7 @@ namespace src.player.skills
heProjectile.DetonateTime = 0;
if (nades.TryRemove(lastTick, out byte teamNum))
- heProjectile.Globalname = $"muhammed_team_{teamNum}_{heProjectile.Index}";
+ heProjectile.Globalname = $"deathbomb_team_{teamNum}_{heProjectile.Index}";
});
}
@@ -103,7 +102,7 @@ namespace src.player.skills
if (nade == null || !nade.IsValid) return;
if (nade.DesignerName != "hegrenade_projectile") return;
- if (string.IsNullOrEmpty(nade.Globalname) || !nade.Globalname.StartsWith("muhammed_team_")) return;
+ if (string.IsNullOrEmpty(nade.Globalname) || !nade.Globalname.StartsWith("deathbomb_team_")) return;
if (!int.TryParse(nade.Globalname.Split('_')[2], out int nadeTeam)) return;
diff --git a/jRandomSkills - SRC Files/src/player/skills/Duplicator.cs b/jRandomSkills - SRC Files/src/player/skills/Duplicator.cs
index 3b9f2b9..cd75c12 100644
--- a/jRandomSkills - SRC Files/src/player/skills/Duplicator.cs
+++ b/jRandomSkills - SRC Files/src/player/skills/Duplicator.cs
@@ -31,18 +31,18 @@ namespace src.player.skills
var playerInfo = PlayerManager.GetPlayerByIndex(player!.Index);
if (playerInfo == null || playerInfo.Skill != skillName) continue;
- var enemies = Utilities.GetPlayers().Where(p => p != null && p.IsValid).Select(p => PlayerManager.GetPlayerEvent(p)).Where(p => p != null && p.IsValid && p.Team != player.Team && p.PlayerPawn?.Value != null && p.PlayerPawn.Value.IsValid && p.PlayerPawn.Value.Health > 0 && !p.IsHLTV && p.Team != CsTeam.Spectator && p.Team != CsTeam.None).ToArray();
+ var enemies = Utilities.GetPlayers().Where(p => p != null && p.IsValid).Select(p => PlayerManager.GetPlayerEvent(p)).Where(p => p != null && p.IsValid && p.Index != player.Index && p.PlayerPawn?.Value != null && p.PlayerPawn.Value.IsValid && p.PlayerPawn.Value.Health > 0 && !p.IsHLTV && p.Team != CsTeam.Spectator && p.Team != CsTeam.None).ToArray();
ConcurrentBag<(string, string)> menuItems = [];
foreach (var enemy in enemies)
{
- var enemyInfo = PlayerManager.GetPlayerByIndex(enemy.Index);
+ var enemyInfo = PlayerManager.GetPlayerByIndex(enemy?.Index);
if (enemyInfo == null) continue;
var skillData = SkillData.Skills.FirstOrDefault(s => s.Skill == enemyInfo.Skill);
if (skillData == null) continue;
- menuItems.Add(($"{enemy.PlayerName} : {player.GetSkillName(skillData.Skill)}", enemy.Index.ToString()));
+ menuItems.Add(($"\u202A{enemy!.PlayerName}\u202C : {player.GetSkillName(skillData.Skill)}", enemy.Index.ToString()));
}
SkillUtils.UpdateMenu(player, menuItems);
}
@@ -82,10 +82,12 @@ namespace src.player.skills
{
var enemyInfo = PlayerManager.GetPlayerByIndex(enemy.Index);
if (enemyInfo == null) continue;
+
var skillData = SkillData.Skills.FirstOrDefault(s => s.Skill == enemyInfo.Skill);
if (skillData == null) continue;
+
skills.Add(skillData.Skill.ToString());
- menuItems.Add(($"{enemy.PlayerName} : {player.GetSkillName(skillData.Skill)}", enemy.Index.ToString()));
+ menuItems.Add(($"\u202A{enemy.PlayerName}\u202C : {player.GetSkillName(skillData.Skill)}", enemy.Index.ToString()));
}
int ctSkills = Event.counterterroristSkills.Count(s => skills.Contains(s.Name));
diff --git a/jRandomSkills - SRC Files/src/player/skills/FriendlyFire.cs b/jRandomSkills - SRC Files/src/player/skills/FriendlyFire.cs
index 2e2481e..a7abce8 100644
--- a/jRandomSkills - SRC Files/src/player/skills/FriendlyFire.cs
+++ b/jRandomSkills - SRC Files/src/player/skills/FriendlyFire.cs
@@ -1,48 +1,73 @@
using CounterStrikeSharp.API;
using CounterStrikeSharp.API.Core;
+using CounterStrikeSharp.API.Modules.Memory.DynamicFunctions;
using CounterStrikeSharp.API.Modules.Utils;
using src.utils;
-using static src.jRandomSkills;
namespace src.player.skills
{
public class FriendlyFire : ISkill
{
private const Skills skillName = Skills.FriendlyFire;
- private static readonly string[] nades = ["inferno", "flashbang", "smokegrenade", "decoy", "hegrenade"];
public static void LoadSkill()
{
SkillUtils.RegisterSkill(skillName, SkillsInfo.GetValue(skillName, "color"));
}
- public static void PlayerHurt(EventPlayerHurt @event)
+ public static void OnTakeDamage(DynamicHook h)
{
- var damage = @event.DmgHealth;
- var victim = PlayerManager.GetPlayerEvent(@event.Userid);
- var attacker = PlayerManager.GetPlayerEvent(@event.Attacker);
- var weapon = @event.Weapon;
+ CEntityInstance param = h.GetParam(0);
+ CTakeDamageInfo param2 = h.GetParam(1);
- if (nades.Contains(weapon)) return;
- if (!Instance.IsPlayerValid(attacker) || !Instance.IsPlayerValid(victim) || attacker == victim) return;
+ if (param == null || param.Entity == null || param2 == null || param2.Attacker == null || param2.Attacker.Value == null)
+ return;
- var playerInfo = PlayerManager.GetPlayerByIndex(attacker!.Index);
+ if (param2.AmmoType == 255)
+ return;
+
+ CCSPlayerPawn attackerPawn = new(param2.Attacker.Value.Handle);
+ CCSPlayerPawn victimPawn = new(param.Handle);
+
+ if (attackerPawn == null || !attackerPawn.IsValid || victimPawn == null || !victimPawn.IsValid)
+ return;
+
+ if (attackerPawn.DesignerName != "player" || victimPawn.DesignerName != "player")
+ return;
+
+ if (attackerPawn == null || attackerPawn.Controller?.Value == null || victimPawn == null || victimPawn.Controller?.Value == null)
+ return;
+
+ var attackerController = attackerPawn.Controller.Value;
+ if (attackerController == null || !attackerController.IsValid) return;
+
+ var victimController = victimPawn.Controller.Value;
+ if (victimController == null || !victimController.IsValid) return;
+
+ var attacker = attackerController.As();
+ if (attacker == null || !attacker.IsValid) return;
+
+ var victim = victimController.As();
+ if (victim == null || !victim.IsValid) return;
+
+ var playerInfo = PlayerManager.GetPlayerByIndex(PlayerManager.GetPlayerEvent(attacker)!.Index);
if (playerInfo?.Skill != skillName || attacker!.Team != victim!.Team) return;
+ float damage = param2.Damage;
+ param2.Damage = 0;
+
Server.ExecuteCommand("mp_autokick 0");
-
- var pawn = victim.PlayerPawn.Value;
- if (pawn == null || !pawn.IsValid) return;
-
- if (damage == 0)
- damage = Instance.Random.Next(4, 6);
-
- SkillUtils.AddHealth(pawn, damage + (int)(damage * SkillsInfo.GetValue(skillName, "healthMultiplier")), pawn.MaxHealth);
+
+ SkillUtils.AddHealth(
+ victimPawn,
+ (int)(damage * SkillsInfo.GetValue(skillName, "healthDamageMultiplier")),
+ victimPawn.MaxHealth
+ );
}
- public class SkillConfig(Skills skill = skillName, bool active = true, string color = "#ff0000", CsTeam onlyTeam = CsTeam.None, bool disableOnFreezeTime = false, bool needsTeammates = true, string requiredPermission = "", int maxPerServer = -1, Rarity rarity = Rarity.Common, float healthMultiplier = 1.5f) : SkillsInfo.DefaultSkillInfo(skill, active, color, onlyTeam, disableOnFreezeTime, needsTeammates, requiredPermission, maxPerServer, rarity)
+ public class SkillConfig(Skills skill = skillName, bool active = true, string color = "#ff0000", CsTeam onlyTeam = CsTeam.None, bool disableOnFreezeTime = false, bool needsTeammates = true, string requiredPermission = "", int maxPerServer = -1, Rarity rarity = Rarity.Common, float healthDamageMultiplier = .3f) : SkillsInfo.DefaultSkillInfo(skill, active, color, onlyTeam, disableOnFreezeTime, needsTeammates, requiredPermission, maxPerServer, rarity)
{
- public float HealthMultiplier { get; set; } = healthMultiplier;
+ public float HealthDamageMultiplier { get; set; } = healthDamageMultiplier;
}
}
}
\ No newline at end of file
diff --git a/jRandomSkills - SRC Files/src/player/skills/FrozenDecoy.cs b/jRandomSkills - SRC Files/src/player/skills/FrozenDecoy.cs
index 1a07aa9..aa850cf 100644
--- a/jRandomSkills - SRC Files/src/player/skills/FrozenDecoy.cs
+++ b/jRandomSkills - SRC Files/src/player/skills/FrozenDecoy.cs
@@ -11,6 +11,7 @@ namespace src.player.skills
{
private const Skills skillName = Skills.FrozenDecoy;
private static readonly ConcurrentDictionary decoys = [];
+ private readonly static ConcurrentDictionary playersWithSkill = [];
public static void LoadSkill()
{
@@ -67,15 +68,71 @@ namespace src.player.skills
}
}
- public static void EnableSkill(CCSPlayerController player)
+ public static void GrenadeThrown(EventGrenadeThrown @event)
{
- SkillUtils.TryGiveWeapon(player, CsItem.DecoyGrenade);
+ var player = PlayerManager.GetPlayerEvent(@event.Userid);
+ if (player == null || !player.IsValid) return;
+
+ var weapon = @event.Weapon;
+ if (weapon != "decoy") return;
+
+ var playerInfo = PlayerManager.GetPlayerByIndex(player!.Index);
+ if (playerInfo?.Skill != skillName) return;
+
+ if (playersWithSkill.TryGetValue(player.Index, out int grenadesLeft) && grenadesLeft > 1)
+ {
+ playersWithSkill[player.Index] = grenadesLeft - 1;
+ player!.GiveNamedItem($"weapon_{weapon}");
+ SkillUtils.UpdateGrenadeCount(player, CsItem.DecoyGrenade, grenadesLeft - 1);
+ }
}
- public class SkillConfig(Skills skill = skillName, bool active = true, string color = "#00eaff", CsTeam onlyTeam = CsTeam.None, bool disableOnFreezeTime = false, bool needsTeammates = false, string requiredPermission = "", int maxPerServer = -1, Rarity rarity = Rarity.Common, float triggerRadius = 180, int slownessMultiplier = 5) : SkillsInfo.DefaultSkillInfo(skill, active, color, onlyTeam, disableOnFreezeTime, needsTeammates, requiredPermission, maxPerServer, rarity)
+ public static void WeaponEquip(EventItemEquip @event)
+ {
+ var player = PlayerManager.GetPlayerEvent(@event.Userid);
+ var weapon = @event.Item;
+ if (player == null || !player.IsValid) return;
+
+ if (playersWithSkill.TryGetValue(player.Index, out int grenadesLeft) && grenadesLeft > 1)
+ SkillUtils.UpdateGrenadeCount(player, CsItem.DecoyGrenade, grenadesLeft);
+ }
+
+ public static void WeaponPickup(EventItemPickup @event)
+ {
+ var player = PlayerManager.GetPlayerEvent(@event.Userid);
+ if (player == null || !player.IsValid) return;
+
+ var weapon = @event.Item;
+ if (string.IsNullOrEmpty(weapon) || weapon != "decoy") return;
+
+ if (playersWithSkill.TryGetValue(player.Index, out int grenadesLeft) && grenadesLeft > 1)
+ SkillUtils.UpdateGrenadeCount(player, CsItem.DecoyGrenade, grenadesLeft);
+ }
+
+ public static void EnableSkill(CCSPlayerController player)
+ {
+ if (player == null || !player.IsValid) return;
+
+ int grenadeLimit = SkillsInfo.GetValue(skillName, "grenadeLimit");
+ playersWithSkill.TryAdd(player.Index, grenadeLimit);
+
+ SkillUtils.TryGiveWeapon(player, CsItem.DecoyGrenade);
+ SkillUtils.UpdateGrenadeCount(player, CsItem.DecoyGrenade, grenadeLimit);
+ }
+
+ public static void DisableSkill(CCSPlayerController player)
+ {
+ if (player == null || !player.IsValid) return;
+
+ playersWithSkill.TryRemove(player.Index, out _);
+ SkillUtils.UpdateGrenadeCount(player, CsItem.DecoyGrenade, 1);
+ }
+
+ public class SkillConfig(Skills skill = skillName, bool active = true, string color = "#00eaff", CsTeam onlyTeam = CsTeam.None, bool disableOnFreezeTime = false, bool needsTeammates = false, string requiredPermission = "", int maxPerServer = -1, Rarity rarity = Rarity.Common, float triggerRadius = 180, int slownessMultiplier = 5, int grenadeLimit = 3) : SkillsInfo.DefaultSkillInfo(skill, active, color, onlyTeam, disableOnFreezeTime, needsTeammates, requiredPermission, maxPerServer, rarity)
{
public float TriggerRadius { get; set; } = triggerRadius;
public int SlownessMultiplier { get; set; } = slownessMultiplier;
+ public int GrenadeLimit { get; set; } = grenadeLimit;
}
}
}
\ No newline at end of file
diff --git a/jRandomSkills - SRC Files/src/player/skills/Ghost.cs b/jRandomSkills - SRC Files/src/player/skills/Ghost.cs
index 6bbbc05..7aad102 100644
--- a/jRandomSkills - SRC Files/src/player/skills/Ghost.cs
+++ b/jRandomSkills - SRC Files/src/player/skills/Ghost.cs
@@ -13,17 +13,8 @@ namespace src.player.skills
public class Ghost : ISkill
{
private const Skills skillName = Skills.Ghost;
- private static readonly string[] disabledWeapons =
- [
- "weapon_deagle", "weapon_revolver", "weapon_glock", "weapon_usp_silencer",
- "weapon_cz75a", "weapon_fiveseven", "weapon_p250", "weapon_tec9",
- "weapon_elite", "weapon_hkp2000", "weapon_ak47", "weapon_m4a1",
- "weapon_m4a4", "weapon_m4a1_silencer", "weapon_famas", "weapon_galilar",
- "weapon_aug", "weapon_sg553", "weapon_mp9", "weapon_mac10",
- "weapon_bizon", "weapon_mp7", "weapon_ump45", "weapon_p90",
- "weapon_mp5sd", "weapon_ssg08", "weapon_awp", "weapon_scar20",
- "weapon_g3sg1", "weapon_nova", "weapon_xm1014", "weapon_mag7",
- "weapon_sawedoff", "weapon_m249", "weapon_negev"
+ private static readonly string[] allowedWeapons = [
+ "weapon_molotov", "weapon_incgrenade", "weapon_flashbang", "weapon_smokegrenade", "weapon_decoy", "weapon_hegrenade", "weapon_knife", "weapon_bayonet"
];
private static readonly ConcurrentDictionary invisiblePlayers = [];
private const string bloodParticle = "particles/blood_impact/blood_impact_high.vpcf";
@@ -96,7 +87,8 @@ namespace src.player.skills
var entity = Utilities.GetEntityFromIndex((int)playerPawn.Index);
if (entity == null || !entity.IsValid) continue;
- info.TransmitEntities.Remove(entity.Index);
+ if (info.TransmitEntities.Contains(entity.Index))
+ info.TransmitEntities.Remove(entity.Index);
var bombIndex = GetBombIndex(playerController);
if (bombIndex == null) continue;
@@ -104,7 +96,8 @@ namespace src.player.skills
var bombEntity = Utilities.GetEntityFromIndex((int)bombIndex);
if (bombEntity == null || !bombEntity.IsValid) continue;
- info.TransmitEntities.Remove(bombEntity.Index);
+ if (info.TransmitEntities.Contains(bombEntity.Index))
+ info.TransmitEntities.Remove(bombEntity.Index);
}
}
}
@@ -113,12 +106,15 @@ namespace src.player.skills
public static void EnableSkill(CCSPlayerController player)
{
Event.EnableTransmit();
+
SetWeaponAttack(player, true);
SkillUtils.SetPlayerInvisibility(player, .5f);
invisiblePlayers.TryAdd(player.Index, 0);
if (EntityManager.GetPlayerEntities(player.Index, "empty_prop").Count == 0)
CreatePlayerPosProp(player);
+
+ SkillUtils.ForceFullUpdateToAll();
}
private static void CreatePlayerPosProp(CCSPlayerController player)
@@ -154,6 +150,8 @@ namespace src.player.skills
invisiblePlayers.TryRemove(player.Index, out _);
EntityManager.DestroyPlayerEntities(player.Index);
+
+ SkillUtils.ForceFullUpdateToAll();
}
public static void OnTick()
@@ -210,8 +208,10 @@ namespace src.player.skills
if (pawn == null || !pawn.IsValid || pawn.WeaponServices == null) return;
foreach (var weapon in pawn.WeaponServices.MyWeapons)
- if (weapon != null && weapon.IsValid && weapon.Value != null && weapon.Value.IsValid)
- if (disabledWeapons.Contains(weapon.Value.DesignerName))
+ if (weapon != null && weapon.IsValid && weapon.Value != null && weapon.Value.IsValid && !string.IsNullOrEmpty(weapon.Value.DesignerName))
+ {
+ string weaponName = weapon.Value.DesignerName;
+ if (!allowedWeapons.Contains(weaponName))
{
weapon.Value.NextPrimaryAttackTick = disableWeapon ? int.MaxValue : Server.TickCount;
weapon.Value.NextSecondaryAttackTick = disableWeapon ? int.MaxValue : Server.TickCount;
@@ -219,6 +219,7 @@ namespace src.player.skills
Utilities.SetStateChanged(weapon.Value, "CBasePlayerWeapon", "m_nNextPrimaryAttackTick");
Utilities.SetStateChanged(weapon.Value, "CBasePlayerWeapon", "m_nNextSecondaryAttackTick");
}
+ }
}
private static void UpdateHUD(CCSPlayerController player)
@@ -231,7 +232,7 @@ namespace src.player.skills
if (playerInfo == null) return;
var weapon = pawn.WeaponServices.ActiveWeapon.Value;
- if (weapon == null || !weapon.IsValid || !disabledWeapons.Contains(weapon.DesignerName))
+ if (weapon == null || !weapon.IsValid || allowedWeapons.Contains(weapon.DesignerName))
{
playerInfo.PrintHTML = null;
return;
diff --git a/jRandomSkills - SRC Files/src/player/skills/Glaz.cs b/jRandomSkills - SRC Files/src/player/skills/Glaz.cs
index f6bb458..a2a1f04 100644
--- a/jRandomSkills - SRC Files/src/player/skills/Glaz.cs
+++ b/jRandomSkills - SRC Files/src/player/skills/Glaz.cs
@@ -13,6 +13,7 @@ namespace src.player.skills
{
private const Skills skillName = Skills.Glaz;
private readonly static ConcurrentDictionary smokes = [];
+ private readonly static ConcurrentDictionary playersWithSkill = [];
private static readonly object setLock = new();
public static void LoadSkill()
@@ -51,19 +52,82 @@ namespace src.player.skills
{
var entity = Utilities.GetEntityFromIndex((int)entityIndex);
if (entity == null || !entity.IsValid) continue;
- info.TransmitEntities.Remove(entity.Index);
+
+ if (info.TransmitEntities.Contains(entity.Index))
+ info.TransmitEntities.Remove(entity.Index);
}
}
}
- public static void EnableSkill(CCSPlayerController player)
+ public static void GrenadeThrown(EventGrenadeThrown @event)
{
- Event.EnableTransmit();
- SkillUtils.TryGiveWeapon(player, CsItem.SmokeGrenade);
+ var player = PlayerManager.GetPlayerEvent(@event.Userid);
+ if (player == null || !player.IsValid) return;
+
+ var weapon = @event.Weapon;
+ if (weapon != "smokegrenade") return;
+
+ var playerInfo = PlayerManager.GetPlayerByIndex(player!.Index);
+ if (playerInfo?.Skill != skillName) return;
+
+ if (playersWithSkill.TryGetValue(player.Index, out int grenadesLeft) && grenadesLeft > 1)
+ {
+ playersWithSkill[player.Index] = grenadesLeft - 1;
+ player!.GiveNamedItem($"weapon_{weapon}");
+ SkillUtils.UpdateGrenadeCount(player, CsItem.SmokeGrenade, grenadesLeft - 1);
+ }
}
- public class SkillConfig(Skills skill = skillName, bool active = true, string color = "#5d00ff", CsTeam onlyTeam = CsTeam.None, bool disableOnFreezeTime = false, bool needsTeammates = false, string requiredPermission = "", int maxPerServer = -1, Rarity rarity = Rarity.Common) : SkillsInfo.DefaultSkillInfo(skill, active, color, onlyTeam, disableOnFreezeTime, needsTeammates, requiredPermission, maxPerServer, rarity)
+ public static void WeaponEquip(EventItemEquip @event)
{
+ var player = PlayerManager.GetPlayerEvent(@event.Userid);
+ var weapon = @event.Item;
+ if (player == null || !player.IsValid) return;
+
+ if (playersWithSkill.TryGetValue(player.Index, out int grenadesLeft) && grenadesLeft > 1)
+ SkillUtils.UpdateGrenadeCount(player, CsItem.SmokeGrenade, grenadesLeft);
+ }
+
+ public static void WeaponPickup(EventItemPickup @event)
+ {
+ var player = PlayerManager.GetPlayerEvent(@event.Userid);
+ if (player == null || !player.IsValid) return;
+
+ var weapon = @event.Item;
+ if (string.IsNullOrEmpty(weapon) || weapon != "smokegrenade") return;
+
+ if (playersWithSkill.TryGetValue(player.Index, out int grenadesLeft) && grenadesLeft > 1)
+ SkillUtils.UpdateGrenadeCount(player, CsItem.SmokeGrenade, grenadesLeft);
+ }
+
+ public static void EnableSkill(CCSPlayerController player)
+ {
+ if (player == null || !player.IsValid) return;
+
+ Event.EnableTransmit();
+
+ int grenadeLimit = SkillsInfo.GetValue(skillName, "grenadeLimit");
+ playersWithSkill.TryAdd(player.Index, grenadeLimit);
+
+ SkillUtils.TryGiveWeapon(player, CsItem.SmokeGrenade);
+ SkillUtils.UpdateGrenadeCount(player, CsItem.SmokeGrenade, grenadeLimit);
+
+ SkillUtils.ForceFullUpdateToAll();
+ }
+
+ public static void DisableSkill(CCSPlayerController player)
+ {
+ if (player == null || !player.IsValid) return;
+
+ playersWithSkill.TryRemove(player.Index, out _);
+ SkillUtils.UpdateGrenadeCount(player, CsItem.SmokeGrenade, 1);
+
+ SkillUtils.ForceFullUpdateToAll();
+ }
+
+ public class SkillConfig(Skills skill = skillName, bool active = true, string color = "#5d00ff", CsTeam onlyTeam = CsTeam.None, bool disableOnFreezeTime = false, bool needsTeammates = false, string requiredPermission = "", int maxPerServer = -1, Rarity rarity = Rarity.Common, int grenadeLimit = 2) : SkillsInfo.DefaultSkillInfo(skill, active, color, onlyTeam, disableOnFreezeTime, needsTeammates, requiredPermission, maxPerServer, rarity)
+ {
+ public int GrenadeLimit { get; set; } = grenadeLimit;
}
}
}
\ No newline at end of file
diff --git a/jRandomSkills - SRC Files/src/player/skills/GodMode.cs b/jRandomSkills - SRC Files/src/player/skills/GodMode.cs
index 05cc683..e89ef69 100644
--- a/jRandomSkills - SRC Files/src/player/skills/GodMode.cs
+++ b/jRandomSkills - SRC Files/src/player/skills/GodMode.cs
@@ -13,6 +13,8 @@ namespace src.player.skills
private static readonly ConcurrentDictionary SkillPlayerInfo = [];
private static readonly object setLock = new();
+ public static bool HaveHodMode(uint playerIndex) => SkillPlayerInfo.TryGetValue(playerIndex, out var skillInfo) && skillInfo.CanUse == false;
+
public static void LoadSkill()
{
SkillUtils.RegisterSkill(skillName, SkillsInfo.GetValue(skillName, "color"));
@@ -30,8 +32,12 @@ namespace src.player.skills
{
SteamID = player.Index,
CanUse = true,
+ HaveGodMode = false,
Cooldown = DateTime.MinValue,
});
+
+ if (SkillPlayerInfo.TryGetValue(player.Index, out var skillInfo))
+ skillInfo.HaveGodMode = true;
}
public static void OnTick()
@@ -90,11 +96,15 @@ namespace src.player.skills
{
skillInfo.CanUse = false;
skillInfo.Cooldown = DateTime.Now;
+ skillInfo.HaveGodMode = true;
PlayerManager.GetPlayerFromEvent(player)?.PrintToChat($" {ChatColors.Green} {player.GetTranslation("godmode_on")}");
player.PlayerPawn.Value.TakesDamage = false;
Instance.AddTimer(SkillsInfo.GetValue(skillName, "duration"), () => {
+ if (SkillPlayerInfo.TryGetValue(playerIndex, out var skillInfo))
+ skillInfo.HaveGodMode = false;
+
var player = Utilities.GetPlayerFromIndex((int)playerIndex);
if (player != null && player.IsValid)
{
@@ -102,6 +112,9 @@ namespace src.player.skills
player.PlayerPawn.Value.TakesDamage = true;
PlayerManager.GetPlayerFromEvent(player)?.PrintToChat($" {ChatColors.Red} {player.GetTranslation("godmode_off")}");
+
+ if (player.PlayerPawn.Value.Health <= 0)
+ player.CommitSuicide(false, true);
}
}, CounterStrikeSharp.API.Modules.Timers.TimerFlags.STOP_ON_MAPCHANGE);
}
@@ -112,6 +125,7 @@ namespace src.player.skills
{
public ulong SteamID { get; set; }
public bool CanUse { get; set; }
+ public bool HaveGodMode { get; set; }
public DateTime Cooldown { get; set; }
}
diff --git a/jRandomSkills - SRC Files/src/player/skills/HealingSmoke.cs b/jRandomSkills - SRC Files/src/player/skills/HealingSmoke.cs
index 9f19cb7..e1f1ad0 100644
--- a/jRandomSkills - SRC Files/src/player/skills/HealingSmoke.cs
+++ b/jRandomSkills - SRC Files/src/player/skills/HealingSmoke.cs
@@ -11,6 +11,7 @@ namespace src.player.skills
{
private const Skills skillName = Skills.HealingSmoke;
private static readonly ConcurrentDictionary smokes = [];
+ private readonly static ConcurrentDictionary playersWithSkill = [];
public static void LoadSkill()
{
@@ -95,16 +96,72 @@ namespace src.player.skills
}
}
- public static void EnableSkill(CCSPlayerController player)
+ public static void GrenadeThrown(EventGrenadeThrown @event)
{
- SkillUtils.TryGiveWeapon(player, CsItem.SmokeGrenade);
+ var player = PlayerManager.GetPlayerEvent(@event.Userid);
+ if (player == null || !player.IsValid) return;
+
+ var weapon = @event.Weapon;
+ if (weapon != "smokegrenade") return;
+
+ var playerInfo = PlayerManager.GetPlayerByIndex(player!.Index);
+ if (playerInfo?.Skill != skillName) return;
+
+ if (playersWithSkill.TryGetValue(player.Index, out int grenadesLeft) && grenadesLeft > 1)
+ {
+ playersWithSkill[player.Index] = grenadesLeft - 1;
+ player!.GiveNamedItem($"weapon_{weapon}");
+ SkillUtils.UpdateGrenadeCount(player, CsItem.SmokeGrenade, grenadesLeft - 1);
+ }
}
- public class SkillConfig(Skills skill = skillName, bool active = true, string color = "#1fe070", CsTeam onlyTeam = CsTeam.None, bool disableOnFreezeTime = false, bool needsTeammates = false, string requiredPermission = "", int maxPerServer = -1, Rarity rarity = Rarity.Common, int smokeHeal = 1, float smokeRadius = 180, int tickCooldown = 16) : SkillsInfo.DefaultSkillInfo(skill, active, color, onlyTeam, disableOnFreezeTime, needsTeammates, requiredPermission, maxPerServer, rarity)
+ public static void WeaponEquip(EventItemEquip @event)
+ {
+ var player = PlayerManager.GetPlayerEvent(@event.Userid);
+ var weapon = @event.Item;
+ if (player == null || !player.IsValid) return;
+
+ if (playersWithSkill.TryGetValue(player.Index, out int grenadesLeft) && grenadesLeft > 1)
+ SkillUtils.UpdateGrenadeCount(player, CsItem.SmokeGrenade, grenadesLeft);
+ }
+
+ public static void WeaponPickup(EventItemPickup @event)
+ {
+ var player = PlayerManager.GetPlayerEvent(@event.Userid);
+ if (player == null || !player.IsValid) return;
+
+ var weapon = @event.Item;
+ if (string.IsNullOrEmpty(weapon) || weapon != "smokegrenade") return;
+
+ if (playersWithSkill.TryGetValue(player.Index, out int grenadesLeft) && grenadesLeft > 1)
+ SkillUtils.UpdateGrenadeCount(player, CsItem.SmokeGrenade, grenadesLeft);
+ }
+
+ public static void EnableSkill(CCSPlayerController player)
+ {
+ if (player == null || !player.IsValid) return;
+
+ int grenadeLimit = SkillsInfo.GetValue(skillName, "grenadeLimit");
+ playersWithSkill.TryAdd(player.Index, grenadeLimit);
+
+ SkillUtils.TryGiveWeapon(player, CsItem.SmokeGrenade);
+ SkillUtils.UpdateGrenadeCount(player, CsItem.SmokeGrenade, grenadeLimit);
+ }
+
+ public static void DisableSkill(CCSPlayerController player)
+ {
+ if (player == null || !player.IsValid) return;
+
+ playersWithSkill.TryRemove(player.Index, out _);
+ SkillUtils.UpdateGrenadeCount(player, CsItem.SmokeGrenade, 1);
+ }
+
+ public class SkillConfig(Skills skill = skillName, bool active = true, string color = "#1fe070", CsTeam onlyTeam = CsTeam.None, bool disableOnFreezeTime = false, bool needsTeammates = false, string requiredPermission = "", int maxPerServer = -1, Rarity rarity = Rarity.Common, int smokeHeal = 1, float smokeRadius = 180, int tickCooldown = 16, int grenadeLimit = 1) : SkillsInfo.DefaultSkillInfo(skill, active, color, onlyTeam, disableOnFreezeTime, needsTeammates, requiredPermission, maxPerServer, rarity)
{
public int SmokeHeal { get; set; } = smokeHeal;
public float SmokeRadius { get; set; } = smokeRadius;
public int TickCooldown { get; set; } = tickCooldown;
+ public int GrenadeLimit { get; set; } = grenadeLimit;
}
}
}
\ No newline at end of file
diff --git a/jRandomSkills - SRC Files/src/player/skills/HolyHandGrenade.cs b/jRandomSkills - SRC Files/src/player/skills/HolyHandGrenade.cs
index 6d8f2e6..20b7f94 100644
--- a/jRandomSkills - SRC Files/src/player/skills/HolyHandGrenade.cs
+++ b/jRandomSkills - SRC Files/src/player/skills/HolyHandGrenade.cs
@@ -3,13 +3,14 @@ using CounterStrikeSharp.API.Core;
using CounterStrikeSharp.API.Modules.Entities.Constants;
using CounterStrikeSharp.API.Modules.Utils;
using src.utils;
-using static src.jRandomSkills;
+using System.Collections.Concurrent;
namespace src.player.skills
{
public class HolyHandGrenade : ISkill
{
private const Skills skillName = Skills.HolyHandGrenade;
+ private readonly static ConcurrentDictionary playersWithSkill = [];
public static void LoadSkill()
{
@@ -40,15 +41,71 @@ namespace src.player.skills
});
}
- public static void EnableSkill(CCSPlayerController player)
+ public static void GrenadeThrown(EventGrenadeThrown @event)
{
- SkillUtils.TryGiveWeapon(player, CsItem.HEGrenade);
+ var player = PlayerManager.GetPlayerEvent(@event.Userid);
+ if (player == null || !player.IsValid) return;
+
+ var weapon = @event.Weapon;
+ if (weapon != "hegrenade") return;
+
+ var playerInfo = PlayerManager.GetPlayerByIndex(player!.Index);
+ if (playerInfo?.Skill != skillName) return;
+
+ if (playersWithSkill.TryGetValue(player.Index, out int grenadesLeft) && grenadesLeft > 1)
+ {
+ playersWithSkill[player.Index] = grenadesLeft - 1;
+ player!.GiveNamedItem($"weapon_{weapon}");
+ SkillUtils.UpdateGrenadeCount(player, CsItem.HEGrenade, grenadesLeft - 1);
+ }
}
- public class SkillConfig(Skills skill = skillName, bool active = true, string color = "#ffdd00", CsTeam onlyTeam = CsTeam.None, bool disableOnFreezeTime = false, bool needsTeammates = false, string requiredPermission = "", int maxPerServer = -1, Rarity rarity = Rarity.Common, float damageMultiplier = 2f, float damageRadiusMultiplier = 2f) : SkillsInfo.DefaultSkillInfo(skill, active, color, onlyTeam, disableOnFreezeTime, needsTeammates, requiredPermission, maxPerServer, rarity)
+ public static void WeaponEquip(EventItemEquip @event)
+ {
+ var player = PlayerManager.GetPlayerEvent(@event.Userid);
+ var weapon = @event.Item;
+ if (player == null || !player.IsValid) return;
+
+ if (playersWithSkill.TryGetValue(player.Index, out int grenadesLeft) && grenadesLeft > 1)
+ SkillUtils.UpdateGrenadeCount(player, CsItem.HEGrenade, grenadesLeft);
+ }
+
+ public static void WeaponPickup(EventItemPickup @event)
+ {
+ var player = PlayerManager.GetPlayerEvent(@event.Userid);
+ if (player == null || !player.IsValid) return;
+
+ var weapon = @event.Item;
+ if (string.IsNullOrEmpty(weapon) || weapon != "hegrenade") return;
+
+ if (playersWithSkill.TryGetValue(player.Index, out int grenadesLeft) && grenadesLeft > 1)
+ SkillUtils.UpdateGrenadeCount(player, CsItem.HEGrenade, grenadesLeft);
+ }
+
+ public static void EnableSkill(CCSPlayerController player)
+ {
+ if (player == null || !player.IsValid) return;
+
+ int grenadeLimit = SkillsInfo.GetValue(skillName, "grenadeLimit");
+ playersWithSkill.TryAdd(player.Index, grenadeLimit);
+
+ SkillUtils.TryGiveWeapon(player, CsItem.HEGrenade);
+ SkillUtils.UpdateGrenadeCount(player, CsItem.HEGrenade, grenadeLimit);
+ }
+
+ public static void DisableSkill(CCSPlayerController player)
+ {
+ if (player == null || !player.IsValid) return;
+
+ playersWithSkill.TryRemove(player.Index, out _);
+ SkillUtils.UpdateGrenadeCount(player, CsItem.HEGrenade, 1);
+ }
+
+ public class SkillConfig(Skills skill = skillName, bool active = true, string color = "#ffdd00", CsTeam onlyTeam = CsTeam.None, bool disableOnFreezeTime = false, bool needsTeammates = false, string requiredPermission = "", int maxPerServer = -1, Rarity rarity = Rarity.Common, float damageMultiplier = 2f, float damageRadiusMultiplier = 2f, int grenadeLimit = 1) : SkillsInfo.DefaultSkillInfo(skill, active, color, onlyTeam, disableOnFreezeTime, needsTeammates, requiredPermission, maxPerServer, rarity)
{
public float DamageMultiplier { get; set; } = damageMultiplier;
public float DamageRadiusMultiplier { get; set; } = damageRadiusMultiplier;
+ public int GrenadeLimit { get; set; } = grenadeLimit;
}
}
}
\ No newline at end of file
diff --git a/jRandomSkills - SRC Files/src/player/skills/HomingNades.cs b/jRandomSkills - SRC Files/src/player/skills/HomingNades.cs
index f8d1093..03ea2b3 100644
--- a/jRandomSkills - SRC Files/src/player/skills/HomingNades.cs
+++ b/jRandomSkills - SRC Files/src/player/skills/HomingNades.cs
@@ -11,6 +11,7 @@ namespace src.player.skills
{
private const Skills skillName = Skills.HomingNades;
private readonly static ConcurrentDictionary nades = [];
+ private readonly static ConcurrentDictionary playersWithSkill = [];
public static void LoadSkill()
{
@@ -140,16 +141,72 @@ namespace src.player.skills
});
}
- public static void EnableSkill(CCSPlayerController player)
+ public static void GrenadeThrown(EventGrenadeThrown @event)
{
- SkillUtils.TryGiveWeapon(player, CsItem.HEGrenade);
+ var player = PlayerManager.GetPlayerEvent(@event.Userid);
+ if (player == null || !player.IsValid) return;
+
+ var weapon = @event.Weapon;
+ if (weapon != "hegrenade") return;
+
+ var playerInfo = PlayerManager.GetPlayerByIndex(player!.Index);
+ if (playerInfo?.Skill != skillName) return;
+
+ if (playersWithSkill.TryGetValue(player.Index, out int grenadesLeft) && grenadesLeft > 1)
+ {
+ playersWithSkill[player.Index] = grenadesLeft - 1;
+ player!.GiveNamedItem($"weapon_{weapon}");
+ SkillUtils.UpdateGrenadeCount(player, CsItem.HEGrenade, grenadesLeft - 1);
+ }
}
- public class SkillConfig(Skills skill = skillName, bool active = true, string color = "#384728", CsTeam onlyTeam = CsTeam.None, bool disableOnFreezeTime = false, bool needsTeammates = false, string requiredPermission = "", int maxPerServer = -1, Rarity rarity = Rarity.Common, float strength = 150, float maxVelocity = 2000, float detonationRange = 130) : SkillsInfo.DefaultSkillInfo(skill, active, color, onlyTeam, disableOnFreezeTime, needsTeammates, requiredPermission, maxPerServer, rarity)
+ public static void WeaponEquip(EventItemEquip @event)
+ {
+ var player = PlayerManager.GetPlayerEvent(@event.Userid);
+ var weapon = @event.Item;
+ if (player == null || !player.IsValid) return;
+
+ if (playersWithSkill.TryGetValue(player.Index, out int grenadesLeft) && grenadesLeft > 1)
+ SkillUtils.UpdateGrenadeCount(player, CsItem.HEGrenade, grenadesLeft);
+ }
+
+ public static void WeaponPickup(EventItemPickup @event)
+ {
+ var player = PlayerManager.GetPlayerEvent(@event.Userid);
+ if (player == null || !player.IsValid) return;
+
+ var weapon = @event.Item;
+ if (string.IsNullOrEmpty(weapon) || weapon != "hegrenade") return;
+
+ if (playersWithSkill.TryGetValue(player.Index, out int grenadesLeft) && grenadesLeft > 1)
+ SkillUtils.UpdateGrenadeCount(player, CsItem.HEGrenade, grenadesLeft);
+ }
+
+ public static void EnableSkill(CCSPlayerController player)
+ {
+ if (player == null || !player.IsValid) return;
+
+ int grenadeLimit = SkillsInfo.GetValue(skillName, "grenadeLimit");
+ playersWithSkill.TryAdd(player.Index, grenadeLimit);
+
+ SkillUtils.TryGiveWeapon(player, CsItem.HEGrenade);
+ SkillUtils.UpdateGrenadeCount(player, CsItem.HEGrenade, grenadeLimit);
+ }
+
+ public static void DisableSkill(CCSPlayerController player)
+ {
+ if (player == null || !player.IsValid) return;
+
+ playersWithSkill.TryRemove(player.Index, out _);
+ SkillUtils.UpdateGrenadeCount(player, CsItem.HEGrenade, 1);
+ }
+
+ public class SkillConfig(Skills skill = skillName, bool active = true, string color = "#384728", CsTeam onlyTeam = CsTeam.None, bool disableOnFreezeTime = false, bool needsTeammates = false, string requiredPermission = "", int maxPerServer = -1, Rarity rarity = Rarity.Common, float strength = 150, float maxVelocity = 2000, float detonationRange = 130, int grenadeLimit = 2) : SkillsInfo.DefaultSkillInfo(skill, active, color, onlyTeam, disableOnFreezeTime, needsTeammates, requiredPermission, maxPerServer, rarity)
{
public float Strength { get; set; } = strength;
public float MaxVelocity { get; set; } = maxVelocity;
public float DetonationRange { get; set; } = detonationRange;
+ public int GrenadeLimit { get; set; } = grenadeLimit;
}
}
}
\ No newline at end of file
diff --git a/jRandomSkills - SRC Files/src/player/skills/Iana.cs b/jRandomSkills - SRC Files/src/player/skills/Iana.cs
index aa1805a..4b12069 100644
--- a/jRandomSkills - SRC Files/src/player/skills/Iana.cs
+++ b/jRandomSkills - SRC Files/src/player/skills/Iana.cs
@@ -241,7 +241,7 @@ namespace src.player.skills
return clone;
}
- private unsafe static bool CheckPosition(CCSPlayerController player, Vector endPos)
+ private static bool CheckPosition(CCSPlayerController player, Vector endPos)
{
var playerPawn = player.PlayerPawn.Value;
@@ -340,10 +340,16 @@ namespace src.player.skills
var victim = PlayerManager.GetPlayerEvent(@event.Userid);
if (victim == null || !victim.IsValid) return;
- if (playersInfo.TryGetValue(victim.Index, out var playerSkill) && playerSkill.CloneProp != null)
+ if (playersInfo.TryGetValue(victim.Index, out var playerSkill))
{
- KillClone(playerSkill);
- SkillUtils.RestoreHealth(victim);
+ if (playerSkill.CloneProp != null)
+ {
+ KillClone(playerSkill);
+ playerSkill.LastHit = Server.TickCount;
+ }
+
+ if (playerSkill.LastHit + 4 > Server.TickCount)
+ SkillUtils.RestoreHealth(victim);
}
}
@@ -429,6 +435,7 @@ namespace src.player.skills
public float NextUse { get; set; }
public float UseTime { get; set; }
public int InfoTime { get; set; }
+ public int LastHit { get; set; }
public List Weapons { get; set; } = [];
}
diff --git a/jRandomSkills - SRC Files/src/player/skills/Jackal.cs b/jRandomSkills - SRC Files/src/player/skills/Jackal.cs
index d8bddc7..79e13eb 100644
--- a/jRandomSkills - SRC Files/src/player/skills/Jackal.cs
+++ b/jRandomSkills - SRC Files/src/player/skills/Jackal.cs
@@ -1,6 +1,7 @@
using CounterStrikeSharp.API;
using CounterStrikeSharp.API.Core;
using CounterStrikeSharp.API.Core.Attributes;
+using CounterStrikeSharp.API.Modules.Entities;
using CounterStrikeSharp.API.Modules.Utils;
using src.utils;
using System.Collections.Concurrent;
@@ -75,7 +76,8 @@ namespace src.player.skills
if (relayEntity == null || !relayEntity.IsValid) continue;
if (player.Team == trailOwner.Team || !isJackalOwner)
- info.TransmitEntities.Remove(relayEntity.Index);
+ if (info.TransmitEntities.Contains(relayEntity.Index))
+ info.TransmitEntities.Remove(relayEntity.Index);
}
}
}
@@ -137,6 +139,8 @@ namespace src.player.skills
mainSkillTimer ??= Instance.AddTimer(2.5f, () => UpdateAllTrails(),
CounterStrikeSharp.API.Modules.Timers.TimerFlags.REPEAT | CounterStrikeSharp.API.Modules.Timers.TimerFlags.STOP_ON_MAPCHANGE);
+
+ SkillUtils.ForceFullUpdateToAll();
}
private static void UpdateAllTrails()
@@ -159,6 +163,8 @@ namespace src.player.skills
mainSkillTimer.Kill();
mainSkillTimer = null;
}
+
+ SkillUtils.ForceFullUpdateToAll();
}
public class SkillConfig(Skills skill = skillName, bool active = true, string color = "#f542ef", CsTeam onlyTeam = CsTeam.None, bool disableOnFreezeTime = false, bool needsTeammates = false, string requiredPermission = "", int maxPerServer = 1, Rarity rarity = Rarity.Common, string particleName = "particles/ui/hud/ui_map_def_utility_trail.vpcf") : SkillsInfo.DefaultSkillInfo(skill, active, color, onlyTeam, disableOnFreezeTime, needsTeammates, requiredPermission, maxPerServer, rarity)
diff --git a/jRandomSkills - SRC Files/src/player/skills/KillerFlash.cs b/jRandomSkills - SRC Files/src/player/skills/KillerFlash.cs
index c525751..e8c47c3 100644
--- a/jRandomSkills - SRC Files/src/player/skills/KillerFlash.cs
+++ b/jRandomSkills - SRC Files/src/player/skills/KillerFlash.cs
@@ -1,8 +1,9 @@
using CounterStrikeSharp.API.Core;
-using CounterStrikeSharp.API.Modules.Commands.Targeting;
+using CounterStrikeSharp.API.Modules.Cvars;
using CounterStrikeSharp.API.Modules.Entities.Constants;
using CounterStrikeSharp.API.Modules.Utils;
using src.utils;
+using System.Collections.Concurrent;
using static src.jRandomSkills;
namespace src.player.skills
@@ -10,6 +11,7 @@ namespace src.player.skills
public class KillerFlash : ISkill
{
private const Skills skillName = Skills.KillerFlash;
+ private readonly static ConcurrentDictionary playersWithSkill = [];
public static void LoadSkill()
{
@@ -31,15 +33,77 @@ namespace src.player.skills
player?.PlayerPawn?.Value?.CommitSuicide(false, true);
}
- public static void EnableSkill(CCSPlayerController player)
+ public static void GrenadeThrown(EventGrenadeThrown @event)
{
- SkillUtils.TryGiveWeapon(player, CsItem.FlashbangGrenade);
+ var player = PlayerManager.GetPlayerEvent(@event.Userid);
+ if (player == null || !player.IsValid) return;
+
+ var weapon = @event.Weapon;
+ if (weapon != "flashbang") return;
+
+ var playerInfo = PlayerManager.GetPlayerByIndex(player!.Index);
+ if (playerInfo?.Skill != skillName) return;
+
+ if (playersWithSkill.TryGetValue(player.Index, out int grenadesLeft) && grenadesLeft > 1)
+ {
+ playersWithSkill[player.Index] = grenadesLeft - 1;
+ player!.GiveNamedItem($"weapon_{weapon}");
+ SkillUtils.UpdateGrenadeCount(player, CsItem.FlashbangGrenade, grenadesLeft - 1);
+ }
}
- public class SkillConfig(Skills skill = skillName, bool active = true, string color = "#57bcff", CsTeam onlyTeam = CsTeam.None, bool disableOnFreezeTime = false, bool needsTeammates = false, string requiredPermission = "", int maxPerServer = 1, Rarity rarity = Rarity.Epic, float flashDuration = 1f, bool friendlyFire = true) : SkillsInfo.DefaultSkillInfo(skill, active, color, onlyTeam, disableOnFreezeTime, needsTeammates, requiredPermission, maxPerServer, rarity)
+ public static void WeaponEquip(EventItemEquip @event)
+ {
+ var player = PlayerManager.GetPlayerEvent(@event.Userid);
+ var weapon = @event.Item;
+ if (player == null || !player.IsValid) return;
+
+ if (playersWithSkill.TryGetValue(player.Index, out int grenadesLeft) && grenadesLeft > 1)
+ SkillUtils.UpdateGrenadeCount(player, CsItem.FlashbangGrenade, grenadesLeft);
+ }
+
+ public static void WeaponPickup(EventItemPickup @event)
+ {
+ var player = PlayerManager.GetPlayerEvent(@event.Userid);
+ if (player == null || !player.IsValid) return;
+
+ var weapon = @event.Item;
+ if (string.IsNullOrEmpty(weapon) || weapon != "flashbang") return;
+
+ if (playersWithSkill.TryGetValue(player.Index, out int grenadesLeft) && grenadesLeft > 1)
+ SkillUtils.UpdateGrenadeCount(player, CsItem.FlashbangGrenade, grenadesLeft);
+ }
+
+ public static void EnableSkill(CCSPlayerController player)
+ {
+ if (player == null || !player.IsValid) return;
+
+ int flashbangLimit = ConVar.Find("ammo_grenade_limit_flashbang")?.GetPrimitiveValue() ?? 2;
+ int grenadeLimit = SkillsInfo.GetValue(skillName, "grenadeLimit");
+
+ if (grenadeLimit > flashbangLimit)
+ {
+ playersWithSkill.TryAdd(player.Index, grenadeLimit);
+ SkillUtils.TryGiveWeapon(player, CsItem.FlashbangGrenade);
+ SkillUtils.UpdateGrenadeCount(player, CsItem.FlashbangGrenade, grenadeLimit);
+ }
+ else
+ SkillUtils.TryGiveWeapon(player, CsItem.FlashbangGrenade, grenadeLimit, false);
+ }
+
+ public static void DisableSkill(CCSPlayerController player)
+ {
+ if (player == null || !player.IsValid) return;
+
+ playersWithSkill.TryRemove(player.Index, out _);
+ SkillUtils.UpdateGrenadeCount(player, CsItem.FlashbangGrenade, 1);
+ }
+
+ public class SkillConfig(Skills skill = skillName, bool active = true, string color = "#57bcff", CsTeam onlyTeam = CsTeam.None, bool disableOnFreezeTime = false, bool needsTeammates = false, string requiredPermission = "", int maxPerServer = 1, Rarity rarity = Rarity.Epic, float flashDuration = 1f, bool friendlyFire = true, int grenadeLimit = 1) : SkillsInfo.DefaultSkillInfo(skill, active, color, onlyTeam, disableOnFreezeTime, needsTeammates, requiredPermission, maxPerServer, rarity)
{
public float FlashDuration { get; set; } = flashDuration;
public bool FriendlyFire { get; set; } = friendlyFire;
+ public int GrenadeLimit { get; set; } = grenadeLimit;
}
}
}
\ No newline at end of file
diff --git a/jRandomSkills - SRC Files/src/player/skills/LifeSwap.cs b/jRandomSkills - SRC Files/src/player/skills/LifeSwap.cs
index e588f5f..7af9337 100644
--- a/jRandomSkills - SRC Files/src/player/skills/LifeSwap.cs
+++ b/jRandomSkills - SRC Files/src/player/skills/LifeSwap.cs
@@ -33,7 +33,7 @@ namespace src.player.skills
if (playerInfo == null || playerInfo.Skill != skillName) continue;
var enemies = Utilities.GetPlayers().Where(p =>p != null &&p.IsValid).Select(p => PlayerManager.GetPlayerEvent(p)).Where(p =>p != null &&p.IsValid &&p.Team != player.Team &&p.PlayerPawn?.Value != null &&p.PlayerPawn.Value.IsValid &&p.PlayerPawn.Value.Health > 0 &&!p.IsHLTV &&p.Team != CsTeam.Spectator&& p.Team != CsTeam.None).ToArray();
- ConcurrentBag<(string, string)> menuItems = new(enemies.Select(e => ($"{e.PlayerName} : {e?.PlayerPawn?.Value?.Health ?? 0} HP", e.Index.ToString())));
+ ConcurrentBag<(string, string)> menuItems = new(enemies.Select(e => ($"\u202A{e.PlayerName}\u202C : {e?.PlayerPawn?.Value?.Health ?? 0} HP", e.Index.ToString())));
SkillUtils.UpdateMenu(player, menuItems);
}
}
@@ -75,7 +75,7 @@ namespace src.player.skills
var enemies = Utilities.GetPlayers().Where(p =>p != null &&p.IsValid).Select(p => PlayerManager.GetPlayerEvent(p)).Where(p =>p != null &&p.IsValid &&p.Team != player.Team &&p.PlayerPawn?.Value != null &&p.PlayerPawn.Value.IsValid &&p.PlayerPawn.Value.Health > 0 &&!p.IsHLTV &&p.Team != CsTeam.Spectator&& p.Team != CsTeam.None).ToArray();
if (enemies.Length > 0)
{
- ConcurrentBag<(string, string)> menuItems = new(enemies.Select(e => ($"{e.PlayerName} : {e.PawnHealth} HP", e.Index.ToString())));
+ ConcurrentBag<(string, string)> menuItems = new(enemies.Select(e => ($"\u202A{e.PlayerName}\u202C : {e.PawnHealth} HP", e.Index.ToString())));
SkillUtils.CreateMenu(player, menuItems);
}
else
diff --git a/jRandomSkills - SRC Files/src/player/skills/MagneticDecoy.cs b/jRandomSkills - SRC Files/src/player/skills/MagneticDecoy.cs
index 8a3815c..f34a3fe 100644
--- a/jRandomSkills - SRC Files/src/player/skills/MagneticDecoy.cs
+++ b/jRandomSkills - SRC Files/src/player/skills/MagneticDecoy.cs
@@ -11,6 +11,7 @@ namespace src.player.skills
{
private const Skills skillName = Skills.MagneticDecoy;
private static readonly ConcurrentDictionary decoys = [];
+ private readonly static ConcurrentDictionary playersWithSkill = [];
public static void LoadSkill()
{
@@ -74,15 +75,71 @@ namespace src.player.skills
}
}
- public static void EnableSkill(CCSPlayerController player)
+ public static void GrenadeThrown(EventGrenadeThrown @event)
{
- SkillUtils.TryGiveWeapon(player, CsItem.DecoyGrenade);
+ var player = PlayerManager.GetPlayerEvent(@event.Userid);
+ if (player == null || !player.IsValid) return;
+
+ var weapon = @event.Weapon;
+ if (weapon != "decoy") return;
+
+ var playerInfo = PlayerManager.GetPlayerByIndex(player!.Index);
+ if (playerInfo?.Skill != skillName) return;
+
+ if (playersWithSkill.TryGetValue(player.Index, out int grenadesLeft) && grenadesLeft > 1)
+ {
+ playersWithSkill[player.Index] = grenadesLeft - 1;
+ player!.GiveNamedItem($"weapon_{weapon}");
+ SkillUtils.UpdateGrenadeCount(player, CsItem.DecoyGrenade, grenadesLeft - 1);
+ }
}
- public class SkillConfig(Skills skill = skillName, bool active = true, string color = "#81f0c4", CsTeam onlyTeam = CsTeam.None, bool disableOnFreezeTime = false, bool needsTeammates = false, string requiredPermission = "", int maxPerServer = -1, Rarity rarity = Rarity.Common, float triggerRadius = 180, float strenght = 30) : SkillsInfo.DefaultSkillInfo(skill, active, color, onlyTeam, disableOnFreezeTime, needsTeammates, requiredPermission, maxPerServer, rarity)
+ public static void WeaponEquip(EventItemEquip @event)
+ {
+ var player = PlayerManager.GetPlayerEvent(@event.Userid);
+ var weapon = @event.Item;
+ if (player == null || !player.IsValid) return;
+
+ if (playersWithSkill.TryGetValue(player.Index, out int grenadesLeft) && grenadesLeft > 1)
+ SkillUtils.UpdateGrenadeCount(player, CsItem.DecoyGrenade, grenadesLeft);
+ }
+
+ public static void WeaponPickup(EventItemPickup @event)
+ {
+ var player = PlayerManager.GetPlayerEvent(@event.Userid);
+ if (player == null || !player.IsValid) return;
+
+ var weapon = @event.Item;
+ if (string.IsNullOrEmpty(weapon) || weapon != "decoy") return;
+
+ if (playersWithSkill.TryGetValue(player.Index, out int grenadesLeft) && grenadesLeft > 1)
+ SkillUtils.UpdateGrenadeCount(player, CsItem.DecoyGrenade, grenadesLeft);
+ }
+
+ public static void EnableSkill(CCSPlayerController player)
+ {
+ if (player == null || !player.IsValid) return;
+
+ int grenadeLimit = SkillsInfo.GetValue(skillName, "grenadeLimit");
+ playersWithSkill.TryAdd(player.Index, grenadeLimit);
+
+ SkillUtils.TryGiveWeapon(player, CsItem.DecoyGrenade);
+ SkillUtils.UpdateGrenadeCount(player, CsItem.DecoyGrenade, grenadeLimit);
+ }
+
+ public static void DisableSkill(CCSPlayerController player)
+ {
+ if (player == null || !player.IsValid) return;
+
+ playersWithSkill.TryRemove(player.Index, out _);
+ SkillUtils.UpdateGrenadeCount(player, CsItem.DecoyGrenade, 1);
+ }
+
+ public class SkillConfig(Skills skill = skillName, bool active = true, string color = "#81f0c4", CsTeam onlyTeam = CsTeam.None, bool disableOnFreezeTime = false, bool needsTeammates = false, string requiredPermission = "", int maxPerServer = -1, Rarity rarity = Rarity.Common, float triggerRadius = 180, float strenght = 30, int grenadeLimit = 3) : SkillsInfo.DefaultSkillInfo(skill, active, color, onlyTeam, disableOnFreezeTime, needsTeammates, requiredPermission, maxPerServer, rarity)
{
public float TriggerRadius { get; set; } = triggerRadius;
public float Strenght { get; set; } = strenght;
+ public int GrenadeLimit { get; set; } = grenadeLimit;
}
}
}
\ No newline at end of file
diff --git a/jRandomSkills - SRC Files/src/player/skills/Miner.cs b/jRandomSkills - SRC Files/src/player/skills/Miner.cs
index 5f02cdf..a0acdee 100644
--- a/jRandomSkills - SRC Files/src/player/skills/Miner.cs
+++ b/jRandomSkills - SRC Files/src/player/skills/Miner.cs
@@ -11,6 +11,7 @@ namespace src.player.skills
{
private const Skills skillName = Skills.Miner;
private readonly static ConcurrentDictionary nades = [];
+ private readonly static ConcurrentDictionary playersWithSkill = [];
public static void LoadSkill()
{
@@ -20,6 +21,7 @@ namespace src.player.skills
public static void NewRound()
{
nades.Clear();
+ playersWithSkill.Clear();
}
public static void OnTick()
@@ -39,7 +41,7 @@ namespace src.player.skills
if (nade.CreateTime + 3 > currentTime) return;
Vector currentPos = new(nade.AbsOrigin.X, nade.AbsOrigin.Y, nade.AbsOrigin.Z);
-
+
foreach (var enemy in Utilities.GetPlayers().Where(p => p.IsValid && p.PawnIsAlive && p.TeamNum != nade.TeamNum))
{
var enemyPawn = enemy.PlayerPawn.Value;
@@ -101,12 +103,68 @@ namespace src.player.skills
public static void EnableSkill(CCSPlayerController player)
{
+ if (player == null || !player.IsValid) return;
+
+ int grenadeLimit = SkillsInfo.GetValue(skillName, "grenadeLimit");
+ playersWithSkill.TryAdd(player.Index, grenadeLimit);
+
SkillUtils.TryGiveWeapon(player, CsItem.HEGrenade);
+ SkillUtils.UpdateGrenadeCount(player, CsItem.HEGrenade, grenadeLimit);
}
- public class SkillConfig(Skills skill = skillName, bool active = true, string color = "#adf542", CsTeam onlyTeam = CsTeam.None, bool disableOnFreezeTime = false, bool needsTeammates = false, string requiredPermission = "", int maxPerServer = -1, Rarity rarity = Rarity.Common, float detonationRange = 130) : SkillsInfo.DefaultSkillInfo(skill, active, color, onlyTeam, disableOnFreezeTime, needsTeammates, requiredPermission, maxPerServer, rarity)
+ public static void GrenadeThrown(EventGrenadeThrown @event)
+ {
+ var player = PlayerManager.GetPlayerEvent(@event.Userid);
+ if (player == null || !player.IsValid) return;
+
+ var weapon = @event.Weapon;
+ if (weapon != "hegrenade") return;
+
+ var playerInfo = PlayerManager.GetPlayerByIndex(player!.Index);
+ if (playerInfo?.Skill != skillName) return;
+
+ if (playersWithSkill.TryGetValue(player.Index, out int grenadesLeft) && grenadesLeft > 1)
+ {
+ playersWithSkill[player.Index] = grenadesLeft - 1;
+ player!.GiveNamedItem($"weapon_{weapon}");
+ SkillUtils.UpdateGrenadeCount(player, CsItem.HEGrenade, grenadesLeft - 1);
+ }
+ }
+
+ public static void WeaponEquip(EventItemEquip @event)
+ {
+ var player = PlayerManager.GetPlayerEvent(@event.Userid);
+ var weapon = @event.Item;
+ if (player == null || !player.IsValid) return;
+
+ if (playersWithSkill.TryGetValue(player.Index, out int grenadesLeft) && grenadesLeft > 1)
+ SkillUtils.UpdateGrenadeCount(player, CsItem.HEGrenade, grenadesLeft);
+ }
+
+ public static void WeaponPickup(EventItemPickup @event)
+ {
+ var player = PlayerManager.GetPlayerEvent(@event.Userid);
+ if (player == null || !player.IsValid) return;
+
+ var weapon = @event.Item;
+ if (string.IsNullOrEmpty(weapon) || weapon != "hegrenade") return;
+
+ if (playersWithSkill.TryGetValue(player.Index, out int grenadesLeft) && grenadesLeft > 1)
+ SkillUtils.UpdateGrenadeCount(player, CsItem.HEGrenade, grenadesLeft);
+ }
+
+ public static void DisableSkill(CCSPlayerController player)
+ {
+ if (player == null || !player.IsValid) return;
+
+ playersWithSkill.TryRemove(player.Index, out _);
+ SkillUtils.UpdateGrenadeCount(player, CsItem.HEGrenade, 1);
+ }
+
+ public class SkillConfig(Skills skill = skillName, bool active = true, string color = "#adf542", CsTeam onlyTeam = CsTeam.None, bool disableOnFreezeTime = false, bool needsTeammates = false, string requiredPermission = "", int maxPerServer = -1, Rarity rarity = Rarity.Common, float detonationRange = 130, int grenadeLimit = 3) : SkillsInfo.DefaultSkillInfo(skill, active, color, onlyTeam, disableOnFreezeTime, needsTeammates, requiredPermission, maxPerServer, rarity)
{
public float DetonationRange { get; set; } = detonationRange;
+ public int GrenadeLimit { get; set; } = grenadeLimit;
}
}
}
\ No newline at end of file
diff --git a/jRandomSkills - SRC Files/src/player/skills/MoneySwap.cs b/jRandomSkills - SRC Files/src/player/skills/MoneySwap.cs
index 8c138e2..fff4743 100644
--- a/jRandomSkills - SRC Files/src/player/skills/MoneySwap.cs
+++ b/jRandomSkills - SRC Files/src/player/skills/MoneySwap.cs
@@ -1,7 +1,6 @@
using CounterStrikeSharp.API;
using CounterStrikeSharp.API.Core;
using CounterStrikeSharp.API.Modules.Utils;
-using static src.jRandomSkills;
using System.Collections.Concurrent;
using src.utils;
@@ -33,7 +32,7 @@ namespace src.player.skills
if (playerInfo == null || playerInfo.Skill != skillName) continue;
var enemies = Utilities.GetPlayers().Where(p =>p != null &&p.IsValid).Select(p => PlayerManager.GetPlayerEvent(p)).Where(p =>p != null &&p.IsValid &&p.Team != player.Team &&p.PlayerPawn?.Value != null &&p.PlayerPawn.Value.IsValid &&p.PlayerPawn.Value.Health > 0 &&!p.IsHLTV &&p.Team != CsTeam.Spectator&& p.Team != CsTeam.None).ToArray();
- ConcurrentBag<(string, string)> menuItems = [.. enemies.Select(e => ($"{e.PlayerName} : {(e.InGameMoneyServices == null ? 0 : e.InGameMoneyServices.Account + e.InGameMoneyServices.CashSpentThisRound)}$", e.Index.ToString()))];
+ ConcurrentBag<(string, string)> menuItems = [.. enemies.Select(e => ($"\u202A{e.PlayerName}\u202C : {(e.InGameMoneyServices == null ? 0 : e.InGameMoneyServices.Account + e.InGameMoneyServices.CashSpentThisRound)}$", e.Index.ToString()))];
SkillUtils.UpdateMenu(player, menuItems);
}
}
@@ -75,7 +74,7 @@ namespace src.player.skills
var enemies = Utilities.GetPlayers().Where(p =>p != null &&p.IsValid).Select(p => PlayerManager.GetPlayerEvent(p)).Where(p =>p != null &&p.IsValid &&p.Team != player.Team &&p.PlayerPawn?.Value != null &&p.PlayerPawn.Value.IsValid &&p.PlayerPawn.Value.Health > 0 &&!p.IsHLTV &&p.Team != CsTeam.Spectator&& p.Team != CsTeam.None).ToArray();
if (enemies.Length > 0)
{
- ConcurrentBag<(string, string)> menuItems = [.. enemies.Select(e => ($"{e.PlayerName} : {(e.InGameMoneyServices == null ? 0 : e.InGameMoneyServices.Account + e.InGameMoneyServices.CashSpentThisRound)}$", e.Index.ToString()))];
+ ConcurrentBag<(string, string)> menuItems = [.. enemies.Select(e => ($"\u202A{e.PlayerName}\u202C : {(e.InGameMoneyServices == null ? 0 : e.InGameMoneyServices.Account + e.InGameMoneyServices.CashSpentThisRound)}$", e.Index.ToString()))];
SkillUtils.CreateMenu(player, menuItems);
}
else
diff --git a/jRandomSkills - SRC Files/src/player/skills/Ninja.cs b/jRandomSkills - SRC Files/src/player/skills/Ninja.cs
index 036080c..a63ebe8 100644
--- a/jRandomSkills - SRC Files/src/player/skills/Ninja.cs
+++ b/jRandomSkills - SRC Files/src/player/skills/Ninja.cs
@@ -88,13 +88,17 @@ namespace src.player.skills
var entity = Utilities.GetEntityFromIndex((int)playerPawn.Index);
if (entity == null || !entity.IsValid) continue;
- info.TransmitEntities.Remove(entity.Index);
+
+ if (info.TransmitEntities.Contains(entity.Index))
+ info.TransmitEntities.Remove(entity.Index);
var bombIndex = GetBombIndex(playerController);
if (bombIndex == null) continue;
var bombEntity = Utilities.GetEntityFromIndex((int)bombIndex);
if (bombEntity == null || !bombEntity.IsValid) continue;
- info.TransmitEntities.Remove(bombEntity.Index);
+
+ if (info.TransmitEntities.Contains(bombEntity.Index))
+ info.TransmitEntities.Remove(bombEntity.Index);
}
}
}
@@ -135,6 +139,8 @@ namespace src.player.skills
if (EntityManager.GetPlayerEntities(player.Index, "empty_prop").Count == 0)
CreatePlayerPosProp(player);
+
+ SkillUtils.ForceFullUpdateToAll();
}
public static void DisableSkill(CCSPlayerController player)
@@ -142,6 +148,8 @@ namespace src.player.skills
SkillUtils.SetPlayerInvisibility(player, 0);
invisiblePlayers.TryRemove(player.Index, out _);
EntityManager.DestroyPlayerEntities(player.Index);
+
+ SkillUtils.ForceFullUpdateToAll();
}
private static void CreatePlayerPosProp(CCSPlayerController player)
diff --git a/jRandomSkills - SRC Files/src/player/skills/Phoenix.cs b/jRandomSkills - SRC Files/src/player/skills/Phoenix.cs
index 61a41bc..157bb34 100644
--- a/jRandomSkills - SRC Files/src/player/skills/Phoenix.cs
+++ b/jRandomSkills - SRC Files/src/player/skills/Phoenix.cs
@@ -2,6 +2,7 @@ using CounterStrikeSharp.API;
using CounterStrikeSharp.API.Core;
using CounterStrikeSharp.API.Modules.Utils;
using src.utils;
+using System.Collections.Concurrent;
using static src.jRandomSkills;
namespace src.player.skills
@@ -9,6 +10,7 @@ namespace src.player.skills
public class Phoenix : ISkill
{
private const Skills skillName = Skills.Phoenix;
+ private static readonly ConcurrentDictionary phoenixTicks = new();
public static void LoadSkill()
{
@@ -26,12 +28,21 @@ namespace src.player.skills
var pawn = victim.PlayerPawn.Value;
if (pawn == null || !pawn.IsValid) return;
+ bool isProtected = phoenixTicks.TryGetValue(victim.Index, out int tick);
+ if (isProtected && tick + 4 > Server.TickCount)
+ {
+ SkillUtils.AddHealth(pawn, 100 - pawn.Health);
+ return;
+ }
+
var playerInfo = PlayerManager.GetPlayerByIndex(victim.Index);
if (playerInfo?.Skill != skillName || pawn.Health > 0) return;
if (Instance.Random.NextDouble() > playerInfo.SkillChance) return;
if (victim.TeamChanged) return;
+ phoenixTicks[victim.Index] = Server.TickCount;
+
SkillUtils.AddHealth(pawn, 100 - pawn.Health);
SkillUtils.PrintToChat(user, user.GetTranslation("phoenix_respawn"));
@@ -51,8 +62,10 @@ namespace src.player.skills
{
var playerInfo = PlayerManager.GetPlayerByIndex(player!.Index);
if (playerInfo == null) return;
+
float newChance = (float)Instance.Random.NextDouble() * (SkillsInfo.GetValue(skillName, "ChanceTo") - SkillsInfo.GetValue(skillName, "ChanceFrom")) + SkillsInfo.GetValue(skillName, "ChanceFrom");
playerInfo.SkillChance = newChance;
+
SkillUtils.PrintToChat(player, $"{ChatColors.DarkRed}{player.GetSkillName(skillName)}{ChatColors.Lime}: {player.GetSkillDescription(skillName, newChance)}",
border: !Utilities.GetPlayers().Any(p => p.Team == player.Team && p != player) ? "tb" : "t");
}
diff --git a/jRandomSkills - SRC Files/src/player/skills/Pyro.cs b/jRandomSkills - SRC Files/src/player/skills/Pyro.cs
index 021dd8c..dc7941b 100644
--- a/jRandomSkills - SRC Files/src/player/skills/Pyro.cs
+++ b/jRandomSkills - SRC Files/src/player/skills/Pyro.cs
@@ -1,8 +1,8 @@
-using CounterStrikeSharp.API;
using CounterStrikeSharp.API.Core;
using CounterStrikeSharp.API.Modules.Entities.Constants;
using CounterStrikeSharp.API.Modules.Utils;
using src.utils;
+using System.Collections.Concurrent;
using static src.jRandomSkills;
namespace src.player.skills
@@ -10,6 +10,7 @@ namespace src.player.skills
public class Pyro : ISkill
{
private const Skills skillName = Skills.Pyro;
+ private readonly static ConcurrentDictionary playersWithSkill = [];
public static void LoadSkill()
{
@@ -31,14 +32,77 @@ namespace src.player.skills
SkillUtils.AddHealth(pawn, (int)(damage * SkillsInfo.GetValue(skillName, "regenerationMultiplier")));
}
- public static void EnableSkill(CCSPlayerController player)
+ public static void GrenadeThrown(EventGrenadeThrown @event)
{
- SkillUtils.TryGiveWeapon(player, player.Team == CsTeam.CounterTerrorist ? CsItem.IncendiaryGrenade : CsItem.Molotov);
+ var player = PlayerManager.GetPlayerEvent(@event.Userid);
+ if (player == null || !player.IsValid) return;
+
+ var weapon = @event.Weapon;
+ if (weapon != "molotov" && weapon != "incgrenade") return;
+
+ var playerInfo = PlayerManager.GetPlayerByIndex(player!.Index);
+ if (playerInfo?.Skill != skillName) return;
+
+ if (playersWithSkill.TryGetValue(player.Index, out int grenadesLeft) && grenadesLeft > 1)
+ {
+ playersWithSkill[player.Index] = grenadesLeft - 1;
+ player!.GiveNamedItem($"weapon_{weapon}");
+ SkillUtils.UpdateGrenadeCount(player, CsItem.Molotov, grenadesLeft - 1);
+ SkillUtils.UpdateGrenadeCount(player, CsItem.IncendiaryGrenade, grenadesLeft - 1);
+ }
}
- public class SkillConfig(Skills skill = skillName, bool active = true, string color = "#3c47de", CsTeam onlyTeam = CsTeam.None, bool disableOnFreezeTime = false, bool needsTeammates = false, string requiredPermission = "", int maxPerServer = -1, Rarity rarity = Rarity.Common, float regenerationMultiplier = 1.5f) : SkillsInfo.DefaultSkillInfo(skill, active, color, onlyTeam, disableOnFreezeTime, needsTeammates, requiredPermission, maxPerServer, rarity)
+ public static void WeaponEquip(EventItemEquip @event)
+ {
+ var player = PlayerManager.GetPlayerEvent(@event.Userid);
+ var weapon = @event.Item;
+ if (player == null || !player.IsValid) return;
+
+ if (playersWithSkill.TryGetValue(player.Index, out int grenadesLeft) && grenadesLeft > 1)
+ {
+ SkillUtils.UpdateGrenadeCount(player, CsItem.Molotov, grenadesLeft);
+ SkillUtils.UpdateGrenadeCount(player, CsItem.IncendiaryGrenade, grenadesLeft);
+ }
+ }
+
+ public static void WeaponPickup(EventItemPickup @event)
+ {
+ var player = PlayerManager.GetPlayerEvent(@event.Userid);
+ if (player == null || !player.IsValid) return;
+
+ var weapon = @event.Item;
+ if (string.IsNullOrEmpty(weapon) || weapon != "hegrenade") return;
+
+ if (playersWithSkill.TryGetValue(player.Index, out int grenadesLeft) && grenadesLeft > 1)
+ SkillUtils.UpdateGrenadeCount(player, CsItem.HEGrenade, grenadesLeft);
+ }
+
+ public static void EnableSkill(CCSPlayerController player)
+ {
+ if (player == null || !player.IsValid) return;
+
+ int grenadeLimit = SkillsInfo.GetValue(skillName, "grenadeLimit");
+ playersWithSkill.TryAdd(player.Index, grenadeLimit);
+
+ var item = player.Team == CsTeam.CounterTerrorist ? CsItem.IncendiaryGrenade : CsItem.Molotov;
+
+ SkillUtils.TryGiveWeapon(player, item);
+ SkillUtils.UpdateGrenadeCount(player, item, grenadeLimit);
+ }
+
+ public static void DisableSkill(CCSPlayerController player)
+ {
+ if (player == null || !player.IsValid) return;
+
+ playersWithSkill.TryRemove(player.Index, out _);
+ SkillUtils.UpdateGrenadeCount(player, CsItem.Molotov, 1);
+ SkillUtils.UpdateGrenadeCount(player, CsItem.IncendiaryGrenade, 1);
+ }
+
+ public class SkillConfig(Skills skill = skillName, bool active = true, string color = "#3c47de", CsTeam onlyTeam = CsTeam.None, bool disableOnFreezeTime = false, bool needsTeammates = false, string requiredPermission = "", int maxPerServer = -1, Rarity rarity = Rarity.Common, float regenerationMultiplier = 1.5f, int grenadeLimit = 2) : SkillsInfo.DefaultSkillInfo(skill, active, color, onlyTeam, disableOnFreezeTime, needsTeammates, requiredPermission, maxPerServer, rarity)
{
public float RegenerationMultiplier { get; set; } = regenerationMultiplier;
+ public int GrenadeLimit { get; set; } = grenadeLimit;
}
}
}
\ No newline at end of file
diff --git a/jRandomSkills - SRC Files/src/player/skills/ReZombie.cs b/jRandomSkills - SRC Files/src/player/skills/ReZombie.cs
index c93b08c..0250248 100644
--- a/jRandomSkills - SRC Files/src/player/skills/ReZombie.cs
+++ b/jRandomSkills - SRC Files/src/player/skills/ReZombie.cs
@@ -11,7 +11,7 @@ namespace src.player.skills
public class ReZombie : ISkill
{
private const Skills skillName = Skills.ReZombie;
- private static readonly ConcurrentDictionary zombies = [];
+ private static readonly ConcurrentDictionary zombies = [];
private static readonly object setLock = new();
public static void LoadSkill()
@@ -76,25 +76,57 @@ namespace src.player.skills
var pawn = victim.PlayerPawn.Value;
if (pawn == null || !pawn.IsValid) return;
- if (zombies.ContainsKey(victim.Index)) return;
+ bool isZombie = zombies.TryGetValue(victim.Index, out int tick);
+
+ if (isZombie && tick + 4 < Server.TickCount)
+ return;
var playerInfo = PlayerManager.GetPlayerByIndex(victim.Index);
- if (playerInfo?.Skill != skillName || pawn.Health > 0) return;
+ if (playerInfo?.Skill != skillName) return;
- lock (setLock)
+ var zombieHealth = SkillsInfo.GetValue(skillName, "zombieHealth");
+
+ if (pawn.Health <= 0)
{
- var zombieHealth = SkillsInfo.GetValue(skillName, "zombieHealth");
bool isBlock = victim.TeamChanged;
- zombies.TryAdd(victim.Index, 0);
+ zombies[victim.Index] = Server.TickCount;
if (isBlock) return;
+ DropAllBotWeapons(victim);
SetPlayerColor(pawn, false);
SkillUtils.AddHealth(pawn, zombieHealth - pawn.Health, zombieHealth);
victim.ExecuteClientCommand("slot3");
}
+ else if (isZombie && tick + 4 > Server.TickCount)
+ SkillUtils.AddHealth(pawn, zombieHealth - pawn.Health, zombieHealth);
+ }
+
+ private static void DropAllBotWeapons(CCSPlayerController player)
+ {
+ if (player == null || !player.IsValid || !player.IsBot) return;
+
+ var pawn = player.PlayerPawn?.Value;
+ if (pawn == null || !pawn.IsValid) return;
+
+ var itemServices = pawn.ItemServices?.As();
+ if (itemServices == null || pawn.WeaponServices?.MyWeapons == null) return;
+
+ foreach (var item in pawn.WeaponServices.MyWeapons)
+ {
+ if (item == null || !item.IsValid) continue;
+
+ var weapon = item.Value;
+ if (weapon == null || !weapon.IsValid) continue;
+
+ var weaponName = weapon.DesignerName;
+ if (string.IsNullOrEmpty(weaponName) || weaponName.Contains("knife") || weaponName.Contains("bayonet"))
+ continue;
+
+ SkillUtils.SafeKillEntity(weapon.Index);
+ }
}
public static bool OnWeaponCanAcquire(DynamicHook hook, CCSPlayerController player, CEconItemView econItem, CCSWeaponBaseVData vdata)
diff --git a/jRandomSkills - SRC Files/src/player/skills/SecondLife.cs b/jRandomSkills - SRC Files/src/player/skills/SecondLife.cs
index b18ccaf..c791b62 100644
--- a/jRandomSkills - SRC Files/src/player/skills/SecondLife.cs
+++ b/jRandomSkills - SRC Files/src/player/skills/SecondLife.cs
@@ -10,7 +10,7 @@ namespace src.player.skills
public class SecondLife : ISkill
{
private const Skills skillName = Skills.SecondLife;
- private static readonly ConcurrentDictionary secondLifePlayers = [];
+ private static readonly ConcurrentDictionary secondLifePlayers = [];
private static readonly object setLock = new();
public static void LoadSkill()
@@ -26,24 +26,24 @@ namespace src.player.skills
public static void PlayerHurt(EventPlayerHurt @event)
{
var victim = PlayerManager.GetPlayerEvent(@event.Userid);
- int damage = @event.DmgHealth;
if (!Instance.IsPlayerValid(victim)) return;
var victimInfo = PlayerManager.GetPlayerByIndex(victim!.Index);
if (victimInfo == null || victimInfo.Skill != skillName) return;
var victimPawn = victim!.PlayerPawn.Value;
- if (victimPawn!.Health > 0 || secondLifePlayers.ContainsKey(victim.Handle))
+ if (victimPawn!.Health > 0 || (secondLifePlayers.TryGetValue(victim.Handle, out int tick) && tick + 4 < Server.TickCount))
return;
lock (setLock)
{
- secondLifePlayers.TryAdd(victim.Handle, 0);
SetHealth(victim, SkillsInfo.GetValue(skillName, "startHealth"));
var spawnpoint = SkillUtils.GetSpawnPointVector(victim);
if (spawnpoint == null) return;
+
victimPawn.Teleport(spawnpoint, null, null);
+ secondLifePlayers.TryAdd(victim.Handle, Server.TickCount);
}
}
diff --git a/jRandomSkills - SRC Files/src/player/skills/Smoker.cs b/jRandomSkills - SRC Files/src/player/skills/Smoker.cs
index dc787f6..2e2f065 100644
--- a/jRandomSkills - SRC Files/src/player/skills/Smoker.cs
+++ b/jRandomSkills - SRC Files/src/player/skills/Smoker.cs
@@ -14,6 +14,7 @@ namespace src.player.skills
{
private const Skills skillName = Skills.Smoker;
private readonly static ConcurrentDictionary> playerSmokes = [];
+ private readonly static ConcurrentDictionary playersWithSkill = [];
private static readonly object setLock = new();
public static void LoadSkill()
@@ -31,15 +32,65 @@ namespace src.player.skills
}
}
+ public static void GrenadeThrown(EventGrenadeThrown @event)
+ {
+ var player = PlayerManager.GetPlayerEvent(@event.Userid);
+ if (player == null || !player.IsValid) return;
+
+ var weapon = @event.Weapon;
+ if (weapon != "smokegrenade") return;
+
+ var playerInfo = PlayerManager.GetPlayerByIndex(player!.Index);
+ if (playerInfo?.Skill != skillName) return;
+
+ if (playersWithSkill.TryGetValue(player.Index, out int grenadesLeft) && grenadesLeft > 1)
+ {
+ playersWithSkill[player.Index] = grenadesLeft - 1;
+ player!.GiveNamedItem($"weapon_{weapon}");
+ SkillUtils.UpdateGrenadeCount(player, CsItem.SmokeGrenade, grenadesLeft - 1);
+ }
+ }
+
+ public static void WeaponEquip(EventItemEquip @event)
+ {
+ var player = PlayerManager.GetPlayerEvent(@event.Userid);
+ var weapon = @event.Item;
+ if (player == null || !player.IsValid) return;
+
+ if (playersWithSkill.TryGetValue(player.Index, out int grenadesLeft) && grenadesLeft > 1)
+ SkillUtils.UpdateGrenadeCount(player, CsItem.SmokeGrenade, grenadesLeft);
+ }
+
+ public static void WeaponPickup(EventItemPickup @event)
+ {
+ var player = PlayerManager.GetPlayerEvent(@event.Userid);
+ if (player == null || !player.IsValid) return;
+
+ var weapon = @event.Item;
+ if (string.IsNullOrEmpty(weapon) || weapon != "smokegrenade") return;
+
+ if (playersWithSkill.TryGetValue(player.Index, out int grenadesLeft) && grenadesLeft > 1)
+ SkillUtils.UpdateGrenadeCount(player, CsItem.SmokeGrenade, grenadesLeft);
+ }
+
public static void EnableSkill(CCSPlayerController player)
{
+ if (player == null || !player.IsValid) return;
+
+ int grenadeLimit = SkillsInfo.GetValue(skillName, "grenadeLimit");
+ playersWithSkill.TryAdd(player.Index, grenadeLimit);
+
SkillUtils.TryGiveWeapon(player, CsItem.SmokeGrenade);
+ SkillUtils.UpdateGrenadeCount(player, CsItem.SmokeGrenade, grenadeLimit);
}
public static void DisableSkill(CCSPlayerController player)
{
if (playerSmokes.TryRemove(player.Index, out var timers))
timers.ForEach(t => t?.Kill());
+
+ playersWithSkill.TryRemove(player.Index, out _);
+ SkillUtils.UpdateGrenadeCount(player, CsItem.SmokeGrenade, 1);
}
public static void SmokegrenadeDetonate(EventSmokegrenadeDetonate @event)
@@ -72,8 +123,9 @@ namespace src.player.skills
playerSmokes.AddOrUpdate(player.Index, [smokeTimer], (_, list) => { list.Add(smokeTimer); return list; });
}
- public class SkillConfig(Skills skill = skillName, bool active = true, string color = "#b5ab8f", CsTeam onlyTeam = CsTeam.None, bool disableOnFreezeTime = false, bool needsTeammates = false, string requiredPermission = "", int maxPerServer = 1, Rarity rarity = Rarity.Common) : SkillsInfo.DefaultSkillInfo(skill, active, color, onlyTeam, disableOnFreezeTime, needsTeammates, requiredPermission, maxPerServer, rarity)
+ public class SkillConfig(Skills skill = skillName, bool active = true, string color = "#b5ab8f", CsTeam onlyTeam = CsTeam.None, bool disableOnFreezeTime = false, bool needsTeammates = false, string requiredPermission = "", int maxPerServer = 1, Rarity rarity = Rarity.Common, int grenadeLimit = 1) : SkillsInfo.DefaultSkillInfo(skill, active, color, onlyTeam, disableOnFreezeTime, needsTeammates, requiredPermission, maxPerServer, rarity)
{
+ public int GrenadeLimit { get; set; } = grenadeLimit;
}
}
}
\ No newline at end of file
diff --git a/jRandomSkills - SRC Files/src/player/skills/Spectator.cs b/jRandomSkills - SRC Files/src/player/skills/Spectator.cs
index 7ed2915..f3aaa2c 100644
--- a/jRandomSkills - SRC Files/src/player/skills/Spectator.cs
+++ b/jRandomSkills - SRC Files/src/player/skills/Spectator.cs
@@ -58,6 +58,7 @@ namespace src.player.skills
foreach (var player in Utilities.GetPlayers())
if (cameras.TryGetValue(player.Index, out var cameraInfo) && cameraInfo.Item2 != 0)
{
+ if (player == null || !player.IsValid) return;
var enemy = Utilities.GetPlayerFromIndex((int)cameraInfo.Item3);
if (enemy == null || !enemy.IsValid || enemy.PlayerPawn == null)
@@ -73,16 +74,18 @@ namespace src.player.skills
return;
}
- if (enemyPawn.LifeState != (byte)LifeState_t.LIFE_ALIVE
- || (player.PlayerPawn.Value != null && player.PlayerPawn.Value.LifeState != (byte)LifeState_t.LIFE_ALIVE))
+ if (enemyPawn.Health <= 0 || (player.PlayerPawn?.Value != null && player.PlayerPawn.Value.Health <= 0))
ChangeCamera(player, true);
}
}
private static void ChangeCamera(CCSPlayerController player, bool forceToDefault = false)
{
+ if (player == null || !player.IsValid) return;
+
uint orginalCameraRaw;
uint newCameraRaw = 0;
+
var pawn = player.PlayerPawn.Value;
if (pawn == null || !pawn.IsValid || pawn.CameraServices == null) return;
@@ -165,9 +168,9 @@ namespace src.player.skills
});
if (cameras.TryGetValue(player.Index, out var cameraInfo))
- cameras.AddOrUpdate(player.Index, (cameraInfo.Item1, camera.Index, player.Index), (k, v) => (cameraInfo.Item1, camera.Index, player.Index));
+ cameras.AddOrUpdate(player.Index, (cameraInfo.Item1, camera.Index, enemy.Index), (k, v) => (cameraInfo.Item1, camera.Index, enemy.Index));
else
- cameras.AddOrUpdate(player.Index, (pawn.CameraServices.ViewEntity.Raw, camera.Index, player.Index), (k, v) => (pawn.CameraServices.ViewEntity.Raw, camera.Index, player.Index));
+ cameras.AddOrUpdate(player.Index, (pawn.CameraServices.ViewEntity.Raw, camera.Index, enemy.Index), (k, v) => (pawn.CameraServices.ViewEntity.Raw, camera.Index, enemy.Index));
return camera.EntityHandle.Raw;
}
diff --git a/jRandomSkills - SRC Files/src/player/skills/Thief.cs b/jRandomSkills - SRC Files/src/player/skills/Thief.cs
index ded984e..c3c2792 100644
--- a/jRandomSkills - SRC Files/src/player/skills/Thief.cs
+++ b/jRandomSkills - SRC Files/src/player/skills/Thief.cs
@@ -50,7 +50,7 @@ namespace src.player.skills
var skillData = SkillData.Skills.FirstOrDefault(s => s.Skill == enemyInfo.Skill);
if (skillData == null) continue;
- menuItems.Add(($"{enemy.PlayerName} : {player.GetSkillName(skillData.Skill)}", enemy.Index.ToString()));
+ menuItems.Add(($"\u202A{enemy.PlayerName}\u202C : {player.GetSkillName(skillData.Skill)}", enemy.Index.ToString()));
}
SkillUtils.UpdateMenu(player, menuItems);
}
@@ -120,7 +120,7 @@ namespace src.player.skills
var skillData = SkillData.Skills.FirstOrDefault(s => s.Skill == enemyInfo.Skill);
if (skillData == null) continue;
- menuItems.Add(($"{enemy.PlayerName} : {player.GetSkillName(skillData.Skill)}", enemy.Index.ToString()));
+ menuItems.Add(($"\u202A{enemy.PlayerName}\u202C : {player.GetSkillName(skillData.Skill)}", enemy.Index.ToString()));
}
SkillUtils.CreateMenu(player, menuItems);
diff --git a/jRandomSkills - SRC Files/src/player/skills/Thorns.cs b/jRandomSkills - SRC Files/src/player/skills/Thorns.cs
index 3ea7b3c..e760e70 100644
--- a/jRandomSkills - SRC Files/src/player/skills/Thorns.cs
+++ b/jRandomSkills - SRC Files/src/player/skills/Thorns.cs
@@ -1,4 +1,3 @@
-using CounterStrikeSharp.API;
using CounterStrikeSharp.API.Core;
using CounterStrikeSharp.API.Modules.Utils;
using src.utils;
@@ -36,14 +35,18 @@ namespace src.player.skills
var victimInfo = PlayerManager.GetPlayerByIndex(victimEvent!.Index);
if (victimInfo?.Skill == skillName)
{
- SkillUtils.TakeHealth(attackerEvent.PlayerPawn.Value, (int)(@event.DmgHealth * SkillsInfo.GetValue(skillName, "healthTakenScale")));
+ int damage = (int)(@event.DmgHealth * SkillsInfo.GetValue(skillName, "healthTakenScale"));
+ damage = Math.Min(damage, SkillsInfo.GetValue(skillName, "maxTakenDamagePerShot"));
+
+ SkillUtils.TakeHealth(attackerEvent.PlayerPawn.Value, damage);
attackerEvent.EmitSound("Player.DamageBody.Onlooker");
}
}
- public class SkillConfig(Skills skill = skillName, bool active = true, string color = "#962631", CsTeam onlyTeam = CsTeam.None, bool disableOnFreezeTime = false, bool needsTeammates = false, string requiredPermission = "", int maxPerServer = -1, Rarity rarity = Rarity.Common, float healthTakenScale = .3f) : SkillsInfo.DefaultSkillInfo(skill, active, color, onlyTeam, disableOnFreezeTime, needsTeammates, requiredPermission, maxPerServer, rarity)
+ public class SkillConfig(Skills skill = skillName, bool active = true, string color = "#962631", CsTeam onlyTeam = CsTeam.None, bool disableOnFreezeTime = false, bool needsTeammates = false, string requiredPermission = "", int maxPerServer = -1, Rarity rarity = Rarity.Common, float healthTakenScale = .3f, int maxTakenDamagePerShot = 37) : SkillsInfo.DefaultSkillInfo(skill, active, color, onlyTeam, disableOnFreezeTime, needsTeammates, requiredPermission, maxPerServer, rarity)
{
public float HealthTakenScale { get; set; } = healthTakenScale;
+ public int MaxTakenDamagePerShot { get; set; } = maxTakenDamagePerShot;
}
}
}
\ No newline at end of file
diff --git a/jRandomSkills - SRC Files/src/player/skills/ThrowingKnife.cs b/jRandomSkills - SRC Files/src/player/skills/ThrowingKnife.cs
index 8b28f73..6ce287a 100644
--- a/jRandomSkills - SRC Files/src/player/skills/ThrowingKnife.cs
+++ b/jRandomSkills - SRC Files/src/player/skills/ThrowingKnife.cs
@@ -1,6 +1,7 @@
using CounterStrikeSharp.API;
using CounterStrikeSharp.API.Core;
using CounterStrikeSharp.API.Core.Attributes;
+using CounterStrikeSharp.API.Modules.Entities;
using CounterStrikeSharp.API.Modules.Memory.DynamicFunctions;
using CounterStrikeSharp.API.Modules.Timers;
using CounterStrikeSharp.API.Modules.UserMessages;
@@ -122,12 +123,15 @@ namespace src.player.skills
public static void EnableSkill(CCSPlayerController _)
{
Event.EnableTransmit();
+ SkillUtils.ForceFullUpdateToAll();
}
public static void DisableSkill(CCSPlayerController player)
{
if (knivesInfo.TryRemove(player.Index, out KnifeInfo? knifeInfo) && knifeInfo != null)
DisableKnifeSkill(knifeInfo);
+
+ SkillUtils.ForceFullUpdateToAll();
}
public static void DisableKnifeSkill(KnifeInfo knifeInfo)
@@ -388,7 +392,8 @@ namespace src.player.skills
bool isObservingOwner = observedPlayerIndex.HasValue && observedPlayerIndex.Value == knifeOwnerIndex;
if (!isOwner && !isObservingOwner)
- info.TransmitEntities.Remove(glowEntity.Index);
+ if (info.TransmitEntities.Contains(glowEntity.Index))
+ info.TransmitEntities.Remove(glowEntity.Index);
}
}
}
diff --git a/jRandomSkills - SRC Files/src/player/skills/ToxicSmoke.cs b/jRandomSkills - SRC Files/src/player/skills/ToxicSmoke.cs
index 1ce09b7..135a541 100644
--- a/jRandomSkills - SRC Files/src/player/skills/ToxicSmoke.cs
+++ b/jRandomSkills - SRC Files/src/player/skills/ToxicSmoke.cs
@@ -11,6 +11,7 @@ namespace src.player.skills
{
private const Skills skillName = Skills.ToxicSmoke;
private static readonly ConcurrentDictionary smokes = [];
+ private readonly static ConcurrentDictionary playersWithSkill = [];
public static void LoadSkill()
{
@@ -95,16 +96,72 @@ namespace src.player.skills
}
}
- public static void EnableSkill(CCSPlayerController player)
+ public static void GrenadeThrown(EventGrenadeThrown @event)
{
- SkillUtils.TryGiveWeapon(player, CsItem.SmokeGrenade);
+ var player = PlayerManager.GetPlayerEvent(@event.Userid);
+ if (player == null || !player.IsValid) return;
+
+ var weapon = @event.Weapon;
+ if (weapon != "smokegrenade") return;
+
+ var playerInfo = PlayerManager.GetPlayerByIndex(player!.Index);
+ if (playerInfo?.Skill != skillName) return;
+
+ if (playersWithSkill.TryGetValue(player.Index, out int grenadesLeft) && grenadesLeft > 1)
+ {
+ playersWithSkill[player.Index] = grenadesLeft - 1;
+ player!.GiveNamedItem($"weapon_{weapon}");
+ SkillUtils.UpdateGrenadeCount(player, CsItem.SmokeGrenade, grenadesLeft - 1);
+ }
}
- public class SkillConfig(Skills skill = skillName, bool active = true, string color = "#507529", CsTeam onlyTeam = CsTeam.None, bool disableOnFreezeTime = false, bool needsTeammates = false, string requiredPermission = "", int maxPerServer = -1, Rarity rarity = Rarity.Common, int smokeDamage = 2, float smokeRadius = 180, int tickCooldown = 17) : SkillsInfo.DefaultSkillInfo(skill, active, color, onlyTeam, disableOnFreezeTime, needsTeammates, requiredPermission, maxPerServer, rarity)
+ public static void WeaponEquip(EventItemEquip @event)
+ {
+ var player = PlayerManager.GetPlayerEvent(@event.Userid);
+ var weapon = @event.Item;
+ if (player == null || !player.IsValid) return;
+
+ if (playersWithSkill.TryGetValue(player.Index, out int grenadesLeft) && grenadesLeft > 1)
+ SkillUtils.UpdateGrenadeCount(player, CsItem.SmokeGrenade, grenadesLeft);
+ }
+
+ public static void WeaponPickup(EventItemPickup @event)
+ {
+ var player = PlayerManager.GetPlayerEvent(@event.Userid);
+ if (player == null || !player.IsValid) return;
+
+ var weapon = @event.Item;
+ if (string.IsNullOrEmpty(weapon) || weapon != "smokegrenade") return;
+
+ if (playersWithSkill.TryGetValue(player.Index, out int grenadesLeft) && grenadesLeft > 1)
+ SkillUtils.UpdateGrenadeCount(player, CsItem.SmokeGrenade, grenadesLeft);
+ }
+
+ public static void EnableSkill(CCSPlayerController player)
+ {
+ if (player == null || !player.IsValid) return;
+
+ int grenadeLimit = SkillsInfo.GetValue(skillName, "grenadeLimit");
+ playersWithSkill.TryAdd(player.Index, grenadeLimit);
+
+ SkillUtils.TryGiveWeapon(player, CsItem.SmokeGrenade);
+ SkillUtils.UpdateGrenadeCount(player, CsItem.SmokeGrenade, grenadeLimit);
+ }
+
+ public static void DisableSkill(CCSPlayerController player)
+ {
+ if (player == null || !player.IsValid) return;
+
+ playersWithSkill.TryRemove(player.Index, out _);
+ SkillUtils.UpdateGrenadeCount(player, CsItem.SmokeGrenade, 1);
+ }
+
+ public class SkillConfig(Skills skill = skillName, bool active = true, string color = "#507529", CsTeam onlyTeam = CsTeam.None, bool disableOnFreezeTime = false, bool needsTeammates = false, string requiredPermission = "", int maxPerServer = -1, Rarity rarity = Rarity.Common, int smokeDamage = 2, float smokeRadius = 180, int tickCooldown = 17, int grenadeLimit = 1) : SkillsInfo.DefaultSkillInfo(skill, active, color, onlyTeam, disableOnFreezeTime, needsTeammates, requiredPermission, maxPerServer, rarity)
{
public int SmokeDamage { get; set; } = smokeDamage;
public float SmokeRadius { get; set; } = smokeRadius;
public int TickCooldown { get; set; } = tickCooldown;
+ public int GrenadeLimit { get; set; } = grenadeLimit;
}
}
}
\ No newline at end of file
diff --git a/jRandomSkills - SRC Files/src/player/skills/Wallhack.cs b/jRandomSkills - SRC Files/src/player/skills/Wallhack.cs
index 9d9a270..6f15728 100644
--- a/jRandomSkills - SRC Files/src/player/skills/Wallhack.cs
+++ b/jRandomSkills - SRC Files/src/player/skills/Wallhack.cs
@@ -12,7 +12,8 @@ namespace src.player.skills
{
private const Skills skillName = Skills.Wallhack;
private static readonly ConcurrentDictionary playersInAction = new();
- private static ConcurrentDictionary glows = new();
+ private static readonly ConcurrentDictionary glows = new();
+ private static readonly ConcurrentDictionary temporaryBlockList = new();
public static void LoadSkill()
{
@@ -21,6 +22,12 @@ namespace src.player.skills
public static void CheckTransmit([CastFrom(typeof(nint))] CCheckTransmitInfoList infoList)
{
+ foreach (var kvp in temporaryBlockList)
+ {
+ if (DateTime.Now > kvp.Value)
+ temporaryBlockList.TryRemove(kvp.Key, out _);
+ }
+
foreach (var (info, player) in infoList)
{
if (player == null || !player.IsValid) continue;
@@ -54,11 +61,20 @@ namespace src.player.skills
var glowEntity1 = Utilities.GetEntityFromIndex((int)glowInfo.RelayIndex);
if (glowEntity1 == null || !glowEntity1.IsValid) continue;
+
var glowEntity2 = Utilities.GetEntityFromIndex((int)glowInfo.GlowIndex);
if (glowEntity2 == null || !glowEntity2.IsValid) continue;
- info.TransmitEntities.Remove(glowEntity1.Index);
- info.TransmitEntities.Remove(glowEntity2.Index);
+
+ if (info.TransmitEntities.Contains(glowEntity1.Index))
+ info.TransmitEntities.Remove(glowEntity1.Index);
+
+ if (info.TransmitEntities.Contains(glowEntity2.Index))
+ info.TransmitEntities.Remove(glowEntity2.Index);
}
+
+ foreach (var kvp in temporaryBlockList)
+ if (info.TransmitEntities.Contains(kvp.Key))
+ info.TransmitEntities.Remove(kvp.Key);
}
}
@@ -71,6 +87,9 @@ namespace src.player.skills
SkillUtils.SafeKillEntity(relayIndex);
SkillUtils.SafeKillEntity(glowIndex);
+
+ temporaryBlockList.TryAdd(relayIndex, DateTime.Now.AddSeconds(2));
+ temporaryBlockList.TryAdd(glowIndex, DateTime.Now.AddSeconds(2));
}
glows.Clear();
@@ -81,15 +100,21 @@ namespace src.player.skills
{
Event.EnableTransmit();
playersInAction.TryAdd(player.Index, 0);
+
if (glows.IsEmpty)
SetGlowEffectForAll();
+
+ SkillUtils.ForceFullUpdateToAll();
}
public static void DisableSkill(CCSPlayerController player)
{
playersInAction.TryRemove(player.Index, out _);
+
if (playersInAction.IsEmpty)
NewRound();
+
+ SkillUtils.ForceFullUpdateToAll();
}
private static void SetGlowEffectForAll()
diff --git a/jRandomSkills - SRC Files/src/player/skills/WeaponsSwap.cs b/jRandomSkills - SRC Files/src/player/skills/WeaponsSwap.cs
index 78f490b..ea19f9e 100644
--- a/jRandomSkills - SRC Files/src/player/skills/WeaponsSwap.cs
+++ b/jRandomSkills - SRC Files/src/player/skills/WeaponsSwap.cs
@@ -15,7 +15,7 @@ namespace src.player.skills
private static readonly HashSet weapons = [ "weapon_deagle", "weapon_revolver", "weapon_glock", "weapon_usp_silencer",
"weapon_cz75a", "weapon_fiveseven", "weapon_p250", "weapon_tec9", "weapon_elite", "weapon_hkp2000",
- "weapon_mp9", "weapon_mac10", "weapon_bizon", "weapon_mp7", "weapon_ump45", "weapon_p90",
+ "weapon_mp9", "weapon_mac10", "weapon_bizon", "weapon_mp7", "weapon_ump45", "weapon_p90", "weapon_sg556",
"weapon_mp5sd", "weapon_famas", "weapon_galilar", "weapon_m4a4", "weapon_m4a1_silencer", "weapon_ak47",
"weapon_aug", "weapon_sg553", "weapon_ssg08", "weapon_awp", "weapon_scar20", "weapon_g3sg1",
"weapon_nova", "weapon_xm1014", "weapon_mag7", "weapon_sawedoff", "weapon_m249", "weapon_negev" ];
@@ -114,10 +114,10 @@ namespace src.player.skills
return;
}
- string[]? playerWeapon = GetWeapons(player);
- string[]? enemyWeapon = GetWeapons(enemy);
+ (WeaponInfo[]? playerWeapon, bool playerC4) = GetWeapons(player);
+ (WeaponInfo[]? enemyWeapon, bool enemyC4) = GetWeapons(enemy);
- if (playerWeapon == null || !playerWeapon.Any(w => weapons.Contains(w)))
+ if (playerWeapon == null || !playerWeapon.Any(w => weapons.Contains(w.Name)))
{
skillInfo.FindedEnemy = true;
skillInfo.HaveWeapon = false;
@@ -139,8 +139,8 @@ namespace src.player.skills
if (enemy == null || !enemy.IsValid) return;
player.RemoveWeapons();
enemy.RemoveWeapons();
- GiveWeapons(player, enemyWeapon, playerWeapon.Contains("weapon_c4"));
- GiveWeapons(enemy, playerWeapon, (enemyWeapon != null && enemyWeapon.Contains("weapon_c4")));
+ GiveWeapons(player, enemyWeapon, playerC4);
+ GiveWeapons(enemy, playerWeapon, (enemyWeapon != null && enemyC4));
});
}
else
@@ -148,28 +148,76 @@ namespace src.player.skills
}
}
- private static string[]? GetWeapons(CCSPlayerController player)
+ private static (WeaponInfo[]?, bool) GetWeapons(CCSPlayerController player)
{
+ bool haveC4 = false;
+
var pawn = player.PlayerPawn.Value;
- if (pawn == null || !pawn.IsValid || player.LifeState != (byte)LifeState_t.LIFE_ALIVE) return null;
- if (pawn.WeaponServices == null) return null;
+ if (pawn == null || !pawn.IsValid || player.LifeState != (byte)LifeState_t.LIFE_ALIVE) return (null, haveC4);
+
+ if (pawn.WeaponServices == null) return (null, haveC4);
- var list = new List();
+ var list = new List();
foreach (var weapon in pawn.WeaponServices.MyWeapons)
- if (weapon != null && weapon.IsValid && weapon.Value != null && weapon.Value.IsValid)
- list.Add(SkillUtils.GetDesignerName(weapon.Value));
+ if (weapon != null && weapon.IsValid && weapon.Value != null && weapon.Value.IsValid && !string.IsNullOrEmpty(weapon.Value.DesignerName))
+ {
+ if (weapon.Value.DesignerName == "weapon_c4")
+ haveC4 = true;
+ else
+ {
+ list.Add(
+ new WeaponInfo
+ {
+ Name = SkillUtils.GetDesignerName(weapon.Value),
+ Clip1 = weapon.Value.Clip1,
+ Clip2 = weapon.Value.Clip2,
+ Reserve = weapon.Value.ReserveAmmo.Length >= 1 ? weapon.Value.ReserveAmmo[0] : 0,
+ });
+ }
+ }
- return list.Count == 0 ? null : [.. list];
+ return (list.Count == 0 ? null : [.. list], haveC4);
}
- private static void GiveWeapons(CCSPlayerController player, string[]? weapons, bool addC4)
+ private static void GiveWeapons(CCSPlayerController player, WeaponInfo[]? weapons, bool addC4)
{
if (weapons == null) return;
+ uint index = player.Index;
+
foreach (var weapon in weapons)
- if (weapon != "weapon_c4")
- player.GiveNamedItem(weapon);
+ player.GiveNamedItem(weapon.Name);
+
if (addC4)
player.GiveNamedItem("weapon_c4");
+
+ Server.NextFrame(() =>
+ {
+ var player = Utilities.GetPlayerFromIndex((int)index);
+ if (player == null || !player.IsValid) return;
+
+ var pawn = player.PlayerPawn.Value;
+ if (pawn == null || !pawn.IsValid) return;
+
+ if (pawn.WeaponServices == null) return;
+
+ foreach (var item in pawn.WeaponServices.MyWeapons)
+ if (item != null && item.IsValid)
+ {
+ var weapon = item.Value;
+ if (weapon == null || !weapon.IsValid || string.IsNullOrEmpty(weapon.DesignerName)) continue;
+
+ var enemyWeapon = weapons.FirstOrDefault(w => w.Name == SkillUtils.GetDesignerName(weapon));
+ if (enemyWeapon == null) continue;
+
+ weapon.Clip1 = enemyWeapon.Clip1;
+ weapon.Clip2 = enemyWeapon.Clip2;
+ weapon.ReserveAmmo.Fill(enemyWeapon.Reserve);
+
+ Utilities.SetStateChanged(weapon, "CBasePlayerWeapon", "m_iClip1");
+ Utilities.SetStateChanged(weapon, "CBasePlayerWeapon", "m_iClip2");
+ Utilities.SetStateChanged(weapon, "CBasePlayerWeapon", "m_pReserveAmmo");
+ }
+ });
}
private static CCSPlayerController? GetRandomEnemy(CCSPlayerController player)
@@ -199,6 +247,15 @@ namespace src.player.skills
public bool HaveWeapon { get; set; }
}
+ public class WeaponInfo
+ {
+ public required string Name { get; set; }
+ public required int Clip1 { get; set; }
+ public required int Clip2 { get; set; }
+ public required int Reserve { get; set; }
+
+ }
+
public class SkillConfig(Skills skill = skillName, bool active = true, string color = "#c7e03a", CsTeam onlyTeam = CsTeam.None, bool disableOnFreezeTime = false, bool needsTeammates = false, string requiredPermission = "", int maxPerServer = -1, Rarity rarity = Rarity.Common, float cooldown = 30f) : SkillsInfo.DefaultSkillInfo(skill, active, color, onlyTeam, disableOnFreezeTime, needsTeammates, requiredPermission, maxPerServer, rarity)
{
public float Cooldown { get; set; } = cooldown;
diff --git a/jRandomSkills - SRC Files/src/player/skills/Weightless.cs b/jRandomSkills - SRC Files/src/player/skills/Weightless.cs
index 0df985b..ff10464 100644
--- a/jRandomSkills - SRC Files/src/player/skills/Weightless.cs
+++ b/jRandomSkills - SRC Files/src/player/skills/Weightless.cs
@@ -11,6 +11,7 @@ namespace src.player.skills
{
private const Skills skillName = Skills.Weightless;
private readonly static ConcurrentDictionary nades = [];
+ private readonly static ConcurrentDictionary playersWithSkill = [];
public static void LoadSkill()
{
@@ -79,13 +80,69 @@ namespace src.player.skills
});
}
- public static void EnableSkill(CCSPlayerController player)
+ public static void GrenadeThrown(EventGrenadeThrown @event)
{
- SkillUtils.TryGiveWeapon(player, CsItem.HEGrenade);
+ var player = PlayerManager.GetPlayerEvent(@event.Userid);
+ if (player == null || !player.IsValid) return;
+
+ var weapon = @event.Weapon;
+ if (weapon != "hegrenade") return;
+
+ var playerInfo = PlayerManager.GetPlayerByIndex(player!.Index);
+ if (playerInfo?.Skill != skillName) return;
+
+ if (playersWithSkill.TryGetValue(player.Index, out int grenadesLeft) && grenadesLeft > 1)
+ {
+ playersWithSkill[player.Index] = grenadesLeft - 1;
+ player!.GiveNamedItem($"weapon_{weapon}");
+ SkillUtils.UpdateGrenadeCount(player, CsItem.HEGrenade, grenadesLeft - 1);
+ }
}
- public class SkillConfig(Skills skill = skillName, bool active = true, string color = "#8f6dc9", CsTeam onlyTeam = CsTeam.None, bool disableOnFreezeTime = false, bool needsTeammates = false, string requiredPermission = "", int maxPerServer = -1, Rarity rarity = Rarity.Common) : SkillsInfo.DefaultSkillInfo(skill, active, color, onlyTeam, disableOnFreezeTime, needsTeammates, requiredPermission, maxPerServer, rarity)
+ public static void WeaponEquip(EventItemEquip @event)
{
+ var player = PlayerManager.GetPlayerEvent(@event.Userid);
+ var weapon = @event.Item;
+ if (player == null || !player.IsValid) return;
+
+ if (playersWithSkill.TryGetValue(player.Index, out int grenadesLeft) && grenadesLeft > 1)
+ SkillUtils.UpdateGrenadeCount(player, CsItem.HEGrenade, grenadesLeft);
+ }
+
+ public static void WeaponPickup(EventItemPickup @event)
+ {
+ var player = PlayerManager.GetPlayerEvent(@event.Userid);
+ if (player == null || !player.IsValid) return;
+
+ var weapon = @event.Item;
+ if (string.IsNullOrEmpty(weapon) || weapon != "hegrenade") return;
+
+ if (playersWithSkill.TryGetValue(player.Index, out int grenadesLeft) && grenadesLeft > 1)
+ SkillUtils.UpdateGrenadeCount(player, CsItem.HEGrenade, grenadesLeft);
+ }
+
+ public static void EnableSkill(CCSPlayerController player)
+ {
+ if (player == null || !player.IsValid) return;
+
+ int grenadeLimit = SkillsInfo.GetValue(skillName, "grenadeLimit");
+ playersWithSkill.TryAdd(player.Index, grenadeLimit);
+
+ SkillUtils.TryGiveWeapon(player, CsItem.HEGrenade);
+ SkillUtils.UpdateGrenadeCount(player, CsItem.HEGrenade, grenadeLimit);
+ }
+
+ public static void DisableSkill(CCSPlayerController player)
+ {
+ if (player == null || !player.IsValid) return;
+
+ playersWithSkill.TryRemove(player.Index, out _);
+ SkillUtils.UpdateGrenadeCount(player, CsItem.HEGrenade, 1);
+ }
+
+ public class SkillConfig(Skills skill = skillName, bool active = true, string color = "#8f6dc9", CsTeam onlyTeam = CsTeam.None, bool disableOnFreezeTime = false, bool needsTeammates = false, string requiredPermission = "", int maxPerServer = -1, Rarity rarity = Rarity.Common, int grenadeLimit = 2) : SkillsInfo.DefaultSkillInfo(skill, active, color, onlyTeam, disableOnFreezeTime, needsTeammates, requiredPermission, maxPerServer, rarity)
+ {
+ public int GrenadeLimit { get; set; } = grenadeLimit;
}
}
}
\ No newline at end of file
diff --git a/jRandomSkills - SRC Files/src/utils/CServerSideClient.cs b/jRandomSkills - SRC Files/src/utils/CServerSideClient.cs
new file mode 100644
index 0000000..7b50de7
--- /dev/null
+++ b/jRandomSkills - SRC Files/src/utils/CServerSideClient.cs
@@ -0,0 +1,101 @@
+// https://discord.com/channels/1160907911501991946/1508172390863994910/1508180670659166348
+
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+using CounterStrikeSharp.API;
+using CounterStrikeSharp.API.Core;
+using CounterStrikeSharp.API.Modules.Memory;
+
+namespace jRandomSkills.src.utils
+{
+
+ #region Native Structs
+
+ [StructLayout(LayoutKind.Sequential)]
+ public unsafe struct CUtlMemory where T : unmanaged
+ {
+ public T* m_pMemory;
+ public int m_nAllocationCount;
+ public int m_nGrowSize;
+ }
+
+ [StructLayout(LayoutKind.Sequential)]
+ public unsafe struct CUtlVector where T : unmanaged
+ {
+ public int m_Size;
+ public CUtlMemory m_Memory;
+
+ public int Count => m_Size;
+
+ public ref T Element(int index)
+ {
+ if (index < 0 || index >= m_Size)
+ throw new IndexOutOfRangeException();
+
+ return ref m_Memory.m_pMemory[index];
+ }
+ }
+
+ #endregion
+
+ #region Network Services
+
+ public class INetworkServerService : NativeObject
+ {
+ private readonly VirtualFunctionWithReturn GetIGameServerFunc;
+
+ public INetworkServerService() : base(NativeAPI.GetValveInterface(0, "NetworkServerService_001"))
+ {
+ GetIGameServerFunc = new VirtualFunctionWithReturn(Handle, GameData.GetOffset("INetworkServerService_GetIGameServer"));
+ }
+
+ public INetworkGameServer GetIGameServer()
+ {
+ return new INetworkGameServer(GetIGameServerFunc.Invoke(Handle));
+ }
+ }
+
+ public unsafe class INetworkGameServer(nint ptr) : NativeObject(ptr)
+ {
+ private static readonly int SlotsOffset = GameData.GetOffset("INetworkGameServer_Slots");
+
+ private ref CUtlVector Slots => ref Unsafe.AsRef>((void*)(Handle + SlotsOffset));
+
+ public CServerSideClient? GetClientBySlot(int slot)
+ {
+ if (slot < 0 || slot >= Slots.Count)
+ return null;
+
+ var ptr = Slots.Element(slot);
+
+ if (ptr == nint.Zero)
+ return null;
+
+ return new CServerSideClient(ptr);
+ }
+ }
+
+ #endregion
+
+ #region CServerSideClient
+
+ public unsafe class CServerSideClient(nint ptr) : NativeObject(ptr)
+ {
+ private static readonly int m_nDeltaTick = GameData.GetOffset("CServerSideClient_m_nDeltaTick");
+
+ private ref T Field(int offset) where T : unmanaged
+ {
+ return ref Unsafe.AsRef((void*)(Handle + offset));
+ }
+
+ public int DeltaTick
+ {
+ get => Field(m_nDeltaTick);
+ set => Field(m_nDeltaTick) = value;
+ }
+
+ public void ForceFullUpdate() => DeltaTick = -1;
+ }
+
+ #endregion
+}
\ No newline at end of file
diff --git a/jRandomSkills - SRC Files/src/utils/Config.cs b/jRandomSkills - SRC Files/src/utils/Config.cs
index 9b1027b..f25b19c 100644
--- a/jRandomSkills - SRC Files/src/utils/Config.cs
+++ b/jRandomSkills - SRC Files/src/utils/Config.cs
@@ -131,6 +131,7 @@ namespace src.utils
new LanguageInfo("PT-BR, PT, BR, AO, CV, GW, MZ, ST, TL", "pt-br"),
new LanguageInfo("FR, MC, HT", "fr"),
new LanguageInfo("DE, AT, CH, LI, LU, BE", "de"),
+ new LanguageInfo("RU, KZ, BY, KG, TJ, UZ, TM, AM, AZ, GE, MD", "ru"),
new LanguageInfo("TR", "tr"),
new LanguageInfo("CZ", "cs"),
new LanguageInfo("PL", "pl"),
diff --git a/jRandomSkills - SRC Files/src/utils/SkillUtils.cs b/jRandomSkills - SRC Files/src/utils/SkillUtils.cs
index b24c1a6..d95ce2f 100644
--- a/jRandomSkills - SRC Files/src/utils/SkillUtils.cs
+++ b/jRandomSkills - SRC Files/src/utils/SkillUtils.cs
@@ -4,8 +4,10 @@ using CounterStrikeSharp.API.Modules.Cvars;
using CounterStrikeSharp.API.Modules.Entities.Constants;
using CounterStrikeSharp.API.Modules.Memory;
using CounterStrikeSharp.API.Modules.Memory.DynamicFunctions;
+using CounterStrikeSharp.API.Modules.Timers;
using CounterStrikeSharp.API.Modules.UserMessages;
using CounterStrikeSharp.API.Modules.Utils;
+using jRandomSkills.src.utils;
using src.player;
using src.player.skills;
using System.Collections.Concurrent;
@@ -56,7 +58,30 @@ namespace src.utils
SkillData.Skills.Add(new jSkill_SkillInfo(skill, color, display));
}
- public static void TryGiveWeapon(CCSPlayerController player, CsItem item, int count = 1)
+ public static void UpdateGrenadeCount(CCSPlayerController player, CsItem item, int ammo)
+ {
+ string? itemString = EnumUtils.GetEnumMemberAttributeValue(item);
+ if (string.IsNullOrWhiteSpace(itemString)) return;
+
+ if (player == null || !player.IsValid || player.PlayerPawn.Value == null || !player.PlayerPawn.Value.IsValid) return;
+ if (player.PlayerPawn.Value.WeaponServices == null) return;
+
+ var weapon = player.PlayerPawn.Value.WeaponServices.MyWeapons
+ .FirstOrDefault(w => w != null && w.IsValid && w.Value != null && w.Value.IsValid && !string.IsNullOrEmpty(w.Value.DesignerName) && w.Value.DesignerName == itemString);
+
+ if (weapon == null || !weapon.IsValid || weapon.Value == null || !weapon.Value.IsValid) return;
+
+ weapon.Value.Clip1 = ammo;
+ Utilities.SetStateChanged(weapon.Value, "CBasePlayerWeapon", "m_iClip1");
+
+ jRandomSkills.Instance.AddTimer(.1f, () =>
+ {
+ if (weapon == null || !weapon.IsValid || weapon.Value == null || !weapon.Value.IsValid) return;
+ weapon.Value.Clip1 = 1;
+ }, TimerFlags.STOP_ON_MAPCHANGE);
+ }
+
+ public static void TryGiveWeapon(CCSPlayerController player, CsItem item, int count = 1, bool existValidator = true)
{
string? itemString = EnumUtils.GetEnumMemberAttributeValue(item);
if (string.IsNullOrWhiteSpace(itemString)) return;
@@ -66,7 +91,8 @@ namespace src.utils
var exists = player.PlayerPawn.Value.WeaponServices.MyWeapons
.FirstOrDefault(w => w != null && w.IsValid && w.Value != null && w.Value.IsValid && w.Value.DesignerName == itemString);
- if (exists == null)
+
+ if (exists == null || !existValidator)
for (int i = 0; i < count; i++)
player.GiveNamedItem(item);
}
@@ -259,6 +285,9 @@ namespace src.utils
var jester = Jester.GetJesterInfo(player.Index);
if (jester?.Active == true) return false;
+
+ if (playerInfo.Skill == Skills.GodMode && GodMode.HaveHodMode(player.Index))
+ return false;
}
int newHealth = (int)(pawn.Health - damage);
@@ -291,9 +320,35 @@ namespace src.utils
return EntityManager.CreateTrackedTrigger(ownerPlayerIndex, name, radius, pos);
}
+ public static void ForceFullUpdate(CCSPlayerController player)
+ {
+ if (player == null || !player.IsValid)
+ return;
+
+ var pawn = player.PlayerPawn?.Value;
+ if (pawn == null || !pawn.IsValid || pawn.AbsOrigin == null) return;
+
+ QAngle lastAngle = new(pawn.V_angle.X, pawn.V_angle.Y, pawn.V_angle.Z);
+
+ INetworkServerService networkServerService = new();
+ INetworkGameServer networkGameServer = networkServerService.GetIGameServer();
+
+ var client = networkGameServer.GetClientBySlot(player.Slot);
+ if (client == null) return;
+
+ client.ForceFullUpdate();
+ pawn.Look(lastAngle);
+ }
+
+ public static void ForceFullUpdateToAll()
+ {
+ foreach (var player in Utilities.GetPlayers())
+ ForceFullUpdate(player);
+ }
+
public static bool AddHealth(CCSPlayerPawn? pawn, int extraHealth, int? maxHealth = null)
{
- if (pawn == null || !pawn.IsValid || pawn.LifeState != (byte)LifeState_t.LIFE_ALIVE)
+ if (pawn == null || !pawn.IsValid || pawn.LifeState != (byte)LifeState_t.LIFE_ALIVE || pawn.Health <= 0)
return false;
maxHealth ??= pawn.MaxHealth;
@@ -381,6 +436,18 @@ namespace src.utils
return manager.HasMenu(player);
}
+ private static string GetInvisibleSignature(string id)
+ {
+ if (string.IsNullOrEmpty(id)) return "";
+ var sb = new System.Text.StringBuilder();
+
+ foreach (char c in id)
+ for (int i = 0; i < 8; i++)
+ sb.Append(((c >> i) & 1) == 1 ? "\u200B" : "\u200C");
+
+ return sb.ToString();
+ }
+
public static void UpdateMenu(CCSPlayerController? player, ConcurrentBag<(string, string)> items)
{
if (player == null) return;
@@ -395,13 +462,19 @@ namespace src.utils
Dictionary> list = [];
foreach (var item in items)
- list.TryAdd(isIlliterate
+ {
+ string encodedText = isIlliterate
? System.Net.WebUtility.HtmlEncode(Illiterate.GetRandomText(item.Item1)!)
- : System.Net.WebUtility.HtmlEncode(item.Item1), (p, option) =>
+ : System.Net.WebUtility.HtmlEncode(item.Item1);
+
+ string uniqueKey = GetInvisibleSignature(item.Item2) + $"\u202A{encodedText}\u202C";
+
+ list.TryAdd(uniqueKey, (p, option) =>
{
jRandomSkills.Instance.SkillAction(playerInfo.Skill.ToString(), "TypeSkill", [p, new[] { item.Item2 }]);
manager.CloseMenu(p);
});
+ }
manager.UpdateActiveMenu(player, list);
}
@@ -445,11 +518,11 @@ namespace src.utils
string infoLine = string.IsNullOrEmpty(your_skill)
? ""
- : $"
";
+ : $"
";
string skillLine = Illiterate.CheckIlliterateSkill(player)
- ? $"{Illiterate.GetRandomText(player.GetSkillName(skillData.Skill))}
"
- : $"{player.GetSkillName(skillData.Skill)}
";
+ ? $"\u202A{Illiterate.GetRandomText(player.GetSkillName(skillData.Skill))}\u202C
"
+ : $"\u202A{player.GetSkillName(skillData.Skill)}\u202C
";
var skill_select_info = player.GetTranslation($"{playerInfo.Skill.ToString().ToLower()}_select_info");
string remainingLine = string.IsNullOrWhiteSpace(skill_select_info)
@@ -470,22 +543,34 @@ namespace src.utils
IWasdMenu menu = manager.CreateMenu(hudContent, itemText, itemHoverText, controllsLine);
foreach (var enemy in enemies)
- menu.Add(isIlliterate
+ {
+ string encodedEnemyName = isIlliterate
? System.Net.WebUtility.HtmlEncode(Illiterate.GetRandomText(enemy.Item1)!)
- : System.Net.WebUtility.HtmlEncode(enemy.Item1), (p, option) =>
+ : System.Net.WebUtility.HtmlEncode(enemy.Item1);
+
+ string uniqueKey = GetInvisibleSignature(enemy.Item2) + $"\u202A{encodedEnemyName}\u202C";
+
+ menu.Add(uniqueKey, (p, option) =>
{
jRandomSkills.Instance.SkillAction(playerInfo.Skill.ToString(), "TypeSkill", [p, new[] { enemy.Item2 }]);
manager.CloseMenu(p);
});
+ }
+
if (lastElement != null)
- menu.Add(isIlliterate
+ {
+ string encodedLastElement = isIlliterate
? System.Net.WebUtility.HtmlEncode(Illiterate.GetRandomText(lastElement.Value.Item1)!)
- : System.Net.WebUtility.HtmlEncode(lastElement.Value.Item1), (p, option) =>
+ : System.Net.WebUtility.HtmlEncode(lastElement.Value.Item1);
+
+ menu.Add($"\u202A{encodedLastElement}\u202C", (p, option) =>
{
jRandomSkills.Instance.SkillAction(playerInfo.Skill.ToString(), "TypeSkill", [p, new[] { lastElement.Value.Item2 }]);
if (lastElement.Value.Item3)
manager.CloseMenu(p);
});
+ }
+
manager.OpenMainMenu(player, menu);
}
diff --git a/jRandomSkills - Server Files/gamedata/jRandomSkills.gamedata.json b/jRandomSkills - Server Files/gamedata/jRandomSkills.gamedata.json
index a908333..2f7bc51 100644
--- a/jRandomSkills - Server Files/gamedata/jRandomSkills.gamedata.json
+++ b/jRandomSkills - Server Files/gamedata/jRandomSkills.gamedata.json
@@ -27,17 +27,22 @@
"linux": "55 48 89 E5 41 57 49 89 FF 48 89 F7 41 56 41 55 41 54 53 48 81 EC"
}
},
- "CCSPlayerController_HandleCommandDrop": {
- "signatures": {
- "library": "server",
- "windows": "48 89 5C 24 ? 57 48 83 EC ? 48 8B FA E8 ? ? ? ? 48 8B D8",
- "linux": "55 48 89 E5 41 54 49 89 F4 53 E8 ? ? ? ? 48 85 C0 74 ? 48 89 C3"
+ "CServerSideClient_m_nDeltaTick": {
+ "offsets": {
+ "windows": 348,
+ "linux": 348
}
},
- "CBaseEntity_CollisionRulesChanged": {
+ "INetworkGameServer_Slots": {
"offsets": {
- "windows": 186,
- "linux": 185
+ "windows": 592,
+ "linux": 592
+ }
+ },
+ "INetworkServerService_GetIGameServer": {
+ "offsets": {
+ "windows": 23,
+ "linux": 24
}
}
}
\ No newline at end of file
diff --git a/jRandomSkills - Server Files/plugins/jRandomSkills/MaxMind.Db.dll b/jRandomSkills - Server Files/plugins/jRandomSkills/MaxMind.Db.dll
index 0608dde..3cd5dab 100644
Binary files a/jRandomSkills - Server Files/plugins/jRandomSkills/MaxMind.Db.dll and b/jRandomSkills - Server Files/plugins/jRandomSkills/MaxMind.Db.dll differ
diff --git a/jRandomSkills - Server Files/plugins/jRandomSkills/Newtonsoft.Json.dll b/jRandomSkills - Server Files/plugins/jRandomSkills/Newtonsoft.Json.dll
index d035c38..5813d8c 100644
Binary files a/jRandomSkills - Server Files/plugins/jRandomSkills/Newtonsoft.Json.dll and b/jRandomSkills - Server Files/plugins/jRandomSkills/Newtonsoft.Json.dll differ
diff --git a/jRandomSkills - Server Files/plugins/jRandomSkills/WASDMenuAPI.dll b/jRandomSkills - Server Files/plugins/jRandomSkills/WASDMenuAPI.dll
index 8addc7b..0b03600 100644
Binary files a/jRandomSkills - Server Files/plugins/jRandomSkills/WASDMenuAPI.dll and b/jRandomSkills - Server Files/plugins/jRandomSkills/WASDMenuAPI.dll differ
diff --git a/jRandomSkills - Server Files/plugins/jRandomSkills/configs/config.json b/jRandomSkills - Server Files/plugins/jRandomSkills/configs/config.json
index ecdf209..d5e39fd 100644
--- a/jRandomSkills - Server Files/plugins/jRandomSkills/configs/config.json
+++ b/jRandomSkills - Server Files/plugins/jRandomSkills/configs/config.json
@@ -38,6 +38,10 @@
"IsoCodes": "DE, AT, CH, LI, LU, BE",
"FileName": "de"
},
+ {
+ "IsoCodes": "RU, KZ, BY, KG, TJ, UZ, TM, AM, AZ, GE, MD",
+ "FileName": "ru"
+ },
{
"IsoCodes": "TR",
"FileName": "tr"
diff --git a/jRandomSkills - Server Files/plugins/jRandomSkills/configs/skillsInfo.json b/jRandomSkills - Server Files/plugins/jRandomSkills/configs/skillsInfo.json
index afbb14b..979c6e2 100644
--- a/jRandomSkills - Server Files/plugins/jRandomSkills/configs/skillsInfo.json
+++ b/jRandomSkills - Server Files/plugins/jRandomSkills/configs/skillsInfo.json
@@ -22,6 +22,7 @@
"Rarity": "Common"
},
{
+ "GrenadeLimit": 2,
"NeedsTeammates": false,
"DisableOnFreezeTime": false,
"OnlyTeam": 0,
@@ -72,6 +73,7 @@
"SmokeDamage": 2,
"SmokeRadius": 180.0,
"TickCooldown": 17,
+ "GrenadeLimit": 1,
"NeedsTeammates": false,
"DisableOnFreezeTime": false,
"OnlyTeam": 0,
@@ -97,6 +99,7 @@
},
{
"HealthTakenScale": 0.3,
+ "MaxTakenDamagePerShot": 37,
"NeedsTeammates": false,
"DisableOnFreezeTime": false,
"OnlyTeam": 0,
@@ -205,6 +208,7 @@
"Rarity": "Common"
},
{
+ "GrenadeLimit": 1,
"NeedsTeammates": false,
"DisableOnFreezeTime": false,
"OnlyTeam": 0,
@@ -436,6 +440,7 @@
},
{
"RegenerationMultiplier": 1.5,
+ "GrenadeLimit": 2,
"NeedsTeammates": false,
"DisableOnFreezeTime": false,
"OnlyTeam": 0,
@@ -645,20 +650,6 @@
"MaxPerServer": -1,
"Rarity": "Common"
},
- {
- "ExplosionRadius": 500.0,
- "ExplosionDamage": 999,
- "DmgReductionForTeamates": 0.5,
- "NeedsTeammates": false,
- "DisableOnFreezeTime": false,
- "OnlyTeam": 0,
- "Color": "#F5CB42",
- "Active": true,
- "Name": "Muhammed",
- "RequiredPermission": "",
- "MaxPerServer": -1,
- "Rarity": "Common"
- },
{
"NeedsTeammates": false,
"DisableOnFreezeTime": false,
@@ -672,6 +663,7 @@
},
{
"DetonationRange": 130.0,
+ "GrenadeLimit": 3,
"NeedsTeammates": false,
"DisableOnFreezeTime": false,
"OnlyTeam": 0,
@@ -723,6 +715,7 @@
{
"TriggerRadius": 180.0,
"Strenght": 30.0,
+ "GrenadeLimit": 3,
"NeedsTeammates": false,
"DisableOnFreezeTime": false,
"OnlyTeam": 0,
@@ -773,6 +766,7 @@
{
"FlashDuration": 1.0,
"FriendlyFire": true,
+ "GrenadeLimit": 1,
"NeedsTeammates": false,
"DisableOnFreezeTime": false,
"OnlyTeam": 0,
@@ -921,6 +915,7 @@
"Strength": 150.0,
"MaxVelocity": 2000.0,
"DetonationRange": 130.0,
+ "GrenadeLimit": 2,
"NeedsTeammates": false,
"DisableOnFreezeTime": false,
"OnlyTeam": 0,
@@ -934,6 +929,7 @@
{
"DamageMultiplier": 2.0,
"DamageRadiusMultiplier": 2.0,
+ "GrenadeLimit": 1,
"NeedsTeammates": false,
"DisableOnFreezeTime": false,
"OnlyTeam": 0,
@@ -960,6 +956,7 @@
"SmokeHeal": 1,
"SmokeRadius": 180.0,
"TickCooldown": 16,
+ "GrenadeLimit": 1,
"NeedsTeammates": false,
"DisableOnFreezeTime": false,
"OnlyTeam": 0,
@@ -1017,6 +1014,7 @@
"Rarity": "Common"
},
{
+ "GrenadeLimit": 2,
"NeedsTeammates": false,
"DisableOnFreezeTime": false,
"OnlyTeam": 0,
@@ -1053,6 +1051,7 @@
{
"TriggerRadius": 180.0,
"SlownessMultiplier": 5,
+ "GrenadeLimit": 3,
"NeedsTeammates": false,
"DisableOnFreezeTime": false,
"OnlyTeam": 0,
@@ -1064,7 +1063,7 @@
"Rarity": "Common"
},
{
- "HealthMultiplier": 1.5,
+ "HealthDamageMultiplier": 0.3,
"NeedsTeammates": true,
"DisableOnFreezeTime": false,
"OnlyTeam": 0,
@@ -1225,6 +1224,20 @@
"MaxPerServer": -1,
"Rarity": "Common"
},
+ {
+ "ExplosionRadius": 500.0,
+ "ExplosionDamage": 999,
+ "DmgReductionForTeamates": 0.5,
+ "NeedsTeammates": false,
+ "DisableOnFreezeTime": false,
+ "OnlyTeam": 0,
+ "Color": "#F5CB42",
+ "Active": true,
+ "Name": "DeathBomb",
+ "RequiredPermission": "",
+ "MaxPerServer": -1,
+ "Rarity": "Common"
+ },
{
"NeedsTeammates": false,
"DisableOnFreezeTime": false,
@@ -1404,6 +1417,7 @@
"SpeedMultipier": 2.0,
"MaxSpeed": 900.0,
"DamageDeal": 9999.0,
+ "GrenadeLimit": 3,
"NeedsTeammates": false,
"DisableOnFreezeTime": false,
"OnlyTeam": 0,
@@ -1488,6 +1502,7 @@
},
{
"FlashDuration": 7.0,
+ "GrenadeLimit": 2,
"NeedsTeammates": false,
"DisableOnFreezeTime": false,
"OnlyTeam": 0,
diff --git a/jRandomSkills - Server Files/plugins/jRandomSkills/jRandomSkills.dll b/jRandomSkills - Server Files/plugins/jRandomSkills/jRandomSkills.dll
index 26993a2..e8e0d41 100644
Binary files a/jRandomSkills - Server Files/plugins/jRandomSkills/jRandomSkills.dll and b/jRandomSkills - Server Files/plugins/jRandomSkills/jRandomSkills.dll differ
diff --git a/jRandomSkills - Server Files/plugins/jRandomSkills/languages/de.json b/jRandomSkills - Server Files/plugins/jRandomSkills/languages/de.json
index f06a831..d0adf2d 100644
--- a/jRandomSkills - Server Files/plugins/jRandomSkills/languages/de.json
+++ b/jRandomSkills - Server Files/plugins/jRandomSkills/languages/de.json
@@ -1,519 +1,519 @@
{
- "none": "Keine",
- "none_desc": "Du hast keine Fertigkeit",
+ "none": "Keine",
+ "none_desc": "Du hast keine Fertigkeit",
- "aimbot": "Aimbot",
- "aimbot_desc": "Jede Kugel, die du triffst, zählt als Kopfschuss",
+ "aimbot": "Aimbot",
+ "aimbot_desc": "Jede Kugel, die du triffst, zählt als Kopfschuss",
- "aimlock": "Aim-Lock",
- "aimlock_desc": "Klicke [css_useSkill], um dein Visier auf den nächsten Gegner zu fixieren",
+ "aimlock": "Aim-Lock",
+ "aimlock_desc": "Klicke [css_useSkill], um dein Visier auf den nächsten Gegner zu fixieren",
- "anomaly": "Anomalie",
- "anomaly_desc": "Du spulst die Zeit um einige Sekunden zurück",
+ "anomaly": "Anomalie",
+ "anomaly_desc": "Du spulst die Zeit um einige Sekunden zurück",
- "antyflash": "Anti-Flash",
- "antyflash_desc": "Du bist immun gegen Blendgranaten und deine Blendgranaten halten 7 Sekunden lang",
+ "antyflash": "Anti-Flash",
+ "antyflash_desc": "Du bist immun gegen Blendgranaten und deine Blendgranaten halten 7 Sekunden lang",
- "antyhead": "Eiserner Kopf",
- "antyhead_desc": "Du erleidest keinen Schaden durch Kopfschüsse",
+ "antyhead": "Eiserner Kopf",
+ "antyhead_desc": "Du erleidest keinen Schaden durch Kopfschüsse",
- "areareaper": "Zone Reaper",
- "areareaper_desc": "Du kannst einen Bombenort auswählen, den du deaktivieren möchtest",
- "areareaper_incorrect_site": "Kein solcher Bombenort gefunden",
- "areareaper_no_site": "Keine Bombenstandorte gefunden.",
- "areareaper_select_info": "Standort zum Deaktivieren auswählen:",
- "areareaper_site_disabled": "Bombenstandort {0} wurde deaktiviert – dort können keine Bomben platziert werden!",
- "areareaper_used_info": "Deine Fähigkeit wurde bereits eingesetzt.",
- "areareaper_bombsite_disabled": "Dieser Bombenplatz wurde deaktiviert!",
+ "areareaper": "Zone Reaper",
+ "areareaper_desc": "Du kannst einen Bombenort auswählen, den du deaktivieren möchtest",
+ "areareaper_incorrect_site": "Kein solcher Bombenort gefunden",
+ "areareaper_no_site": "Keine Bombenstandorte gefunden.",
+ "areareaper_select_info": "Standort zum Deaktivieren auswählen:",
+ "areareaper_site_disabled": "Bombenstandort {0} wurde deaktiviert – dort können keine Bomben platziert werden!",
+ "areareaper_used_info": "Deine Fähigkeit wurde bereits eingesetzt.",
+ "areareaper_bombsite_disabled": "Dieser Bombenplatz wurde deaktiviert!",
- "armored": "Gepanzert",
- "armored_desc": "Du hast einen zufälligen Schadensmultiplikator",
- "armored_desc2": "Dein Schadensmultiplikator beträgt: {0}x",
+ "armored": "Gepanzert",
+ "armored_desc": "Du hast einen zufälligen Schadensmultiplikator",
+ "armored_desc2": "Dein Schadensmultiplikator beträgt: {0}x",
- "assassin": "Attentäter",
- "assassin_desc": "Du fügst Gegnern von hinten erhöhten Schaden zu",
+ "assassin": "Attentäter",
+ "assassin_desc": "Du fügst Gegnern von hinten erhöhten Schaden zu",
- "astronaut": "Astronaut",
- "astronaut_desc": "Du erhältst zu Beginn der Runde einen zufälligen Schwerkraftwert",
- "astronaut_desc2": "Deine zufällige Schwerkraft beträgt: {0}x",
+ "astronaut": "Astronaut",
+ "astronaut_desc": "Du erhältst zu Beginn der Runde einen zufälligen Schwerkraftwert",
+ "astronaut_desc2": "Deine zufällige Schwerkraft beträgt: {0}x",
- "moneyswap": "Steuerbeamter",
- "moneyswap_desc": "Wähle einen Spieler aus, mit dem du Geld tauschen möchtest",
- "moneyswap_enemy_info": "Das Finanzamt hat dich erwischt.",
- "moneyswap_player_info": "Du hast Geld mit dem Spieler \"{0}\" getauscht.",
- "moneyswap_select_info": "Geld mit Spieler tauschen:",
+ "moneyswap": "Steuerbeamter",
+ "moneyswap_desc": "Wähle einen Spieler aus, mit dem du Geld tauschen möchtest",
+ "moneyswap_enemy_info": "Das Finanzamt hat dich erwischt.",
+ "moneyswap_player_info": "Du hast Geld mit dem Spieler \"{0}\" getauscht.",
+ "moneyswap_select_info": "Geld mit Spieler tauschen:",
- "baseball": "Baseballspieler",
- "baseball_desc": "Deine Attrappe prallt von Wänden ab und tötet einen Gegner sofort beim Aufprall.",
+ "baseball": "Baseballspieler",
+ "baseball_desc": "Deine Attrappe prallt von Wänden ab und tötet einen Gegner sofort beim Aufprall.",
- "behind": "Feind drehen",
- "behind_desc": "Du hast eine zufällige Chance, einen Feind um 180 Grad zu drehen, wenn du ihn triffst",
- "behind_desc2": "Deine Chance, einen Feind bei einem Treffer zu drehen, beträgt: {0} %",
+ "behind": "Feind drehen",
+ "behind_desc": "Du hast eine zufällige Chance, einen Feind um 180 Grad zu drehen, wenn du ihn triffst",
+ "behind_desc2": "Deine Chance, einen Feind bei einem Treffer zu drehen, beträgt: {0} %",
- "blademaster": "Schwertmeister",
- "blademaster_desc": "Wenn du ein Messer hältst, hast du eine hohe Chance, einen Schuss abzuwehren",
+ "blademaster": "Schwertmeister",
+ "blademaster_desc": "Wenn du ein Messer hältst, hast du eine hohe Chance, einen Schuss abzuwehren",
- "bunnyhop": "Hase",
- "bunnyhop_desc": "Du erhältst automatisch bunnyhop",
+ "bunnyhop": "Hase",
+ "bunnyhop_desc": "Du erhältst automatisch bunnyhop",
- "c4camouflage": "C4-Tarnung",
- "c4camouflage_desc": "Du bist unsichtbar, während du die Bombe hältst",
+ "c4camouflage": "C4-Tarnung",
+ "c4camouflage_desc": "Du bist unsichtbar, während du die Bombe hältst",
- "carefulbullets": "Vorsichtige Kugeln",
- "carefulbullets_desc": "Wähle einen Spieler aus, der für jeden Fehlschuss Schaden nimmt",
- "carefulbullets_enemy_info": "Von nun an wird Ungenauigkeit buchstäblich wehtun.",
- "carefulbullets_player_info": "‚{0}‘ muss jetzt vorsichtiger sein.",
- "carefulbullets_select_info": "Fehler schaden dem Spieler:",
+ "carefulbullets": "Vorsichtige Kugeln",
+ "carefulbullets_desc": "Wähle einen Spieler aus, der für jeden Fehlschuss Schaden nimmt",
+ "carefulbullets_enemy_info": "Von nun an wird Ungenauigkeit buchstäblich wehtun.",
+ "carefulbullets_player_info": "‚{0}‘ muss jetzt vorsichtiger sein.",
+ "carefulbullets_select_info": "Fehler schaden dem Spieler:",
- "catapult": "Katapult",
- "catapult_desc": "Du hast eine zufällige Chance, einen Gegner nach oben zu schleudern",
- "catapult_desc2": "Deine Chance, einen Gegner bei einem Treffer zu schleudern, beträgt: {0} %",
+ "catapult": "Katapult",
+ "catapult_desc": "Du hast eine zufällige Chance, einen Gegner nach oben zu schleudern",
+ "catapult_desc2": "Deine Chance, einen Gegner bei einem Treffer zu schleudern, beträgt: {0} %",
- "chicken": "Huhn",
- "chicken_desc": "Du erhältst ein Huhn-Modell + 10 % schnellere Bewegung – 50 HP",
+ "chicken": "Huhn",
+ "chicken_desc": "Du erhältst ein Huhn-Modell + 10 % schnellere Bewegung – 50 HP",
- "chillout": "Chillout",
- "chillout_desc": "Das Platzieren der Bombe dauert deutlich länger",
+ "chillout": "Chillout",
+ "chillout_desc": "Das Platzieren der Bombe dauert deutlich länger",
- "cutter": "Cutter",
- "cutter_desc": "Sofortiger Tod mit einem Messer",
+ "cutter": "Cutter",
+ "cutter_desc": "Sofortiger Tod mit einem Messer",
- "cypher": "Kamera",
- "cypher_desc": "Klicken Sie auf [css_useSkill], um eine Kamera zu erstellen/zu wechseln",
- "cypher_nospace": "Die Kamera muss im rechten Winkel zur Wand positioniert werden",
+ "cypher": "Kamera",
+ "cypher_desc": "Klicken Sie auf [css_useSkill], um eine Kamera zu erstellen/zu wechseln",
+ "cypher_nospace": "Die Kamera muss im rechten Winkel zur Wand positioniert werden",
- "darkness": "Dunkelheit",
- "darkness_desc": "Wendet einen Dunkelheitseffekt auf einen ausgewählten Gegner an",
- "darkness_enemy_info": "Lass die Lichter ausgehen",
- "darkness_player_info": "Die Dunkelheit hat den Spieler \"{0}\" überwältigt.",
- "darkness_select_info": "Wähle einen Spieler für die Dunkelheit aus:",
+ "darkness": "Dunkelheit",
+ "darkness_desc": "Wendet einen Dunkelheitseffekt auf einen ausgewählten Gegner an",
+ "darkness_enemy_info": "Lass die Lichter ausgehen",
+ "darkness_player_info": "Die Dunkelheit hat den Spieler \"{0}\" überwältigt.",
+ "darkness_select_info": "Wähle einen Spieler für die Dunkelheit aus:",
- "deactivator": "Deaktivator",
- "deactivator_desc": "Wähle einen Spieler aus, dessen Fähigkeit du deaktivieren möchtest",
- "deactivator_enemy_info": "Deine Fähigkeit wurde deaktiviert",
- "deactivator_player_info": "Die Fähigkeit des Spielers ‚{0}‘ wurde deaktiviert",
- "deactivator_select_info": "Fähigkeit eines Spielers deaktivieren:",
+ "deactivator": "Deaktivator",
+ "deactivator_desc": "Wähle einen Spieler aus, dessen Fähigkeit du deaktivieren möchtest",
+ "deactivator_enemy_info": "Deine Fähigkeit wurde deaktiviert",
+ "deactivator_player_info": "Die Fähigkeit des Spielers ‚{0}‘ wurde deaktiviert",
+ "deactivator_select_info": "Fähigkeit eines Spielers deaktivieren:",
- "deaf": "Taub",
- "deaf_desc": "Wähle einen Spieler aus, für den alle Sounds stummgeschaltet werden sollen",
- "deaf_enemy_info": "Deine Kopfhörer haben das Spiel verlassen.",
- "deaf_player_info": "Der Ton für den Spieler ‚{0}‘ wurde deaktiviert.",
- "deaf_select_info": "Alle Töne für den Spieler stummschalten:",
+ "deaf": "Taub",
+ "deaf_desc": "Wähle einen Spieler aus, für den alle Sounds stummgeschaltet werden sollen",
+ "deaf_enemy_info": "Deine Kopfhörer haben das Spiel verlassen.",
+ "deaf_player_info": "Der Ton für den Spieler ‚{0}‘ wurde deaktiviert.",
+ "deaf_select_info": "Alle Töne für den Spieler stummschalten:",
- "disarmament": "Entwaffnung",
- "disarmament_desc": "Du hast eine zufällige Chance, einen Gegner bei einem Treffer seine Waffe fallen zu lassen.",
- "disarmament_desc2": "Ihre Chance, einen Gegner zu entwaffnen, beträgt: {0} %",
+ "disarmament": "Entwaffnung",
+ "disarmament_desc": "Du hast eine zufällige Chance, einen Gegner bei einem Treffer seine Waffe fallen zu lassen.",
+ "disarmament_desc2": "Ihre Chance, einen Gegner zu entwaffnen, beträgt: {0} %",
- "distancer": "Entfernungsmesser",
- "distancer_desc": "Sie können die Entfernung zum nächsten Gegner sehen",
+ "distancer": "Entfernungsmesser",
+ "distancer_desc": "Sie können die Entfernung zum nächsten Gegner sehen",
- "dash": "Sprinten",
- "dash_desc": "Führe einen zweiten Sprung aus, um zu sprinten",
+ "dash": "Sprinten",
+ "dash_desc": "Führe einen zweiten Sprung aus, um zu sprinten",
- "dracula": "Dracula",
- "dracula_desc": "Wenn du einen Gegner triffst, wird deine Gesundheit um einen Prozentsatz des verursachten Schadens wiederhergestellt",
+ "dracula": "Dracula",
+ "dracula_desc": "Wenn du einen Gegner triffst, wird deine Gesundheit um einen Prozentsatz des verursachten Schadens wiederhergestellt",
- "duplicator": "Duplikator",
- "duplicator_desc": "Wähle einen Spieler aus, dessen Fertigkeit du kopieren möchtest",
- "duplicator_player_info": "Die Fertigkeit des Spielers ‚{0}‘ wurde kopiert.",
- "duplicator_select_info": "Kopiere die Fertigkeit eines Spielers:",
+ "duplicator": "Duplikator",
+ "duplicator_desc": "Wähle einen Spieler aus, dessen Fertigkeit du kopieren möchtest",
+ "duplicator_player_info": "Die Fertigkeit des Spielers ‚{0}‘ wurde kopiert.",
+ "duplicator_select_info": "Kopiere die Fertigkeit eines Spielers:",
- "dwarf": "Zwerg",
- "dwarf_desc": "Zufällige Charaktergröße zu Beginn der Runde",
- "dwarf_desc2": "Dein Größenmultiplikator beträgt: {0}x",
+ "dwarf": "Zwerg",
+ "dwarf_desc": "Zufällige Charaktergröße zu Beginn der Runde",
+ "dwarf_desc2": "Dein Größenmultiplikator beträgt: {0}x",
- "enemyspawn": "Feindes-Spawn",
- "enemyspawn_desc": "Klicke auf [css_useSkill], um zum Feindes-Spawn zu teleportieren",
+ "enemyspawn": "Feindes-Spawn",
+ "enemyspawn_desc": "Klicke auf [css_useSkill], um zum Feindes-Spawn zu teleportieren",
- "explosiveshot": "Explosiver Schuss",
- "explosiveshot_desc": "Zufällige Chance, beim Schießen eine explosive Kugel abzufeuern",
- "explosiveshot_desc2": "Deine Chance, eine explosive Kugel abzufeuern: {0} %",
+ "explosiveshot": "Explosiver Schuss",
+ "explosiveshot_desc": "Zufällige Chance, beim Schießen eine explosive Kugel abzufeuern",
+ "explosiveshot_desc2": "Deine Chance, eine explosive Kugel abzufeuern: {0} %",
- "falconeye": "Falkenauge",
- "falconeye_desc": "Klicke auf [css_useSkill], um eine Vogelperspektive zu aktivieren",
+ "falconeye": "Falkenauge",
+ "falconeye_desc": "Klicke auf [css_useSkill], um eine Vogelperspektive zu aktivieren",
- "fastreload": "Schnellnachladen",
- "fastreload_desc": "Klicke auf [css_useSkill], um die Waffe, die du gerade hältst, nachzuladen",
+ "fastreload": "Schnellnachladen",
+ "fastreload_desc": "Klicke auf [css_useSkill], um die Waffe, die du gerade hältst, nachzuladen",
- "flash": "Blitz",
- "flash_desc": "Zufällige Spielergeschwindigkeit zu Beginn der Runde",
- "flash_desc2": "Dein Geschwindigkeitsmultiplikator beträgt: {0}x",
+ "flash": "Blitz",
+ "flash_desc": "Zufällige Spielergeschwindigkeit zu Beginn der Runde",
+ "flash_desc2": "Dein Geschwindigkeitsmultiplikator beträgt: {0}x",
- "fortnite": "Fortnite",
- "fortnite_desc": "Klicke auf [css_useSkill], um eine zerstörbare Barrikade zu erstellen",
+ "fortnite": "Fortnite",
+ "fortnite_desc": "Klicke auf [css_useSkill], um eine zerstörbare Barrikade zu erstellen",
- "fragilebomb": "Fragile Bombe",
- "fragilebomb_desc": "Das Schießen auf die Bombe beschädigt sie",
- "fragilebomb_bomb_health": "Bombengesundheit",
+ "fragilebomb": "Fragile Bombe",
+ "fragilebomb_desc": "Das Schießen auf die Bombe beschädigt sie",
+ "fragilebomb_bomb_health": "Bombengesundheit",
- "friendlyfire": "Friendly Fire",
- "friendlyfire_desc": "Das Schießen auf Teamkameraden heilt sie",
+ "friendlyfire": "Friendly Fire",
+ "friendlyfire_desc": "Das Schießen auf Teamkameraden heilt sie",
- "frozendecoy": "Eisige Attrappe",
- "frozendecoy_desc": "Deine Attrappe friert alle Spieler in der Nähe ein",
+ "frozendecoy": "Eisige Attrappe",
+ "frozendecoy_desc": "Deine Attrappe friert alle Spieler in der Nähe ein",
- "gambler": "Zocker",
- "gambler_desc": "Wähle eine Fertigkeit aus der Liste aus.",
- "gambler_select_info": "Wähle deine Fähigkeit aus:",
- "gambler_more": "#00FF00|Aktualisieren für ${0}",
- "gambler_no_money": "Nicht genug Geld.",
+ "gambler": "Zocker",
+ "gambler_desc": "Wähle eine Fertigkeit aus der Liste aus.",
+ "gambler_select_info": "Wähle deine Fähigkeit aus:",
+ "gambler_more": "#00FF00|Aktualisieren für ${0}",
+ "gambler_no_money": "Nicht genug Geld.",
- "ghost": "Geist",
- "ghost_desc": "Du bist vollständig unsichtbar",
+ "ghost": "Geist",
+ "ghost_desc": "Du bist vollständig unsichtbar",
- "glaz": "Glaz",
- "glaz_desc": "Du kannst durch Rauchgranaten hindurchsehen",
+ "glaz": "Glaz",
+ "glaz_desc": "Du kannst durch Rauchgranaten hindurchsehen",
- "glitch": "Glitch",
- "glitch_desc": "Deaktiviert das Radar für einen ausgewählten Gegner",
- "glitch_enemy_info": "Dein Radar wurde deaktiviert",
- "glitch_player_info": "Das Radar des Spielers ‚{0}‘ wurde deaktiviert.",
- "glitch_select_info": "Radar des Spielers ausschalten:",
+ "glitch": "Glitch",
+ "glitch_desc": "Deaktiviert das Radar für einen ausgewählten Gegner",
+ "glitch_enemy_info": "Dein Radar wurde deaktiviert",
+ "glitch_player_info": "Das Radar des Spielers ‚{0}‘ wurde deaktiviert.",
+ "glitch_select_info": "Radar des Spielers ausschalten:",
- "glue": "Glue",
- "glue_desc": "Deine Granaten haften an Wänden",
+ "glue": "Glue",
+ "glue_desc": "Deine Granaten haften an Wänden",
- "godmode": "Gott-Modus",
- "godmode_desc": "Klicke auf [css_useSkill], um für kurze Zeit unsterblich zu werden",
- "godmode_off": "Unsterblichkeit deaktiviert",
- "godmode_on": "Unsterblichkeit aktiviert",
+ "godmode": "Gott-Modus",
+ "godmode_desc": "Klicke auf [css_useSkill], um für kurze Zeit unsterblich zu werden",
+ "godmode_off": "Unsterblichkeit deaktiviert",
+ "godmode_on": "Unsterblichkeit aktiviert",
- "grenadier": "Grenadier",
- "grenadier_desc": "Du hast unendlich viele Granaten",
+ "grenadier": "Grenadier",
+ "grenadier_desc": "Du hast unendlich viele Granaten",
- "healingsmoke": "Heilender Rauch",
- "healingsmoke_desc": "Deine Rauchgranaten heilen",
+ "healingsmoke": "Heilender Rauch",
+ "healingsmoke_desc": "Deine Rauchgranaten heilen",
- "hermit": "Einsiedler",
- "hermit_desc": "Durch das Töten von Gegnern werden Munition und ein Teil der Gesundheit wiederhergestellt",
+ "hermit": "Einsiedler",
+ "hermit_desc": "Durch das Töten von Gegnern werden Munition und ein Teil der Gesundheit wiederhergestellt",
- "holyhandgrenade": "Heilige Handgranate",
- "holyhandgrenade_desc": "Deine HE-Granaten verursachen doppelten Schaden und haben doppelte Reichweite",
+ "holyhandgrenade": "Heilige Handgranate",
+ "holyhandgrenade_desc": "Deine HE-Granaten verursachen doppelten Schaden und haben doppelte Reichweite",
- "homingnades": "Zielsuchende Granaten",
- "homingnades_desc": "Deine Granaten (außer Smokes) werden von Gegnern angezogen",
+ "homingnades": "Zielsuchende Granaten",
+ "homingnades_desc": "Deine Granaten (außer Smokes) werden von Gegnern angezogen",
- "hotbomb": "Heiße Bombe",
- "hotbomb_desc": "Solange du am Leben bist, fügt die Bombe ihrem Träger Schaden zu",
- "hotbomb_hint": "Vorsicht, die Bombe ist heiß!",
+ "hotbomb": "Heiße Bombe",
+ "hotbomb_desc": "Solange du am Leben bist, fügt die Bombe ihrem Träger Schaden zu",
+ "hotbomb_hint": "Vorsicht, die Bombe ist heiß!",
- "iana": "Hologramm",
- "iana_desc": "Klicken Sie auf [css_useSkill], um Ihr Hologramm für einige Sekunden zu steuern",
+ "iana": "Hologramm",
+ "iana_desc": "Klicken Sie auf [css_useSkill], um Ihr Hologramm für einige Sekunden zu steuern",
- "illiterate": "Analphabet",
- "illiterate_desc": "Solange du am Leben bist, können deine Feinde nichts lesen",
+ "illiterate": "Analphabet",
+ "illiterate_desc": "Solange du am Leben bist, können deine Feinde nichts lesen",
- "illusionist": "Illusionist",
- "illusionist_desc": "Klicke [css_useSkill], um ein Abbild zu schicken, das geradeaus läuft",
+ "illusionist": "Illusionist",
+ "illusionist_desc": "Klicke [css_useSkill], um ein Abbild zu schicken, das geradeaus läuft",
- "impostor": "Betrüger",
- "impostor_desc": "Du beginnst die Runde mit einem feindlichen Spielermodell",
+ "impostor": "Betrüger",
+ "impostor_desc": "Du beginnst die Runde mit einem feindlichen Spielermodell",
- "infiniteammo": "Unendliche Munition",
- "infiniteammo_desc": "Du erhältst unendliche Munition für alle deine Waffen",
+ "infiniteammo": "Unendliche Munition",
+ "infiniteammo_desc": "Du erhältst unendliche Munition für alle deine Waffen",
- "jackal": "Spürhund",
- "jackal_desc": "Jeder Gegner hinterlässt eine Spur",
+ "jackal": "Spürhund",
+ "jackal_desc": "Jeder Gegner hinterlässt eine Spur",
- "jammer": "Störsender",
- "jammer_desc": "Wähle einen Spieler aus, um dessen Fadenkreuz zu deaktivieren",
- "jammer_enemy_info": "Dein Fadenkreuz wurde deaktiviert.",
- "jammer_player_info": "Das Fadenkreuz von Spieler ‚{0}‘ wurde deaktiviert.",
- "jammer_select_info": "Fadenkreuz des Spielers deaktivieren:",
+ "jammer": "Störsender",
+ "jammer_desc": "Wähle einen Spieler aus, um dessen Fadenkreuz zu deaktivieren",
+ "jammer_enemy_info": "Dein Fadenkreuz wurde deaktiviert.",
+ "jammer_player_info": "Das Fadenkreuz von Spieler ‚{0}‘ wurde deaktiviert.",
+ "jammer_select_info": "Fadenkreuz des Spielers deaktivieren:",
- "jester": "Narr",
- "jester_desc": "Im Narrenmodus kannst du keinen Schaden erleiden oder verursachen. Dieser Modus ändert sich alle paar Sekunden.",
- "jester_mode": "Jester-Modus",
- "jester_on": "EIN",
- "jester_off": "AUS",
+ "jester": "Narr",
+ "jester_desc": "Im Narrenmodus kannst du keinen Schaden erleiden oder verursachen. Dieser Modus ändert sich alle paar Sekunden.",
+ "jester_mode": "Jester-Modus",
+ "jester_on": "EIN",
+ "jester_off": "AUS",
- "jumpban": "Beinlos",
- "jumpban_desc": "Wähle einen Spieler, der nicht springen kann",
- "jumpban_enemy_info": "Jemand hat dir die Beine abgeschnitten.",
- "jumpban_player_info": "Der Spieler ‚{0}‘ kann nicht mehr springen.",
- "jumpban_select_info": "Spieler vom Springen ausschließen:",
+ "jumpban": "Beinlos",
+ "jumpban_desc": "Wähle einen Spieler, der nicht springen kann",
+ "jumpban_enemy_info": "Jemand hat dir die Beine abgeschnitten.",
+ "jumpban_player_info": "Der Spieler ‚{0}‘ kann nicht mehr springen.",
+ "jumpban_select_info": "Spieler vom Springen ausschließen:",
- "jumpingjack": "Jumping Jack",
- "jumpingjack_desc": "Durch Springen wird die Gesundheit wiederhergestellt",
+ "jumpingjack": "Jumping Jack",
+ "jumpingjack_desc": "Durch Springen wird die Gesundheit wiederhergestellt",
- "killerflash": "Killer Flash",
- "killerflash_desc": "Jeder, der durch deine Blendgranate vollständig geblendet wird, stirbt (einschließlich dir selbst)",
+ "killerflash": "Killer Flash",
+ "killerflash_desc": "Jeder, der durch deine Blendgranate vollständig geblendet wird, stirbt (einschließlich dir selbst)",
- "lifeswap": "Lebensaustausch",
- "lifeswap_desc": "Wähle einen Spieler aus, mit dem du deine Gesundheit austauschen möchtest",
- "lifeswap_enemy_info": "Jemand hat sich deine Gesundheit ausgeliehen",
- "lifeswap_player_info": "Du hast deine Gesundheit mit dem Spieler \"{0}\" ausgetauscht",
- "lifeswap_select_info": "Tausche Gesundheit mit Spieler:",
+ "lifeswap": "Lebensaustausch",
+ "lifeswap_desc": "Wähle einen Spieler aus, mit dem du deine Gesundheit austauschen möchtest",
+ "lifeswap_enemy_info": "Jemand hat sich deine Gesundheit ausgeliehen",
+ "lifeswap_player_info": "Du hast deine Gesundheit mit dem Spieler \"{0}\" ausgetauscht",
+ "lifeswap_select_info": "Tausche Gesundheit mit Spieler:",
- "longknife": "Langes Messer",
- "longknife_desc": "Ein Messerangriff verursacht unabhängig von der Entfernung Schaden",
+ "longknife": "Langes Messer",
+ "longknife_desc": "Ein Messerangriff verursacht unabhängig von der Entfernung Schaden",
- "longzeus": "Langer Zeus",
- "longzeus_desc": "Zeus verursacht unabhängig von der Entfernung Schaden",
+ "longzeus": "Langer Zeus",
+ "longzeus_desc": "Zeus verursacht unabhängig von der Entfernung Schaden",
- "magneticdecoy": "Magnetischer Köder",
- "magneticdecoy_desc": "Dein Köder zieht Spieler in der Nähe zu sich heran",
+ "magneticdecoy": "Magnetischer Köder",
+ "magneticdecoy_desc": "Dein Köder zieht Spieler in der Nähe zu sich heran",
- "magneto": "Magneto",
- "magneto_desc": "Alle feindlichen Granaten werden von dir weggestoßen",
+ "magneto": "Magneto",
+ "magneto_desc": "Alle feindlichen Granaten werden von dir weggestoßen",
- "magnifier": "Lupe",
- "magnifier_desc": "Vergrößert den Bildschirm des Gegners und verringert dessen Sichtfeld",
- "magnifier_enemy_info": "Dein Sichtfeld wurde verzerrt!",
- "magnifier_player_info": "Der Spieler ‚{0}‘ wurde in den Zoom-Modus versetzt.",
- "magnifier_select_info": "Bildschirm des Spielers vergrößern:",
+ "magnifier": "Lupe",
+ "magnifier_desc": "Vergrößert den Bildschirm des Gegners und verringert dessen Sichtfeld",
+ "magnifier_enemy_info": "Dein Sichtfeld wurde verzerrt!",
+ "magnifier_player_info": "Der Spieler ‚{0}‘ wurde in den Zoom-Modus versetzt.",
+ "magnifier_select_info": "Bildschirm des Spielers vergrößern:",
- "medic": "Sanitäter",
- "medic_desc": "Klicke auf [css_useSkill], um eine Heilungsladung zu verwenden, die 50 Gesundheitspunkte wiederherstellt",
+ "medic": "Sanitäter",
+ "medic_desc": "Klicke auf [css_useSkill], um eine Heilungsladung zu verwenden, die 50 Gesundheitspunkte wiederherstellt",
- "miner": "Bomben-Miner",
- "miner_desc": "Deine HE-Granate explodiert nur, wenn ein Gegner in der Nähe ist",
+ "miner": "Bomben-Miner",
+ "miner_desc": "Deine HE-Granate explodiert nur, wenn ein Gegner in der Nähe ist",
- "bankrupt": "Bankrott",
- "bankrupt_desc": "Wähle den Spieler aus, der sein gesamtes Geld verlieren wird",
- "bankrupt_enemy_info": "Du bist bankrott.",
- "bankrupt_player_info": "Der Spieler ‚{0}‘ ist bankrott.",
- "bankrupt_select_info": "Wähle einen Spieler aus, der bankrott gehen soll:",
+ "bankrupt": "Bankrott",
+ "bankrupt_desc": "Wähle den Spieler aus, der sein gesamtes Geld verlieren wird",
+ "bankrupt_enemy_info": "Du bist bankrott.",
+ "bankrupt_player_info": "Der Spieler ‚{0}‘ ist bankrott.",
+ "bankrupt_select_info": "Wähle einen Spieler aus, der bankrott gehen soll:",
- "muhammed": "Muhammed",
- "muhammed_desc": "Du explodierst beim Tod und tötest Spieler in deiner Nähe",
- "muhammed_explosion": "ALLAHU AKBAR!!!",
+ "deathbomb": "Todesbombe",
+ "deathbomb_desc": "Du explodierst beim Tod und tötest Spieler in deiner Nähe",
+ "deathbomb_explosion": "Kaboom!",
- "ninja": "Ninja",
- "ninja_desc": "Wenn du stillstehst, erhöht sich deine Unsichtbarkeit um 33 %, wenn du dich duckst um 33 % und wenn du ein Messer hältst um 33 %",
+ "ninja": "Ninja",
+ "ninja_desc": "Wenn du stillstehst, erhöht sich deine Unsichtbarkeit um 33 %, wenn du dich duckst um 33 % und wenn du ein Messer hältst um 33 %",
- "nonades": "No-Nades",
- "nonades_desc": "Granaten fügen dir keinen Schaden zu",
-
- "norecoil": "Fokus",
- "norecoil_desc": "Kein Rückstoß beim Schießen",
+ "nonades": "No-Nades",
+ "nonades_desc": "Granaten fügen dir keinen Schaden zu",
- "noclip": "NoClip",
- "noclip_desc": "Klicke auf [css_useSkill], um NoClip für kurze Zeit zu aktivieren",
+ "norecoil": "Fokus",
+ "norecoil_desc": "Kein Rückstoß beim Schießen",
- "oneshot": "One-Shot",
- "oneshot_desc": "Ein Treffer tötet einen Gegner sofort",
+ "noclip": "NoClip",
+ "noclip_desc": "Klicke auf [css_useSkill], um NoClip für kurze Zeit zu aktivieren",
- "onlyhead": "Nur Kopf",
- "onlyhead_desc": "Du erleidest nur Schaden am Kopf",
+ "oneshot": "One-Shot",
+ "oneshot_desc": "Ein Treffer tötet einen Gegner sofort",
- "paweljumper": "Pawel Jumper",
- "paweljumper_desc": "Du erhältst eine zufällige Anzahl zusätzlicher Sprünge",
- "paweljumper_desc2": "Du erhältst {0} zusätzliche Sprünge",
+ "onlyhead": "Nur Kopf",
+ "onlyhead_desc": "Du erleidest nur Schaden am Kopf",
- "phoenix": "Phönix",
- "phoenix_desc": "Du hast eine zufällige Chance, nach dem Tod wieder zu erscheinen",
- "phoenix_desc2": "Deine Chance, nach dem Tod wieder zu erscheinen: {0} %",
- "phoenix_respawn": "Du bist dank der Kraft von CHATCOLORS.REDPhoenix aus der Asche auferstanden",
+ "paweljumper": "Pawel Jumper",
+ "paweljumper_desc": "Du erhältst eine zufällige Anzahl zusätzlicher Sprünge",
+ "paweljumper_desc2": "Du erhältst {0} zusätzliche Sprünge",
- "psychicdefusing": "Psychic Defusing",
- "psychicdefusing_desc": "Wenn du dich in der Nähe der Bombe befindest, beginnst du, sie zu entschärfen",
- "psychicdefusing_hud_info": "{0} Sekunden verbleibend bis zur Entschärfung",
+ "phoenix": "Phönix",
+ "phoenix_desc": "Du hast eine zufällige Chance, nach dem Tod wieder zu erscheinen",
+ "phoenix_desc2": "Deine Chance, nach dem Tod wieder zu erscheinen: {0} %",
+ "phoenix_respawn": "Du bist dank der Kraft von CHATCOLORS.REDPhoenix aus der Asche auferstanden",
- "pilot": "Pilot",
- "pilot_desc": "Fliege für begrenzte Zeit. Doppelklick auf Sprung zum Fliegen",
- "pilot_hud_info": "Treibstoff",
+ "psychicdefusing": "Psychic Defusing",
+ "psychicdefusing_desc": "Wenn du dich in der Nähe der Bombe befindest, beginnst du, sie zu entschärfen",
+ "psychicdefusing_hud_info": "{0} Sekunden verbleibend bis zur Entschärfung",
- "planter": "Freier Planter",
- "planter_desc": "Du kannst die Bombe überall platzieren, die Detonationszeit beträgt 60 Sekunden.",
- "planter_planting": "Bombe wird gelegt ({0})...",
+ "pilot": "Pilot",
+ "pilot_desc": "Fliege für begrenzte Zeit. Doppelklick auf Sprung zum Fliegen",
+ "pilot_hud_info": "Treibstoff",
- "poison": "Gift",
- "poison_desc": "Wähle einen Spieler aus, der alle paar Sekunden Schaden nimmt",
- "poison_enemy_info": "Du wurdest vergiftet",
- "poison_player_info": "Der Spieler ‚{0}‘ wurde vergiftet",
- "poison_select_info": "Einen Spieler vergiften:",
+ "planter": "Freier Planter",
+ "planter_desc": "Du kannst die Bombe überall platzieren, die Detonationszeit beträgt 60 Sekunden.",
+ "planter_planting": "Bombe wird gelegt ({0})...",
- "primaryban": "Keine Gewehre",
- "primaryban_desc": "Wähle einen Spieler aus, der keine Gewehre verwenden kann",
- "primaryban_enemy_info": "Du kannst keine Gewehre mehr verwenden.",
- "primaryban_player_info": "Der Spieler ‚{0}‘ kann keine Gewehre mehr verwenden.",
- "primaryban_select_info": "Gewehre für Spieler verbieten:",
+ "poison": "Gift",
+ "poison_desc": "Wähle einen Spieler aus, der alle paar Sekunden Schaden nimmt",
+ "poison_enemy_info": "Du wurdest vergiftet",
+ "poison_player_info": "Der Spieler ‚{0}‘ wurde vergiftet",
+ "poison_select_info": "Einen Spieler vergiften:",
- "prosthesis": "Prothese",
- "prosthesis_desc": "Arme und Beine sind kugelsicher",
+ "primaryban": "Keine Gewehre",
+ "primaryban_desc": "Wähle einen Spieler aus, der keine Gewehre verwenden kann",
+ "primaryban_enemy_info": "Du kannst keine Gewehre mehr verwenden.",
+ "primaryban_player_info": "Der Spieler ‚{0}‘ kann keine Gewehre mehr verwenden.",
+ "primaryban_select_info": "Gewehre für Spieler verbieten:",
- "push": "Pusher",
- "push_desc": "Du hast eine zufällige Chance, einen Gegner zurückzustoßen, wenn du ihn triffst",
- "push_desc2": "Deine Chancen, den Gegner zurückzustoßen, betragen: {0} %",
+ "prosthesis": "Prothese",
+ "prosthesis_desc": "Arme und Beine sind kugelsicher",
- "pyro": "Pyro",
- "pyro_desc": "Molotow-Cocktail stellt Gesundheit wieder her",
+ "push": "Pusher",
+ "push_desc": "Du hast eine zufällige Chance, einen Gegner zurückzustoßen, wenn du ihn triffst",
+ "push_desc2": "Deine Chancen, den Gegner zurückzustoßen, betragen: {0} %",
- "quickshot": "Schnellfeuer",
- "quickshot_desc": "Alle Kugeln werden sehr schnell abgefeuert",
+ "pyro": "Pyro",
+ "pyro_desc": "Molotow-Cocktail stellt Gesundheit wieder her",
- "radarhack": "Radar-Hack",
- "radarhack_desc": "Gegner sind auf dem Radar sichtbar",
+ "quickshot": "Schnellfeuer",
+ "quickshot_desc": "Alle Kugeln werden sehr schnell abgefeuert",
- "rambo": "Rambo",
- "rambo_desc": "Du erhältst zu Beginn der Runde eine zufällige Menge an Gesundheit",
+ "radarhack": "Radar-Hack",
+ "radarhack_desc": "Gegner sind auf dem Radar sichtbar",
- "randomweapon": "Zufällige Waffe",
- "randomweapon_desc": "Klicke auf [css_useSkill], um eine zufällige Waffe zu erhalten",
+ "rambo": "Rambo",
+ "rambo_desc": "Du erhältst zu Beginn der Runde eine zufällige Menge an Gesundheit",
- "rezombie": "Re-Zombie",
- "rezombie_desc": "Nach dem Tod spawnst du als Zombie mit erhöhter Gesundheit und ohne Waffen",
+ "randomweapon": "Zufällige Waffe",
+ "randomweapon_desc": "Klicke auf [css_useSkill], um eine zufällige Waffe zu erhalten",
- "reactivearmor": "Reaktive Rüstung",
- "reactivearmor_desc": "Die Rüstung absorbiert den ersten erlittenen Schaden",
+ "rezombie": "Re-Zombie",
+ "rezombie_desc": "Nach dem Tod spawnst du als Zombie mit erhöhter Gesundheit und ohne Waffen",
- "regeneration": "Regeneration",
- "regeneration_desc": "Du stellst alle paar Sekunden Gesundheit wieder her",
+ "reactivearmor": "Reaktive Rüstung",
+ "reactivearmor_desc": "Die Rüstung absorbiert den ersten erlittenen Schaden",
- "replicator": "Replikator",
- "replicator_desc": "Klicke auf [css_useSkill], um eine Replik zu erstellen, die bei Treffer Schaden verursacht",
+ "regeneration": "Regeneration",
+ "regeneration_desc": "Du stellst alle paar Sekunden Gesundheit wieder her",
- "retreat": "Rückzug",
- "retreat_desc": "Klicke auf [css_useSkill], um zum Spawn zurückzukehren",
+ "replicator": "Replikator",
+ "replicator_desc": "Klicke auf [css_useSkill], um eine Replik zu erstellen, die bei Treffer Schaden verursacht",
- "returntosender": "Zurück zum Absender",
- "returntosender_desc": "Der erste Treffer eines Gegners schickt ihn zurück zu seinem Spawn",
+ "retreat": "Rückzug",
+ "retreat_desc": "Klicke auf [css_useSkill], um zum Spawn zurückzukehren",
- "richboy": "Rich Boy",
- "richboy_desc": "Du erhältst zu Beginn der Runde einen zufälligen Geldbetrag",
+ "returntosender": "Zurück zum Absender",
+ "returntosender_desc": "Der erste Treffer eines Gegners schickt ihn zurück zu seinem Spawn",
- "robinhood": "Robin Hood",
- "robinhood_desc": "Wenn du einem Gegner Schaden zufügst, stiehlst du ihm sein Geld",
+ "richboy": "Rich Boy",
+ "richboy_desc": "Du erhältst zu Beginn der Runde einen zufälligen Geldbetrag",
- "rubber": "Gummigeschosse",
- "rubber_desc": "Deine Kugeln verlangsamen Spieler erheblich",
+ "robinhood": "Robin Hood",
+ "robinhood_desc": "Wenn du einem Gegner Schaden zufügst, stiehlst du ihm sein Geld",
- "saper": "Sapper",
- "saper_desc": "Du kannst Bomben schneller legen und entschärfen",
+ "rubber": "Gummigeschosse",
+ "rubber_desc": "Deine Kugeln verlangsamen Spieler erheblich",
- "secondlife": "Zweite Chance",
- "secondlife_desc": "Nach dem Tod spawnst du mit derselben Gesundheitsanzeige wieder",
+ "saper": "Sapper",
+ "saper_desc": "Du kannst Bomben schneller legen und entschärfen",
- "shade": "Schatten",
- "shade_desc": "Du hast eine zufällige Chance, dich hinter einen getroffenen Gegner zu teleportieren",
- "shade_desc2": "Deine Chancen, dich hinter einen getroffenen Gegner zu teleportieren, betragen: {0} %",
- "shade_nospace": "Kein Platz verfügbar",
+ "secondlife": "Zweite Chance",
+ "secondlife_desc": "Nach dem Tod spawnst du mit derselben Gesundheitsanzeige wieder",
- "shortbomb": "Kurze Zündschnur",
- "shortbomb_desc": "Die Bombe explodiert viel schneller",
+ "shade": "Schatten",
+ "shade_desc": "Du hast eine zufällige Chance, dich hinter einen getroffenen Gegner zu teleportieren",
+ "shade_desc2": "Deine Chancen, dich hinter einen getroffenen Gegner zu teleportieren, betragen: {0} %",
+ "shade_nospace": "Kein Platz verfügbar",
- "silent": "Leise",
- "silent_desc": "Deine Schritte und Sprünge sind für ANDERE Spieler lautlos",
+ "shortbomb": "Kurze Zündschnur",
+ "shortbomb_desc": "Die Bombe explodiert viel schneller",
- "smoker": "Smoker",
- "smoker_desc": "Deine Rauchgranaten gehen nie aus",
+ "silent": "Leise",
+ "silent_desc": "Deine Schritte und Sprünge sind für ANDERE Spieler lautlos",
- "sniperelite": "Sniper Elite",
- "sniperelite_customname": "Sniper-Elite-Skill",
- "sniperelite_desc": "Klicke auf [css_useSkill], um deine aktuelle Waffe gegen eine AWP auszutauschen",
+ "smoker": "Smoker",
+ "smoker_desc": "Deine Rauchgranaten gehen nie aus",
- "soldier": "Soldat",
- "soldier_desc": "Du hast einen zufälligen Schadensmultiplikator",
- "soldier_desc2": "Dein Schadensmultiplikator beträgt: {0}x",
+ "sniperelite": "Sniper Elite",
+ "sniperelite_customname": "Sniper-Elite-Skill",
+ "sniperelite_desc": "Klicke auf [css_useSkill], um deine aktuelle Waffe gegen eine AWP auszutauschen",
- "soundmaker": "Soundmaker",
- "soundmaker_desc": "Klicke auf [css_useSkill], um für jeden Gegner einen Sound auszulösen",
+ "soldier": "Soldat",
+ "soldier_desc": "Du hast einen zufälligen Schadensmultiplikator",
+ "soldier_desc2": "Dein Schadensmultiplikator beträgt: {0}x",
- "spectator": "Zuschauer",
- "spectator_desc": "Klicke auf [css_useSkill], um einen zufälligen Gegner zu beobachten",
+ "soundmaker": "Soundmaker",
+ "soundmaker_desc": "Klicke auf [css_useSkill], um für jeden Gegner einen Sound auszulösen",
- "swapposition": "Positionstausch",
- "swapposition_desc": "Klicke auf [css_useSkill], um mit einem zufälligen Gegner die Plätze zu tauschen",
+ "spectator": "Zuschauer",
+ "spectator_desc": "Klicke auf [css_useSkill], um einen zufälligen Gegner zu beobachten",
- "teleporter": "Teleporter",
- "teleporter_desc": "Du hast die Chance, die Plätze mit einem getroffenen Gegner zu tauschen",
- "teleporter_desc2": "Deine Chance auf Platztausch nach einem Treffer: {0}%",
+ "swapposition": "Positionstausch",
+ "swapposition_desc": "Klicke auf [css_useSkill], um mit einem zufälligen Gegner die Plätze zu tauschen",
- "thief": "Dieb",
- "thief_desc": "Du kannst einem ausgewählten Spieler eine Fertigkeit stehlen",
- "thief_enemy_info": "Deine Fertigkeit wurde gestohlen",
- "thief_player_info": "Die Fertigkeit des Spielers ‚{0}‘ wurde gestohlen",
- "thief_select_info": "Fähigkeit eines Spielers stehlen:",
- "thief_incorrect_skill": "Diese Fähigkeit kann nicht ausgewählt werden!",
+ "teleporter": "Teleporter",
+ "teleporter_desc": "Du hast die Chance, die Plätze mit einem getroffenen Gegner zu tauschen",
+ "teleporter_desc2": "Deine Chance auf Platztausch nach einem Treffer: {0}%",
- "thirdeye": "Drittes Auge",
- "thirdeye_desc": "Klicke auf [css_useSkill], um die Third-Person-Ansicht zu aktivieren",
+ "thief": "Dieb",
+ "thief_desc": "Du kannst einem ausgewählten Spieler eine Fertigkeit stehlen",
+ "thief_enemy_info": "Deine Fertigkeit wurde gestohlen",
+ "thief_player_info": "Die Fertigkeit des Spielers ‚{0}‘ wurde gestohlen",
+ "thief_select_info": "Fähigkeit eines Spielers stehlen:",
+ "thief_incorrect_skill": "Diese Fähigkeit kann nicht ausgewählt werden!",
- "thorns": "Dornen",
- "thorns_desc": "Dein Gegner erhält einen Teil des Schadens, den er dir zugefügt hat",
+ "thirdeye": "Drittes Auge",
+ "thirdeye_desc": "Klicke auf [css_useSkill], um die Third-Person-Ansicht zu aktivieren",
- "throwingknife": "Wurfmesser",
- "throwingknife_desc": "Klicke [css_useSkill], um ein Messer zu werfen. Aber nimm dich vor anderen in Acht",
+ "thorns": "Dornen",
+ "thorns_desc": "Dein Gegner erhält einen Teil des Schadens, den er dir zugefügt hat",
- "toxicsmoke": "Giftiger Rauch",
- "toxicsmoke_desc": "Deine Rauchgranaten verursachen Schaden",
+ "throwingknife": "Wurfmesser",
+ "throwingknife_desc": "Klicke [css_useSkill], um ein Messer zu werfen. Aber nimm dich vor anderen in Acht",
- "wallhack": "Wallhack",
- "wallhack_desc": "Du kannst Feinde durch Wände hindurch sehen",
+ "toxicsmoke": "Giftiger Rauch",
+ "toxicsmoke_desc": "Deine Rauchgranaten verursachen Schaden",
- "watchmaker": "Uhrmacher",
- "watchmaker_desc": "Jeder Granatenwurf verändert die Rundenzeit",
- "watchmaker_ct": "Rundenzeit um {0} Sekunden verkürzt",
- "watchmaker_tt": "Rundenzeit um {0} Sekunden verlängert",
+ "wallhack": "Wallhack",
+ "wallhack_desc": "Du kannst Feinde durch Wände hindurch sehen",
- "weaponsswap": "Waffenwechsel",
- "weaponsswap_desc": "Klicke auf [css_useSkill], um mit einem zufälligen Gegner die Waffen zu tauschen",
- "weaponsswap_hud_info2": "Du hast keine Waffe zum Tauschen",
+ "watchmaker": "Uhrmacher",
+ "watchmaker_desc": "Jeder Granatenwurf verändert die Rundenzeit",
+ "watchmaker_ct": "Rundenzeit um {0} Sekunden verkürzt",
+ "watchmaker_tt": "Rundenzeit um {0} Sekunden verlängert",
- "weightless": "Schwerelosigkeit",
- "weightless_desc": "Deine Granaten werden nicht von der Schwerkraft beeinflusst und fliegen schneller",
+ "weaponsswap": "Waffenwechsel",
+ "weaponsswap_desc": "Klicke auf [css_useSkill], um mit einem zufälligen Gegner die Waffen zu tauschen",
+ "weaponsswap_hud_info2": "Du hast keine Waffe zum Tauschen",
- "wildthrow": "Wilder Wurf",
- "wildthrow_desc": "Wähle einen Spieler aus, der Probleme beim Werfen von Granaten haben wird",
- "wildthrow_player_info": "Spieler '{0}' hat all seine Lineups vergessen",
- "wildthrow_select_info": "Wähle einen Spieler aus:",
-
- "zeus": "Zeus",
- "zeus_desc": "Zeus x27 lädt sich sofort wieder auf",
-
- "your_skill": "Deine aktuelle Fertigkeit",
- "enemy_skill": "Fähigkeit des Gegners",
- "observer_skill": "Fähigkeit des Spielers",
- "welcome_message": "Willkommen {PLAYER} bei {SERVER_NAME}",
- "drawing_skill": "Eine Fertigkeit zeichnen",
- "disabled_weapon": "Du kannst diese Waffe nicht verwenden",
-
- "hud_info": "Warte weitere {0} Sekunden",
- "hud_info_no_enemy": "Kein Feind gefunden",
- "active_hud_info": "Noch {0} Millisekunden aktiv",
-
- "skills_menu": "Fähigkeitenliste",
- "no_player": "Kein passender Spieler gefunden.",
- "duplicate_player": "Mehr als ein Spieler mit demselben Namen gefunden.",
- "selectplayerskill_command": "Gib /t ein",
- "selectplayerskill_incorrect_enemy_index": "Es wurden keine Spieler gefunden, die ausgewählt werden können.",
-
- "skill_not_found_setskill": "Keine solche CHATCOLORS.REDskill gefunden",
- "player_not_found_setskill": "Kein solcher CHATCOLORS.REDplayer gefunden",
- "correct_form_setskill": "Korrekte Verwendung: CHATCOLORS.RED!setskill ",
- "correct_form_setscore": "Korrekte Verwendung: CHATCOLORS.RED!setscore ",
- "done_setskill": "Fähigkeit festgelegt",
- "error_setskill": "CHATCOLORS.REDskill konnte nicht festgelegt werden",
- "for_setskill": "für",
-
- "invalid_map": "Kartenname falsch eingegeben!",
- "loading_map": "Neue Karte wird geladen",
-
- "pause": "Spiel wurde unterbrochen",
- "unpause": "Spiel wurde fortgesetzt",
- "healed": "Du wurdest geheilt.",
- "game_start": "Spiel gestartet!",
- "reload": "Sprachen und Konfigurationen wurden neu geladen.",
- "hud_on": "HUD wurde aktiviert.",
- "hud_off": "HUD wurde deaktiviert.",
-
- "vote_started": "Abstimmung gestartet: ‚{0}‘",
- "vote_timeout": "Zeitlimit für Abstimmung ‚{0}‘ abgelaufen!",
- "vote_wait": "Sie müssen warten, bevor Sie eine weitere Abstimmung starten können!",
- "vote_same_wait": "Sie müssen warten, bevor Sie dieselbe Abstimmung erneut starten können!",
- "vote_not_enough_players": "Nicht genügend Spieler, um eine Abstimmung zu starten!",
- "vote_alredy_voted": "Du hast bereits abgestimmt!",
- "vote_vote": "Abstimmen",
-
- "bombsite_a": "Bombenplatz A",
- "bombsite_b": "Bombenplatz B",
- "bombplanted": "Die Bombe wurde gelegt\n{0} Sekunden bis zur Detonation",
-
- "teammate_skills": "Die Fähigkeiten Ihrer Teamkollegen",
- "summary": "Zusammenfassung der letzten runde",
-
- "menu_controlls_scroll": "W/S – Scrollen",
- "menu_controlls_padding": " | ",
- "menu_controlls_select": "E – Auswählen"
+ "weightless": "Schwerelosigkeit",
+ "weightless_desc": "Deine Granaten werden nicht von der Schwerkraft beeinflusst und fliegen schneller",
+
+ "wildthrow": "Wilder Wurf",
+ "wildthrow_desc": "Wähle einen Spieler aus, der Probleme beim Werfen von Granaten haben wird",
+ "wildthrow_player_info": "Spieler '{0}' hat all seine Lineups vergessen",
+ "wildthrow_select_info": "Wähle einen Spieler aus:",
+
+ "zeus": "Zeus",
+ "zeus_desc": "Zeus x27 lädt sich sofort wieder auf",
+
+ "your_skill": "Deine aktuelle Fertigkeit",
+ "enemy_skill": "Fähigkeit des Gegners",
+ "observer_skill": "Fähigkeit des Spielers",
+ "welcome_message": "Willkommen {PLAYER} bei {SERVER_NAME}",
+ "drawing_skill": "Eine Fertigkeit zeichnen",
+ "disabled_weapon": "Du kannst diese Waffe nicht verwenden",
+
+ "hud_info": "Warte weitere {0} Sekunden",
+ "hud_info_no_enemy": "Kein Feind gefunden",
+ "active_hud_info": "Noch {0} Millisekunden aktiv",
+
+ "skills_menu": "Fähigkeitenliste",
+ "no_player": "Kein passender Spieler gefunden.",
+ "duplicate_player": "Mehr als ein Spieler mit demselben Namen gefunden.",
+ "selectplayerskill_command": "Gib /t ein",
+ "selectplayerskill_incorrect_enemy_index": "Es wurden keine Spieler gefunden, die ausgewählt werden können.",
+
+ "skill_not_found_setskill": "Keine solche CHATCOLORS.REDskill gefunden",
+ "player_not_found_setskill": "Kein solcher CHATCOLORS.REDplayer gefunden",
+ "correct_form_setskill": "Korrekte Verwendung: CHATCOLORS.RED!setskill ",
+ "correct_form_setscore": "Korrekte Verwendung: CHATCOLORS.RED!setscore ",
+ "done_setskill": "Fähigkeit festgelegt",
+ "error_setskill": "CHATCOLORS.REDskill konnte nicht festgelegt werden",
+ "for_setskill": "für",
+
+ "invalid_map": "Kartenname falsch eingegeben!",
+ "loading_map": "Neue Karte wird geladen",
+
+ "pause": "Spiel wurde unterbrochen",
+ "unpause": "Spiel wurde fortgesetzt",
+ "healed": "Du wurdest geheilt.",
+ "game_start": "Spiel gestartet!",
+ "reload": "Sprachen und Konfigurationen wurden neu geladen.",
+ "hud_on": "HUD wurde aktiviert.",
+ "hud_off": "HUD wurde deaktiviert.",
+
+ "vote_started": "Abstimmung gestartet: ‚{0}‘",
+ "vote_timeout": "Zeitlimit für Abstimmung ‚{0}‘ abgelaufen!",
+ "vote_wait": "Sie müssen warten, bevor Sie eine weitere Abstimmung starten können!",
+ "vote_same_wait": "Sie müssen warten, bevor Sie dieselbe Abstimmung erneut starten können!",
+ "vote_not_enough_players": "Nicht genügend Spieler, um eine Abstimmung zu starten!",
+ "vote_alredy_voted": "Du hast bereits abgestimmt!",
+ "vote_vote": "Abstimmen",
+
+ "bombsite_a": "Bombenplatz A",
+ "bombsite_b": "Bombenplatz B",
+ "bombplanted": "Die Bombe wurde gelegt\n{0} Sekunden bis zur Detonation",
+
+ "teammate_skills": "Die Fähigkeiten Ihrer Teamkollegen",
+ "summary": "Zusammenfassung der letzten runde",
+
+ "menu_controlls_scroll": "W/S – Scrollen",
+ "menu_controlls_padding": " | ",
+ "menu_controlls_select": "E – Auswählen"
}
\ No newline at end of file
diff --git a/jRandomSkills - Server Files/plugins/jRandomSkills/languages/en.json b/jRandomSkills - Server Files/plugins/jRandomSkills/languages/en.json
index 80f90d1..f972310 100644
--- a/jRandomSkills - Server Files/plugins/jRandomSkills/languages/en.json
+++ b/jRandomSkills - Server Files/plugins/jRandomSkills/languages/en.json
@@ -275,9 +275,9 @@
"bankrupt_player_info": "Player '{0}' has gone bankrupt.",
"bankrupt_select_info": "Pick a player to go bankrupt:",
- "muhammed": "Muhammed",
- "muhammed_desc": "You explode upon death, killing nearby players",
- "muhammed_explosion": "ALLAHU AKBAR!!!",
+ "deathbomb": "Death Bomb",
+ "deathbomb_desc": "You explode upon death, killing nearby players",
+ "deathbomb_explosion": "Kaboom!",
"ninja": "Ninja",
"ninja_desc": "Standing still increases your invisibility by 33%, crouching by 33%, and holding a knife by 33%",
diff --git a/jRandomSkills - Server Files/plugins/jRandomSkills/languages/fr.json b/jRandomSkills - Server Files/plugins/jRandomSkills/languages/fr.json
index d648e66..02c5543 100644
--- a/jRandomSkills - Server Files/plugins/jRandomSkills/languages/fr.json
+++ b/jRandomSkills - Server Files/plugins/jRandomSkills/languages/fr.json
@@ -275,9 +275,9 @@
"bankrupt_player_info": "Le joueur « {0} » est en faillite.",
"bankrupt_select_info": "Mettre un joueur en faillite :",
- "muhammed": "Bombe",
- "muhammed_desc": "Vous explosez à votre mort, tuant les joueurs proches",
- "muhammed_explosion": "ALLAHU AKBAR!!!",
+ "deathbomb": "Bombe",
+ "deathbomb_desc": "Vous explosez à votre mort, tuant les joueurs proches",
+ "deathbomb_explosion": "Kaboom!",
"ninja": "Ninja",
"ninja_desc": "Rester immobile augmente votre invisibilité de 33%, s’accroupir de 33%, et tenir un couteau de 33%",
diff --git a/jRandomSkills - Server Files/plugins/jRandomSkills/languages/pl.json b/jRandomSkills - Server Files/plugins/jRandomSkills/languages/pl.json
index 2570ed2..321c9d9 100644
--- a/jRandomSkills - Server Files/plugins/jRandomSkills/languages/pl.json
+++ b/jRandomSkills - Server Files/plugins/jRandomSkills/languages/pl.json
@@ -275,9 +275,9 @@
"moneyswap_player_info": "Wymieniłeś swoje pieniądze z graczem '{0}'.",
"moneyswap_select_info": "Zamień się kasą z graczem:",
- "muhammed": "Muhammed",
- "muhammed_desc": "Po śmierci eksplodujesz i zabijasz graczy znajdujących się w zasięgu",
- "muhammed_explosion": "ALLAHU AKBAR!!!",
+ "deathbomb": "Ludzka bomba",
+ "deathbomb_desc": "Po śmierci eksplodujesz i zabijasz graczy znajdujących się w zasięgu",
+ "deathbomb_explosion": "Kaboom!",
"ninja": "Ninja",
"ninja_desc": "Stojąc nieruchomo zwiększasz swoją niewidzialność o 33%, kucając o 33%, a trzymając nóż o 33%",
diff --git a/jRandomSkills - Server Files/plugins/jRandomSkills/languages/pt-br.json b/jRandomSkills - Server Files/plugins/jRandomSkills/languages/pt-br.json
index 2e53cab..b953a61 100644
--- a/jRandomSkills - Server Files/plugins/jRandomSkills/languages/pt-br.json
+++ b/jRandomSkills - Server Files/plugins/jRandomSkills/languages/pt-br.json
@@ -52,10 +52,10 @@
"blademaster": "Mestre das Lâminas",
"blademaster_desc": "Enquanto segura a faca, você tem chance de desviar de um tiro",
-
+
"bunnyhop": "Coelho",
"bunnyhop_desc": "Você ganha \"BunnyHop\" automático",
-
+
"c4camouflage": "Camuflagem C4",
"c4camouflage_desc": "Você fica invisível enquanto segura a bomba",
@@ -68,122 +68,122 @@
"catapult": "Catapulta",
"catapult_desc": "Você tem uma chance aleatória de lançar um inimigo para cima",
"catapult_desc2": "Sua chance de lançar um inimigo ao acertá-lo é: {0}%",
-
+
"chicken": "Galinha",
"chicken_desc": "Você é uma galinha com +10% de movimento mais rápido e -50 HP",
-
+
"chillout": "Esqueci a Senha",
"chillout_desc": "Plantar a bomba leva significativamente mais tempo",
-
+
"cutter": "Corte Rápido",
"cutter_desc": "Você mata instantaneamente com a faca",
"cypher": "CFTV",
"cypher_desc": "Clique em [css_useSkill] para criar/mudar para uma câmera",
"cypher_nospace": "A câmera deve ser posicionada em ângulo reto com a parede",
-
+
"darkness": "Escuridão",
"darkness_desc": "Aplica um efeito de escuridão a um inimigo escolhido",
"darkness_enemy_info": "Que as luzes se apaguem.",
"darkness_player_info": "A escuridão tomou conta do jogador '{0}'.",
"darkness_select_info": "Escolha jogador: escuridão:",
-
+
"deactivator": "Desativador",
"deactivator_desc": "Escolha um jogador para desativar a habilidade",
"deactivator_enemy_info": "Sua habilidade foi desativada.",
"deactivator_player_info": "A habilidade do jogador '{0}' foi desativada.",
"deactivator_select_info": "Desativar skill do jogador:",
-
+
"deaf": "Surdo",
"deaf_desc": "Escolha um jogador para desativar todos os sons",
"deaf_enemy_info": "Seus fones de ouvido saíram do jogo.",
"deaf_player_info": "O som foi desativado para o jogador '{0}'.",
"deaf_select_info": "Silenciar jogador:",
-
+
"disarmament": "Desarmamento",
"disarmament_desc": "Você tem uma chance aleatória de fazer um inimigo dropar a arma ao acertá-lo",
"disarmament_desc2": "Sua chance de desarmar um inimigo é: {0}%",
"distancer": "Medidor de Distância",
"distancer_desc": "Você pode ver a distância até o inimigo mais próximo",
-
+
"dash": "Impulso",
"dash_desc": "Pule novamente para receber um impulso",
-
+
"dracula": "Drácula",
"dracula_desc": "Acertar um inimigo restaura sua vida igual a ao dano causado",
-
+
"duplicator": "ctrl+c ctrl+v",
"duplicator_desc": "Escolha um jogador para copiar a habilidade",
"duplicator_player_info": "A habilidade do jogador '{0}' foi copiada.",
"duplicator_select_info": "Copiar skill do jogador:",
-
+
"dwarf": "Anão",
"dwarf_desc": "Sua altura agora é aleatória",
"dwarf_desc2": "Seu multiplicador de altura é: {0}x",
-
+
"enemyspawn": "Spawn Inimigo",
"enemyspawn_desc": "Clique em [css_useSkill] para se teletransportar para a base inimiga",
-
+
"explosiveshot": "Tiro Explosivo",
"explosiveshot_desc": "Chance aleatória de disparar uma bala explosiva enquanto atira",
"explosiveshot_desc2": "Sua chance de disparar uma bala explosiva: {0}%",
-
+
"falconeye": "Olho de Águia",
"falconeye_desc": "Clique em [css_useSkill] para ativar uma câmera 360 com visão aérea",
-
+
"fastreload": "Recarga Rápida",
"fastreload_desc": "Clique em [css_useSkill] para recarregar a arma que você está segurando",
-
+
"flash": "Ligeirinho",
"flash_desc": "Velocidade de movimentação aleatória no início da rodada",
"flash_desc2": "Seu multiplicador de velocidade é: {0}x",
-
+
"fortnite": "Fortnite",
"fortnite_desc": "Clique em [css_useSkill] para criar uma barreira destrutível",
-
+
"fragilebomb": "Bomba Frágil",
"fragilebomb_desc": "Atirar na bomba a danifica",
"fragilebomb_bomb_health": "Vida da bomba",
-
+
"friendlyfire": "Fogo Amigo",
"friendlyfire_desc": "Atirar em companheiros de equipe os cura",
-
+
"frozendecoy": "Decoy Congelante",
"frozendecoy_desc": "Sua decoy congela os players próximos",
-
+
"gambler": "Tigrinho",
"gambler_desc": "Selecione uma habilidade da lista.",
"gambler_select_info": "Escolha sua habilidade:",
"gambler_more": "#00FF00|Atualizar por ${0}",
"gambler_no_money": "Yetersiz bakiye.",
-
+
"ghost": "Fantasma",
"ghost_desc": "Você é completamente invisível",
-
+
"glaz": "Smoke Transparente",
"glaz_desc": "Smokes tornam-se transparentes para você",
-
+
"glitch": "Sem Mapa",
"glitch_desc": "Desativa o radar de um inimigo escolhido",
"glitch_enemy_info": "Seu radar foi desativado.",
"glitch_player_info": "O radar do jogador '{0}' foi desativado.",
"glitch_select_info": "Desativar radar do jogador:",
-
+
"glue": "Semtex",
"glue_desc": "Suas granadas grudam nas paredes",
-
+
"godmode": "Modo Deus",
"godmode_desc": "Clique em [css_useSkill] para se tornar imortal por alguns segundos",
"godmode_off": "Imortalidade desativada",
"godmode_on": "Imortalidade ativada",
-
+
"grenadier": "Bomberman",
"grenadier_desc": "Você tem HEs infinitas",
-
+
"healingsmoke": "Smoke Amiga",
"healingsmoke_desc": "Suas smokes curam",
-
+
"hermit": "Sanguessuga",
"hermit_desc": "Matar restaura munição e uma parte da sua vida",
@@ -199,7 +199,7 @@
"iana": "Holograma",
"iana_desc": "Clique em [css_useSkill] para controlar seu holograma por alguns segundos",
-
+
"illiterate": "Analfabeto",
"illiterate_desc": "Enquanto você estiver vivo, seus inimigos não conseguem ler",
@@ -208,10 +208,10 @@
"impostor": "Impostor",
"impostor_desc": "Você começa a rodada vestido do time inimigo",
-
+
"infiniteammo": "Munição Infinita",
"infiniteammo_desc": "Você recebe munição infinita para todas as suas armas",
-
+
"jackal": "Lesma",
"jackal_desc": "Cada adversário deixa um rastro atrás de si",
@@ -220,37 +220,37 @@
"jammer_enemy_info": "Sua mira foi desativada.",
"jammer_player_info": "A mira do jogador '{0}' foi desativada.",
"jammer_select_info": "Desativar mira do jogador:",
-
+
"jester": "Palhaço",
"jester_desc": "No modo bobo você não pode causar nem receber dano. Esse modo muda a cada poucos segundos.",
"jester_mode": "Modo Palhaço",
"jester_on": "LIG.",
"jester_off": "DESL.",
-
+
"jumpban": "Perneta",
"jumpban_desc": "Escolha um jogador que não poderá pular",
"jumpban_enemy_info": "Cortaram as suas pernas.",
"jumpban_player_info": "O jogador '{0}' não pode mais pular.",
"jumpban_select_info": "Banir pulo do jogador:",
-
+
"jumpingjack": "Pula-Pula",
"jumpingjack_desc": "Pular restaura vida",
-
+
"killerflash": "Flash Mortal",
"killerflash_desc": "Qualquer pessoa cega pela sua flash morre (incluindo você)",
-
+
"lifeswap": "Troca de Vida",
"lifeswap_desc": "Escolha um jogador para trocar de vida",
"lifeswap_enemy_info": "Alguém pegou sua vida emprestada.",
"lifeswap_player_info": "Você trocou vida com o jogador '{0}'.",
"lifeswap_select_info": "Trocar de vida com jogador:",
-
+
"longknife": "Espada",
"longknife_desc": "Um ataque com faca causa danos independentemente da distância",
-
+
"longzeus": "Zeus Longo",
"longzeus_desc": "Zeus causa dano independentemente da distância",
-
+
"magneticdecoy": "Decoy Magnético",
"magneticdecoy_desc": "Seu decoy atrai jogadores próximos para si mesmo",
@@ -262,10 +262,10 @@
"magnifier_enemy_info": "Seu campo de visão foi distorcido!",
"magnifier_player_info": "O jogador ‘{0}’ foi forçado a entrar no modo zoom.",
"magnifier_select_info": "Ampliar tela do jogador:",
-
+
"medic": "Médico",
"medic_desc": "Clique em [css_useSkill] para usar uma injeção que restaura 50 de vida",
-
+
"miner": "Mineiro de Bombas",
"miner_desc": "Sua granada HE só explode quando há um inimigo por perto",
@@ -274,131 +274,131 @@
"moneyswap_enemy_info": "Você provavelmente virou classe B",
"moneyswap_player_info": "Você trocou dinheiro com o jogador '{0}'.",
"moneyswap_select_info": "Trocar dinheiro c/ jogador:",
-
- "muhammed": "Muhammed",
- "muhammed_desc": "Você explode ao morrer, matando os jogadores próximos",
- "muhammed_explosion": "ALLAHU AKBAR!!!",
-
+
+ "deathbomb": "Bomba mortal",
+ "deathbomb_desc": "Você explode ao morrer, matando os jogadores próximos",
+ "deathbomb_explosion": "Kaboom!",
+
"ninja": "Ninja",
"ninja_desc": "Ficar parado aumenta sua invisibilidade em 33%, agachar em 33%, e segurar uma faca em 33%",
-
+
"nonades": "Imune a Granadas",
"nonades_desc": "Granadas não causam dano a você",
-
+
"norecoil": "Sem Recoil",
"norecoil_desc": "Sem recoil ao atirar",
-
+
"noclip": "NoClip",
"noclip_desc": "Clique em [css_useSkill] para ativar noclip por poucos segundos",
-
+
"oneshot": "Ignorante",
"oneshot_desc": "Acertar um inimigo o mata instantaneamente",
-
+
"onlyhead": "Só na Cabeçinha",
"onlyhead_desc": "Você só recebe headshot",
-
+
"paweljumper": "Parkourista",
"paweljumper_desc": "Você recebe um número aleatório de pulos extras",
"paweljumper_desc2": "Você ganha {0} pulos extras",
-
+
"phoenix": "Fênix",
"phoenix_desc": "Você tem uma chance aleatória de renascer após a morte",
"phoenix_desc2": "Sua chance de renascer após a morte: {0}%",
"phoenix_respawn": "Você foi ressuscitado das cinzas graças ao poder de: CHATCOLORS.REDPhoenix",
-
+
"psychicdefusing": "Desarme Psíquico",
"psychicdefusing_desc": "Quando você está proximo da bomba, começa a desarmá-la automaticamente",
"psychicdefusing_hud_info": "{0} segundos restantes para desarmar",
-
+
"pilot": "Jetpack",
"pilot_desc": "Voe por tempo limitado. Clique duas vezes no pulo para voar",
"pilot_hud_info": "Combustível",
-
+
"planter": "Meu Bombsite Minha Vida",
"planter_desc": "Você pode plantar a bomba em qualquer lugar, com um tempo de detonação de 60 segundos.",
"planter_planting": "Plantando ({0})...",
-
+
"poison": "Veneno",
"poison_desc": "Escolha um jogador que receberá dano a cada poucos segundos",
"poison_enemy_info": "Você foi envenenado.",
"poison_player_info": "O jogador '{0}' foi envenenado.",
"poison_select_info": "Envenenar jogador:",
-
+
"primaryban": "Sem Rifle",
"primaryban_desc": "Escolha um jogador que não poderá usar rifles",
"primaryban_enemy_info": "Você não pode mais usar rifles.",
"primaryban_player_info": "O jogador '{0}' não pode mais usar rifles.",
"primaryban_select_info": "Banir rifles do jogador:",
-
+
"prosthesis": "Prótese",
"prosthesis_desc": "Braços e pernas são à prova de balas",
-
+
"push": "Empurrão",
"push_desc": "Você tem uma chance aleatória de empurrar um inimigo ao acertá-lo",
"push_desc2": "Suas chances de empurrar o inimigo são: {0}%",
-
+
"pyro": "Pirotecnia",
"pyro_desc": "Molotov recupera vida",
-
+
"quickshot": "Tiro Rápido",
"quickshot_desc": "Todas as balas são disparadas extremamente rapidas",
-
+
"radarhack": "Hack de Mapa",
"radarhack_desc": "Inimigos são visíveis no mapa",
-
+
"rambo": "Rambo",
"rambo_desc": "Você recebe uma quantidade aleatória de vida no início da rodada",
-
+
"randomweapon": "Arma Aleatória",
"randomweapon_desc": "Clique em [css_useSkill] para receber uma arma aleatória",
-
+
"rezombie": "Walking Dead",
"rezombie_desc": "Após morrer, você renasce como um zumbi com mais vida porém sem armas",
-
+
"reactivearmor": "Armadura Reativa",
"reactivearmor_desc": "A armadura absorve o primeiro dano recebido",
-
+
"regeneration": "Regeneração",
"regeneration_desc": "Você restaura vida a cada poucos segundos",
-
+
"replicator": "Clone",
"replicator_desc": "Clique em [css_useSkill] para criar um clone que causa dano ao ser atingido",
-
+
"retreat": "De Volta as Origens",
"retreat_desc": "Clique em [css_useSkill] para retornar ao spawn",
-
+
"returntosender": "Devolução ao Remetente",
"returntosender_desc": "O primeiro tiro em um inimigo o envia de volta a sua base",
-
+
"richboy": "Filhinho de Papai",
"richboy_desc": "Você recebe uma quantidade aleatória de dinheiro no início da rodada",
-
+
"robinhood": "Robin Hood",
"robinhood_desc": "Atirar em um inimigo rouba seu dinheiro",
-
+
"rubber": "Balas de Borracha",
"rubber_desc": "Seus tiros deixam os jogadores lentos ao serem atingidos",
-
+
"saper": "Especialista",
"saper_desc": "Você pode plantar e desarmar bombas mais rápido",
-
+
"secondlife": "Segunda Chance",
"secondlife_desc": "Após morrer, você renasce com a mesma quantidade de vida",
-
+
"shade": "Sombra",
"shade_desc": "Você tem uma chance aleatória de teletransportar para trás de um inimigo ao atingi-lo",
"shade_desc2": "Suas chances de se teletransportar para trás de um inimigo atingido são: {0}%",
"shade_nospace": "Sem espaço disponível",
-
+
"shortbomb": "Pavio Longo",
"shortbomb_desc": "A bomba demora muito mais para explodir",
-
+
"silent": "Shhhiu!",
"silent_desc": "Seus passos e pulos são silenciosos para OUTROS jogadores",
"smoker": "Tiryaki",
"smoker_desc": "Sis bombalarınız asla bitmez",
-
+
"sniperelite": "Sniper do BOPE",
"sniperelite_desc": "Clique em [css_useSkill] para trocar sua arma atual por uma AWP",
"sniperelite_customname": "Keskin Nişancı Elit Yeteneği",
@@ -406,51 +406,51 @@
"soldier": "Soldado",
"soldier_desc": "Seus tiros causam mais dano",
"soldier_desc2": "Seu multiplicador de dano é: {0}x",
-
+
"soundmaker": "Criador de Som",
"soundmaker_desc": "Clique em [css_useSkill] para tocar um som para cada inimigo",
-
+
"spectator": "Espectador",
"spectator_desc": "Clique em [css_useSkill] para ver a tela de um inimigo aleatório",
-
+
"swapposition": "Troca de Posição",
"swapposition_desc": "Clique em [css_useSkill] para trocar de lugar com um inimigo aleatório",
-
+
"teleporter": "Teletransportador",
"teleporter_desc": "Você tem a chance de trocar de lugar com um inimigo atingido",
"teleporter_desc2": "Sua chance de trocar de lugar após o acerto: {0}%",
-
+
"thief": "Lula",
"thief_desc": "Você pode roubar uma habilidade de um jogador escolhido",
"thief_enemy_info": "Sua habilidade foi roubada.",
"thief_player_info": "A habilidade do jogador '{0}' foi roubada.",
"thief_select_info": "Roubar skill do jogador:",
"thief_incorrect_skill": "Esta habilidade não pode ser selecionada!",
-
+
"thirdeye": "Terceiro Olho",
"thirdeye_desc": "Clique em [css_useSkill] para ativar a terceira pessoa",
-
+
"thorns": "Porco Espinho",
"thorns_desc": "Seu oponente receberá uma parte do dano que causou a você",
-
+
"throwingknife": "Faca de Arremesso",
"throwingknife_desc": "Clique em [css_useSkill] para lançar uma faca. Mas cuidado com os outros",
"toxicsmoke": "Smoke Tóxica",
"toxicsmoke_desc": "Suas smokes causam dano",
-
+
"wallhack": "Wallhack",
"wallhack_desc": "Você pode ver inimigos através das paredes",
-
+
"watchmaker": "Relojoeiro",
"watchmaker_desc": "Cada arremesso de granada altera o tempo da rodada",
"watchmaker_ct": "Tempo da rodada reduzido em {0} segundos.",
"watchmaker_tt": "Tempo da rodada estendido em {0} segundos.",
-
+
"weaponsswap": "Troca de Armas",
"weaponsswap_desc": "Clique em [css_useSkill] para trocar armas com um inimigo aleatório",
"weaponsswap_hud_info2": "Você não tem arma para trocar",
-
+
"weightless": "Gravidade Zero",
"weightless_desc": "Suas granadas não são afetadas pela gravidade e voam mais rápido",
@@ -461,24 +461,24 @@
"zeus": "Zeus",
"zeus_desc": "Zeus x27 recarrega instantaneamente",
-
+
"your_skill": "Sua habilidade atual",
"enemy_skill": "Habilidade do inimigo",
"observer_skill": "Habilidade do jogador",
"welcome_message": "Bem-vindo {PLAYER} ao {SERVER_NAME}!\nVersão atual do jRandomSkills: {VERSION} ({SKILLS_COUNT} habilidades).\n\nCriado originalmente por:\n{AUTHOR1}\nModificado e aprimorado por:\n{AUTHOR2}\nDiscord oficial: https://discord.gg/9H8EZYBpPF",
"drawing_skill": "Sorteando uma habilidade",
"disabled_weapon": "Você não pode usar esta arma",
-
+
"hud_info": "Espere mais {0} segundos",
"hud_info_no_enemy": "Nenhum inimigo encontrado",
"active_hud_info": "Ativo por mais {0} milissegundos",
-
+
"skills_menu": "Lista de Habilidades",
"no_player": "Nenhum jogador correspondente encontrado.",
"duplicate_player": "Mais de um jogador encontrado com o mesmo nome.",
"selectplayerskill_command": "Digite /t",
"selectplayerskill_incorrect_enemy_index": "Não foram encontrados jogadores para selecionar.",
-
+
"skill_not_found_setskill": "Nenhuma habilidade CHATCOLORS.RED encontrada",
"player_not_found_setskill": "Nenhum jogador CHATCOLORS.RED encontrado",
"correct_form_setskill": "Uso correto: CHATCOLORS.RED!setskill ",
@@ -486,10 +486,10 @@
"done_setskill": "Habilidade definida",
"error_setskill": "Falha ao definir a habilidade CHATCOLORS.RED",
"for_setskill": "para",
-
+
"invalid_map": "Nome do mapa inválido!",
"loading_map": "Carregando um novo mapa",
-
+
"pause": "Partida pausada.",
"unpause": "Partida retomada.",
"healed": "Você foi curado.",
@@ -497,7 +497,7 @@
"reload": "Os idiomas e as configurações foram recarregados.",
"hud_on": "O HUD foi ativado.",
"hud_off": "O HUD foi desativado.",
-
+
"vote_started": "Votação iniciada: '{0}'",
"vote_timeout": "Votação '{0}' expirou!",
"vote_wait": "Você precisa esperar antes de iniciar outra votação!",
@@ -505,14 +505,14 @@
"vote_not_enough_players": "Não há jogadores suficientes para iniciar uma votação!",
"vote_alredy_voted": "Você já votou!",
"vote_vote": "Votar",
-
+
"bombsite_a": "Bombsite A",
"bombsite_b": "Bombsite B",
"bombplanted": "A bomba foi plantada\n{0} segundos até a detonação",
-
+
"teammate_skills": "Habilidades dos seus companheiros de equipe",
"summary": "Resumo da última rodada",
-
+
"menu_controlls_scroll": "W/S - Rolar",
"menu_controlls_padding": " | ",
"menu_controlls_select": "E - Selecionar"
diff --git a/jRandomSkills - Server Files/plugins/jRandomSkills/languages/ru.json b/jRandomSkills - Server Files/plugins/jRandomSkills/languages/ru.json
index ccd1e83..e8fc4c3 100644
--- a/jRandomSkills - Server Files/plugins/jRandomSkills/languages/ru.json
+++ b/jRandomSkills - Server Files/plugins/jRandomSkills/languages/ru.json
@@ -275,9 +275,9 @@
"bankrupt_player_info": "Игрок '{0}' обанкротился.",
"bankrupt_select_info": "Выберите игрока для банкротства:",
- "muhammed": "Мухаммед",
- "muhammed_desc": "Вы взрываетесь при смерти, убивая ближайших игроков",
- "muhammed_explosion": "АЛЛАХУ АКБАР!!!",
+ "deathbomb": "Смертельная бомба",
+ "deathbomb_desc": "Вы взрываетесь при смерти, убивая ближайших игроков",
+ "deathbomb_explosion": "АЛЛАХУ АКБАР!!!",
"ninja": "Ниндзя",
"ninja_desc": "Стоя на месте, ваша невидимость увеличивается на 33%, в приседе на 33%, с ножом на 33%",
diff --git a/jRandomSkills - Server Files/plugins/jRandomSkills/languages/tr.json b/jRandomSkills - Server Files/plugins/jRandomSkills/languages/tr.json
index fddcada..fca1676 100644
--- a/jRandomSkills - Server Files/plugins/jRandomSkills/languages/tr.json
+++ b/jRandomSkills - Server Files/plugins/jRandomSkills/languages/tr.json
@@ -3,52 +3,52 @@
"none_desc": "Hiçbir yeteneğin yok",
"aimbot": "Aimbot",
- "aimbot_desc": "Vurduğun her mermi kafadan vuruş (headshot) sayılır",
+ "aimbot_desc": "Vurduğunda kafadan (HS) sayılır",
- "aimlock": "Nişan Kilidi",
+ "aimlock": "Kitlenme",
"aimlock_desc": "En yakın düşmana nişan almak için [css_useSkill] tuşuna basın",
- "anomaly": "Anomali",
+ "anomaly": "Zaman Büken",
"anomaly_desc": "Zamanı birkaç saniye geriye alırsın",
"antyflash": "Anti-Flash",
- "antyflash_desc": "Flaş bombalarından etkilenmezsin ve senin flaşların 7 saniye sürer",
+ "antyflash_desc": "Flaşa kör olmazsın ve flaşların 7 saniye sürer",
- "antyhead": "Demir Kafa",
- "antyhead_desc": "Kafadan vuruşlardan hasar almazsın",
+ "antyhead": "Beton Kafa",
+ "antyhead_desc": "Kafadan hasar almazsın",
- "areareaper": "Bölge Azraili",
- "areareaper_desc": "Devre dışı bırakmak için bir bomba alanı seçebilirsin",
- "areareaper_incorrect_site": "Böyle bir bomba alanı bulunamadı.",
- "areareaper_no_site": "Hiçbir bomba alanı bulunamadı.",
- "areareaper_select_info": "Devre dışı bırakılacak alanı seçin:",
- "areareaper_site_disabled": "Bomba alanı {0} devre dışı bırakıldı - buraya bomba kurulamaz!",
- "areareaper_used_info": "Yeteneğin zaten kullanıldı.",
- "areareaper_bombsite_disabled": "Bu bomba alanı devre dışı bırakıldı!",
+ "areareaper": "Mekan Kapatan",
+ "areareaper_desc": "Haritadaki bir bomba alanını tamamen devre dışı bırakabilirsin",
+ "areareaper_incorrect_site": "Böyle bir bomba alanı yok uydurma",
+ "areareaper_no_site": "Haritada bomba alanı bulunamadı",
+ "areareaper_select_info": "Kapatılacak bomba alanını seç:",
+ "areareaper_site_disabled": "{0} alanı mühürlendi - artık buraya bomba kurulamaz!",
+ "areareaper_used_info": "Yeteneğini zaten kullandın, açgözlülük yapma",
+ "areareaper_bombsite_disabled": "Bu bomba alanı kullanıma kapatıldı!",
"armored": "Zırhlı",
- "armored_desc": "Rastgele bir hasar alma çarpanına sahip olursun",
- "armored_desc2": "Hasar alma çarpanın: {0}x",
+ "armored_desc": "Rastgele hasar alma çarpanına sahip olursun",
+ "armored_desc2": "Hasar alma: {0}x",
"assassin": "Suikastçı",
- "assassin_desc": "Düşmanlara arkadan vurduğunda daha fazla hasar verirsin",
+ "assassin_desc": "Düşmanlara arkadan daha fazla hasar verirsin",
"astronaut": "Astronot",
- "astronaut_desc": "Raund başında rastgele bir yerçekimi değeri alırsın",
- "astronaut_desc2": "Rastgele yerçekimin: {0}x",
+ "astronaut_desc": "Rastgele bir yerçekimi değerine sahip olursun",
+ "astronaut_desc2": "Yerçekimin: {0}x",
"moneyswap": "Vergi Memuru",
- "moneyswap_desc": "Para takas etmek için bir oyuncu seç",
- "moneyswap_enemy_info": "Vergi dairesi seni yakaladı.",
- "moneyswap_player_info": "'{0}' isimli oyuncuyla paraları takas ettin.",
- "moneyswap_select_info": "Para takası yapılacak oyuncu:",
+ "moneyswap_desc": "Bir düşmanla paranı takasla",
+ "moneyswap_enemy_info": "Maliye kapına dayandı",
+ "moneyswap_player_info": "'{0}' isimli oyuncuyla paraları takas ettin",
+ "moneyswap_select_info": "Para takasla biriyle:",
"baseball": "Beyzbolcu",
- "baseball_desc": "Yanıltıcı bomban (decoy) duvarlardan seker ve çarptığı düşmanı anında öldürür",
+ "baseball_desc": "Yanıltıcı bomban (decoy) duvarlardan seker ve çarptığı düşmanı öldürür",
- "behind": "Düşman Döndürücü",
- "behind_desc": "Düşmana vurduğunda onu 180 derece döndürme şansın olur",
- "behind_desc2": "Vuruşta düşmanı döndürme şansın: %{0}",
+ "behind": "Baş Döndüren",
+ "behind_desc": "Vurduğunda düşmanı 180 derece döndürme şansın olur",
+ "behind_desc2": "Baş döndürme şansın: %{0}",
"blademaster": "Kılıç Ustası",
"blademaster_desc": "Bıçak tutarken mermileri sektirme şansın artar",
@@ -57,105 +57,105 @@
"bunnyhop_desc": "Otomatik \"BunnyHop\" yaparsın",
"c4camouflage": "C4 Kamuflajı",
- "c4camouflage_desc": "Bombayı taşırken görünmez olursun",
+ "c4camouflage_desc": "Elinde C4 varken tamamen görünmez olursun",
"carefulbullets": "Dikkatli Mermiler",
- "carefulbullets_desc": "Iskaladığın her mermi için hasar alacak bir oyuncu seç",
- "carefulbullets_enemy_info": "Artık isabetsiz atışlar canını yakacak.",
- "carefulbullets_player_info": "'{0}' artık daha dikkatli olmalı.",
+ "carefulbullets_desc": "Düşman mermi kaçırırsa hasar alır",
+ "carefulbullets_enemy_info": "Mermi kaçırmak canını yakacak",
+ "carefulbullets_player_info": "'{0}' artık mermi sıkarken iki kere düşünecek",
"carefulbullets_select_info": "İsabetsiz atışların hasar vereceği oyuncu:",
"catapult": "Mancınık",
- "catapult_desc": "Düşmanı havaya fırlatma şansın olur",
- "catapult_desc2": "Vuruşta düşmanı fırlatma şansın: %{0}",
+ "catapult_desc": "Vurduğun rakibi uzaya (yukarı doğru) fırlatma şansın var",
+ "catapult_desc2": "Fırlatma şansın: %{0}",
"chicken": "Tavuk",
- "chicken_desc": "Tavuk modeli + %10 daha hızlı hareket - 50 HP alırsın",
+ "chicken_desc": "Tavuk modeli ve %10 daha hızlısın fakat 50 HP",
- "chillout": "Sakin Ol",
+ "chillout": "Ağırdan Al",
"chillout_desc": "Bombayı kurmak çok daha uzun sürer",
- "cutter": "Kesici",
- "cutter_desc": "Bıçakla tek atışta öldürme",
+ "cutter": "Kasap",
+ "cutter_desc": "Bıçakla tek atarsın",
- "cypher": "Cypher",
- "cypher_desc": "Kamera oluşturmak/kameraya geçmek için E tuşuna bas",
- "cypher_nospace": "Kamera duvara dik açıyla yerleştirilmelidir",
+ "cypher": "Gözcü",
+ "cypher_desc": "Kamera oluşturmak/geçmek için [css_useSkill] tuşuna bas",
+ "cypher_nospace": "Kamerayı duvara dik yerleştir",
"darkness": "Karanlık",
- "darkness_desc": "Seçilen bir düşmana karanlık efekti uygular",
- "darkness_enemy_info": "Işıklar sönsün.",
- "darkness_player_info": "Karanlık, '{0}' isimli oyuncuyu ele geçirdi.",
- "darkness_select_info": "Karanlık uygulanacak oyuncuyu seç:",
+ "darkness_desc": "Bir düşmanın ekranını karart",
+ "darkness_enemy_info": "Işıklar sönsün",
+ "darkness_player_info": "'{0}' isimli oyuncunun dünyasını kararttın",
+ "darkness_select_info": "Karanlık bir oyuncuyu seç:",
- "deactivator": "Devre Dışı Bırakıcı",
- "deactivator_desc": "Yeteneğini kapatmak istediğin bir oyuncu seç",
- "deactivator_enemy_info": "Yeteneğin devre dışı bırakıldı.",
- "deactivator_player_info": "'{0}' isimli oyuncunun yeteneği devre dışı bırakıldı.",
- "deactivator_select_info": "Bir oyuncunun yeteneğini devre dışı bırak:",
+ "deactivator": "Silgi",
+ "deactivator_desc": "Bir düşmanın yeteneğini sil",
+ "deactivator_enemy_info": "Yeteneğin silindi",
+ "deactivator_player_info": "'{0}' isimli oyuncunun yeteneği silindi",
+ "deactivator_select_info": "Yetenek silmek için oyuncu seç:",
"deaf": "Sağır",
- "deaf_desc": "Tüm seslerini kapatmak için bir oyuncu seç",
- "deaf_enemy_info": "Kulaklıkların oyundan ayrıldı.",
+ "deaf_desc": "Bir düşmanın kulağını kapat ve sesleri duymaz hale getir",
+ "deaf_enemy_info": "Kulaklıkların tıkandı",
"deaf_player_info": "'{0}' isimli oyuncu için sesler kapatıldı.",
- "deaf_select_info": "Sesleri kapatılacak oyuncuyu seç:",
+ "deaf_select_info": "Sağır bir oyuncuyu seç:",
"disarmament": "Silahsızlandırma",
- "disarmament_desc": "Vurduğun düşmanın silahını düşürme şansın olur",
- "disarmament_desc2": "Düşmanı silahsızlandırma şansın: %{0}",
+ "disarmament_desc": "Vurduğunda rakibin elindeki silahı yere düşürme şansın olur",
+ "disarmament_desc2": "Silahsızlandırma şansın: %{0}",
- "distancer": "Mesafe Ölçer",
- "distancer_desc": "En yakın düşmana olan mesafeni görebilirsin",
+ "distancer": "Kronometre",
+ "distancer_desc": "En yakın düşmanın mesafesini görürsün",
"dash": "Atılma",
- "dash_desc": "Atılmak (dash) için ikinci kez zıpla",
+ "dash_desc": "Atılmak için ikinci kez zıpla",
- "dracula": "Dracula",
- "dracula_desc": "Düşmana vurmak, verdiğin hasarın bir yüzdesi kadar canını yeniler",
+ "dracula": "Drakula",
+ "dracula_desc": "Rakiplere verdiğin hasarın belirli bir yüzdesi kadar can alırsın",
- "duplicator": "Kopyalayıcı",
+ "duplicator": "Kopyacı",
"duplicator_desc": "Yeteneğini kopyalamak için bir oyuncu seç",
"duplicator_player_info": "'{0}' isimli oyuncunun yeteneği kopyalandı.",
"duplicator_select_info": "Yeteneği kopyalanacak oyuncu:",
"dwarf": "Cüce",
"dwarf_desc": "Raund başında rastgele karakter boyutu",
- "dwarf_desc2": "Boyut çarpanın: {0}x",
+ "dwarf_desc2": "Boyutun: {0}x",
- "enemyspawn": "Düşman Başlangıcı",
- "enemyspawn_desc": "Düşman başlangıç noktasına ışınlanmak için E tuşuna bas",
+ "enemyspawn": "Base Baskını",
+ "enemyspawn_desc": "[css_useSkill] tuşuna basarak düşman doğma noktasına ışınlan",
- "explosiveshot": "Patlayıcı Atış",
- "explosiveshot_desc": "Ateş ederken rastgele patlayıcı mermi atma şansı",
- "explosiveshot_desc2": "Patlayıcı mermi atma şansın: %{0}",
+ "explosiveshot": "Patlayıcı Mermi",
+ "explosiveshot_desc": "Ateş ederken rastgele mermilerin patlayabilir",
+ "explosiveshot_desc2": "Patlayan mermi şansı: %{0}",
"falconeye": "Şahin Gözü",
- "falconeye_desc": "Kuş bakışı kamerayı aktif etmek için E tuşuna bas",
+ "falconeye_desc": "[css_useSkill] tuşuna basarak kuş bakışına geç",
- "fastreload": "Hızlı Şarjör",
- "fastreload_desc": "Eldeki silahı anında doldurmak için E tuşuna bas",
+ "fastreload": "Şipşak Şarjör",
+ "fastreload_desc": "[css_useSkill] tuşuna basarak şarjörünü hızlıca değiştir",
"flash": "Flash",
"flash_desc": "Raund başında rastgele oyuncu hızı",
- "flash_desc2": "Hız çarpanın: {0}x",
+ "flash_desc2": "Hızın: {0}x",
"fortnite": "Fortnite",
- "fortnite_desc": "Parçalanabilir bir barikat oluşturmak için E tuşuna bas",
+ "fortnite_desc": "[css_useSkill] tuşuna basarak barikat kur",
"fragilebomb": "Hassas Bomba",
- "fragilebomb_desc": "Bombaya ateş etmek ona hasar verir",
- "fragilebomb_bomb_health": "Bomba canı",
+ "fragilebomb_desc": "Kurulu bombaya ateş etmek bombanın canını azaltır",
+ "fragilebomb_bomb_health": "Bombanın canı",
- "friendlyfire": "Dost Ateşi",
+ "friendlyfire": "Dost Şifası",
"friendlyfire_desc": "Takım arkadaşlarına ateş etmek onları iyileştirir",
- "frozendecoy": "Dondurucu Yem",
- "frozendecoy_desc": "Yanıltıcı bomban (decoy) yakındaki tüm oyuncuları dondurur",
+ "frozendecoy": "Buz Kıran",
+ "frozendecoy_desc": "Yanıltıcı bomba (decoy) yakındaki tüm oyuncuları dondurur",
"gambler": "Kumarbaz",
"gambler_desc": "Sunulan listeden bir yetenek seç.",
"gambler_select_info": "Yeteneğini seç:",
- "gambler_more": "#00FF00|${0} karşılığında yenile",
+ "gambler_more": "#00FF00|${0} karşılığında yeni yetenekler",
"gambler_no_money": "Yeterli para yok.",
"ghost": "Hayalet",
@@ -165,71 +165,71 @@
"glaz_desc": "Sis bombalarının içini görebilirsin",
"glitch": "Glitç",
- "glitch_desc": "Seçilen bir düşmanın radarını devre dışı bırakır",
- "glitch_enemy_info": "Radarın devre dışı bırakıldı.",
+ "glitch_desc": "Seçilen bir düşmanın radarını kapatır",
+ "glitch_enemy_info": "Radarın kapandı",
"glitch_player_info": "'{0}' isimli oyuncunun radarı devre dışı bırakıldı.",
"glitch_select_info": "Radarı kapatılacak oyuncuyu seç:",
"glue": "Yapıştırıcı",
"glue_desc": "Bombaların duvarlara yapışır",
- "godmode": "Ölümsüzlük",
- "godmode_desc": "Kısa süreliğine ölümsüz olmak için E tuşuna bas",
- "godmode_off": "Ölümsüzlük kapalı",
- "godmode_on": "Ölümsüzlük açık",
+ "godmode": "Ölümsüz",
+ "godmode_desc": "[css_useSkill] tuşuna basarak kısa süreli ölümsüz ol",
+ "godmode_off": "Ölümsüzlük kapandı",
+ "godmode_on": "Ölümsüzlük açıldı",
"grenadier": "Bombacı",
"grenadier_desc": "Sınırsız el bombasına sahipsin",
- "healingsmoke": "İyileştiren Sis",
+ "healingsmoke": "Şifalı Sis",
"healingsmoke_desc": "Sis bombaların iyileştirir",
"hermit": "Münzevi",
- "hermit_desc": "Öldürmek, mermilerini ve canının bir kısmını yeniler",
+ "hermit_desc": "Öldüğünde mernin ve canının biraz yenilenir",
"holyhandgrenade": "Kutsal El Bombası",
- "holyhandgrenade_desc": "El bombaların iki kat hasar verir ve iki kat menzile sahiptir",
+ "holyhandgrenade_desc": "El bomban iki kat hasara ve menzile sahip",
- "homingnades": "Güdümlü El Bombaları",
- "homingnades_desc": "El bombalarınız (sis hariç) düşmanlara yönelir",
+ "homingnades": "Güdümlü Bomba",
+ "homingnades_desc": "Bombalarınız (sis hariç) düşmanlara yönelir",
- "hotbomb": "Sıcak Bomba",
- "hotbomb_desc": "Siz hayatta olduğunuz sürece, bomba taşıyıcısına hasar verir",
- "hotbomb_hint": "Dikkatli ol, bomba çok sıcak!",
+ "hotbomb": "Sıcak C4",
+ "hotbomb_desc": "Yaşadığın sürece bombacının canı azalıyor",
+ "hotbomb_hint": "Bomba çok sıcak!",
"iana": "Hologram",
- "iana_desc": "Hologramını birkaç saniyeliğine kontrol etmek için E tuşuna bas",
+ "iana_desc": "[css_useSkill] tuşuna basarak bir hologram oluştur",
- "illiterate": "Okuryazar Olmayan",
- "illiterate_desc": "Siz hayatta olduğunuz sürece, düşmanlarınız yazıları okuyamaz",
+ "illiterate": "Cahiliye",
+ "illiterate_desc": "Yaşadığın sürece rakibin sohbeti (chat) veya oyun yazılarını okuyamaz",
"illusionist": "İllüzyonist",
- "illusionist_desc": "Düz ilerleyen bir kopya oluşturmak için [css_useSkill] tuşuna basın",
+ "illusionist_desc": "[css_useSkill] tuşuna basarak düz ilerleyen illüzyon oluştur",
"impostor": "Sahtekar",
- "impostor_desc": "Raunda düşman oyuncu modeliyle başlarsın",
+ "impostor_desc": "Düşman oyuncu modeline dönüşürsün",
"infiniteammo": "Sınırsız Mermi",
- "infiniteammo_desc": "Tüm silahların için sınırsız mermi alırsın",
+ "infiniteammo_desc": "Tüm silahların sınırsız mermisi olur",
"jackal": "İzci",
- "jackal_desc": "Her rakip arkasında bir iz bırakır",
+ "jackal_desc": "Her rakip yürüdüğünde ayak izi bırakır",
"jammer": "Sinyal Kesici",
"jammer_desc": "Bir oyuncunun nişangahını (crosshair) kapatmak için seç",
- "jammer_enemy_info": "Nişangahın devre dışı bırakıldı.",
- "jammer_player_info": "'{0}' isimli oyuncunun nişangahı devre dışı bırakıldı.",
+ "jammer_enemy_info": "Nişangahın kapatıldı.",
+ "jammer_player_info": "'{0}' isimli oyuncunun nişangahı kapatıldı.",
"jammer_select_info": "Nişangahı kapatılacak oyuncuyu seç:",
- "jester": "Joker",
- "jester_desc": "Joker modunda hasar alamazsın ve veremezsin. Bu mod birkaç saniyede bir değişir.",
- "jester_mode": "Joker Modu",
+ "jester": "Soytarı",
+ "jester_desc": "Soytarı modunda hasar alamazsın ve veremezsin. Bu mod birkaç saniyede bir değişir.",
+ "jester_mode": "Soytarı Modu",
"jester_on": "AÇIK",
"jester_off": "KAPALI",
"jumpban": "Bacaksız",
"jumpban_desc": "Zıplayamayacak bir oyuncu seç",
- "jumpban_enemy_info": "Birisi bacaklarını kesti.",
+ "jumpban_enemy_info": "Bacakların kesildi",
"jumpban_player_info": "'{0}' artık zıplayamaz.",
"jumpban_select_info": "Zıplaması yasaklanacak oyuncu:",
@@ -237,59 +237,59 @@
"jumpingjack_desc": "Zıplamak canını yeniler",
"killerflash": "Ölümcül Flaş",
- "killerflash_desc": "Flaş bombanla tamamen kör olan herkes ölür (sen dahil)",
+ "killerflash_desc": "Flaşına tamamen kör olan herkes ölür (sen dahil)",
"lifeswap": "Can Takası",
"lifeswap_desc": "Can değerlerini takas etmek için bir oyuncu seç",
- "lifeswap_enemy_info": "Birisi canını ödünç aldı.",
+ "lifeswap_enemy_info": "Birisi canını çaldı",
"lifeswap_player_info": "'{0}' isimli oyuncuyla canlarını takas ettin.",
"lifeswap_select_info": "Can takası yapılacak oyuncu:",
"longknife": "Uzun Bıçak",
- "longknife_desc": "Bıçak saldırısı mesafeden bağımsız olarak hasar verir",
+ "longknife_desc": "Bıçağın uzaktaki rakibe hasar verebilir",
"longzeus": "Uzak Zeus",
- "longzeus_desc": "Zeus mesafeden bağımsız olarak hasar verir",
+ "longzeus_desc": "Zeus uzaktaki rakibe hasar verebilir",
"magneticdecoy": "Manyetik Yanıltıcı",
"magneticdecoy_desc": "Yanıltıcı bombanız yakındaki oyuncuları kendine çeker",
"magneto": "Magneto",
- "magneto_desc": "Tüm düşman el bombaları sizden uzaklaştırılır",
+ "magneto_desc": "Tüm düşman bombaları sizden uzaklaştırılır",
"magnifier": "Büyüteç",
"magnifier_desc": "Düşmanın ekranını yakınlaştırarak görüş alanını daraltır",
- "magnifier_enemy_info": "Görüş alanın bozuldu!",
+ "magnifier_enemy_info": "Görüşün bozuldu!",
"magnifier_player_info": "'{0}' isimli oyuncunun ekranı yakınlaştırıldı.",
"magnifier_select_info": "Ekranı büyütülecek oyuncuyu seç:",
"medic": "Sıhhiye",
- "medic_desc": "50 can yenileyen bir iyileştirme yükü kullanmak için E tuşuna bas",
+ "medic_desc": "[css_useSkill] tuşuna basarak kendine anında 50 HP bas",
- "miner": "Bomba Madencisi",
+ "miner": "Mayın",
"miner_desc": "El bombanız (HE) sadece yakında bir düşman olduğunda patlar",
"bankrupt": "İflas",
"bankrupt_desc": "Tüm parasını kaybedecek bir oyuncu seç",
- "bankrupt_enemy_info": "İflas ettin.",
+ "bankrupt_enemy_info": "İflas ettin!",
"bankrupt_player_info": "'{0}' isimli oyuncu iflas etti.",
"bankrupt_select_info": "İflas edecek oyuncuyu seç:",
- "muhammed": "Bombacı",
- "muhammed_desc": "Öldüğünde patlayarak etraftaki oyuncuları öldürürsün",
- "muhammed_explosion": "ALLAHU EKBER!!!",
+ "deathbomb": "Canlı Bomba",
+ "deathbomb_desc": "Öldüğünde patlayarak etraftaki oyuncuları öldürürsün",
+ "deathbomb_explosion": "BOOM!!!",
"ninja": "Ninja",
- "ninja_desc": "Hareketsiz durmak görünmezliğini %33, çömelmek %33 ve bıçak tutmak %33 artırır",
+ "ninja_desc": "Görünmezliğini sabit durmak %33, eğilmek %33 ve bıçak tutmak %33 artırır",
"nonades": "Bomba Geçirmez",
"nonades_desc": "Bombalar sana hasar vermez",
"norecoil": "Odaklanma",
- "norecoil_desc": "Ateş ederken geri tepme olmaz",
+ "norecoil_desc": "Silahın hiç sekmez",
"noclip": "Noclip",
- "noclip_desc": "Kısa süreliğine noclip açmak için E tuşuna bas",
+ "noclip_desc": "[css_useSkill] tuşuna basarak duvarların içinden geç",
"oneshot": "Tek Atış",
"oneshot_desc": "Düşmana vurmak onu anında öldürür",
@@ -297,18 +297,18 @@
"onlyhead": "Sadece Kafa",
"onlyhead_desc": "Sadece kafadan hasar alırsın",
- "paweljumper": "Ekstra Zıplama",
- "paweljumper_desc": "Rastgele sayıda ekstra zıplama hakkı kazanırsın",
- "paweljumper_desc2": "{0} tane ekstra zıplama hakkın var",
+ "paweljumper": "Zıppır",
+ "paweljumper_desc": "Rastgele sayıda ekstra zıplaman olur",
+ "paweljumper_desc2": "{0} kez ekstra zıplayabilirsin",
"phoenix": "Anka Kuşu",
"phoenix_desc": "Öldükten sonra rastgele yeniden doğma şansın olur",
- "phoenix_desc2": "Ölümden sonra yeniden doğma şansın: %{0}",
- "phoenix_respawn": "Anka Kuşu'nun gücü sayesinde küllerinden yeniden doğdun!",
+ "phoenix_desc2": "Yeniden doğma şansın: %{0}",
+ "phoenix_respawn": "Küllerinden yeniden doğdun!",
"psychicdefusing": "Psişik İmha",
"psychicdefusing_desc": "Bombanın yanındayken onu otomatik imha etmeye başlarsın",
- "psychicdefusing_hud_info": "İmha için {0} saniye kaldı",
+ "psychicdefusing_hud_info": "Bombanın çözülmesi için son {0} saniye",
"pilot": "Pilot",
"pilot_desc": "Sınırlı bir süre uçun. Uçmak için zıplama tuşuna iki kez basın",
@@ -326,7 +326,7 @@
"primaryban": "Tüfek Yasak",
"primaryban_desc": "Tüfek kullanamayacak bir oyuncu seç",
- "primaryban_enemy_info": "Artık tüfek kullanamazsın.",
+ "primaryban_enemy_info": "Tüfek kullanmayı unuttun",
"primaryban_player_info": "'{0}' artık tüfek kullanamaz.",
"primaryban_select_info": "Tüfek kullanımı yasaklanacak oyuncu:",
@@ -335,13 +335,13 @@
"push": "İtici",
"push_desc": "Düşmana vurduğunda onu geri itme şansın olur",
- "push_desc2": "Düşmanı geri itme şansın: %{0}",
+ "push_desc2": "Geri itme şansın: %{0}",
- "pyro": "Piromani",
+ "pyro": "Ateşbaz",
"pyro_desc": "Molotof canını yeniler",
- "quickshot": "Seri Ateş",
- "quickshot_desc": "Tüm mermiler çok hızlı ateşlenir",
+ "quickshot": "Seri Atış",
+ "quickshot_desc": "Silahın daha hızlı ateş eder",
"radarhack": "Radar Hack",
"radarhack_desc": "Düşmanlar radarda görünür",
@@ -349,34 +349,34 @@
"rambo": "Rambo",
"rambo_desc": "Raund başında rastgele miktarda can alırsın",
- "randomweapon": "Rastgele Silah",
- "randomweapon_desc": "Rastgele bir silah almak için E tuşuna bas",
+ "randomweapon": "Silah Kumarı",
+ "randomweapon_desc": "[css_useSkill] tuşuna basarak rastgele bir silah al",
- "rezombie": "Zombi Dönüşümü",
- "rezombie_desc": "Öldükten sonra daha fazla canla ve silahsız bir zombi olarak yeniden doğarsın",
+ "rezombie": "Zombi",
+ "rezombie_desc": "Öldükten sonra daha fazla canla ve silahsız zombi olarak doğarsın",
"reactivearmor": "Reaktif Zırh",
- "reactivearmor_desc": "Zırh alınan ilk hasarı emmer",
+ "reactivearmor_desc": "Zırhın alınan ilk hasarı emmer",
"regeneration": "Yenilenme",
"regeneration_desc": "Birkaç saniyede bir canın yenilenir",
"replicator": "Kopyacı",
- "replicator_desc": "Vurulduğunda hasar veren bir kopya oluşturmak için E tuşuna bas",
+ "replicator_desc": "[css_useSkill] tuşuna basarak kopya oluştur ve ölürse rakibe hasar verir",
- "retreat": "Geri Çekilme",
- "retreat_desc": "Başlangıç noktasına dönmek için E tuşuna bas",
+ "retreat": "Geri Çekil",
+ "retreat_desc": "[css_useSkill] tuşuna basarak başlangıç noktasına ışınlan",
"returntosender": "İade",
- "returntosender_desc": "Düşmana ilk vuruşun onu kendi başlangıç noktasına geri gönderir",
+ "returntosender_desc": "Düşmana ilk vuruşun onu kendi başlangıç noktasına ışınlar",
- "richboy": "Zengin Çocuk",
+ "richboy": "Zengin Bebe",
"richboy_desc": "Raund başında rastgele miktarda para alırsın",
"robinhood": "Robin Hood",
"robinhood_desc": "Düşmana hasar vermek onun parasını çalar",
- "rubber": "Lastik Mermiler",
+ "rubber": "Lastik Mermi",
"rubber_desc": "Mermilerin oyuncuları önemli ölçüde yavaşlatır",
"saper": "İstihkamcı",
@@ -387,48 +387,48 @@
"shade": "Gölge",
"shade_desc": "Vurduğun düşmanın arkasına ışınlanma şansın olur",
- "shade_desc2": "Düşmanın arkasına ışınlanma şansın: %{0}",
+ "shade_desc2": "Arkasına ışınlanma şansın: %{0}",
"shade_nospace": "Uygun alan yok",
"shortbomb": "Kısa Fünye",
"shortbomb_desc": "Bomba çok daha hızlı patlar",
"silent": "Sessiz",
- "silent_desc": "Ayak seslerin ve zıplamaların DİĞER oyunculara duyulmaz",
+ "silent_desc": "Ayak seslerini ve zıplamalarını DİĞER oyuncular duyamaz",
"smoker": "Tiryaki",
"smoker_desc": "Sis bombalarınız asla bitmez",
"sniperelite": "Keskin Nişancı",
- "sniperelite_customname": "Keskin Nişancı Yeteneği",
- "sniperelite_desc": "Mevcut silahını bir AWP ile değiştirmek için E tuşuna bas",
+ "sniperelite_customname": "Keskin Nişancı",
+ "sniperelite_desc": "[css_useSkill] tuşuna basarak silahını AWP ile değiştir",
- "soldier": "Asker",
- "soldier_desc": "Rastgele bir hasar çarpanına sahip olursun",
- "soldier_desc2": "Hasar çarpanın: {0}x",
+ "soldier": "Teğmen",
+ "soldier_desc": "Rastgele bir oranda fazla hasar verirsin",
+ "soldier_desc2": "Hasarın: {0}x",
- "soundmaker": "Gürültücü",
- "soundmaker_desc": "Her düşman için bir ses tetiklemek için E tuşuna bas",
+ "soundmaker": "Halüsinasyon",
+ "soundmaker_desc": "[css_useSkill] tuşuna basarak rakibinin çığlık atmasını sağla",
- "spectator": "İzleyici",
- "spectator_desc": "Rastgele bir düşmanı izlemek için E tuşuna bas",
+ "spectator": "Röntgen",
+ "spectator_desc": "[css_useSkill] tuşuna basarak rakibinin gözünden gör",
"swapposition": "Yer Değiştirme",
- "swapposition_desc": "Rastgele bir düşmanla yer değiştirmek için E tuşuna bas",
+ "swapposition_desc": "[css_useSkill] tuşuna basarak vurduğun düşmanla yer değiştir",
"teleporter": "Işınlayıcı",
"teleporter_desc": "Vurulan bir düşmanla yer değiştirme şansınız var",
- "teleporter_desc2": "Vuruştan sonra yer değiştirme şansınız: %{0}",
+ "teleporter_desc2": "Yer değiştirme şansın: %{0}",
"thief": "Hırsız",
"thief_desc": "Seçilen bir oyuncudan yeteneğini çalabilirsin",
"thief_enemy_info": "Yeteneğin çalındı.",
"thief_player_info": "'{0}' isimli oyuncunun yeteneği çalındı.",
"thief_select_info": "Yetenek çalınacak oyuncu:",
- "thief_incorrect_skill": "Bu yetenek seçilemez!",
+ "thief_incorrect_skill": "Bu yetenek çalınamaz!",
"thirdeye": "Üçüncü Göz",
- "thirdeye_desc": "Üçüncü şahıs bakış açısını aktif etmek için E tuşuna bas",
+ "thirdeye_desc": "[css_useSkill] tuşuna basarak üçüncü göze(thirdperson) geç",
"thorns": "Dikenler",
"thorns_desc": "Rakibin, sana verdiği hasarın bir kısmını geri alır",
@@ -448,13 +448,13 @@
"watchmaker_tt": "Raund süresi {0} saniye uzatıldı.",
"weaponsswap": "Silah Takası",
- "weaponsswap_desc": "Rastgele bir düşmanla silahları takas etmek için E tuşuna bas",
+ "weaponsswap_desc": "[css_useSkill] tuşuna basarak silahını düşmanla takasla",
"weaponsswap_hud_info2": "Takas edilecek silahın yok",
"weightless": "Yerçekimsiz",
- "weightless_desc": "El bombalarınız yerçekiminden etkilenmez ve daha hızlı uçar",
+ "weightless_desc": "El bombalarınız yerçekiminden etkilenmez ve dümdüz gider",
- "wildthrow": "Vahşi Atış",
+ "wildthrow": "Unutkan Bombacı",
"wildthrow_desc": "El bombası atmakta zorluk çekecek bir oyuncu seçin",
"wildthrow_player_info": "'{0}' adlı oyuncu tüm taktiklerini unuttu",
"wildthrow_select_info": "Bir oyuncu seçin:",
@@ -462,25 +462,25 @@
"zeus": "Zeus",
"zeus_desc": "Zeus x27 anında şarj olur",
- "your_skill": "Mevcut yeteneğin",
+ "your_skill": "Yeteneğin",
"enemy_skill": "Düşmanın yeteneği",
"observer_skill": "Oyuncunun yeteneği",
"welcome_message": "{PLAYER}, {SERVER_NAME} sunucusuna hoş geldin!\nGüncel jRandomSkills versiyonu: {VERSION} ({SKILLS_COUNT} yetenek).\n\nOrijinal yapımcı:\n{AUTHOR1}\nGeliştiren:\n{AUTHOR2}\nResmi Discord: https://discord.gg/9H8EZYBpPF",
- "drawing_skill": "Yetenek çekiliyor",
+ "drawing_skill": "Yetenek çarkı dönüyor...",
"disabled_weapon": "Bu silahı kullanamazsın",
"hud_info": "{0} saniye daha bekle",
- "hud_info_no_enemy": "Düşman bulunamadı",
+ "hud_info_no_enemy": "Düşman yok",
"active_hud_info": "{0} milisaniye daha aktif",
"skills_menu": "Yetenek Listesi",
- "no_player": "Eşleşen oyuncu bulunamadı.",
+ "no_player": "Eşleşen oyuncu yok.",
"duplicate_player": "Aynı isimde birden fazla oyuncu bulundu.",
- "selectplayerskill_command": "/t yazın",
- "selectplayerskill_incorrect_enemy_index": "Seçilecek oyuncu bulunamadı.",
+ "selectplayerskill_command": "Sohbete /t yazın",
+ "selectplayerskill_incorrect_enemy_index": "Seçilecek oyuncu yok.",
- "skill_not_found_setskill": "Böyle bir yetenek bulunamadı",
- "player_not_found_setskill": "Böyle bir oyuncu bulunamadı",
+ "skill_not_found_setskill": "Böyle bir yetenek yok",
+ "player_not_found_setskill": "Böyle bir oyuncu yok",
"correct_form_setskill": "Doğru kullanım: !setskill ",
"correct_form_setscore": "Doğru kullanım: !setscore ",
"done_setskill": "yetenek ayarlandı",
@@ -506,12 +506,12 @@
"vote_alredy_voted": "Zaten oy kullandın!",
"vote_vote": "Oy ver",
- "bombsite_a": "Bomba Alanı A",
- "bombsite_b": "Bomba Alanı B",
+ "bombsite_a": "A Bölgesi",
+ "bombsite_b": "B Bölgesi",
"bombplanted": "Bomba kuruldu\nPatlamaya {0} saniye",
- "teammate_skills": "Takım arkadaşlarının yetenekleri",
- "summary": "Son raundun özeti",
+ "teammate_skills": "Takımının yetenekleri",
+ "summary": "Raundun özeti",
"menu_controlls_scroll": "W/S - Kaydır",
"menu_controlls_padding": " | ",
diff --git a/jRandomSkills - Server Files/plugins/jRandomSkills/languages/zh.json b/jRandomSkills - Server Files/plugins/jRandomSkills/languages/zh.json
index c42ef7c..08f05a2 100644
--- a/jRandomSkills - Server Files/plugins/jRandomSkills/languages/zh.json
+++ b/jRandomSkills - Server Files/plugins/jRandomSkills/languages/zh.json
@@ -275,9 +275,9 @@
"moneyswap_player_info": "你与玩家 '{0}' 交换了金钱。",
"moneyswap_select_info": "选择你想与之交换金钱的玩家:",
- "muhammed": "穆罕默德",
- "muhammed_desc": "你死亡时会爆炸,杀死附近的玩家",
- "muhammed_explosion": "真主至大!!!",
+ "deathbomb": "死亡炸弹",
+ "deathbomb_desc": "你死亡时会爆炸,杀死附近的玩家",
+ "deathbomb_explosion": "砰!",
"ninja": "忍者",
"ninja_desc": "站立不动增加33%隐形,蹲下增加33%,持刀增加33%",
diff --git a/readme-pl.md b/readme-pl.md
index 134f86f..960d16d 100644
--- a/readme-pl.md
+++ b/readme-pl.md
@@ -13,7 +13,7 @@
> Te repozytorium jest to fork [projektu](https://github.com/jakubbartosik/dRandomSkills) stworzonego przez [Jakuba Bartosika (D3X)](https://github.com/jakubbartosik).
## 💡 Opis
-jRandomSkills to plugin do CounterStrike 2, który wprowadza chaos i frajdę do rozgrywki! W każdej rundzie losowo otrzymujesz jedną z unikalnych supermocy – od niewidzialności, przez wybuchowe strzały, po manipulację kamerą. Zaskocz przeciwników, przejmij kontrolę nad meczem i odkryj dziesiątki kreatywnych umiejętności, które zmieniają dynamikę gry!
+jRandomSkills to plugin do CounterStrike 2, który wprowadza chaos i frajdę do rozgrywki! W każdej rundzie losowo otrzymujesz jedną z unikalnych supermocy - od niewidzialności, przez wybuchowe strzały, po manipulację kamerą. Zaskocz przeciwników, przejmij kontrolę nad meczem i odkryj dziesiątki kreatywnych umiejętności, które zmieniają dynamikę gry!
#### Wybierz język:
@@ -29,6 +29,8 @@ jRandomSkills to plugin do CounterStrike 2, który wprowadza chaos i frajdę do
- **Francuski** [by: [@felyjyn](https://github.com/felyjyn)]
- **Portugalski (Brazylijski)** [by: [@vinicius-trev](https://github.com/vinicius-trev)]
- **Niemiecki** [by: [@Enrory](https://github.com/Enrory)]
+- **Turecki** [by: [@brkvlr](https://github.com/brkvlr), [@ByDexterTR](https://github.com/ByDexterTR)]
+- **Rosyjski** [by: [@213sdfsdgf](https://github.com/213sdfsdgf)]
- **Chiński uproszczony** [GrokAI / ChatGPT]
## 🖼️ Prezentacja Pluginu
@@ -40,18 +42,19 @@ Dołącz do serwera testowego 3v3 i wypróbuj plugin jRandomSkills:
- **Adres**: `jRandomSkills@pukawka.pl`
- **Hasło**: `public`
- **Godziny otwarcia**: `00:00-19:00`
-- **Połącz URL**: `steam://connect/51.38.122.215:27235/public`
-- **Połącz**: `connect 51.38.122.215:27235; password public`
+- **Połącz URL**: `steam://connect/51.38.122.215:27215/public`
+- **Połącz**: `connect 51.38.122.215:27215; password public`
Kupujesz serwer na pukawce? Skorzystaj z mojego [kodu polecającego](https://pukawka.pl/pp,juzlus.html).
-## ✨ Aktualne Supermoce (112)
+## ✨ Aktualne Supermoce (124)
Poniższa tabela przedstawia wszystkie dostępne supermoce w grze, wraz z ich opisami.
| Nazwa | Opis | Czas odnowienia / Zakres |
| - | - | -|
| Aimbot | Każdy twój trafiony pocisk liczy się jako strzał w głowę | - |
+| Aim Lock | Kliknij [css_useSkill], aby wycelować na najbliższego wroga | 20 s |
| Anomalia | Cofasz się o 5 sekund do tyłu | 15 s |
| Anty Flash | Posiadasz odporność na flash'e, a twoje flash'e trwają 7 sekund | - |
| Żelazna Głowa | Nie otrzymujesz obrażeń w głowę | - |
@@ -74,6 +77,7 @@ Kupujesz serwer na pukawce? Skorzystaj z mojego [kodu polecającego](https://puk
| Mrok | Nadaje efekt ciemności wybranemu przeciwnikowi | - |
| Deaktywator | Wybierasz gracza, którego supermoc chcesz wyłączyć | - |
| Głuchy | Wybierasz gracza, dla którego chcesz wyłączyć wszystkie dźwięki | - |
+| Ludzka bomba | Po śmierci eksplodujesz i zabijasz graczy znajdujących się w zasięgu | - |
| Rozbrojenie | Masz losową szanse na wyrzucenie broni wroga po trafieniu | (20 - 35)% |
| Odległościomierz | Możesz zobaczyć odległość do najbliższego przeciwnika | - |
| Doskok | Wykonaj drugi skok, aby wykonać doskok | - |
@@ -99,7 +103,11 @@ Kupujesz serwer na pukawce? Skorzystaj z mojego [kodu polecającego](https://puk
| Leczący Dym | Twoje granaty dymne leczą | - |
| Pustelnik | Zabijanie przywraca amunicję i część zdrowia | - |
| Święty Granat Ręczny | Twoje granaty uderzeniowe zadają podwójne obrażenia i mają podwójny zasięg | - |
+| Naprowadzane Granaty | Twoje granaty (z wyjątkiem dymnych) są przyciągane do wrogów | - |
+| Gorąca Bomba | Dopóki żyjesz, bomba zadaje obrażenia osobie, która ją niesie | - |
| Hologram | Kliknij [css_useSkill], aby sterować hologramem przez kilka sekund | - |
+| Analfabeta | Dopóki żyjesz, Twoi wrogowie nie potrafią czytać | - |
+| Iluzjonista | Naciśnij [css_useSkill], aby wypuścić replikę idącą prosto przed siebie | 30 s |
| Szpieg | Na początku rundy otrzymujesz model postaci przeciwnika | - |
| Nieskończone Ammo | Otrzymujesz nieskończoną ilość amunicji do wszystkich broni | - |
| Stópkarz | Wybierasz gracza, który pozostawi za sobą ślad | - |
@@ -111,10 +119,12 @@ Kupujesz serwer na pukawce? Skorzystaj z mojego [kodu polecającego](https://puk
| Zamiana Żyć | Wybierasz gracza, z którym chcesz wymienić się zdrowiem | - |
| Długi Nóż | Podstawowy atak nożem zadaje obrażenia niezależnie od odległości | - |
| Długi Zeus | Zeus zadaje obrażenia niezależnie od odległości | - |
+| Magnetyczny Wabik | Twój wabik przyciąga pobliskich graczy do siebie | - |
+| Magneto | Wszystkie granaty wroga są odpychane od Ciebie | - |
| Lupa | Przybiżasz ekran wybranemu przeciwnikowi | - |
| Medyk | Kliknij [css_useSkill], aby użyć ładunku leczniczego, który przywraca 50 punktów zdrowia | 1 s |
+| Bomberman | Twoje granaty HE wybuchają tylko wtedy, gdy w pobliżu jest wróg | - |
| Skarbówka | Wybierasz gracza, z którym chcesz zamienić się pieniędzmi | - |
-| Muhammed | Po śmierci eksplodujesz i zabijasz graczy znajdujących się w zasięgu | - |
| Ninja | Stojąc nieruchomo zwiększasz swoją niewidzialność o 33%, kucając o 33%, a trzymając nóż o 33% | - |
| Pancernik | Granaty nie zadają Ci obrażeń | - |
| Skupienie | Brak odrzutu podczas strzelania | - |
@@ -149,7 +159,8 @@ Kupujesz serwer na pukawce? Skorzystaj z mojego [kodu polecającego](https://puk
| Cień | Teleportujesz się za plecy trafionego wroga | - |
| Krótka Bomba | Bomba wybucha znacznie szybciej | - |
| Cichociemny | Twoje kroki i skoki są niesłyszalne dla INNYCH graczy | - |
-| SzeliS | Kliknij [css_useSkill], aby zamienić aktualną broń na AWP | 0 s |
+| Zadymiarz | Twoje granaty dymne nigdy się nie kończą | - |
+| Papito | Kliknij [css_useSkill], aby zamienić aktualną broń na AWP | 0 s |
| Żołnierz | Masz losowy mnożnik obrażeń | (1.15 - 1.35)x |
| Dźwiękowiec | Kliknij [css_useSkill], aby wywołać dźwięk u każdego przeciwnika | 5 s |
| Obserwator | Kliknij [css_useSkill], aby obserwować losowego przeciwnika | 0 s |
@@ -159,9 +170,12 @@ Kupujesz serwer na pukawce? Skorzystaj z mojego [kodu polecającego](https://puk
| Złodziej | Możesz ukraść supermoc wybranemu graczowi | - |
| Trzecie Oko | Kliknij [css_useSkill], aby aktywować trzecią osobę | 0 s |
| Ciernie | Twój przeciwnik otrzymuje część obrażeń, które zadał ci | - |
+| TNóż do Rzucania | Naciśnij [css_useSkill], aby rzucić nożem. Ale uważaj na innych | - |
| Toksyczny Dym | Twoje granaty dymne zadają obrażenia | - |
| Wallhack | Widzisz wrogów przez ściany | - |
| Zegarmistrz | Każdy rzut granatem zmienia czas rundy o -10 lub +10 sekund | - |
+| Nieważkość | Twoje granaty nie podlegają grawitacji i lecą szybciej | - |
+| Dzikie Rzuty | Wybierz gracza, który będzie miał trudności z rzucaniem granatami | - |
| Zeus | Zeus x27 natychmiastowo się odnawia | - |
@@ -181,14 +195,13 @@ Kupujesz serwer na pukawce? Skorzystaj z mojego [kodu polecającego](https://puk
3. Zainstaluj **CounterStrikeSharp**
- Pobierz [CounterStrikeSharp-With-Runtime](https://github.com/roflmuffin/CounterStrikeSharp/releases)
- Wypakuj go do folderu `C2Server/game/csgo/`
-4. Zainstaluj **CS2TraceRay**
- - Pobierz [CS2TraceRay](https://github.com/schwarper/CS2TraceRay/releases)
- - Wypakuj go do folderu `CS2Server/game/csgo/addons/counterstrikesharp/`
+4. Zainstaluj **Ray-Trace**
+ - Pobierz [RayTrace-CSS-API](https://github.com/FUNPLAY-pro-CS2/Ray-Trace/releases)
+ - Wypakuj folder `conterstrikesharp` do folderu `CS2Server/game/csgo/addons/`.
+ - Pobierz [RayTrace-MM](https://github.com/FUNPLAY-pro-CS2/Ray-Trace/releases)
+ - Wypakuj go do folderu `CS2Server/game/csgo/addons/`.
5. Zainstaluj **jRandomSkills**
- Pobierz [jRandomSkills](https://github.com/Juzlus/jRandomSkills/releases)
- - Wypakuj go do folderu `C2Server/game/csgo/addons/counterstrikesharp/`
- - JEŚLI do pobrania jest plik `gamedata.json`:
- - Wypakuj `gamedata.json` do folderu `C2Server/server/game/csgo/addons/counterstrikesharp/gamedata/`
## > Komendy Serwerowe
> [!TIP]
@@ -215,6 +228,10 @@ Kupujesz serwer na pukawce? Skorzystaj z mojego [kodu polecającego](https://puk
| `!setscore ` | `!setscore 10 7` | Ustawienie wyniku gry | `@jRandomSkills/owner` |
| `!setstaticskill ` | `!setstaticskill Juzlus Aimbot` | Przypisanie supermocy do gracza na stałe | `@jRandomSkills/admin` |
| `!setstaticskill None` | `!setstaticskill Juzlus None` | Powrót do normalności | `@jRandomSkills/admin` |
+| `!botplace [slot] [godmode]` | `!botplace 2 1` | Teleportuj bota do swojej lokalizacji | `@jRandomSkills/admin` |
+| `!next_skill [idx]` | `!next_skill Juzlus` | Przełącza umiejętność gracza (następna, poprzednia -1 lub konkretny idx) | `@jRandomSkills/admin` |
+| `!plantedbomb [time]` | `!plantedbomb 35` | Stwórz podłożoną bombę C4 w miejscu, w którym stoisz, z niestandardowym lub domyślnym (40 s) czasem detonacji | `@jRandomSkills/admin` |
+| `!sethealth ` | `!sethealth 150` | Ustala określoną ilość zdrowia dla samego siebie | `@jRandomSkills/admin` |
| `!reload` | `!reload` | Odśwież tłumaczenia | - |
_Większość poleceń wymaga uprawnień, które należy ustawić w pliku: `game/csgo/addons/counterstrikesharp/configs/admins.json`_
@@ -250,10 +267,12 @@ Wszystkie sypermoce można dostosować w pliku **`config.cfg`** / **`skillsInfo.
// 4 - Losowa supermoc dla każdego gracza (Pełna losowość)
// 5 - Debug: Supormoce są przydzielane po kolei
"YourSkillChatInfo": true, // Pokazuj swoją supermoc na czacie
- "KillerSkillInfo": true, // Pokazuj supermoc zabójcy na czacie
- "TeamMateSkillInfo": true, // Pokazuj supermoc sojuszników na czacie
+ "KillerSkillChatInfo": true, // Pokazuj supermoc zabójcy na czacie
+ "TeamMateSkillChatInfo": true, // Pokazuj supermoc sojuszników na czacie
"SummaryAfterTheRound": true, // Pokazuj podsumowanie z ostatniej rundy
- "DebugMode": true, // Zapisuj aktywność do folderu 'Debug'
+ "EnableBotSkills": true, // Włącz umiejętności dla botów
+ "EnableBotKickDebug": false, // Co 45 sekund wyrzuć losowego bota (do celów debugowania/testowania)
+ "DebugMode": false, // Zapisuj aktywność do folderu 'Debug'
"AlternativeSkillButton": null, // Możliwe przyciski:
// null, "Attack", "Jump", "Duck", "Forward", "Back",
// "Use", "Cancel", "Left", "Right", "Moveleft",
@@ -263,12 +282,12 @@ Wszystkie sypermoce można dostosować w pliku **`config.cfg`** / **`skillsInfo.
// "Attack3", "Scoreboard", "Inspect"
"SkillTimeBeforeStart": 7.0, // Ile sekund przed końcem freeze time należy zakończyć
// losowanie umiejętności? (freezetime - SkillTimeBeforeStart)
- "SkillHudDuration": 999.0, // Jak długo HUD HTML powinien być widoczny?
- "SkillDescriptionDuration": 999, // Jak długo opis umiejętności powinien być widoczny?
+ "SkillHudDuration": -1.0, // Jak długo HUD HTML powinien być widoczny?
+ "SkillDescriptionDuration": 7.0, // Jak długo opis umiejętności powinien być widoczny?
"DisplayAlwaysDescription":false,// Zawsze wyświetlaj opis umiejętności
"DisableSpectateHUD": false, // Wyłącz HUD HTML bedąc martwym
- "FlashingHtmlHudFix": true, // Włącz FlashingHtmlHudFix
- "CS2TraceRayDebug": false, // Włącz widoczność ścieżki dla 'Długi Nóż', 'Długi Zeus'
+ "EnableFlashingHtmlHudFix": false,// Włącz FlashingHtmlHudFix
+ "TraceRayBeam": false, // Włącz widoczność ścieżki dla 'Długi Nóż', 'Długi Zeus'
"DisableHUDOnDeathPermission": "@jRandomSkills/death", // Wyłącz HUD po śmierci dla graczy z tym uprawnieniem
"DisableSkillsOnRoundEnd": false,// Wyłącz wszystkie umiejętności na koniec rundy (gdy widoczne jest podsumowanie)
@@ -298,7 +317,12 @@ Wszystkie sypermoce można dostosować w pliku **`config.cfg`** / **`skillsInfo.
"Color": "#ff0000", // Kolor supermocy
"Active": true, // Włączona przy uruchamianiu
"Name": "Aimbot", // Nazwa supermocy
- "RequiredPermission": "" // Wymagane uprawnienie
+ "RequiredPermission": "", // Wymagane uprawnienie
+ "MaxPerServer": -1, // Maksymalna liczba graczy, którzy mogą posiadać tę
+ // umiejętność na serwerze (-1 dla "nieograniczona")
+ "Rarity": "Common" // Poziom rzadkości umiejętności:
+ // Common (70x), Uncommon (14x),
+ // Rare (10x), Epic (5x), Legendary (1x)
},
...
]
@@ -314,20 +338,265 @@ Wszystkie sypermoce można dostosować w pliku **`config.cfg`** / **`skillsInfo.
## 🔗 Uznanie
Plugin korzysta z zawartości następujących projektów:
-- [dRandomSkills](https://github.com/jakubbartosik/dRandomSkills) by [Jakub Bartosik (D3X)](https://github.com/jakubbartosik) - system losowych umiejętności
-- [CS2TraceRay](https://github.com/schwarper/CS2TraceRay) autorstwa [schwarper](https://github.com/schwarper) - system śledzenia promieni (Trace Ray)
-- [CS2FlashingHtmlHudFix](https://github.com/girlglock/CS2FlashingHtmlHudFix) autorstwa [girlglock](https://github.com/girlglock) - poprawka migotania okienka z supermocą
-- [ChaseMod](https://github.com/ipsvn/ChaseMod/blob/master/Utils/Memory/CCSMatch.cs) autorstwa [ipsvn](https://github.com/ipsvn) - ustawianie wyniku rund
-- [WASDMenuAPI](https://github.com/Interesting-exe/WASDMenuAPI) by [Interesting-exe](https://github.com/Interesting-exe) - API do łatwego tworzenia menu za pomocą klawiszy WASD
-- [GeoLocationLanguageManagerPlugin](https://github.com/aprox2/GeoLocationLanguageManagerPlugin) by [aprox2](https://github.com/aprox2) - zarządzenie geolokalizacją
-- [GeoLite2](https://dev.maxmind.com/geoip/geolite2-free-geolocation-data) by [MaxMind](https://www.maxmind.com/) - dane geolokalizacyjne
+- [dRandomSkills](https://github.com/jakubbartosik/dRandomSkills) autorstwa [Jakub Bartosik (D3X)](https://github.com/jakubbartosik) - System losowych umiejętności
+- [CS2TraceRay](https://github.com/schwarper/CS2TraceRay) autorstwa [schwarper](https://github.com/schwarper) - Stary system śledzenia promieni (Trace Ray)
+- [Ray-Trace](https://github.com/FUNPLAY-pro-CS2/Ray-Trace) autorstwa [SlynxCZ](https://github.com/SlynxCZ) - Nowy system śledzenia promieni (Trace Ray)
+- [CS2FlashingHtmlHudFix](https://github.com/girlglock/CS2FlashingHtmlHudFix) autorstwa [girlglock](https://github.com/girlglock) - Poprawka migotania okienka z supermocą
+- [ChaseMod](https://github.com/ipsvn/ChaseMod/blob/master/Utils/Memory/CCSMatch.cs) autorstwa [ipsvn](https://github.com/ipsvn) - Ustawianie wyniku rund
+- [WASDMenuAPI](https://github.com/Interesting-exe/WASDMenuAPI) autorstwa [Interesting-exe](https://github.com/Interesting-exe) - API do łatwego tworzenia menu za pomocą klawiszy WASD
+- [GeoLocationLanguageManagerPlugin](https://github.com/aprox2/GeoLocationLanguageManagerPlugin) autorstwa [aprox2](https://github.com/aprox2) - Zarządzenie geolokalizacją
+- [GeoLite2](https://dev.maxmind.com/geoip/geolite2-free-geolocation-data) autorstwa [MaxMind](https://www.maxmind.com/) - Dane geolokalizacyjne
+- [CServerSideClient](https://discord.com/channels/1160907911501991946/1508172390863994910/1508180670659166348) autorstwa [SLAYER](https://github.com/zakriamansoor47)
+
+## ❤️ Szczególne podziękowania
+
+
+
+
+
Jeśli jesteś współtwórcą i chcesz, aby Twój profil został usunięty z tej listy, skontaktuj się ze mną.
+
+
+ㅤ
+
+
+
+  Ryuu Jin |  cj☭ |  k4chen |  luno |
+
+
+
Jeśli jesteś na tej liście i chcesz usunąć swój profil, skontaktuj się ze mną.
+
+
## 📋 Lista Zmian
+
+v1.2.2.b2
+
+- #### Ogólne:
+ - ###### Zaktualizowano zależność CSS do wersji 1.0.369.
+ - ###### Przeniesiono projekt z .NET 8.0 na .NET 10.0.
+ - ###### Zaktualizowano tłumaczenie na język turecki przez [@ByDexterTR](https://github.com/ByDexterTR)].
+ - ###### Dodano tłumaczenie na język rosyjski autorstwa [@213sdfsdgf](https://github.com/213sdfsdgf)].
+ - ###### Naprawiono problem z błędnym wyświetlaniem arabskich pseudonimów.
+ - ###### Wykorzystano ForceFullUpdate, aby naprawić crash "FATAL ERROR: CopyExistingEntity".
+ - ###### Wyłączono nieaktualny hook HandleCommandDrop, aby uniknąć crashy, gdy gracz dołącza do drużyny (podziękowania dla [@vladimir214sd](https://github.com/vladimir214sd)).
+ - ###### Dodano nowe sygnatury do gamedata.
+ - ###### Dodano możliwość ustawienia ilości granatów dla każdej mocy, która korzysta z granatów jako części swojej umiejętności (np. Bomberman, Anty Flash, Magnetyczny Wabik itp.).
+
+- #### Poprawki mocy:
+ - ###### Re-Zombie:
+ - ###### Naprawiono błędy z przełączaniem broni, gdy gracz trzyma Zeusa i nóż.
+ - ###### Bronie są teraz usuwane dla botów w trybie zombie.
+ - ###### Naprawiono błąd, przez który gracze czasami nie odradzali się, jeśli otrzymali zbyt duże obrażenia w zbyt krótkim czasie.
+ - ###### Duszek:
+ - ###### Zablokowano możliwość korzystania z Zeusa.
+ - ###### Zablokowano możliwość korzystania z SG556 (`weapon_sg556`).
+ - ###### Ciernie:
+ - ###### Dodano konfigurowalny maksymalny limit zdrowia (37 HP) dla obrażeń, które mogą zostać odbite.
+ - ###### Druga Szansa:
+ - ###### Naprawiono błąd, przez który gracze czasami nie odradzali się, jeśli otrzymali zbyt duże obrażenia w zbyt krótkim czasie.
+ - ###### Feniks:
+ - ###### Naprawiono błąd, przez który gracze czasami nie odradzali się, jeśli otrzymali zbyt duże obrażenia w zbyt krótkim czasie.
+ - ###### Kurczak:
+ - ###### Zablokowano możliwość korzystania z SG556 (`weapon_sg556`).
+ - ###### Wallhack:
+ - ###### Naprawiono błąd, który powodował tymczasowe podświetlanie wrogów natychmiast po śmierci.
+ - ###### Kamera:
+ - ###### Dodano zapamiętywanie pozycji kamery.
+ - ###### Nieśmiertelność:
+ - ###### Naprawiono błąd z permanentną nieśmiertelnością aktywującą się po osiągnięciu dokładnie 0 HP.
+ - ###### Zamiana Broni:
+ - ###### Ilość amunicji jest teraz również przenoszona podczas zamiany broni.
+ - ###### Ludzka bomba:
+ - ###### Zmieniono nazwę umiejętności na "DeathBomb".
+ - ###### Obserwator:
+ - ###### Naprawiono błąd, przez który gracz z umiejętnością Kurczak po śmierci nadal wyświetlał się jako ragdoll podczas bycia obserwowanym.
+ - ###### Ogień Przyjacielski:
+ - ###### Umiejętność działa teraz nawet wtedy, gdy serwerowa funkcja mp_friendlyfire jest ustawiona na 0.
+ - ###### Bejsbolista:
+ - ###### Wyłączono zabijanie członków drużyny.
+
+
+
+
+v1.2.2.b1
+
+- #### Ogólne:
+ - ###### Zaktualizowano zależności projektu.
+ - ###### Zaimplementowano `EntityManager` w celu automatycznego czyszczenia encji i zarządzania pamięcią.
+ - ###### Dodano konfigurację umożliwiającą włączenie lub wyłączenie umiejętności dla botów.
+ - ###### Poprawki stabilności i wydajności.
+
+- #### Poprawki mocy:
+ - ###### Umiejętności oparte na niewidzialności: Są teraz widoczne dla członków drużyny oraz obserwatorów.
+ - ###### Fortnite:
+ - ###### Naprawiono problem z niezniszczalnymi barykadami po śmierci gracza.
+ - ###### Wallhack:
+ - ###### Ulepszono logikę wykrywania niewidzialnych graczy.
+ - ###### Dźwiękowiec / Stópkarz / Obserwator:
+ - ###### Zaktualizowano kod, aby poprawnie współpracował z niewidzialnymi graczami.
+ - ###### I więcej...
+
+
+
+
+v1.2.1.b9
+
+- #### Ogólne:
+ - ###### Dodano Crash Handler w celu poprawy stabilności serwera (Podziękowania dla cj za pomoc).
+ - ###### Dodano rzadkość umiejętności (Skill Rarity - wprowadzono poziomy rzadkości dla mocy).
+ - ###### Dodano limit 'MaxPerServer' (ogranicza liczbę osób, które mogą korzystać z tej samej umiejętności jednocześnie).
+ - ###### Zastąpiono model "ghost_speaker.vmd" modelem "spray_plane.vmdl".
+
+- #### Poprawki mocy:
+ - ###### Skupienie:
+ - ###### Naprawiono i ulepszono kontrolę odrzutu (recoil control).
+ - ###### Re-Zombie / Feniks:
+ - ###### Zablokowano możliwość nadużywania (exploitu) odradzania się podczas zmiany drużyny.
+
+
+
+
+v1.2.1.b8
+
+- #### Ogólne:
+ - ###### Zastąpiono [CS2TraceRay](https://github.com/schwarper/CS2TraceRay) biblioteką [RayTraceApi](https://github.com/FUNPLAY-pro-CS2/Ray-Trace).
+ - ###### Zaktualizowano CounterStrikeSharp do najnowszej wersji.
+ - ###### Nowa komenda do testowania umiejętności: `css_next_skill <(null)/-1/index>`.
+ - ###### Zaktualizowano sygnatury gamedata.
+ - ###### Zastąpiono bezpośrednie referencje do obiektów indeksami encji (entity indices) w celu poprawy bezpieczeństwa pamięci.
+ - ###### Naprawiono ścieżki modeli agentów.
+ - ###### Umiejętności są teraz automatycznie wyłączane, gdy gracz opuszcza serwer.
+ - ###### Dodano sprawdzenia wartości null (null-pointer checks) dla poprawy stabilności.
+
+- #### Poprawki mocy:
+ - ###### Aim Lock:
+ - ###### Ulepszono celowanie w głowę przeciwnika.
+ - ###### Anomalia / Skrytobójca / Kamera / Odpychacz / Zamiana Miejsc / Teleporter:
+ - ###### Ulepszono pozycjonowanie kamery podczas teleportacji.
+ - ###### Ostrożne pociski / Strzał Wybuchowy / Krucha Bomba:
+ - ###### Zaprojektowano na nowo logikę z powodu zmian w zdarzeniu `OnTakeDamage`.
+ - ###### Ogień Przyjacielski:
+ - ###### Naprawiono działanie umiejętności, gdy ogień przyjacielski jest wyłączony na serwerze (tryb Uproszczony/Casual).
+ - ###### Hologram:
+ - ###### Zablokowano możliwość wyrzucania i podnoszenia broni podczas bycia w formie hologramu.
+ - ###### Analfabeta:
+ - ###### Naprawiono błąd z poprawnym wyświetlaniem tekstu.
+ - ###### Stópkarz:
+ - ###### Naprawiono problemy związane z licznikami czasu (timerami).
+ - ###### Ninja:
+ - ###### Naprawiono błąd, przez który początkowy stan niewidzialności nigdy się nie aktualizował.
+ - ###### Skupienie / Szybkostrzelność:
+ - ###### Zaktualizowano kod, aby pasował do nowej struktury `AimPunchServices`.
+ - ###### NoClip / Cień / Iana:
+ - ###### Przeniesiono logikę na `TraceHullShape` w celu dokładniejszego wykrywania kolizji.
+ - ###### Re-Zombie:
+ - ###### Zablokowano możliwość używania broni w trybie zombie oraz zwiększono zdrowie do 500 HP.
+
+- #### Znane problemy:
+ - ###### Długi Nóż:
+ - ###### Wykrywanie prawego przycisku myszy jest obecnie zepsute na systemach Linux (pomimo poprawnych sygnatur).
+ - ###### Iluzjonista:
+ - ###### Błąd z T-Pose: Po dodaniu animgraph_2, modele postaci nie mają wbudowanych żadnych animacji. Na ten moment nie ma możliwości naprawienia tego bez dodawania własnych animacji z Warsztatu Steam.
+
+
+
+
+v1.2.1.b7
+
+- #### Ogólne:
+ - ###### Podniesiono wersję modułu do **1.2.1.b7**.
+ - ###### Zaimplementowano **HTMLEncoder** w celu zwiększenia bezpieczeństwa wiadomości i ich ochrony.
+ - ###### Zaktualizowano funkcję `SkillAction`, aby zwracała wynik wywołanej metody (`object?`) lub `null`, jeśli nie została znaleziona.
+ - ###### Przebudowano system dystrybucji zdarzeń graczy, aby wywoływał `SkillAction` **tylko raz na każdą unikalną aktywną umiejętność**, co zmniejsza liczbę nadmiarowych wywołań.
+ - ###### Przełączono logikę pomiaru czasu na używanie `Server.CurrentTime` zamiast `EngineTime`.
+ - ###### Dodano informacje w konsoli podczas uruchamiania oraz automatyczne **sprawdzanie wersji** przy ładowaniu wtyczki.
+ - ###### Zaimplementowano **automatyczne kopiowanie** plików gamedata, bibliotek DLL oraz plików językowych podczas procesu budowania (autor: @vinicius-trev).
+ - ###### Zaktualizowano główne zależności: `CounterStrikeSharp.API` do wersji **1.0.364** oraz `MaxMind.Db` do wersji **5.0.0** (autor: @vinicius-trev).
+ - ###### Dodano **obsługę geolokalizacji** dla Turcji (`tr`) i Czech (`cz`).
+ - ###### Dodano obsługę **języka tureckiego (`tr`)** (autor: @brkvlr) oraz ulepszono tłumaczenia dla **języka portugalskiego brazylijskiego (`pt-br`)** (autor: @vinicius-trev).
+ - ###### W przypadku braku tłumaczenia system **używa teraz tekstu angielskiego** zamiast wyświetlania surowego klucza tłumaczenia.
+ - ###### **SkillUtils:** Naprawiono błędy wyboru punktów odrodzenia, problemy z referencjami pamięci oraz dodano obsługę parametru `maxHealth` dla funkcji `AddHealth`.
+ - ###### Naprawiono błąd, przez który **klawisz E** (interakcja/rozbrajanie) był przerywany przez użycie umiejętności; gracze mogą teraz rozbrajać bombę i wchodzić w interakcję z obiektami bez zakłóceń.
+ - ###### Licznik czasu systemu głosowania resetuje się teraz poprawnie po każdym głosowaniu.
+
+- #### Poprawki mocy:
+ - ##### Pilot (Rework):
+ - ###### Całkowicie przepisano logikę skoku. Lot wymaga teraz **podwójnego kliknięcia** klawisza skoku, aby go aktywować.
+ - ##### Błazen (Rework):
+ - ###### Zrefaktoryzowano system na działający indywidualnie dla każdego gracza (**per-player system**) wraz z poprawą stabilności licznika czasu. Licznik czasu Błazna **resetuje się** teraz, gdy gracz próbuje podłożyć lub rozbroić bombę.
+ - ##### NoClip (Rework):
+ - ###### Całkowita Rework logiki ruchu; ulepszono wykrywanie kolizji, aby **zapobiec utykaniu** w obiektach oraz zapewniono płynniejszy lot.
+ - ##### Duszek / C4 Kamuflaż / Ninja:
+ - ###### **Obserwatorzy widzą teraz niewidzialnych graczy.**
+ - ###### Ulepszono funkcję ukrywania bomby i naprawiono problem ze spamowaniem konsoli.
+ - ##### Odwrót / Resp Wroga:
+ - ###### Naprawiono błąd związany z niepoprawną interpretacją punktu odrodzenia.
+ - ##### Teleporter:
+ - ###### Mechanika została zmieniona na **procentową szansę** na zamianę miejsc z wrogiem, zamiast gwarantowanych 100%.
+ - ##### Hazardzista:
+ - ###### Naprawiono błąd, który pozwalał na odświeżenie umiejętności bez posiadania wymaganych pieniędzy.
+ - ##### Cień:
+ - ###### Naprawiono problemy związane z logiką teleportacji.
+ - ##### Ludzka bomba:
+ - ###### Zablokowano możliwość korzystania z umiejętności podczas zmiany drużyny, aby zapobiec nadużyciom (exploitom).
+ - ##### Bejsbolista:
+ - ###### Granaty wabiące (decoy) mają teraz taką samą kolizję jak gracze (**PlayerClip**).
+ - ##### Papito:
+ - ###### Główna refaktoryzacja oraz **naprawa crashy serwera** związanych z wymianą broni.
+ - ##### Replikator:
+ - ###### Dodano **animacje kucania** dla replik, aby dopasować je do ruchu gracza.
+ - ##### Mistrz Ostrza / Scyzoryk / Rozbrojenie / Długi Nóż / Długi Zeus / Zabójczy Flash:
+ - ###### Ulepszono obsługę broni typu **Bagnet** (Bayonet).
+ - ###### Dodano opcje konfiguracyjne **friendlyFire** dla `LongKnife`, `LongZeus` oraz `KillerFlash`.
+ - ##### Samowolka / Krótka Bomba / Wyluzowany:
+ - ###### Powiadomienia docierają teraz do wszystkich prawidłowych graczy, niezależnie od tego, czy żyją; dodano obsługę `BombAbortPlant`.
+ - ##### Niszczyciel Stref:
+ - ###### Dodano komunikat podczas przebywania na wyłączonym bombsite.
+ - ##### Wallhack:
+ - ###### Podświetlenie (glow) jest teraz poprawnie wyłączane dla martwych graczy.
+ - ##### Dźwiękowiec (Rework):
+ - ###### Przerobiono umiejętność tak, aby automatycznie odtwarzała dźwięk co 2 sekundy (słyszalny tylko dla gracza z tą umiejętnością).
+
+- #### Nowe moce:
+ - ##### Aim Lock:
+ - ###### Ustawia celownik na najbliższym przeciwniku przez ograniczony czas.
+ - ##### Naprowadzane Granaty:
+ - ###### Twoje granaty (z wyjątkiem dymnych) are przyciągane do pobliskich wrogów.
+ - ##### Magneto:
+ - ###### Odpycha nadlatujące granaty wroga od gracza.
+ - ##### Bomberman:
+ - ###### Rozmieszcza granaty odłamkowe (HE), które wybuchają tylko wtedy, gdy wróg znajdzie się w ich zasięgu.
+ - ##### Analfabeta:
+ - ###### Dopóki użytkownik żyje, wrogowie nie mogą czytać czatu ani informacji na HUD-zie.
+ - ##### Gorąca Bomba:
+ - ###### C4 zadaje stałe obrażenia osobie niosącej bombę tak długo, jak żyje właściciel umiejętności.
+ - ##### Iluzjonista:
+ - ###### Tworzy replikę, która idzie prosto przed siebie, aby odwrócić uwagę wrogów.
+ - ##### Magnetyczny Wabik:
+ - ###### Granaty wabiące (decoy) przyciągają pobliskich graczy do swojego środka.
+ - ##### TNóż do Rzucania:
+ - ###### Dodaje możliwość rzucania we wrogów zabójczym nożem.
+ - ##### Nieważkość:
+ - ###### Granaty lecą szybciej i nie działa już na nie grawitacja.
+ - ##### Dzikie Rzuty:
+ - ###### Sprawia, że wybrany gracz "zapomina swoich lineupów", co skutkuje losowymi trajektoriami rzutów granatów.
+ - ##### Zadymiarz:
+ - ###### Twoje granaty dymne nigdy się nie kończą.
+
+- #### Nowe komendy:
+ - ###### `css_bot_place ` - Teleportuje bota na pozycję gracza z opcjonalnym trybem godmode.
+ - ###### `!sethealth ` - Komenda dla administratora do zarządzania zdrowiem i testowania.
+ - ###### `!plantedbomb ` - Komenda do testowania stanów i logiki związanej z podłożoną bombą.
+
+
v1.2.0
-- #### General:
+- #### Ogólne:
- ###### Zmieniono nazwę pluginu z `!jRandomSkills` na `jRandomSkills`.
- ###### Poprawiono literówkę w uprawnieniach z `@jRandmosSkills` na `@jRandomSkills`.
- ###### Domyślnie wyłączono `DebugMode` w konfiguracji (przez: [@vinicius-trev](https://github.com/vinicius-trev)).
@@ -535,7 +804,7 @@ Plugin korzysta z zawartości następujących projektów:
v1.1.9a
-- #### General:
+- #### Ogólne:
- ###### Zaktualizowano zależności do najnowszej wersji.
- ###### Aktualizacja sygnatur (jRandomSkills.gamedata.json).
- ###### FlashingHtmlHudFix jest teraz wyłączony podczas rozgrzewki.
@@ -616,7 +885,7 @@ Plugin korzysta z zawartości następujących projektów:
- ###### Dodano konfigurowalny czas blokady na początku rundy.
- ##### Rozbrojenie:
- ###### Powrót do upuszczania broni zamiast zmiany na slot3.
- - ###### Zmniejszono szansę na upuszczenie broni: (20–50)% → (20–35)%.
+ - ###### Zmniejszono szansę na upuszczenie broni: (20-50)% → (20-35)%.
- ##### Kurczak:
- ###### Zmieniła się metoda poruszania się kurczaka.
- ###### Gracz widzi model swojego kurczaka.
diff --git a/readme.md b/readme.md
index fec917e..5941e29 100644
--- a/readme.md
+++ b/readme.md
@@ -13,7 +13,7 @@
> This repository is a fork of the [project](https://github.com/jakubbartosik/dRandomSkills) created by [Jakub Bartosik (D3X)](https://github.com/jakubbartosik).
## 💡 About
-jRandomSkills is a plugin for CounterStrike 2 that brings chaos and fun to gameplay! In each round, you randomly receive one of the unique skills – from invisibility and explosive shots to camera manipulation. Surprise your opponents, take control of the match, and discover dozens of creative abilities that transform the game's dynamics!
+jRandomSkills is a plugin for CounterStrike 2 that brings chaos and fun to gameplay! In each round, you randomly receive one of the unique skills - from invisibility and explosive shots to camera manipulation. Surprise your opponents, take control of the match, and discover dozens of creative abilities that transform the game's dynamics!
#### Choose language:
@@ -29,6 +29,8 @@ jRandomSkills is a plugin for CounterStrike 2 that brings chaos and fun to gamep
- **French** [by: [@felyjyn](https://github.com/felyjyn)]
- **Portuguese (Brazilian)** [by: [@vinicius-trev](https://github.com/vinicius-trev)]
- **German** [by: [@Enrory](https://github.com/Enrory)]
+- **Turkish** [by: [@brkvlr](https://github.com/brkvlr), [@ByDexterTR](https://github.com/ByDexterTR)]
+- **Russian** [by: [@213sdfsdgf](https://github.com/213sdfsdgf)]
- **Simplified Chinese** [GrokAI / ChatGPT]
## 🖼️ Preview
@@ -40,19 +42,20 @@ Join the 3v3 test server and try out the jRandomSkills plugin:
- **Address**: `jRandomSkills@pukawka.pl`
- **Password**: `public`
- **Opening Hours**: `22:00-17:00 UTC`
-- **Connect URL**: `steam://connect/51.38.122.215:27235/public`
-- **Connect**: `connect 51.38.122.215:27235; password public`
+- **Connect URL**: `steam://connect/51.38.122.215:27215/public`
+- **Connect**: `connect 51.38.122.215:27215; password public`
Buying a server on pukawka? Use my [referral code](https://pukawka.pl/pp,juzlus.html).
-## ✨ Current Skills (112)
+## ✨ Current Skills (124)
The table below lists all available skills in the game, along with their descriptions.
| Name | Description | Cooldown / Range |
| - | - | - |
| Aimbot | Every bullet you hit counts as a headshot | - |
+| Aim Lock | Click [css_useSkill] to lock your aim on the nearest enemy | 20 s |
| Anomaly | You rewind a few seconds back in time | 15 s |
| Anti-Flash | You are immune to flashbangs, and your flashbangs last 7 seconds | - |
| Iron Head | You take no damage from headshots | - |
@@ -75,6 +78,7 @@ Buying a server on pukawka? Use my [referral code](https://pukawka.pl/pp,juzlus.
| Darkness | Applies a darkness effect to a chosen enemy | - |
| Deactivator | Choose a player whose skill you want to disable | - |
| Deaf | Choose a player to mute all sounds for | - |
+| Death Bomb | You explode upon death, killing nearby players | - |
| Disarmament | You have a random chance to make an enemy drop their weapon on hit | (20 - 35)% |
| Rangefinder | You can see the distance to the nearest enemy | - |
| Dash | Perform a second jump to dash | - |
@@ -100,7 +104,11 @@ Buying a server on pukawka? Use my [referral code](https://pukawka.pl/pp,juzlus.
| Healing Smoke | Your smoke grenades heal | - |
| Hermit | Killing restores ammo and a portion of health | - |
| Holy Hand Grenade | Your HE grenades deal double damage and have double range| - |
+| Homing Grenades | Your grenades (except smokes) are attracted to enemies | - |
+| Hot Bomb | As long as you are alive, the bomb deals damage to its carrier | - |
| Hologram | Click [css_useSkill] to control your hologram for a few seconds | 30 s |
+| Illiterate | As long as you are alive, your enemies cannot read | - |
+| Illusionist | Click [css_useSkill] to deploy a replica that walks straight ahead | 30 s |
| Impostor | You start the round with an enemy player model | - |
| Infinite Ammo | You receive infinite ammo for all your weapons | - |
| Tracker | Choose a player who will leave a trail behind them | - |
@@ -112,10 +120,12 @@ Buying a server on pukawka? Use my [referral code](https://pukawka.pl/pp,juzlus.
| Life Swap | Choose a player to swap health with | - |
| Long Knife | A primary knife attack deals damage regardless of distance | - |
| Long Zeus | Zeus deals damage regardless of distance | - |
+| Magnetic Decoy | Your decoy attracts nearby players towards itself | - |
+| Magneto | All enemy grenades are repelled away from you | - |
| Magnifier | Forces the enemy's screen to zoom in, reducing their field of view | - |
| Medic | Click [css_useSkill] to use a healing charge that restores 50 health | 1 s |
+| Bomb Miner | Your HE grenade only explode when there is an enemy nearby | - |
| Taxman | Choose a player to swap money with | - |
-| Muhammed | You explode upon death, killing nearby players | - |
| Ninja | Standing still increases your invisibility by 33%, crouching by 33%, and holding a knife by 33% | - |
| No-Nades | Grenades deal no damage to you | - |
| Focus | No recoil while shooting | - |
@@ -150,6 +160,7 @@ Buying a server on pukawka? Use my [referral code](https://pukawka.pl/pp,juzlus.
| Shade | You teleport behind the back of a hit enemy | - |
| Short Fuse | The bomb explodes much faster | - |
| Silent | Your footsteps and jumps are silent to other players | - |
+| Smoker | Your smoke grenades never run out | - |
| Sniper Elite | Click [css_useSkill] to swap your current weapon for an AWP | 0 s |
| Soldier | You have a random damage multiplier | (1.15 - 1.35)x |
| Soundmaker | Click [css_useSkill] to trigger a sound for every enemy | 5 s |
@@ -159,10 +170,13 @@ Buying a server on pukawka? Use my [referral code](https://pukawka.pl/pp,juzlus.
| Thief | You can steal a skill from a chosen player | - |
| Third Eye | Click [css_useSkill] to activate third-person view | 0 s |
| Thorns | Your opponent will receive a portion of the damage that they inflicted on you | - |
+| Throwing Knife | Click [css_useSkill] to throw a knife. But watch out for others | - |
| Toxic Smoke | Your smoke grenades deal damage | - |
| Wallhack | You can see enemies through walls | - |
| Watchmaker | Every grenade throw alters the round time | - |
| Weapon Swap | Click [css_useSkill] to swap weapons with a random enemy | 30 s |
+| Weightlessness | Your grenades are not affected by gravity and fly faster | - |
+| Wild Throws | Choose a player who will have trouble throwing grenades | - |
| Zeus | Zeus x27 instantly recharges | - |
@@ -183,14 +197,13 @@ Buying a server on pukawka? Use my [referral code](https://pukawka.pl/pp,juzlus.
3. Install **CounterStrikeSharp**.
- Download [CounterStrikeSharp-With-Runtime](https://github.com/roflmuffin/CounterStrikeSharp/releases).
- Extract it to the `C2Server/game/csgo/` folder.
-4. Install **CS2TraceRay**
- - Download [CS2TraceRay](https://github.com/schwarper/CS2TraceRay/releases)
- - Extract it to the `CS2Server/game/csgo/addons/counterstrikesharp/` folder.
+4. Install **Ray-Trace**
+ - Download [RayTrace-CSS-API](https://github.com/FUNPLAY-pro-CS2/Ray-Trace/releases)
+ - Extract folder `conterstrikesharp` to the `CS2Server/game/csgo/addons/` folder.
+ - Download [RayTrace-MM](https://github.com/FUNPLAY-pro-CS2/Ray-Trace/releases)
+ - Extract it to the `CS2Server/game/csgo/addons/` folder.
5. Install **jRandomSkills**
- Download [jRandomSkills](https://github.com/Juzlus/jRandomSkills/releases)
- - Extract it to the `C2Server/game/csgo/addons/counterstrikesharp/` folder.
- - IF there is a `gamedata.json` file to download:
- - Extract `gamedata.json` to the `C2Server/server/game/csgo/addons/counterstrikesharp/gamedata/` folder.
## > Server Commands
> [!TIP]
@@ -217,6 +230,10 @@ Buying a server on pukawka? Use my [referral code](https://pukawka.pl/pp,juzlus.
| `!setscore ` | `!setscore 10 7` | Set the game score | `@jRandomSkills/owner` |
| `!setstaticskill ` | `!setstaticskill Juzlus Aimbot` | Giving a player a permanent skill | `@jRandomSkills/admin` |
| `!setstaticskill None` | `!setstaticskill Juzlus None` | Back to normal | `@jRandomSkills/admin` |
+| `!botplace [slot] [godmode]` | `!botplace 2 1` | Teleport a bot to your location | `@jRandomSkills/admin` |
+| `!next_skill [idx]` | `!next_skill Juzlus` | Switch skill for a player (next, previous -1, or specific idx) | `@jRandomSkills/admin` |
+| `!plantedbomb [time]` | `!plantedbomb 35` | Spawn a planted C4 bomb at your position with custom or default (40s) detonation time | `@jRandomSkills/admin` |
+| `!sethealth ` | `!sethealth 150` | Set a specific health amount for yourself | `@jRandomSkills/admin` |
| `!reload` | `!reload` | Reload translations | - |
_Most commands require permissions, which must be set in the file: `game/csgo/addons/counterstrikesharp/configs/admins.json`_
@@ -252,10 +269,12 @@ All skills can be customized in the **`config.cfg`** / **`skillsInfo.json`** fil
// 4 - Random skills for each player (Full random)
// 5 - Debug: Skills are assigned in turn
"YourSkillChatInfo": true, // Show your skill in chat
- "KillerSkillInfo": true, // Show killer's skill in chat
- "TeamMateSkillInfo": true, // Show allies' skills in chat
+ "KillerSkillChatInfo": true, // Show killer's skill in chat
+ "TeamMateSkillChatInfo": true, // Show allies' skills in chat
"SummaryAfterTheRound": true, // Show summary of the last round
- "DebugMode": false, // Write activity to the ‘Debug’ folder
+ "EnableBotSkills": true, // Enable skills for bots
+ "EnableBotKickDebug": false, // Kick a random bot every 45s (for debug/testing)
+ "DebugMode": false, // Write activity to the ‘Debug’ folder
"AlternativeSkillButton": null, // Possible buttons:
// null, "Attack", "Jump", "Duck", "Forward", "Back",
// "Use", "Cancel", "Left", "Right", "Moveleft",
@@ -265,12 +284,12 @@ All skills can be customized in the **`config.cfg`** / **`skillsInfo.json`** fil
// "Attack3", "Scoreboard", "Inspect"
"SkillTimeBeforeStart": 7.0, // How many seconds before freeze time ends should skills
// drawing be completed? (freezetime - SkillTimeBeforeStart)
- "SkillHudDuration": 999.0, // How long should the HUD be visible for?
- "SkillDescriptionDuration": 999, // How long should the skill description be visible for?
+ "SkillHudDuration": -1.0, // How long should the HUD be visible for?
+ "SkillDescriptionDuration": 7.0, // How long should the skill description be visible for?
"DisplayAlwaysDescription":false,// Always display skill description (SkillDescriptionDuration = 9999)
"DisableSpectateHUD": false, // Disable HTML HUD when spectating
- "FlashingHtmlHudFix": true, // Enable FlashingHtmlHudFix
- "CS2TraceRayDebug": false, // Enable trail visibility for 'Long Knife', 'Long Zeus'
+ "EnableFlashingHtmlHudFix": false,// Enable FlashingHtmlHudFix
+ "TraceRayBeam": false, // Enable trail visibility for 'Long Knife', 'Long Zeus'
"DisableHUDOnDeathPermission": "@jRandomSkills/death", // Disable the HUD after death for players with this permission
"DisableSkillsOnRoundEnd": false,// Disable all skills at the end of the round (when the summary is visible)
@@ -300,7 +319,12 @@ All skills can be customized in the **`config.cfg`** / **`skillsInfo.json`** fil
"Color": "#ff0000", // Skill color
"Active": true, // Enabled on startup
"Name": "Aimbot", // Skill name
- "RequiredPermission": "" // Required permission
+ "RequiredPermission": "", // Required permission
+ "MaxPerServer": -1, // Maximum number of players allowed to have
+ // this skill on the server (-1 for unlimited)
+ "Rarity": "Common" // Rarity tier of the skill:
+ // Common (70x), Uncommon (14x),
+ // Rare (10x), Epic (5x), Legendary (1x)
},
...
]
@@ -316,16 +340,262 @@ All skills can be customized in the **`config.cfg`** / **`skillsInfo.json`** fil
## 🔗 Credits
This plugin uses content from the following projects:
-- [dRandomSkills](https://github.com/jakubbartosik/dRandomSkills) by [Jakub Bartosik (D3X)](https://github.com/jakubbartosik) - random skills system
-- [CS2TraceRay](https://github.com/schwarper/CS2TraceRay) by [schwarper](https://github.com/schwarper) - Trace Ray system
-- [CS2FlashingHtmlHudFix](https://github.com/girlglock/CS2FlashingHtmlHudFix) by [girlglock](https://github.com/girlglock) - a fix for window flickering
-- [ChaseMod](https://github.com/ipsvn/ChaseMod/blob/master/Utils/Memory/CCSMatch.cs) by [ipsvn](https://github.com/ipsvn) - round score management
+- [dRandomSkills](https://github.com/jakubbartosik/dRandomSkills) by [Jakub Bartosik (D3X)](https://github.com/jakubbartosik) - Random skills system
+- [CS2TraceRay](https://github.com/schwarper/CS2TraceRay) by [schwarper](https://github.com/schwarper) - Old Trace Ray system
+- [Ray-Trace](https://github.com/FUNPLAY-pro-CS2/Ray-Trace) by [SlynxCZ](https://github.com/SlynxCZ) - New Trace Ray system
+- [CS2FlashingHtmlHudFix](https://github.com/girlglock/CS2FlashingHtmlHudFix) by [girlglock](https://github.com/girlglock) - A fix for window flickering
+- [ChaseMod](https://github.com/ipsvn/ChaseMod/blob/master/Utils/Memory/CCSMatch.cs) by [ipsvn](https://github.com/ipsvn) - Round score management
- [WASDMenuAPI](https://github.com/Interesting-exe/WASDMenuAPI) by [Interesting-exe](https://github.com/Interesting-exe) - API to easily create WASD menus
-- [GeoLocationLanguageManagerPlugin](https://github.com/aprox2/GeoLocationLanguageManagerPlugin) by [aprox2](https://github.com/aprox2) - geolocation language manager
-- [GeoLite2](https://dev.maxmind.com/geoip/geolite2-free-geolocation-data) by [MaxMind](https://www.maxmind.com/) - geolocation data
+- [GeoLocationLanguageManagerPlugin](https://github.com/aprox2/GeoLocationLanguageManagerPlugin) by [aprox2](https://github.com/aprox2) - Geolocation language manager
+- [GeoLite2](https://dev.maxmind.com/geoip/geolite2-free-geolocation-data) by [MaxMind](https://www.maxmind.com/) - Geolocation data
+- [CServerSideClient](https://discord.com/channels/1160907911501991946/1508172390863994910/1508180670659166348) by [SLAYER](https://github.com/zakriamansoor47)
+
+## ❤️ Special thanks
+
+
+
+
+
If you are a contributor and want your profile removed from this list, please contact me.
+
+
+ㅤ
+
+
+
+  Ryuu Jin |  cj☭ |  k4chen |  luno |
+
+
+
If you are on this list and want your profile removed, please contact me.
+
+
## 📋 Changelog
+
+v1.2.2.b2
+
+- #### General:
+ - ###### Updated CSS dependency to version 1.0.369.
+ - ###### Upgraded the project from .NET 8.0 to .NET 10.0.
+ - ###### Updated Turkish language translation by [@ByDexterTR](https://github.com/ByDexterTR)].
+ - ###### Added Russian language translation by [@213sdfsdgf](https://github.com/213sdfsdgf)].
+ - ###### Fixed an issue with incorrect display of Arabic nicknames.
+ - ###### Used ForceFullUpdate to resolve the "FATAL ERROR: CopyExistingEntity" crash.
+ - ###### Disabled stale HandleCommandDrop hook to avoid crashes when a player joins a team (thanks to [@vladimir214sd](https://github.com/vladimir214sd)).
+ - ###### Added new signatures to gamedata.
+ - ###### Added the ability to configure the number of grenades for every skill that uses grenades as part of its ability (e.g., Miner, AntyFlash, MagneticDecoy, etc.).
+
+- #### Skill improvements:
+ - ###### Re-Zombie:
+ - ###### Fixed weapon switching issues when a player is holding a Zeus and a knife.
+ - ###### Weapons are now removed for bots in zombie mode.
+ - ###### Fixed an issue where players would occasionally fail to respawn if they took too much damage too quickly.
+ - ###### Ghost:
+ - ###### Blocked the ability to use the Zeus.
+ - ###### Blocked the ability to use the SG556 (`weapon_sg556`).
+ - ###### Thorns:
+ - ###### Added a configurable maximum health limit (37 HP) for the damage that can be reflected.
+ - ###### Second Life:
+ - ###### Fixed an issue where players would occasionally fail to respawn if they took too much damage too quickly.
+ - ###### Phoenix:
+ - ###### Fixed an issue where players would occasionally fail to respawn if they took too much damage too quickly.
+ - ###### Chicken:
+ - ###### Blocked the ability to use the SG556 (`weapon_sg556`).
+ - ###### Wallhack:
+ - ###### Fixed a bug that caused temporary enemy highlighting right after death.
+ - ###### Cypher:
+ - ###### Added camera position persistence.
+ - ###### God Mode:
+ - ###### Fixed an issue with permanent immortality triggering after reaching exactly 0 HP.
+ - ###### Weapons Swap:
+ - ###### The ammo count is now also transferred when weapons are swapped.
+ - ###### Muhammed:
+ - ###### Renamed the skill to "DeathBomb".
+ - ###### Spectator:
+ - ###### Fixed a bug where a player with the Chicken skill would still display as a ragdoll after death when spectated.
+ - ###### Friendly Fire:
+ - ###### The skill now works even when the server's mp_friendlyfire setting is set to 0.
+ - ###### Baseball:
+ - ###### Disabled teammate killing.
+
+
+
+
+v1.2.2.b1
+
+- #### General:
+ - ###### Updated project dependencies.
+ - ###### Implemented `EntityManager` for automated entity cleanup and memory management.
+ - ###### Added configuration to enable or disable skills for bots.
+ - ###### Stability and performance improvements.
+
+- #### Skill improvements:
+ - ###### Invisibility-based skills: Now visible to teammates and spectators.
+ - ###### Fortnite:
+ - ###### Fixed an issue with indestructible barricades after player death.
+ - ###### Wallhack:
+ - ###### Improved detection logic for invisible players.
+ - ###### Soundmaker / Jackal / Spectator:
+ - ###### Updated to correctly work with invisible players.
+ - ###### And more...
+
+
+
+
+v1.2.1.b9
+
+- #### General:
+ - ###### Added Crash Handler to improve server stability (Thanks to cj for help).
+ - ###### Added Skill Rarity (added rarity levels to skills).
+ - ###### Added 'MaxPerServer' limit (limits how many people can use the same skill).
+ - ###### Replaced model "ghost_speaker.vmd" with "spray_plane.vmdl".
+
+- #### Skill improvements:
+ - ###### Focus:
+ - ###### Fixed and improved recoil control.
+ - ###### ReZombie / Phoenix:
+ - ###### Blocked respawn exploit when changing teams.
+
+
+
+
+v1.2.1.b8
+
+- #### General:
+ - ###### Replaced [CS2TraceRay](https://github.com/schwarper/CS2TraceRay) with [RayTraceApi](https://github.com/FUNPLAY-pro-CS2/Ray-Trace).
+ - ###### Updated CounterStrikeSharp to the latest version.
+ - ###### New command for skill testing: `css_next_skill <(null)/index>`.
+ - ###### Updated gamedata signatures.
+ - ###### Replaced CS2TraceRay with `RayTraceApi`.
+ - ###### Replaced direct object references with entity indices to improve memory safety.
+ - ###### Fixed agent model paths.
+ - ###### Skills are now automatically disabled when a player leaves the server.
+ - ###### Added null-pointer checks for improved stability.
+
+- #### Skill improvements:
+ - ###### AimLock:
+ - ###### Aiming at the opponent's head has been improved.
+ - ###### Anomaly / Behind / Cypher / Push / SwapPosition / Teleporter:
+ - ###### Improved camera positioning during teleportation.
+ - ###### CarefulBullets / ExplosiveShot / FragileBomb:
+ - ###### Redesigned logic due to changes in the `OnTakeDamage` event.
+ - ###### FriendlyFire:
+ - ###### Fixed skill functionality when friendly fire is disabled on the server (Casual mode).
+ - ###### Hologram:
+ - ###### Blocked weapon dropping and picking up while in hologram form.
+ - ###### Illiterate:
+ - ###### Fixed a bug with correct text display.
+ - ###### Tracker:
+ - ###### Fixed issues related to timers.
+ - ###### Ninja:
+ - ###### Fixed a bug where the initial invisibility state never update.
+ - ###### NoRecoil / QuickShot:
+ - ###### Updated to match the new `AimPunchServices` structure.
+ - ###### Noclip / Shade / Iana:
+ - ###### Migrated to `TraceHullShape` for more accurate collision detection.
+ - ###### ReZombie:
+ - ###### Disabled weapon usage in zombie mode and increased HP to 500.
+
+- #### Known Issues:
+ - ###### LongKnife:
+ - ###### Right-click detection is currently broken on Linux (despite valid signatures).
+ - ###### Illusionist:
+ - ###### T-Pose bug: After adding animgraph_2, the character models don't have any animations built in. So, for now, there isn't really any way to do this without adding your own from the Workshop.
+
+
+
+
+v1.2.1.b7
+
+- #### General:
+ - ###### Bumped module version to **1.2.1.b7**.
+ - ###### Implemented **HTMLEncoder** for improved message security and protection.
+ - ###### Updated `SkillAction` to return the invoked method result (`object?`) or `null` if not found.
+ - ###### Reworked player event dispatching to call `SkillAction` **once per distinct active skill**, reducing redundant invocations.
+ - ###### Switched timing logic to use `Server.CurrentTime` instead of `EngineTime`.
+ - ###### Added startup console information and an automated **version check** on plugin load.
+ - ###### Implemented **automatic copying** of gamedata, DLLs, and language files during the build process (by @vinicius-trev).
+ - ###### Updated core dependencies: `CounterStrikeSharp.API` to **1.0.364** and `MaxMind.Db` to **5.0.0** (by @vinicius-trev).
+ - ###### Added **geolocation support** for Turkey (`tr`) and Czechia (`cz`).
+ - ###### Added **Turkish (`tr`)** language support (by @brkvlr) and improved **Portuguese-Brazil (`pt-br`)** translations (by @vinicius-trev).
+ - ###### If a translation is missing, the system now **falls back to English text** instead of displaying the raw translation key.
+ - ###### **SkillUtils:** Fixed spawn point selection bugs, memory referencing issues, and added `maxHealth` parameter support for `AddHealth`.
+ - ###### Fixed an issue where the **E key** (interact/defuse) was interrupted by skill usage; players can now defuse and interact with objects without interference.
+ - ###### Vote system timer now correctly resets after each vote.
+
+- #### Skill improvements:
+ - ##### Pilot (Rework):
+ - ###### Completely rewritten jump and fuel logic. Flight now requires a **double-click** of the jump key to activate.
+ - ##### Jester (Rework):
+ - ###### Refactored to a **per-player system** with improved timer stability. The Jester timer now **resets** when the player attempts to plant or defuse the bomb.
+ - ##### Noclip (Rework):
+ - ###### Total rework of the movement logic; improved collision detection to **prevent getting stuck** in objects and ensured smoother flight.
+ - ##### Ghost / C4 Camouflage / Ninja:
+ - ###### **Observers can now see invisible players.**
+ - ###### Improved bomb hiding function and fixed console spam issues.
+ - ##### Retreat / Enemy Spawn:
+ - ###### Fixed an error with incorrect spawn point interpretation.
+ - ##### Teleporter:
+ - ###### The mechanic has been changed to a **percentage chance** of swapping places with an enemy, rather than a guaranteed 100%.
+ - ##### Gambler:
+ - ###### Fixed a bug that allowed the skill to be refreshed without having the required money.
+ - ##### Shade:
+ - ###### Fixed issues related to teleportation logic.
+ - ##### Muhammed:
+ - ###### Blocked skill usage during team switching to prevent exploits.
+ - ##### Baseball:
+ - ###### Decoy grenades now have the same collision as players (**PlayerClip**).
+ - ##### Sniper Elite:
+ - ###### Major refactoring and **fix for server crashes** related to weapon swapping.
+ - ##### Replicator:
+ - ###### Added **crouching animations** for replicas to match player movement.
+ - ##### Blade Master / Cutter / Disarmament / Long Knife / Long Zeus / Killer Flash:
+ - ###### Improved handling for **Bayonet** weapon types.
+ - ###### Added **friendlyFire** configuration options for `LongKnife`, `LongZeus`, and `KillerFlash`.
+ - ##### Planter / Short Bomb / Chill Out:
+ - ###### Notifications now reach all valid players regardless of life status; added `BombAbortPlant` support.
+ - ##### Area Reaper:
+ - ###### Added a message while being on a disabled bombsite.
+ - ##### Wallhack:
+ - ###### Glow is now correctly disabled for dead players.
+ - ##### Sound Maker (Rework):
+ - ###### Reworked to automatically play a sound every 2 seconds (audible only for the player with skill).
+
+- #### New skills:
+ - ##### Aim Lock:
+ - ###### Lock your aim on the nearest enemy for a limited duration.
+ - ##### Homing Nades:
+ - ###### Your grenades (except smokes) are attracted to nearby enemies.
+ - ##### Magneto:
+ - ###### Pushes incoming enemy grenades away from the player.
+ - ##### Miner:
+ - ###### Deploys HE grenades that only detonate when an enemy is within range.
+ - ##### Illiterate:
+ - ###### While the user is alive, enemies are unable to read chat or HUD information.
+ - ##### Hot Bomb:
+ - ###### The C4 deals constant damage to the carrier as long as the skill owner is alive.
+ - ##### Illusionist:
+ - ###### Deploys a replica that walks straight ahead to distract enemies.
+ - ##### Magnetic Decoy:
+ - ###### Decoy grenades attract nearby players towards the center of the decoy.
+ - ##### Throwing Knife:
+ - ###### Adds the ability to throw a lethal knife at enemies.
+ - ##### Weightless:
+ - ###### Grenades fly faster and are no longer affected by gravity.
+ - ##### Wild Throw:
+ - ###### Causes a selected player to "forget their lineups," resulting in randomized grenade trajectories.
+ - ##### Smoker:
+ - ###### Your smoke grenades never run out.
+
+- #### New commands:
+ - ###### `css_bot_place ` - Teleports a bot to the player's position with optional godmode.
+ - ###### `!sethealth ` - Admin command for health management and testing.
+ - ###### `!plantedbomb ` - Command for testing bomb-related states and logic.
+
+
v1.2.0
@@ -623,7 +893,7 @@ This plugin uses content from the following projects:
- ###### Added a configurable cooldown at the start of the round.
- ##### Disarmament:
- ###### Back to dropping weapons instead of changing to slot3.
- - ###### The chance of dropping weapons has been reduced: (20–50)% → (20–35)%
+ - ###### The chance of dropping weapons has been reduced: (20-50)% → (20-35)%
- ##### Chicken:
- ###### The method used to attach the chicken has changed.
- ###### Player with skill can see a model of your chicken.