diff --git a/.github/en.md b/.github/en.md
index 9e5d909..9421630 100644
--- a/.github/en.md
+++ b/.github/en.md
@@ -329,7 +329,23 @@ All skills can be customized in the **`config.cfg`** / **`skillsInfo.json`** fil
"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)
+ "VIPFlag": "@css/vip", // Players with this permission use the VIP skill rarity distribution
+ "SkillsChance": { // Skill rarity distribution for regular players. Percentages and fractions are supported and normalized to 100%
+ "Common": 0.7,
+ "Uncommon": 0.14,
+ "Rare": 0.1,
+ "Epic": 0.05,
+ "Legendary": 0.01
+ },
+ "VIPSkillsChance": { // Skill rarity distribution for players with the VIP flag. Percentages and fractions are supported and normalized to 100%
+ "Common": 0.55,
+ "Uncommon": 0.23,
+ "Rare": 0.14,
+ "Epic": 0.07,
+ "Legendary": 0.01
+ },
"CurseSkillPerPlayer": null, // Maximum number of effects per player
+ "ShowDecoyRing": true, // Show the ring around decoys
"LanguageSystem": {
"DefaultLangCode": "en", // Default language: en, pl, fr, pt-br, zh
@@ -369,6 +385,7 @@ All skills can be customized in the **`config.cfg`** / **`skillsInfo.json`** fil
// -1 = never hide the description,
// >= 0 = display duration in seconds.
"RequiredPermission": "", // Required permission
+ "MinPlayer": 0, // Minimum number of players required on the server (0 to disable the limit)
"MaxPerServer": -1, // Maximum number of players allowed to have
// this skill on the server (-1 for unlimited)
"Rarity": "Common" // Rarity tier of the skill:
@@ -408,6 +425,54 @@ This plugin uses content from the following projects:
## 📋 Changelog
+
+v1.2.4.b1
+
+- #### General
+ - **ConVar lookups** - `ConVar.Find` results are now cached by name in `SkillUtils`. All 25 call sites converted.
+ - **Config loading** - Malformed `skillsInfo.json` no longer resets all settings to defaults. Failed entries keep current settings and prevent config rewriting.
+ - **Config writing** - Replaced copy-and-delete with an atomic rename to prevent half-written configs.
+ - **Config diagnostics** - Load now logs the resolved path, file status, entry counts, known skills, rewrite status and the actual exception.
+ - **Use button (CT skills)** - Skills no longer trigger near planted C4. Range and aim are checked directly.
+ - **SkillUtils.UpdateGrenadeCount** - Fixed delayed clip reset affecting a weapon that replaced the original inventory slot.
+
+- #### Shared Systems
+ - **SkillUtils.IsPredictedLethal** - Added a shared lethality check with hitgroup multipliers, `ArmorRatio` and correct armor coverage, replacing three duplicated headshot-only checks.
+
+- #### Skill Fixes
+ - **ReZombie, Phoenix, Second Life** - Fixed stomach hits between 80–100% HP being treated as survivable by using the shared lethality check.
+ - **Blast Shot, Death Bomb, Exploding Barrel, Explosive Shot** - Explosion kill credit now accounts for armor.
+ - **Explosive Shot** - Projectile owner/team state is now tracked per player and tick, preventing conflicts between simultaneous users and duplicate pellet explosions.
+ - **Fire Rain** - Thrower/team/count state is now stored in per-tick batches, preventing conflicts between simultaneous users.
+ - **Rich Boy** - Bonus removal now restores the account from a pre-bonus snapshot instead of `CashSpentThisRound`.
+ - **Robin Hood, Rich Boy, Bounty** - Rewards now respect `mp_maxmoney`.
+ - **True Armor** - Helmet state is saved and restored alongside armor.
+ - **Gravity Decoy** - Added `WeaponEquip` and `WeaponPickup` handlers to keep the grenade count correct.
+ - **Catapult, Push, Shade, Rubber** - Now react only to bullet damage.
+ - **Throwing Knife** - Thrown knives at round end are tracked separately and replaced next round.
+ - **Planter, Chill Out, Magnifier** - Players are validated before reading `Team`/`PawnIsAlive`.
+ - **Weapons Swap** - Both players are validated before removing weapons, and invalid/dead/spectating enemies can no longer be selected.
+ - **Ninja, Ghost, C4 Camouflage** - Fixed client crash (`FATAL ERROR: CopyExistingEntity: missing client entity`) when a hidden player died nearby. Hidden pawns are restored to the network snapshot on the same tick.
+ - **Ninja, Ghost, C4 Camouflage, Glaz, Jackal, Wallhack, Throwing Knife, Nightmare** - Dead players are no longer treated as viewers, preventing visibility leaks and network desync.
+ - **Wallhack, Jackal, Throwing Knife, Nightmare** - Dead players no longer see Wallhack outlines, Jackal trails, Throwing Knife glows or Nightmare volumes.
+ - **Sound Maker** - Fixed the scream playing for players without the skill.
+
+- #### Stability
+ - **CheckTransmit (Ninja, Ghost, C4 Camouflage)** - Dying entity handles are now tracked with their expiry and removed when indexes are recycled, fixing `CopyExistingEntity: missing client entity`.
+ - **WeaponEquip, WeaponPickup** - Skip dispatch when another plugin supersedes the pre-hook and leaves the event null.
+
+- #### Config
+ - **SkillsChance, VIPSkillsChance** - Added configurable rarity distribution tables to `config.json`, percentages and fractions are normalized to 100%.
+ - **VIPFlag** - Added with default `@css/vip`, empty disables the VIP rarity table.
+ - **All skills** - Added `MinPlayer` to `skillsInfo.json`. Skills require the configured minimum number of players on the server. `0` (default) disables the limit. Applies to normal draws, late joiners and Gambler rerolls.
+
+- #### Localization
+ - **Catapult, Push, Shade** - Turkish descriptions now clarify what the percentage applies to.
+
+**Full update contributed by [@ByDexterTR](https://github.com/ByDexterTR) in pull request [#57](https://github.com/Juzlus/jRandomSkills/pull/57). Thanks to ByDexterTR!**
+
+
+
v1.2.3.b9
diff --git a/.github/pl.md b/.github/pl.md
index af5a21a..cf1c61c 100644
--- a/.github/pl.md
+++ b/.github/pl.md
@@ -329,7 +329,23 @@ Wszystkie sypermoce można dostosować w pliku **`config.cfg`** / **`skillsInfo.
"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)
- "CurseSkillPerPlayer": null, // Maksymalna liczba efektów na gracza
+ "VIPFlag": "@css/vip", // Gracze z tym uprawnieniem korzystają z tabeli szans VIP
+ "SkillsChance": { // Rozkład szans rzadkości umiejętności dla zwykłych graczy. Wartości procentowe i ułamki są obsługiwane i normalizowane do 100%
+ "Common": 0.7,
+ "Uncommon": 0.14,
+ "Rare": 0.1,
+ "Epic": 0.05,
+ "Legendary": 0.01
+ },
+ "VIPSkillsChance": { // Rozkład szans rzadkości umiejętności dla graczy VIP. Wartości procentowe i ułamki są obsługiwane i normalizowane do 100%
+ "Common": 0.55,
+ "Uncommon": 0.23,
+ "Rare": 0.14,
+ "Epic": 0.07,
+ "Legendary": 0.01
+ },
+ "CurseSkillPerPlayer": null, // Maksymalna liczba efektów przypadających na jednego gracza
+ "ShowDecoyRing": true, // Pokazuje pierścień wokół wabików
"LanguageSystem": {
"DefaultLangCode": "en", // Język domyślny: en, pl, fr, pt-br, zh
@@ -369,6 +385,7 @@ Wszystkie sypermoce można dostosować w pliku **`config.cfg`** / **`skillsInfo.
// -1 = nigdy nie ukrywaj opisu,
// >= 0 = czas wyświetlania w sekundach.
"RequiredPermission": "", // Wymagane uprawnienie
+ "MinPlayer": 0, // Minimalna liczba graczy wymagana na serwerze (0 wyłącza limit)
"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:
@@ -408,7 +425,53 @@ Plugin korzysta z zawartości następujących projektów:
## 📋 Lista Zmian
-## 📋 Changelog
+
+v1.2.4.b1
+
+- #### Ogólne
+ - **Wyszukiwanie ConVar** - Wyniki `ConVar.Find` są teraz cachowane po nazwie w `SkillUtils`. Zmieniono wszystkie 25 miejsc użycia.
+ - **Ładowanie konfiguracji** - Uszkodzony `skillsInfo.json` nie resetuje już wszystkich ustawień do wartości domyślnych. Błędne wpisy zachowują obecne ustawienia i blokują przepisywanie konfiguracji.
+ - **Zapisywanie konfiguracji** - Zastąpiono kopiowanie i usuwanie atomową zmianą nazwy pliku, aby przerwany zapis nie pozostawiał uszkodzonej konfiguracji.
+ - **Diagnostyka konfiguracji** - Ładowanie loguje teraz ścieżkę, status pliku, liczbę wpisów, rozpoznane umiejętności, informację o przepisaniu oraz rzeczywisty wyjątek.
+ - **Przycisk Use (umiejętności CT)** - Umiejętności nie aktywują się już w pobliżu podłożonej bomby C4. Odległość i kierunek patrzenia są sprawdzane bezpośrednio.
+ - **SkillUtils.UpdateGrenadeCount** - Naprawiono opóźniony reset magazynka, który mógł zmodyfikować broń zajmującą później ten sam slot.
+
+- #### Wspólne systemy
+ - **SkillUtils.IsPredictedLethal** - Dodano wspólne sprawdzanie śmiertelności uwzględniające mnożniki trafienia, `ArmorRatio` i poprawne działanie pancerza. Zastępuje trzy osobne sprawdzenia oparte wyłącznie na headshotach.
+
+- #### Poprawki mocy
+ - **Re-Zombie, Feniks, Druga Szansa** - Naprawiono traktowanie trafień w brzuch zadających 80–100% HP jako nieśmiertelnych dzięki użyciu wspólnego sprawdzania śmiertelności.
+ - **Strzał Wybuchowy, Ludzka Bomba, Wybuchowa Beczka, Strzał Wybuchowy** - Przyznawanie zabójstw przez eksplozje uwzględnia teraz pochłanianie obrażeń przez pancerz.
+ - **Strzał Wybuchowy** - Stan właściciela i drużyny pocisku jest teraz przechowywany osobno dla każdego gracza i ticka, zapobiegając konfliktom przy jednoczesnym użyciu oraz wielokrotnym eksplozjom od śrutu.
+ - **Deszcz Ognia** - Dane rzucającego, drużyny i liczby granatów są teraz przechowywane w osobnych paczkach dla każdego ticka, zapobiegając konfliktom między graczami.
+ - **Bogacz** - Usuwanie bonusu przywraca teraz konto na podstawie zapisanego stanu sprzed bonusu zamiast `CashSpentThisRound`.
+ - **Robin Hood, Bogacz, Zlecenie Śmierci** - Nagrody respektują teraz limit `mp_maxmoney`.
+ - **Prawdziwy Pancerz** - Stan hełmu jest zapisywany i przywracany razem z wartością pancerza.
+ - **Grawitacyjny Wabik** - Dodano obsługę `WeaponEquip` i `WeaponPickup`, aby liczba wabików była poprawnie aktualizowana.
+ - **Katapulta, Odpychacz, Cień, Gumowe Kule** - Umiejętności reagują teraz wyłącznie na obrażenia od pocisków.
+ - **Nóż do Rzucania** - Noże rzucone pod koniec rundy są teraz śledzone osobno i odtwarzane w następnej rundzie.
+ - **Samowolka, Wyluzowany, Lupa** - Gracze są teraz sprawdzani pod kątem poprawności przed odczytem `Team`/`PawnIsAlive`.
+ - **Zamiana Broni** - Obaj gracze są sprawdzani przed zabraniem broni, a niewłaściwi, martwi i obserwujący gracze nie mogą być już wybrani jako cel.
+ - **Cichociemny, Duszek, C4 Kamuflaż** - Naprawiono crash klienta (`FATAL ERROR: CopyExistingEntity: missing client entity`) przy śmierci ukrytego gracza w pobliżu. Ukryte postacie są przywracane do snapshotu sieciowego w tym samym ticku.
+ - **Cichociemny, Duszek, C4 Kamuflaż, Glaz, Stópkarz, Wallhack, Nóż do Rzucania, Koszmar** - Martwi gracze nie są już traktowani jako obserwatorzy, co zapobiega wyciekom widoczności i desynchronizacji sieci.
+ - **Wallhack, Stópkarz, Nóż do Rzucania, Koszmar** - Martwi gracze nie widzą już konturów Wallhacka, śladów Stópkarza, poświat Noży do Rzucania ani obszarów Koszmaru.
+ - **Dźwiękowiec** - Naprawiono odtwarzanie krzyku graczom, którzy nie posiadają tej umiejętności.
+
+- #### Stabilność
+ - **CheckTransmit (Cichociemny, Duszek, C4 Kamuflaż)** - Uchwyty umierających encji są teraz przechowywane wraz z czasem wygaśnięcia i usuwane po ponownym użyciu indeksu, naprawiając `CopyExistingEntity: missing client entity`.
+ - **WeaponEquip, WeaponPickup** - Pomijane jest wywołanie, gdy inny plugin przejmuje pre-hook i pozostawia puste zdarzenie.
+
+- #### Plik `Config.json`
+ - **SkillsChance, VIPSkillsChance** - Dodano konfigurowalne tabele szans rzadkości do `config.json`. Procenty i ułamki są normalizowane do 100%.
+ - **VIPFlag** - Dodano domyślną flagę `@css/vip`; pozostawienie jej pustej wyłącza tabelę szans VIP.
+ - **Wszystkie umiejętności** - Dodano `MinPlayer` do `skillsInfo.json`. Umiejętność wymaga teraz określonej minimalnej liczby graczy na serwerze. `0` (domyślnie) wyłącza limit. Dotyczy losowania, spóźnionych dołączeń oraz ponownego losowania przez Hazardzistę.
+
+- #### Lokalizacja
+ - **Katapulta, Odpychacz, Cień** - Tureckie opisy wyjaśniają teraz, czego dotyczy podana wartość procentowa.
+
+**Pełna aktualizacja została przygotowana przez [@ByDexterTR](https://github.com/ByDexterTR) w ramach pull requesta [#57](https://github.com/Juzlus/jRandomSkills/pull/57). Dziękujemy ByDexterTR!**
+
+
v1.2.3.b9