diff --git a/.github/en.md b/.github/en.md
index 4fb5639..fe95518 100644
--- a/.github/en.md
+++ b/.github/en.md
@@ -31,7 +31,7 @@ jRandomSkills is a plugin for CounterStrike 2 that brings chaos and fun to gamep
- **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]
+- **Simplified Chinese** [by: [@Ericzzrbb](hhttps://github.com/Ericzzrbb)]
## 🖼️ Preview

@@ -357,6 +357,46 @@ This plugin uses content from the following projects:
## 📋 Changelog
+
+v1.2.2.b3
+
+- #### General:
+ - ###### Updated Chinese language translation by [by: [@Ericzzrbb](hhttps://github.com/Ericzzrbb)].
+ - ###### Fixed a bug where a player could be given multiple skills at once while the HUD displayed only one (the player list was never cleared on map change and had no duplicate protection on join). [by: [@ByDexterTR](https://github.com/ByDexterTR)]
+ - ###### Fixed skill names and descriptions showing the raw translation key on Turkish servers (culture-sensitive lowercasing) - affected skills starting with "I" (e.g. Illiterate, Impostor, InfiniteAmmo, Iana). [by: [@ByDexterTR](https://github.com/ByDexterTR)]
+ - ###### RayTrace-based skills and the skill-use button no longer throw when the RayTrace module is not installed - they now degrade gracefully instead of crashing. [by: [@ByDexterTR](https://github.com/ByDexterTR)]
+ - ###### Fixed the skill-use button (when bound to Use/E) blocking option selection inside WSAD target menus. [by: [@ByDexterTR](https://github.com/ByDexterTR)]
+ - ###### Performance: cached reflection lookups in `SkillAction` and `SkillsInfo.GetValue`, and de-duplicated the repeated event-dispatch logic on hot paths (OnTick, OnTakeDamage, etc.). [by: [@ByDexterTR](https://github.com/ByDexterTR)]
+ - ###### Stability: removed dead methods that threw `NotImplementedException`, hardened team-score handling, and reset all skill state on round start / map change. [by: [@ByDexterTR](https://github.com/ByDexterTR)]
+ - ###### Build: post-build copy paths now follow the active `$(Configuration)` and `$(TargetFramework)`. [by: [@ByDexterTR](https://github.com/ByDexterTR)]
+ - ###### Added new Turkish translation strings for the skill notifications listed below. [by: [@ByDexterTR](https://github.com/ByDexterTR)]
+ - ###### Fixed bot-related messages so they now display correctly in the chat of the controlling player.
+ - ###### When a player takes control of a bot, all active skill effects affecting that bot are now correctly transferred to the controlling player.
+ - ###### Prevented bots from automatically using skills while being controlled by a player.
+
+- #### Skill improvements:
+ - ###### Wallhack:
+ - ###### Fixed enemy outlines briefly flashing for everyone when the skill holder dies. [by: [@ByDexterTR](https://github.com/ByDexterTR)]
+ - ###### Area Reaper:
+ - ###### Teammates (CT) are now notified which bombsite (A/B) was sealed. [by: [@ByDexterTR](https://github.com/ByDexterTR)]
+ - ###### Wild Throw:
+ - ###### Now notifies the targeted player, consistent with other targeted skills. [by: [@ByDexterTR](https://github.com/ByDexterTR)]
+ - ###### Careful Bullets / Darkness / Deaf / Glitch / Jammer / Jump Ban / Magnifier / Poison / Primary Ban / Wild Throw:
+ - ###### The targeted player is now notified when the effect ends after the skill holder dies. [by: [@ByDexterTR](https://github.com/ByDexterTR)]
+ - ###### Careful Bullets:
+ - ###### Added damage-taken sound effects when missing a shot
+ - ###### C4 Camouflage / Ninja:
+ - ###### Fixed a bug where dying with invisibility active and taking control of a bot would grant invisibility to the bot as well.
+ - ###### Poison:
+ - ###### Added damage-taken sound effects.
+ - ###### Primary Ban:
+ - ###### Changed mechanic to directly block shooting weapons instead of forcing a weapon switch to the knife.
+ - ###### Hot Bomb:
+ - ###### Replaced the bomb-burning sound effects.
+ - ###### Added a notification when the burning effect ends and the bomb returns to its normal color.
+
+
+
v1.2.2.b2
diff --git a/.github/pl.md b/.github/pl.md
index 610817e..b331d26 100644
--- a/.github/pl.md
+++ b/.github/pl.md
@@ -26,12 +26,12 @@ jRandomSkills to plugin do CounterStrike 2, który wprowadza chaos i frajdę do
## 💬 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]
+- **Francuski** [autor: [@felyjyn](https://github.com/felyjyn)]
+- **Portugalski (Brazylijski)** [autor: [@vinicius-trev](https://github.com/vinicius-trev)]
+- **Niemiecki** [autor: [@Enrory](https://github.com/Enrory)]
+- **Turecki** [autor: [@brkvlr](https://github.com/brkvlr), [@ByDexterTR](https://github.com/ByDexterTR)]
+- **Rosyjski** [autor: [@213sdfsdgf](https://github.com/213sdfsdgf)]
+- **Chiński uproszczony** [autor: [@Ericzzrbb](hhttps://github.com/Ericzzrbb)]
## 🖼️ Prezentacja Pluginu

@@ -170,7 +170,7 @@ 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 | - |
+| Nóż 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 | - |
@@ -355,6 +355,46 @@ Plugin korzysta z zawartości następujących projektów:
## 📋 Lista Zmian
+
+v1.2.2.b3
+
+- #### Ogólne:
+ - ###### Zaktualizowano tłumaczenie na język chiński uproszczony [autor: [@Ericzzrbb](https://www.google.com/search?q=hhttps://github.com/Ericzzrbb)].
+ - ###### Naprawiono błąd, w którym gracz mógł otrzymać kilka umiejętności jednocześnie, podczas gdy HUD wyświetlał tylko jedną (lista graczy nie była czyszczona przy zmianie mapy i brakowało zabezpieczenia przed duplikacją przy dołączaniu). [autor: [@ByDexterTR](https://github.com/ByDexterTR)]
+ - ###### Naprawiono błąd, przez który nazwy i opisy umiejętności wyświetlały surowe klucze tłumaczenia na tureckich serwerach (zależna od języka zamiana na małe litery) - problem dotyczył umiejętności zaczynających się na literę "I" (np. Illiterate, Impostor, InfiniteAmmo, Iana). [autor: [@ByDexterTR](https://github.com/ByDexterTR)]
+ - ###### Umiejętności oparte na module RayTrace oraz przycisk użycia umiejętności nie wyrzucają już błędów, gdy moduł RayTrace nie jest zainstalowany - teraz ich działanie ulega bezpiecznemu ograniczeniu zamiast scrashowania gry. [autor: [@ByDexterTR](https://github.com/ByDexterTR)]
+ - ###### Naprawiono błąd, w którym przycisk użycia umiejętności (gdy był przypisany pod klawisz Użyj/E) blokował wybór opcji w menu celowania WSAD. [autor: [@ByDexterTR](https://github.com/ByDexterTR)]
+ - ###### Wydajność: dodano buforowanie (cache) dla wyszukiwań refleksji w `SkillAction` oraz `SkillsInfo.GetValue`, a także usunięto powtarzającą się logikę wysyłania zdarzeń w kluczowych ścieżkach kodu (OnTick, OnTakeDamage itp.). [autor: [@ByDexterTR](https://github.com/ByDexterTR)]
+ - ###### Stabilność: usunięto martwe metody, które wyrzucały błąd `NotImplementedException`, wzmocniono logikę obsługi punktacji drużynowej oraz zresetowano stany wszystkich umiejętności na początku rundy / przy zmianie mapy. [autor: [@ByDexterTR](https://github.com/ByDexterTR)]
+ - ###### Build: ścieżki kopiowania plików po zbudowaniu projektu (post-build) zależą teraz od aktywnego `$(Configuration)` oraz `$(TargetFramework)`. [autor: [@ByDexterTR](https://github.com/ByDexterTR)]
+ - ###### Dodano nowe tureckie ciągi tłumaczeń dla powiadomień o umiejętnościach wymienionych poniżej. [autor: [@ByDexterTR](https://github.com/ByDexterTR)]
+ - ###### Naprawiono wyświetlanie wiadomości bota, dzięki czemu pojawiają się one teraz prawidłowo na czacie kontrolującego go gracza.
+ - ###### Po przejęciu bota przez gracza, wszystkie aktywne efekty umiejętności działające na tego bota przechodzą na kontrolującego go gracza.
+ - ###### Zablokowano automatyczne używanie umiejętności przez boty, jeśli są one aktualnie kontrolowane przez gracza.
+
+- #### Poprawki mocy:
+ - ###### Wallhack:
+ - ###### Naprawiono błąd, w którym obrysy przeciwników na chwilę błyskały wszystkim graczom w momencie śmierci posiadacza umiejętności. [autor: [@ByDexterTR](https://github.com/ByDexterTR)]
+ - ###### Niszczyciel Stref:
+ - ###### Członkowie drużyny (CT) są teraz powiadamiani, który bombsite (A/B) został zamknięty. [autor: [@ByDexterTR](https://github.com/ByDexterTR)]
+ - ###### Dzikie rzuty:
+ - ###### Umiejętność powiadamia teraz celowanego gracza, co jest spójne z działaniem innych umiejętności celowanych. [autor: [@ByDexterTR](https://github.com/ByDexterTR)]
+ - ###### Ostrożne pociski / Mrok / Głuchy / Glitch / Zakłócacz / Beznogi / Lupa / Trutka / Brak Karabinów / Dzikie rzuty:
+ - ###### Celowany gracz otrzymuje teraz powiadomienie, gdy efekt kończy się po śmierci posiadacza umiejętności. [autor: [@ByDexterTR](https://github.com/ByDexterTR)]
+ - ###### Ostrożne pociski:
+ - ###### Dodano efekty dźwiękowe otrzymywania obrażeń po nietrafieniu w gracza.
+ - ###### C4 Kamuflaż / Ninja:
+ - ###### Naprawiono błąd, w którym umierając z aktywną niewidzialnością i przejmując bota, bot również otrzymywał niewidzialność.
+ - ###### Trutka:
+ - ###### Dodano efekty dźwiękowe otrzymywania obrażeń.
+ - ###### Brak Karabinów:
+ - ###### Zmieniono mechanikę na bezpośrednie blokowanie możliwości oddania strzału zamiast wymuszania zmiany broni na nóż.
+ - ###### Gorąca Bomba:
+ - ###### Zmieniono efekty dźwiękowe parzenia paki.
+ - ###### Dodano powiadomienie po zakończeniu parzenia, gdy bomba wraca do swojego normalnego koloru.
+
+
+
v1.2.2.b2
@@ -1203,7 +1243,7 @@ Plugin korzysta z zawartości następujących projektów:
- ###### Twój decoy zamraża wszystkich pobliskich graczy.
- ##### Żołnierz:
- ###### Masz losowy mnożnik obrażeń (1.15 - 1.35)x.
- - ##### Gruby:
+ - ##### Gruautor:
- ###### Masz losowy mnożnik otrzymywanych obrażeń (0.65 - 0.85)x.
- ##### Aimbot:
- ###### Każdy twój trafiony pocisk jest liczony jako głowa.
diff --git a/jRandomSkills - SRC Files/src/command/Command.cs b/jRandomSkills - SRC Files/src/command/Command.cs
index e5f5051..db40d62 100644
--- a/jRandomSkills - SRC Files/src/command/Command.cs
+++ b/jRandomSkills - SRC Files/src/command/Command.cs
@@ -2,6 +2,7 @@ using CounterStrikeSharp.API;
using CounterStrikeSharp.API.Core;
using CounterStrikeSharp.API.Modules.Admin;
using CounterStrikeSharp.API.Modules.Commands;
+using CounterStrikeSharp.API.Modules.Commands.Targeting;
using CounterStrikeSharp.API.Modules.Entities.Constants;
using CounterStrikeSharp.API.Modules.Utils;
using src.menu;
diff --git a/jRandomSkills - SRC Files/src/lang/de.json b/jRandomSkills - SRC Files/src/lang/de.json
index d0adf2d..4d8fd37 100644
--- a/jRandomSkills - SRC Files/src/lang/de.json
+++ b/jRandomSkills - SRC Files/src/lang/de.json
@@ -24,6 +24,7 @@
"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_teammates_info": "Bereich {0} wurde für das Pflanzen der Bombe gesperrt.",
"areareaper_bombsite_disabled": "Dieser Bombenplatz wurde deaktiviert!",
"armored": "Gepanzert",
@@ -62,6 +63,7 @@
"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_disable_info": "Fehlschüsse verursachen keinen Schaden mehr.",
"carefulbullets_player_info": "‚{0}‘ muss jetzt vorsichtiger sein.",
"carefulbullets_select_info": "Fehler schaden dem Spieler:",
@@ -85,6 +87,7 @@
"darkness": "Dunkelheit",
"darkness_desc": "Wendet einen Dunkelheitseffekt auf einen ausgewählten Gegner an",
"darkness_enemy_info": "Lass die Lichter ausgehen",
+ "darkness_disable_info": "Das Licht ist zurück.",
"darkness_player_info": "Die Dunkelheit hat den Spieler \"{0}\" überwältigt.",
"darkness_select_info": "Wähle einen Spieler für die Dunkelheit aus:",
@@ -97,6 +100,7 @@
"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_disable_info": "Du kannst wieder hören.",
"deaf_player_info": "Der Ton für den Spieler ‚{0}‘ wurde deaktiviert.",
"deaf_select_info": "Alle Töne für den Spieler stummschalten:",
@@ -167,6 +171,7 @@
"glitch": "Glitch",
"glitch_desc": "Deaktiviert das Radar für einen ausgewählten Gegner",
"glitch_enemy_info": "Dein Radar wurde deaktiviert",
+ "glitch_disable_info": "Dein Radar funktioniert wieder.",
"glitch_player_info": "Das Radar des Spielers ‚{0}‘ wurde deaktiviert.",
"glitch_select_info": "Radar des Spielers ausschalten:",
@@ -196,6 +201,7 @@
"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_disable_info": "Die Bombe ist nicht mehr heiß.",
"iana": "Hologramm",
"iana_desc": "Klicken Sie auf [css_useSkill], um Ihr Hologramm für einige Sekunden zu steuern",
@@ -218,6 +224,7 @@
"jammer": "Störsender",
"jammer_desc": "Wähle einen Spieler aus, um dessen Fadenkreuz zu deaktivieren",
"jammer_enemy_info": "Dein Fadenkreuz wurde deaktiviert.",
+ "jammer_disable_info": "Dein Fadenkreuz funktioniert wieder.",
"jammer_player_info": "Das Fadenkreuz von Spieler ‚{0}‘ wurde deaktiviert.",
"jammer_select_info": "Fadenkreuz des Spielers deaktivieren:",
@@ -230,6 +237,7 @@
"jumpban": "Beinlos",
"jumpban_desc": "Wähle einen Spieler, der nicht springen kann",
"jumpban_enemy_info": "Jemand hat dir die Beine abgeschnitten.",
+ "jumpban_disable_info": "Du kannst deine Beine wieder benutzen.",
"jumpban_player_info": "Der Spieler ‚{0}‘ kann nicht mehr springen.",
"jumpban_select_info": "Spieler vom Springen ausschließen:",
@@ -260,6 +268,7 @@
"magnifier": "Lupe",
"magnifier_desc": "Vergrößert den Bildschirm des Gegners und verringert dessen Sichtfeld",
"magnifier_enemy_info": "Dein Sichtfeld wurde verzerrt!",
+ "magnifier_disable_info": "Deine Sicht ist wieder normal.",
"magnifier_player_info": "Der Spieler ‚{0}‘ wurde in den Zoom-Modus versetzt.",
"magnifier_select_info": "Bildschirm des Spielers vergrößern:",
@@ -321,12 +330,14 @@
"poison": "Gift",
"poison_desc": "Wähle einen Spieler aus, der alle paar Sekunden Schaden nimmt",
"poison_enemy_info": "Du wurdest vergiftet",
+ "poison_disable_info": "Du bist jetzt immun gegen Gift.",
"poison_player_info": "Der Spieler ‚{0}‘ wurde vergiftet",
"poison_select_info": "Einen Spieler vergiften:",
"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_disable_info": "Du kannst wieder Gewehre benutzen.",
"primaryban_player_info": "Der Spieler ‚{0}‘ kann keine Gewehre mehr verwenden.",
"primaryban_select_info": "Gewehre für Spieler verbieten:",
@@ -457,6 +468,8 @@
"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_enemy_info": "Du wirst beim Werfen von Granaten zu nervös.",
+ "wildthrow_disable_info": "Deine Erinnerung daran, wie man Granaten wirft, ist wieder normal.",
"wildthrow_select_info": "Wähle einen Spieler aus:",
"zeus": "Zeus",
diff --git a/jRandomSkills - SRC Files/src/lang/en.json b/jRandomSkills - SRC Files/src/lang/en.json
index f972310..031cb61 100644
--- a/jRandomSkills - SRC Files/src/lang/en.json
+++ b/jRandomSkills - SRC Files/src/lang/en.json
@@ -24,6 +24,7 @@
"areareaper_select_info": "Select site to deactivate:",
"areareaper_site_disabled": "Bomb site {0} has been deactivated - no bombs can be planted there!",
"areareaper_used_info": "Your skill has already been used.",
+ "areareaper_teammates_info": "Bombsite {0} has been blocked for planting.",
"areareaper_bombsite_disabled": "This bombsite has been disabled!",
"armored": "Armored",
@@ -62,6 +63,7 @@
"carefulbullets": "Careful Bullets",
"carefulbullets_desc": "Select a player who takes damage for every missed shot",
"carefulbullets_enemy_info": "From now on, inaccuracy will literally hurt.",
+ "carefulbullets_disable_info": "Missing shots no longer hurts you.",
"carefulbullets_player_info": "'{0}' must now be more careful.",
"carefulbullets_select_info": "Inaccuracy hurts the player:",
@@ -85,6 +87,7 @@
"darkness": "Darkness",
"darkness_desc": "Applies a darkness effect to a chosen enemy",
"darkness_enemy_info": "Let the lights go out.",
+ "darkness_disable_info": "The lights are back on.",
"darkness_player_info": "Darkness has overtaken player '{0}'.",
"darkness_select_info": "Select player for darkness:",
@@ -97,6 +100,7 @@
"deaf": "Deaf",
"deaf_desc": "Choose a player to mute all sounds for",
"deaf_enemy_info": "Your headphones have left the game.",
+ "deaf_disable_info": "You can hear again.",
"deaf_player_info": "Sound has been disabled for player '{0}'.",
"deaf_select_info": "Mute all sounds for player:",
@@ -167,6 +171,7 @@
"glitch": "Glitch",
"glitch_desc": "Disables the radar for a chosen enemy",
"glitch_enemy_info": "Your radar has been disabled.",
+ "glitch_disable_info": "Your radar is back to normal.",
"glitch_player_info": "Player '{0}'s radar has been disabled.",
"glitch_select_info": "Turn off player's radar:",
@@ -196,6 +201,7 @@
"hotbomb": "Hot Bomb",
"hotbomb_desc": "As long as you are alive, the bomb deals damage to its carrier",
"hotbomb_hint": "Careful, the bomb is hot!",
+ "hotbomb_disable_info": "The bomb is no longer hot.",
"iana": "Hologram",
"iana_desc": "Click [css_useSkill] to control your hologram for a few seconds",
@@ -218,6 +224,7 @@
"jammer": "Jammer",
"jammer_desc": "Choose a player to disable their crosshair",
"jammer_enemy_info": "Your crosshair has been disabled.",
+ "jammer_disable_info": "Your crosshair is back to normal.",
"jammer_player_info": "Player '{0}'s crosshair has been disabled.",
"jammer_select_info": "Disable player's crosshair:",
@@ -230,6 +237,7 @@
"jumpban": "Legless",
"jumpban_desc": "Choose a player who cannot jump",
"jumpban_enemy_info": "Someone cut off your legs.",
+ "jumpban_disable_info": "You can use your legs again.",
"jumpban_player_info": "Player '{0}' can no longer jump.",
"jumpban_select_info": "Ban player from jumping:",
@@ -260,6 +268,7 @@
"magnifier": "Magnifier",
"magnifier_desc": "Forces the enemy's screen to zoom in, reducing their field of view",
"magnifier_enemy_info": "Your field of view has been distorted!",
+ "magnifier_disable_info": "Your vision is back to normal.",
"magnifier_player_info": "Player '{0}' has been forced into zoom mode.",
"magnifier_select_info": "Magnify player's screen:",
@@ -321,12 +330,14 @@
"poison": "Poison",
"poison_desc": "Choose a player who will take damage every few seconds",
"poison_enemy_info": "You have been poisoned.",
+ "poison_disable_info": "You are now immune to poison.",
"poison_player_info": "Player '{0}' has been poisoned.",
"poison_select_info": "Poison a player:",
"primaryban": "No Rifles",
"primaryban_desc": "Choose a player who cannot use rifles",
"primaryban_enemy_info": "You can no longer use rifles.",
+ "primaryban_disable_info": "You can use rifles again.",
"primaryban_player_info": "Player '{0}' can no longer use rifles.",
"primaryban_select_info": "Ban rifles for player:",
@@ -457,6 +468,8 @@
"wildthrow": "Wild Throws",
"wildthrow_desc": "Choose a player who will have trouble throwing grenades",
"wildthrow_player_info": "Player '{0}' has forgotten all their lineups",
+ "wildthrow_enemy_info": "You get too excited when throwing grenades.",
+ "wildthrow_disable_info": "Your memory of how to throw grenades is back to normal.",
"wildthrow_select_info": "Select a player:",
"zeus": "Zeus",
diff --git a/jRandomSkills - SRC Files/src/lang/fr.json b/jRandomSkills - SRC Files/src/lang/fr.json
index 02c5543..f6f6a9d 100644
--- a/jRandomSkills - SRC Files/src/lang/fr.json
+++ b/jRandomSkills - SRC Files/src/lang/fr.json
@@ -24,6 +24,7 @@
"areareaper_select_info": "Sélectionnez un site à désactiver :",
"areareaper_site_disabled": "Le site de bombe {0} a été désactivé – aucune bombe ne peut y être posée !",
"areareaper_used_info": "Votre compétence a déjà été utilisée.",
+ "areareaper_teammates_info": "Le site de bombe {0} est désormais interdit au plant.",
"areareaper_bombsite_disabled": "Ce site de bombe a été désactivé !",
"armored": "Blindé",
@@ -62,6 +63,7 @@
"carefulbullets": "Balles prudentes",
"carefulbullets_desc": "Sélectionnez un joueur qui subit des dégâts à chaque tir manqué",
"carefulbullets_enemy_info": "À partir de maintenant, l'inexactitude fera littéralement mal.",
+ "carefulbullets_disable_info": "Rater vos tirs ne vous blessera plus.",
"carefulbullets_player_info": "« {0} » doit désormais être plus prudent.",
"carefulbullets_select_info": "L'inexactitude nuit au joueur :",
@@ -85,6 +87,7 @@
"darkness": "Obscurité",
"darkness_desc": "Applique un effet d’obscurité à un ennemi choisi",
"darkness_enemy_info": "Que la lumière s’éteigne.",
+ "darkness_disable_info": "Les lumières sont revenues.",
"darkness_player_info": "L’obscurité a envahi le joueur « {0} ».",
"darkness_select_info": "Sélectionnez un joueur pour l’obscurité :",
@@ -97,6 +100,7 @@
"deaf": "Sourd",
"deaf_desc": "Choisissez un joueur pour couper tous ses sons",
"deaf_enemy_info": "Votre casque a quitté la partie.",
+ "deaf_disable_info": "Vous entendez de nouveau.",
"deaf_player_info": "Le son a été désactivé pour le joueur « {0} ».",
"deaf_select_info": "Couper tous les sons du joueur :",
@@ -167,6 +171,7 @@
"glitch": "Glitch",
"glitch_desc": "Désactive le radar d’un ennemi choisi",
"glitch_enemy_info": "Votre radar a été désactivé.",
+ "glitch_disable_info": "Votre radar est revenu à la normale.",
"glitch_player_info": "Le radar du joueur « {0} » a été désactivé.",
"glitch_select_info": "Désactiver le radar du joueur :",
@@ -196,6 +201,7 @@
"hotbomb": "Bombe brûlante",
"hotbomb_desc": "Tant que vous êtes en vie, la bombe inflige des dégâts à son porteur",
"hotbomb_hint": "Attention, la bombe est brûlante !",
+ "hotbomb_disable_info": "La bombe ne brûle plus.",
"iana": "Hologramme",
"iana_desc": "Cliquez sur [css_useSkill] pour contrôler votre hologramme pendant quelques secondes",
@@ -218,6 +224,7 @@
"jammer": "Brouilleur",
"jammer_desc": "Choisissez un joueur pour désactiver son viseur",
"jammer_enemy_info": "Votre viseur a été désactivé.",
+ "jammer_disable_info": "Votre réticule est revenu à la normale.",
"jammer_player_info": "Le viseur du joueur « {0} » a été désactivé.",
"jammer_select_info": "Désactiver le viseur d’un joueur :",
@@ -230,6 +237,7 @@
"jumpban": "Sans Jambes",
"jumpban_desc": "Choisissez un joueur qui ne pourra plus sauter",
"jumpban_enemy_info": "Quelqu’un vous a coupé les jambes.",
+ "jumpban_disable_info": "Vous pouvez de nouveau utiliser vos jambes.",
"jumpban_player_info": "Le joueur « {0} » ne peut plus sauter.",
"jumpban_select_info": "Interdire de sauter au joueur :",
@@ -260,6 +268,7 @@
"magnifier": "Loupe",
"magnifier_desc": "Force l’écran de l’ennemi à zoomer, réduisant son champ de vision",
"magnifier_enemy_info": "Votre champ de vision a été déformé !",
+ "magnifier_disable_info": "Votre vision est revenue à la normale.",
"magnifier_player_info": "Le joueur « {0} » a été forcé en mode zoom.",
"magnifier_select_info": "Forcer l’écran du joueur à zoomer :",
@@ -321,12 +330,14 @@
"poison": "Poison",
"poison_desc": "Choisissez un joueur qui subira des dégâts toutes les quelques secondes",
"poison_enemy_info": "Vous avez été empoisonné.",
+ "poison_disable_info": "Vous êtes désormais immunisé contre le poison.",
"poison_player_info": "Le joueur « {0} » a été empoisonné.",
"poison_select_info": "Empoisonner un joueur :",
"primaryban": "Sans Fusils",
"primaryban_desc": "Choisissez un joueur qui ne pourra plus utiliser de fusils",
"primaryban_enemy_info": "Vous ne pouvez plus utiliser de fusils.",
+ "primaryban_disable_info": "Vous pouvez de nouveau utiliser des fusils.",
"primaryban_player_info": "Le joueur « {0} » ne peut plus utiliser de fusils.",
"primaryban_select_info": "Interdire les fusils pour un joueur :",
@@ -457,6 +468,8 @@
"wildthrow": "Lancers sauvages",
"wildthrow_desc": "Choisissez un joueur qui aura des difficultés à lancer des grenades",
"wildthrow_player_info": "Le joueur '{0}' a oublié tous ses alignements (lineups)",
+ "wildthrow_enemy_info": "Vous êtes trop nerveux lorsque vous lancez des grenades.",
+ "wildthrow_disable_info": "Votre mémoire concernant le lancer de grenades est revenue à la normale.",
"wildthrow_select_info": "Sélectionnez un joueur :",
"zeus": "Zeus",
diff --git a/jRandomSkills - SRC Files/src/lang/pl.json b/jRandomSkills - SRC Files/src/lang/pl.json
index 321c9d9..4afd41b 100644
--- a/jRandomSkills - SRC Files/src/lang/pl.json
+++ b/jRandomSkills - SRC Files/src/lang/pl.json
@@ -24,6 +24,7 @@
"areareaper_select_info": "Wybierz strefę do dezaktyw.:",
"areareaper_site_disabled": "Strefa detonacji {0} została dezaktywowana - nie można na niej podłożyć bomby!",
"areareaper_used_info": "Twoja moc została już wykorzystana.",
+ "areareaper_teammates_info": "Strefa {0} została zablokowana do podłożenia bomby.",
"areareaper_bombsite_disabled": "Ten bombsite został wyłączony!",
"armored": "Gruby",
@@ -62,6 +63,7 @@
"carefulbullets": "Ostrożne pociski",
"carefulbullets_desc": "Wybierz gracza, który otrzymuje obrażenia za każdy niecelny strzał",
"carefulbullets_enemy_info": "Od teraz niecelność będzie dosłownie bolała.",
+ "carefulbullets_disable_info": "Pudłowanie nie zadaje już obrażeń.",
"carefulbullets_player_info": "'{0}' musi teraz być bardziej ostrożny.",
"carefulbullets_select_info": "Niedokładność szkodzi graczowi:",
@@ -85,6 +87,7 @@
"darkness": "Mrok",
"darkness_desc": "Nadaje efekt ciemności wybranemu przeciwnikowi",
"darkness_enemy_info": "Niech zgasną światła.",
+ "darkness_disable_info": "Światła wróciły.",
"darkness_player_info": "Ciemność opanowała gracza '{0}'.",
"darkness_select_info": "Nałóż efekt ciemności:",
@@ -97,6 +100,7 @@
"deaf": "Głuchy",
"deaf_desc": "Wybierasz gracza, dla którego chcesz wyłączyć wszystkie dźwięki",
"deaf_enemy_info": "Słuchawki opuściły grę.",
+ "deaf_disable_info": "Znowu słyszysz.",
"deaf_player_info": "Dźwięk został wyłączony dla gracza '{0}'.",
"deaf_select_info": "Wycisz dźwięki gracza:",
@@ -167,6 +171,7 @@
"glitch": "Glitch",
"glitch_desc": "Wyłączasz radar wybranemu przeciwnikowi",
"glitch_enemy_info": "Twój radar został wyłączony.",
+ "glitch_disable_info": "Twój radar wrócił do normy.",
"glitch_player_info": "Radar gracza '{0}' został wyłączony.",
"glitch_select_info": "Wyłącz radar dla gracza:",
@@ -196,6 +201,7 @@
"hotbomb": "Gorąca Bomba",
"hotbomb_desc": "Dopóki żyjesz, bomba zadaje obrażenia osobie, która ją niesie",
"hotbomb_hint": "Ostrożnie, bomba parzy!",
+ "hotbomb_disable_info": "Bomba już nie parzy.",
"iana": "Hologram",
"iana_desc": "Kliknij [css_useSkill], aby sterować hologramem przez kilka sekund",
@@ -218,6 +224,7 @@
"jammer": "Zakłócacz",
"jammer_desc": "Wybierasz gracza, dla którego chcesz wyłączyć celownik",
"jammer_enemy_info": "Twój celownik został wyłączony.",
+ "jammer_disable_info": "Twój celownik wrócił do normy.",
"jammer_player_info": "Celownik gracza '{0}' została wyłączona.",
"jammer_select_info": "Wyłącz celownik dla gracza:",
@@ -230,6 +237,7 @@
"jumpban": "Beznogi",
"jumpban_desc": "Wybierasz gracza, który nie będzie mógł skakać",
"jumpban_enemy_info": "Ktoś odciął ci nogi.",
+ "jumpban_disable_info": "Możesz znowu używać nóg.",
"jumpban_player_info": "Gracz '{0}' nie może teraz skakać.",
"jumpban_select_info": "Zablokuj skok dla gracza:",
@@ -260,6 +268,7 @@
"magnifier": "Lupa",
"magnifier_desc": "Przybiżasz ekran wybranemu przeciwnikowi",
"magnifier_enemy_info": "Twoje pole widzenia zostało zniekształcone!",
+ "magnifier_disable_info": "Twój wzrok wrócił do normy.",
"magnifier_player_info": "Gracz '{0}' został zmuszony do przejścia w tryb powiększenia.",
"magnifier_select_info": "Powiększ ekran gracza:",
@@ -321,12 +330,14 @@
"poison": "Trutka",
"poison_desc": "Wybierasz gracza, który co kilka sekund będzie otrzymywał obrażenia",
"poison_enemy_info": "Zostałeś otruty.",
+ "poison_disable_info": "Jesteś teraz odporny na truciznę.",
"poison_player_info": "Gracz '{0}' został otruty.",
"poison_select_info": "Zatruj gracza:",
"primaryban": "Brak Karabinów",
"primaryban_desc": "Wybierasz gracza, który nie może używać karabinów",
"primaryban_enemy_info": "Nie możesz już używać karabinów.",
+ "primaryban_disable_info": "Możesz znowu używać karabinów.",
"primaryban_player_info": "Gracz '{0}' nie może już używać karabinów.",
"primaryban_select_info": "Zablokuj karabiny dla gracza:",
@@ -457,6 +468,8 @@
"wildthrow": "Dzikie Rzuty",
"wildthrow_desc": "Wybierz gracza, który będzie miał trudności z rzucaniem granatami",
"wildthrow_player_info": "Gracz '{0}' zapomniał wszystkie lineup'y",
+ "wildthrow_enemy_info": "Za bardzo denerwujesz się podczas rzucania granatami.",
+ "wildthrow_disable_info": "Twoja pamięć odnośnie granatów wróciła do normy.",
"wildthrow_select_info": "Wybierz gracza:",
"zeus": "Zeus",
diff --git a/jRandomSkills - SRC Files/src/lang/pt-br.json b/jRandomSkills - SRC Files/src/lang/pt-br.json
index b953a61..117b829 100644
--- a/jRandomSkills - SRC Files/src/lang/pt-br.json
+++ b/jRandomSkills - SRC Files/src/lang/pt-br.json
@@ -24,6 +24,7 @@
"areareaper_select_info": "Escolha o bomb p/ desativar:",
"areareaper_site_disabled": "Bombsite {0} foi desativado - nenhuma bomba pode ser plantada lá!",
"areareaper_used_info": "Seu poder já foi usado.",
+ "areareaper_teammates_info": "A área {0} foi bloqueada para plantar a bomba.",
"areareaper_bombsite_disabled": "Este local de bomba foi desativado!",
"armored": "Super Tiro",
@@ -62,6 +63,7 @@
"carefulbullets": "Errou, mamou",
"carefulbullets_desc": "Selecione um jogador vai sofrer dano ao errar cada tiro",
"carefulbullets_enemy_info": "A partir de agora, seu erro vai literalmente doer.",
+ "carefulbullets_disable_info": "Errar tiros não causará mais dano.",
"carefulbullets_player_info": "'{0}' agora precisa ter mais cuidado.",
"carefulbullets_select_info": "O erro prejudica o jogador:",
@@ -85,6 +87,7 @@
"darkness": "Escuridão",
"darkness_desc": "Aplica um efeito de escuridão a um inimigo escolhido",
"darkness_enemy_info": "Que as luzes se apaguem.",
+ "darkness_disable_info": "As luzes voltaram.",
"darkness_player_info": "A escuridão tomou conta do jogador '{0}'.",
"darkness_select_info": "Escolha jogador: escuridão:",
@@ -97,6 +100,7 @@
"deaf": "Surdo",
"deaf_desc": "Escolha um jogador para desativar todos os sons",
"deaf_enemy_info": "Seus fones de ouvido saíram do jogo.",
+ "deaf_disable_info": "Você pode ouvir novamente.",
"deaf_player_info": "O som foi desativado para o jogador '{0}'.",
"deaf_select_info": "Silenciar jogador:",
@@ -167,6 +171,7 @@
"glitch": "Sem Mapa",
"glitch_desc": "Desativa o radar de um inimigo escolhido",
"glitch_enemy_info": "Seu radar foi desativado.",
+ "glitch_disable_info": "Seu radar voltou ao normal.",
"glitch_player_info": "O radar do jogador '{0}' foi desativado.",
"glitch_select_info": "Desativar radar do jogador:",
@@ -196,6 +201,7 @@
"hotbomb": "Bomba Quente",
"hotbomb_desc": "Enquanto você estiver vivo, a bomba causa dano ao portador",
"hotbomb_hint": "Cuidado, a bomba está quente!",
+ "hotbomb_disable_info": "A bomba não está mais queimando.",
"iana": "Holograma",
"iana_desc": "Clique em [css_useSkill] para controlar seu holograma por alguns segundos",
@@ -218,6 +224,7 @@
"jammer": "No Scope",
"jammer_desc": "Escolha um jogador para desativar a mira",
"jammer_enemy_info": "Sua mira foi desativada.",
+ "jammer_disable_info": "Sua mira voltou ao normal.",
"jammer_player_info": "A mira do jogador '{0}' foi desativada.",
"jammer_select_info": "Desativar mira do jogador:",
@@ -230,6 +237,7 @@
"jumpban": "Perneta",
"jumpban_desc": "Escolha um jogador que não poderá pular",
"jumpban_enemy_info": "Cortaram as suas pernas.",
+ "jumpban_disable_info": "Você recuperou o uso das pernas.",
"jumpban_player_info": "O jogador '{0}' não pode mais pular.",
"jumpban_select_info": "Banir pulo do jogador:",
@@ -260,6 +268,7 @@
"magnifier": "Lupa",
"magnifier_desc": "Força a tela do inimigo a dar um zoom, reduzindo seu campo de visão",
"magnifier_enemy_info": "Seu campo de visão foi distorcido!",
+ "magnifier_disable_info": "Sua visão voltou ao normal.",
"magnifier_player_info": "O jogador ‘{0}’ foi forçado a entrar no modo zoom.",
"magnifier_select_info": "Ampliar tela do jogador:",
@@ -321,12 +330,14 @@
"poison": "Veneno",
"poison_desc": "Escolha um jogador que receberá dano a cada poucos segundos",
"poison_enemy_info": "Você foi envenenado.",
+ "poison_disable_info": "Você agora está imune ao veneno.",
"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_disable_info": "Você pode usar rifles novamente.",
"primaryban_player_info": "O jogador '{0}' não pode mais usar rifles.",
"primaryban_select_info": "Banir rifles do jogador:",
@@ -457,6 +468,8 @@
"wildthrow": "Arremesso Selvagem",
"wildthrow_desc": "Escolha um jogador que terá problemas para lançar granadas",
"wildthrow_player_info": "O jogador '{0}' esqueceu todos os seus lineups",
+ "wildthrow_enemy_info": "Você fica muito nervoso ao lançar granadas.",
+ "wildthrow_disable_info": "Sua memória sobre como lançar granadas voltou ao normal.",
"wildthrow_select_info": "Selecione um jogador:",
"zeus": "Zeus",
diff --git a/jRandomSkills - SRC Files/src/lang/ru.json b/jRandomSkills - SRC Files/src/lang/ru.json
index e8fc4c3..0eae893 100644
--- a/jRandomSkills - SRC Files/src/lang/ru.json
+++ b/jRandomSkills - SRC Files/src/lang/ru.json
@@ -24,6 +24,7 @@
"areareaper_select_info": "Выберите сайт для деактивации:",
"areareaper_site_disabled": "Бомб-сайт {0} деактивирован — бомбу нельзя установить там!",
"areareaper_used_info": "Ваш навык уже был использован.",
+ "areareaper_teammates_info": "Установка бомбы на точке {0} запрещена.",
"areareaper_bombsite_disabled": "Этот бомб-сайт отключён!",
"armored": "Бронированный",
@@ -62,6 +63,7 @@
"carefulbullets": "Осторожные пули",
"carefulbullets_desc": "Выберите игрока, который будет получать урон за каждое ваше промахивание",
"carefulbullets_enemy_info": "Точность теперь буквально имеет значение.",
+ "carefulbullets_disable_info": "Промахи больше не наносят урон.",
"carefulbullets_player_info": "'{0}' теперь должен быть осторожнее.",
"carefulbullets_select_info": "Промахи ранят игрока:",
@@ -85,6 +87,7 @@
"darkness": "Тьма",
"darkness_desc": "Накладывает эффекть тьмы на выбранного врага",
"darkness_enemy_info": "Пусть свет погаснет.",
+ "darkness_disable_info": "Свет снова включился.",
"darkness_player_info": "Тьма охватила игрока '{0}'.",
"darkness_select_info": "Выберите игрока для тьмы:",
@@ -97,6 +100,7 @@
"deaf": "Глухой",
"deaf_desc": "Выберите игрока, у которого будет отключён весь звук",
"deaf_enemy_info": "Ваши наушники покинули игру.",
+ "deaf_disable_info": "Ты снова слышишь.",
"deaf_player_info": "Звук отключён для игрока '{0}'.",
"deaf_select_info": "Отключить звук для игрока:",
@@ -167,6 +171,7 @@
"glitch": "Глитч",
"glitch_desc": "Отключает радар выбранному врагу",
"glitch_enemy_info": "Ваш радар был отключён.",
+ "glitch_disable_info": "Твой радар снова работает.",
"glitch_player_info": "Радар игрока '{0}' был отключён.",
"glitch_select_info": "Отключить радар игроку:",
@@ -196,6 +201,7 @@
"hotbomb": "Горячая бомба",
"hotbomb_desc": "Пока вы живы, бомба наносит урон её носителю",
"hotbomb_hint": "Осторожно, бомба горячая!",
+ "hotbomb_disable_info": "Бомба больше не обжигает.",
"iana": "Голограмма",
"iana_desc": "Нажмите [css_useSkill], чтобы управлять своей голограммой несколько секунд",
@@ -218,6 +224,7 @@
"jammer": "Глушилка",
"jammer_desc": "Выберите игрока, чтобы отключить его прицел",
"jammer_enemy_info": "Ваш прицел был отключён.",
+ "jammer_disable_info": "Твой прицел снова работает.",
"jammer_player_info": "Прицел игрока '{0}' был отключён.",
"jammer_select_info": "Отключить прицел игроку:",
@@ -230,6 +237,7 @@
"jumpban": "Безногий",
"jumpban_desc": "Выберите игрока, который не сможет прыгать",
"jumpban_enemy_info": "Кто-то отрезал вам ноги.",
+ "jumpban_disable_info": "Ты снова можешь нормально двигаться.",
"jumpban_player_info": "Игрок '{0}' больше не может прыгать.",
"jumpban_select_info": "Запретить прыжки игроку:",
@@ -260,6 +268,7 @@
"magnifier": "Лупа",
"magnifier_desc": "Приближает экран врага, уменьшая его поле зрения",
"magnifier_enemy_info": "Ваше поле зрения было искажено!",
+ "magnifier_disable_info": "Твоё зрение восстановилось.",
"magnifier_player_info": "Игрок '{0}' принудительно переведён в режим увеличения.",
"magnifier_select_info": "Увеличить экран игрока:",
@@ -321,12 +330,14 @@
"poison": "Яд",
"poison_desc": "Выберите игрока, который будет получать урон каждые несколько секунд",
"poison_enemy_info": "Вы были отравлены.",
+ "poison_disable_info": "Теперь ты невосприимчив к яду.",
"poison_player_info": "Игрок '{0}' был отравлен.",
"poison_select_info": "Отравить игрока:",
"primaryban": "Без винтовок",
"primaryban_desc": "Выберите игрока, который не сможет использовать винтовки",
"primaryban_enemy_info": "Вы больше не можете использовать винтовки.",
+ "primaryban_disable_info": "Ты снова можешь использовать винтовки.",
"primaryban_player_info": "Игрок '{0}' больше не может использовать винтовки.",
"primaryban_select_info": "Запретить винтовки игроку:",
@@ -457,6 +468,8 @@
"wildthrow": "Дикие броски",
"wildthrow_desc": "Выберите игрока, у которого будут проблемы с бросанием гранат",
"wildthrow_player_info": "Игрок '{0}' забыл все свои гранатлайны",
+ "wildthrow_enemy_info": "Ты слишком волнуешься, когда бросаешь гранаты.",
+ "wildthrow_disable_info": "Твоя память о том, как бросать гранаты, вернулась в норму.",
"wildthrow_select_info": "Выберите игрока:",
"zeus": "Зевс",
@@ -516,4 +529,4 @@
"menu_controlls_scroll": "W/S — Прокрутка",
"menu_controlls_padding": " | ",
"menu_controlls_select": "E — Выбрать"
-}
+}
\ No newline at end of file
diff --git a/jRandomSkills - SRC Files/src/lang/tr.json b/jRandomSkills - SRC Files/src/lang/tr.json
index fca1676..25e1f9b 100644
--- a/jRandomSkills - SRC Files/src/lang/tr.json
+++ b/jRandomSkills - SRC Files/src/lang/tr.json
@@ -196,6 +196,7 @@
"hotbomb": "Sıcak C4",
"hotbomb_desc": "Yaşadığın sürece bombacının canı azalıyor",
"hotbomb_hint": "Bomba çok sıcak!",
+ "hotbomb_disable_info": "Bomba artık yakmıyor.",
"iana": "Hologram",
"iana_desc": "[css_useSkill] tuşuna basarak bir hologram oluştur",
@@ -457,6 +458,8 @@
"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_enemy_info": "Bomba atarken çok heyecanlanıyorsun.",
+ "wildthrow_disable_info": "El bombası atma hafızan normale döndü.",
"wildthrow_select_info": "Bir oyuncu seçin:",
"zeus": "Zeus",
diff --git a/jRandomSkills - SRC Files/src/lang/zh.json b/jRandomSkills - SRC Files/src/lang/zh.json
index 08f05a2..2381f53 100644
Binary files a/jRandomSkills - SRC Files/src/lang/zh.json and b/jRandomSkills - SRC Files/src/lang/zh.json differ
diff --git a/jRandomSkills - SRC Files/src/player/BotManager.cs b/jRandomSkills - SRC Files/src/player/BotManager.cs
index 3a0d2cd..a406f0a 100644
--- a/jRandomSkills - SRC Files/src/player/BotManager.cs
+++ b/jRandomSkills - SRC Files/src/player/BotManager.cs
@@ -51,6 +51,7 @@ namespace src.utils
var randomBot = activeBots[_random.Next(activeBots.Count)];
if (randomBot == null || !randomBot.IsValid) return;
+ if (randomBot.Index != randomBot.OriginalControllerOfCurrentPawn.Value?.Index) return;
if (randomBot.PlayerPawn?.Value == null || !randomBot.PlayerPawn.Value.IsValid || randomBot.PlayerPawn.Value.IsDefusing) return;
var bot_info = PlayerManager.GetPlayerByIndex(randomBot.Index);
diff --git a/jRandomSkills - SRC Files/src/player/ISkill.cs b/jRandomSkills - SRC Files/src/player/ISkill.cs
index 395ee9c..6b2019a 100644
--- a/jRandomSkills - SRC Files/src/player/ISkill.cs
+++ b/jRandomSkills - SRC Files/src/player/ISkill.cs
@@ -25,6 +25,7 @@ public interface ISkill
public static void PlayerDeath(EventPlayerDeath _) { }
public static void PlayerJump(EventPlayerJump _) { }
public static void SwitchTeam(EventSwitchTeam _, GameEventInfo __) { }
+ public static void BotTakeover(EventBotTakeover _) { }
public static void WeaponFire(EventWeaponFire _) { }
public static void WeaponEquip(EventItemEquip _) { }
diff --git a/jRandomSkills - SRC Files/src/player/PlayerEvents.cs b/jRandomSkills - SRC Files/src/player/PlayerEvents.cs
index a171a95..c897992 100644
--- a/jRandomSkills - SRC Files/src/player/PlayerEvents.cs
+++ b/jRandomSkills - SRC Files/src/player/PlayerEvents.cs
@@ -51,6 +51,7 @@ namespace src.player
Instance.RegisterEventHandler(PlayerBlind);
Instance.RegisterEventHandler(PlayerHurt);
Instance.RegisterEventHandler(PlayerJump);
+ Instance.RegisterEventHandler(BotTakeover);
Instance.RegisterEventHandler(WeaponFire);
Instance.RegisterEventHandler(WeaponEquip);
@@ -377,6 +378,15 @@ namespace src.player
}
}
+ private static HookResult BotTakeover(EventBotTakeover @event, GameEventInfo info)
+ {
+ lock (setLock)
+ {
+ DispatchToActiveSkills("BotTakeover", @event);
+ return HookResult.Continue;
+ }
+ }
+
private static HookResult PlayerBlind(EventPlayerBlind @event, GameEventInfo info)
{
lock (setLock)
diff --git a/jRandomSkills - SRC Files/src/player/skills/AreaReaper.cs b/jRandomSkills - SRC Files/src/player/skills/AreaReaper.cs
index 25881ec..88dd9b3 100644
--- a/jRandomSkills - SRC Files/src/player/skills/AreaReaper.cs
+++ b/jRandomSkills - SRC Files/src/player/skills/AreaReaper.cs
@@ -36,16 +36,19 @@ namespace src.player.skills
var playerInfo = PlayerManager.GetPlayerByIndex(player!.Index);
if (playerInfo?.Skill != skillName) return;
+ var playerEvent = PlayerManager.GetPlayerFromEvent(player);
+ if (playerEvent == null || !playerEvent.IsValid) return;
+
if (playerInfo.SkillUsed)
{
- player.PrintToChat($" {ChatColors.Red}{player.GetTranslation("areareaper_used_info")}");
+ playerEvent.PrintToChat($" {ChatColors.Red}{playerEvent.GetTranslation("areareaper_used_info")}");
return;
}
int site = bombsiteA.Contains(commands[0]) ? 0 : bombsiteB.Contains(commands[0]) ? 1 : -1;
if (site == -1)
{
- player.PrintToChat($" {ChatColors.Red}{player.GetTranslation("areareaper_incorrect_site")}");
+ playerEvent.PrintToChat($" {ChatColors.Red}{playerEvent.GetTranslation("areareaper_incorrect_site")}");
return;
}
@@ -71,8 +74,11 @@ namespace src.player.skills
var playerInfo = PlayerManager.GetPlayerByIndex(player.Index);
if (playerInfo == null) return;
+ var playerEvent = PlayerManager.GetPlayerFromEvent(player);
+ if (playerEvent == null || !playerEvent.IsValid) return;
+
playerInfo.SkillUsed = false;
- SkillUtils.CreateMenu(player, [(player.GetTranslation("bombsite_a"), "a")], (player.GetTranslation("bombsite_b"), "b", true));
+ SkillUtils.CreateMenu(player, [(playerEvent.GetTranslation("bombsite_a"), "a")], (playerEvent.GetTranslation("bombsite_b"), "b", true));
}
public static void DisableSkill(CCSPlayerController player)
@@ -103,23 +109,24 @@ namespace src.player.skills
foreach (var player in Utilities.GetPlayers())
{
- if (player == null || !player.IsValid || player.Team != CsTeam.Terrorist) continue;
+ var playerEvent = PlayerManager.GetPlayerFromEvent(player);
+ if (playerEvent == null || !playerEvent.IsValid || player == null || !player.IsValid || player.Team != CsTeam.Terrorist || player.PlayerPawn?.Value?.Health <= 0) continue;
var playerInfo = PlayerManager.GetPlayerByIndex(player!.Index);
if (playerInfo?.Skill == null) continue;
- var pawn = player.PlayerPawn.Value;
+ var pawn = player.PlayerPawn!.Value;
if (pawn == null || !pawn.IsValid || pawn.WeaponServices == null) continue;
var activeWeapon = pawn.WeaponServices.ActiveWeapon.Value;
if (activeWeapon == null || !activeWeapon.IsValid || activeWeapon.DesignerName != "weapon_c4") continue;
-
+
if (!pawn.InBombZone && pawn.InBombZoneTrigger)
- player.PrintToCenterAlert(player.GetTranslation("areareaper_bombsite_disabled"));
+ playerEvent.PrintToCenterAlert(playerEvent.GetTranslation("areareaper_bombsite_disabled"));
}
}
- public class SkillConfig(Skills skill = skillName, bool active = true, string color = "#edf5b5", CsTeam onlyTeam = CsTeam.CounterTerrorist, 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 = "#edf5b5", CsTeam onlyTeam = CsTeam.CounterTerrorist, 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)
{
}
}
diff --git a/jRandomSkills - SRC Files/src/player/skills/Bankrupt.cs b/jRandomSkills - SRC Files/src/player/skills/Bankrupt.cs
index da16eb5..43a0021 100644
--- a/jRandomSkills - SRC Files/src/player/skills/Bankrupt.cs
+++ b/jRandomSkills - SRC Files/src/player/skills/Bankrupt.cs
@@ -58,7 +58,7 @@ namespace src.player.skills
playerInfo.SkillUsed = false;
- 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();
+ var enemies = Utilities.GetPlayers().Where(p => p.IsValid && p.PlayerPawn?.Value?.Health > 0 && 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 => ($"\u202A{e.PlayerName}\u202C : {(e.InGameMoneyServices?.Account ?? 0)}$", e.Index.ToString()))];
@@ -77,29 +77,35 @@ namespace src.player.skills
string option = commands[0];
if (string.IsNullOrEmpty(option)) return;
+ var playerEvent = PlayerManager.GetPlayerFromEvent(player);
+ if (playerEvent == null || !playerEvent.IsValid) return;
+
var playerInfo = PlayerManager.GetPlayerByIndex(player!.Index);
if (playerInfo?.Skill != skillName) return;
if (playerInfo.SkillUsed)
{
- player.PrintToChat($" {ChatColors.Red}{player.GetTranslation("selectplayerskill_used_info")}");
+ playerEvent.PrintToChat($" {ChatColors.Red}{playerEvent.GetTranslation("selectplayerskill_used_info")}");
return;
}
if (uint.TryParse(option, out uint enemyIndex))
{
var enemy = Utilities.GetEntityFromIndex((int)enemyIndex);
- if (enemy != null && enemy.IsValid && enemy.PawnIsAlive && enemy.Team != player.Team)
+ if (enemy != null && enemy.IsValid && enemy.PlayerPawn?.Value?.Health > 0 && enemy.Team != player.Team)
{
ResetMoney(enemy);
playerInfo.SkillUsed = true;
SkillUtils.CloseMenu(player);
- player.PrintToChat($" {ChatColors.Lime}{player.GetTranslation("bankrupt_player_info", enemy.PlayerName)}");
- enemy.PrintToChat($" {ChatColors.Red}{enemy.GetTranslation("bankrupt_enemy_info")}");
+ playerEvent.PrintToChat($" {ChatColors.Lime}{playerEvent.GetTranslation("bankrupt_player_info", enemy.PlayerName)}");
+
+ var enemyEvent = PlayerManager.GetPlayerFromEvent(enemy);
+ if (enemyEvent != null && enemyEvent.IsValid)
+ enemyEvent.PrintToChat($" {ChatColors.Red}{enemyEvent.GetTranslation("bankrupt_enemy_info")}");
return;
}
}
- player.PrintToChat($" {ChatColors.Red}{player.GetTranslation("selectplayerskill_incorrect_enemy_index")}");
+ playerEvent.PrintToChat($" {ChatColors.Red}{playerEvent.GetTranslation("selectplayerskill_incorrect_enemy_index")}");
}
private static void ResetMoney(CCSPlayerController enemy)
diff --git a/jRandomSkills - SRC Files/src/player/skills/C4Camouflage.cs b/jRandomSkills - SRC Files/src/player/skills/C4Camouflage.cs
index 6e8e265..3dca3d3 100644
--- a/jRandomSkills - SRC Files/src/player/skills/C4Camouflage.cs
+++ b/jRandomSkills - SRC Files/src/player/skills/C4Camouflage.cs
@@ -51,7 +51,7 @@ namespace src.player.skills
var playerInfo = PlayerManager.GetPlayerByIndex(player!.Index);
if (playerInfo?.Skill != skillName) return;
- if (weapon == "c4")
+ if (weapon == "c4" && player.PlayerPawn?.Value?.Health > 0)
{
invisiblePlayers.TryAdd(player.Index, 0);
SkillUtils.SetPlayerInvisibility(player, .5f);
@@ -69,7 +69,7 @@ namespace src.player.skills
foreach (var player in Utilities.GetPlayers())
{
- if (player.LifeState != (byte)LifeState_t.LIFE_ALIVE && invisiblePlayers.ContainsKey(player.Index))
+ if (player.PlayerPawn?.Value?.Health <= 0 && invisiblePlayers.ContainsKey(player.Index))
{
invisiblePlayers.TryRemove(player.Index, out _);
SkillUtils.SetPlayerInvisibility(player, 0);
diff --git a/jRandomSkills - SRC Files/src/player/skills/CarefulBullets.cs b/jRandomSkills - SRC Files/src/player/skills/CarefulBullets.cs
index eacdae7..e938991 100644
--- a/jRandomSkills - SRC Files/src/player/skills/CarefulBullets.cs
+++ b/jRandomSkills - SRC Files/src/player/skills/CarefulBullets.cs
@@ -61,19 +61,27 @@ namespace src.player.skills
var playerInfo = PlayerManager.GetPlayerByIndex(player!.Index);
if (playerInfo?.Skill != skillName) return;
+ var playerEvent = PlayerManager.GetPlayerFromEvent(player);
+ if (playerEvent == null || !playerEvent.IsValid) return;
+
if (playerInfo.SkillUsed)
{
- player.PrintToChat($" {ChatColors.Red}{player.GetTranslation("areareaper_used_info")}");
+ playerEvent.PrintToChat($" {ChatColors.Red}{playerEvent.GetTranslation("areareaper_used_info")}");
return;
}
string enemyId = commands[0];
- if (!uint.TryParse(enemyId, out uint enemyIndex)) { player.PrintToChat($" {ChatColors.Red}" + player.GetTranslation("selectplayerskill_incorrect_enemy_index")); return; }
+
+ if (!uint.TryParse(enemyId, out uint enemyIndex)) {
+ playerEvent.PrintToChat($" {ChatColors.Red}" + playerEvent.GetTranslation("selectplayerskill_incorrect_enemy_index"));
+ return;
+ }
+
var enemy = Utilities.GetPlayerFromIndex((int)enemyIndex);
if (enemy == null)
{
- player.PrintToChat($" {ChatColors.Red}" + player.GetTranslation("selectplayerskill_incorrect_enemy_index"));
+ playerEvent.PrintToChat($" {ChatColors.Red}" + playerEvent.GetTranslation("selectplayerskill_incorrect_enemy_index"));
return;
}
@@ -81,8 +89,11 @@ namespace src.player.skills
playersToTarget[player.Index] = enemy.Index;
playerInfo.SkillUsed = true;
- player.PrintToChat($" {ChatColors.Green}" + player.GetTranslation("carefulbullets_player_info", enemy.PlayerName));
- enemy.PrintToChat($" {ChatColors.Red}" + enemy.GetTranslation("carefulbullets_enemy_info"));
+ var enemyEvent = PlayerManager.GetPlayerFromEvent(enemy);
+ if (enemyEvent == null || !enemyEvent.IsValid) return;
+
+ playerEvent.PrintToChat($" {ChatColors.Green}" + playerEvent.GetTranslation("carefulbullets_player_info", enemy.PlayerName));
+ enemyEvent.PrintToChat($" {ChatColors.Red}" + enemyEvent.GetTranslation("carefulbullets_enemy_info"));
}
public static void EnableSkill(CCSPlayerController player)
@@ -91,6 +102,9 @@ namespace src.player.skills
if (playerInfo == null) return;
playerInfo.SkillUsed = false;
+ var playerEvent = PlayerManager.GetPlayerFromEvent(player);
+ if (playerEvent == null || !playerEvent.IsValid) return;
+
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)
{
@@ -98,11 +112,14 @@ namespace src.player.skills
SkillUtils.CreateMenu(player, menuItems);
}
else
- player.PrintToChat($" {ChatColors.Red}{player.GetTranslation("selectplayerskill_incorrect_enemy_index")}");
+ playerEvent.PrintToChat($" {ChatColors.Red}{playerEvent.GetTranslation("selectplayerskill_incorrect_enemy_index")}");
}
public static void BulletImpact(EventBulletImpact @event)
{
+ var eventPlayer = @event.Userid;
+ if (eventPlayer == null || !eventPlayer.IsValid) return;
+
var player = PlayerManager.GetPlayerEvent(@event.Userid);
if (player == null || !player.IsValid) return;
@@ -128,7 +145,10 @@ namespace src.player.skills
Instance.AddTickTimer(1, () =>
{
if (lastShot.TryRemove(playerIndex, out bool didHit) && !didHit)
+ {
+ eventPlayer.ExecuteClientCommand($"play player/player_damagebody_0{Instance.Random.Next(4,8)}");
SkillUtils.TakeHealth(playerPawn, SkillsInfo.GetValue(skillName, "damageAfterMiss"));
+ }
lastShot.TryRemove(playerIndex, out _);
});
}
@@ -155,6 +175,8 @@ namespace src.player.skills
return;
CCSPlayerController attacker = PlayerManager.GetPlayerEvent(attackerPawn.Controller.Value.As())!;
+
+ if (attacker == null || !attacker.IsValid) return;
if (!targetPlayers.ContainsKey(attacker.Index)) return;
hitPlayer.AddOrUpdate(attacker.Index, Server.TickCount, (_, _) => Server.TickCount);
@@ -171,6 +193,10 @@ namespace src.player.skills
targetPlayers.TryRemove(targetIndex, out _);
lastShot.TryRemove(targetIndex, out _);
hitPlayer.TryRemove(targetIndex, out _);
+
+ var target = PlayerManager.GetPlayerFromEvent(Utilities.GetPlayerFromIndex((int)targetIndex));
+ if (target != null && target.IsValid && target.PawnIsAlive && !SkillUtils.IsFreezeTime())
+ target.PrintToChat($" {ChatColors.Green}" + target.GetTranslation("carefulbullets_disable_info"));
}
SkillUtils.CloseMenu(player);
diff --git a/jRandomSkills - SRC Files/src/player/skills/Darkness.cs b/jRandomSkills - SRC Files/src/player/skills/Darkness.cs
index c7c044a..f836faf 100644
--- a/jRandomSkills - SRC Files/src/player/skills/Darkness.cs
+++ b/jRandomSkills - SRC Files/src/player/skills/Darkness.cs
@@ -45,7 +45,7 @@ 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.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.Index.ToString()))];
SkillUtils.UpdateMenu(player, menuItems);
@@ -58,19 +58,27 @@ namespace src.player.skills
var playerInfo = PlayerManager.GetPlayerByIndex(player!.Index);
if (playerInfo?.Skill != skillName) return;
+ var playerEvent = PlayerManager.GetPlayerFromEvent(player);
+ if (playerEvent == null || !playerEvent.IsValid) return;
+
if (playerInfo.SkillUsed)
{
- player.PrintToChat($" {ChatColors.Red}{player.GetTranslation("areareaper_used_info")}");
+ playerEvent.PrintToChat($" {ChatColors.Red}{playerEvent.GetTranslation("areareaper_used_info")}");
return;
}
string enemyId = commands[0];
- if (!uint.TryParse(enemyId, out uint enemyIndex)) { player.PrintToChat($" {ChatColors.Red}" + player.GetTranslation("selectplayerskill_incorrect_enemy_index")); return; }
+
+ if (!uint.TryParse(enemyId, out uint enemyIndex)) {
+ playerEvent.PrintToChat($" {ChatColors.Red}" + playerEvent.GetTranslation("selectplayerskill_incorrect_enemy_index"));
+ return;
+ }
+
var enemy = Utilities.GetPlayerFromIndex((int)enemyIndex);
if (enemy == null)
{
- player.PrintToChat($" {ChatColors.Red}" + player.GetTranslation("selectplayerskill_incorrect_enemy_index"));
+ playerEvent.PrintToChat($" {ChatColors.Red}" + playerEvent.GetTranslation("selectplayerskill_incorrect_enemy_index"));
return;
}
@@ -78,8 +86,24 @@ namespace src.player.skills
playersToTarget[player.Index] = enemy.Index;
playerInfo.SkillUsed = true;
- player.PrintToChat($" {ChatColors.Green}" + player.GetTranslation("darkness_player_info", enemy.PlayerName));
- enemy.PrintToChat($" {ChatColors.Red}" + enemy.GetTranslation("darkness_enemy_info"));
+ var enemyEvent = PlayerManager.GetPlayerFromEvent(enemy);
+ if (enemyEvent == null || !enemyEvent.IsValid) return;
+
+ playerEvent.PrintToChat($" {ChatColors.Green}" + playerEvent.GetTranslation("darkness_player_info", enemy.PlayerName));
+ enemyEvent.PrintToChat($" {ChatColors.Red}" + enemyEvent.GetTranslation("darkness_enemy_info"));
+ }
+
+ public static void BotTakeover(EventBotTakeover @event)
+ {
+ var bot = @event.Botid;
+ if (bot == null || !bot.IsValid) return;
+
+ var player = @event.Userid;
+ if (player == null || !player.IsValid) return;
+
+ if (!playersInDark.ContainsKey(bot.Index)) return;
+
+ ApplyColor(player);
}
public static void EnableSkill(CCSPlayerController player)
@@ -88,6 +112,9 @@ namespace src.player.skills
if (playerInfo == null) return;
playerInfo.SkillUsed = false;
+ var playerEvent = PlayerManager.GetPlayerFromEvent(player);
+ if (playerEvent == null || !playerEvent.IsValid) return;
+
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)
{
@@ -95,7 +122,7 @@ namespace src.player.skills
SkillUtils.CreateMenu(player, menuItems);
}
else
- player.PrintToChat($" {ChatColors.Red}{player.GetTranslation("selectplayerskill_incorrect_enemy_index")}");
+ playerEvent.PrintToChat($" {ChatColors.Red}{playerEvent.GetTranslation("selectplayerskill_incorrect_enemy_index")}");
}
public static void DisableSkill(CCSPlayerController player)
@@ -104,7 +131,7 @@ namespace src.player.skills
{
if (playersToTarget.TryRemove(player.Index, out uint targetIndex))
{
- var target = Utilities.GetPlayerFromIndex((int)targetIndex);
+ var target = PlayerManager.GetPlayerFromEvent(Utilities.GetPlayerFromIndex((int)targetIndex));
if (target != null && target.IsValid)
SetUpPostProcessing(target, true);
playersInDark.TryRemove(targetIndex, out _);
@@ -124,11 +151,12 @@ namespace src.player.skills
SkillUtils.CloseMenu(player);
}
- private static void SetUpPostProcessing(CCSPlayerController player, bool turnOff = false)
+ private static void SetUpPostProcessing(CCSPlayerController? player, bool turnOff = false)
{
if (player == null || !player.IsValid) return;
uint playerIndex = player.Index;
+ player = PlayerManager.GetPlayerFromEvent(player);
lock (setLock)
{
@@ -145,7 +173,7 @@ namespace src.player.skills
return;
}
- var target = Utilities.GetPlayerFromIndex((int)playerIndex);
+ var target = PlayerManager.GetPlayerFromEvent(Utilities.GetPlayerFromIndex((int)playerIndex));
if (target == null || !target.IsValid)
{
darkTimer?.Kill();
diff --git a/jRandomSkills - SRC Files/src/player/skills/Deactivator.cs b/jRandomSkills - SRC Files/src/player/skills/Deactivator.cs
index b664117..555cbaf 100644
--- a/jRandomSkills - SRC Files/src/player/skills/Deactivator.cs
+++ b/jRandomSkills - SRC Files/src/player/skills/Deactivator.cs
@@ -57,13 +57,21 @@ namespace src.player.skills
if (playerPawn?.CBodyComponent == null) return;
if (!player.IsValid || player.LifeState != (byte)LifeState_t.LIFE_ALIVE) return;
+ var playerEvent = PlayerManager.GetPlayerFromEvent(player);
+ if (playerEvent == null || !playerEvent.IsValid) return;
+
string enemyId = commands[0];
- if (!uint.TryParse(enemyId, out uint enemyIndex)) { player.PrintToChat($" {ChatColors.Red}" + player.GetTranslation("selectplayerskill_incorrect_enemy_index")); return; }
+
+ if (!uint.TryParse(enemyId, out uint enemyIndex)) {
+ playerEvent.PrintToChat($" {ChatColors.Red}" + playerEvent.GetTranslation("selectplayerskill_incorrect_enemy_index"));
+ return;
+ }
+
var enemy = Utilities.GetPlayerFromIndex((int)enemyIndex);
if (enemy == null)
{
- player.PrintToChat($" {ChatColors.Red}" + player.GetTranslation("selectplayerskill_incorrect_enemy_index"));
+ playerEvent.PrintToChat($" {ChatColors.Red}" + playerEvent.GetTranslation("selectplayerskill_incorrect_enemy_index"));
return;
}
@@ -72,22 +80,27 @@ namespace src.player.skills
public static void EnableSkill(CCSPlayerController player)
{
+ var playerEvent = PlayerManager.GetPlayerFromEvent(player);
+ if (playerEvent == null || !playerEvent.IsValid) return;
+
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 = [];
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(($"\u202A{enemy.PlayerName}\u202C : {player.GetSkillName(skillData.Skill)}", enemy.Index.ToString()));
+
+ menuItems.Add(($"\u202A{enemy!.PlayerName}\u202C : {playerEvent.GetSkillName(skillData.Skill)}", enemy.Index.ToString()));
}
SkillUtils.CreateMenu(player, menuItems);
}
else
- player.PrintToChat($" {ChatColors.Red}{player.GetTranslation("selectplayerskill_incorrect_enemy_index")}");
+ playerEvent.PrintToChat($" {ChatColors.Red}{player.GetTranslation("selectplayerskill_incorrect_enemy_index")}");
}
public static void DisableSkill(CCSPlayerController player)
@@ -103,11 +116,14 @@ namespace src.player.skills
var playerInfo = PlayerManager.GetPlayerByIndex(player!.Index);
var enemyInfo = PlayerManager.GetPlayerByIndex(enemy.Index);
+ var playerEvent = PlayerManager.GetPlayerFromEvent(player);
+ if (playerEvent == null || !playerEvent.IsValid) return;
+
if (playerInfo != null)
{
playerInfo.Skill = Skills.None;
playerInfo.SpecialSkill = skillName;
- player.PrintToChat($" {ChatColors.Green}" + player.GetTranslation("deactivator_player_info", enemy.PlayerName));
+ playerEvent.PrintToChat($" {ChatColors.Green}" + playerEvent.GetTranslation("deactivator_player_info", enemy.PlayerName));
}
if (enemyInfo != null)
@@ -115,7 +131,11 @@ namespace src.player.skills
Instance.SkillAction(enemyInfo.Skill.ToString(), "DisableSkill", [enemy]);
enemyInfo.SpecialSkill = enemyInfo.Skill;
enemyInfo.Skill = Skills.None;
- enemy.PrintToChat($" {ChatColors.Red}" + enemy.GetTranslation("deactivator_enemy_info"));
+
+ var enemyEvent = PlayerManager.GetPlayerFromEvent(enemy);
+ if (enemyEvent == null || !enemyEvent.IsValid) return;
+
+ enemyEvent.PrintToChat($" {ChatColors.Red}" + enemyEvent.GetTranslation("deactivator_enemy_info"));
}
}
diff --git a/jRandomSkills - SRC Files/src/player/skills/Deaf.cs b/jRandomSkills - SRC Files/src/player/skills/Deaf.cs
index e791b66..13d974a 100644
--- a/jRandomSkills - SRC Files/src/player/skills/Deaf.cs
+++ b/jRandomSkills - SRC Files/src/player/skills/Deaf.cs
@@ -38,7 +38,7 @@ namespace src.player.skills
{
foreach (var playerIndex in deafPlayers.Keys)
{
- var player = Utilities.GetPlayerFromIndex((int)playerIndex);
+ var player = PlayerManager.GetPlayerFromEvent(Utilities.GetPlayerFromIndex((int)playerIndex));
if (player == null || !player.IsValid) continue;
um.Recipients.Remove(player);
}
@@ -66,19 +66,27 @@ namespace src.player.skills
var playerInfo = PlayerManager.GetPlayerByIndex(player!.Index);
if (playerInfo?.Skill != skillName) return;
+ var playerEvent = PlayerManager.GetPlayerFromEvent(player);
+ if (playerEvent == null || !playerEvent.IsValid) return;
+
if (playerInfo.SkillUsed)
{
- player.PrintToChat($" {ChatColors.Red}{player.GetTranslation("areareaper_used_info")}");
+ playerEvent.PrintToChat($" {ChatColors.Red}{playerEvent.GetTranslation("areareaper_used_info")}");
return;
}
string enemyId = commands[0];
- if (!uint.TryParse(enemyId, out uint enemyIndex)) { player.PrintToChat($" {ChatColors.Red}" + player.GetTranslation("selectplayerskill_incorrect_enemy_index")); return; }
+
+ if (!uint.TryParse(enemyId, out uint enemyIndex)) {
+ playerEvent.PrintToChat($" {ChatColors.Red}" + playerEvent.GetTranslation("selectplayerskill_incorrect_enemy_index"));
+ return;
+ }
+
var enemy = Utilities.GetPlayerFromIndex((int)enemyIndex);
if (enemy == null)
{
- player.PrintToChat($" {ChatColors.Red}" + player.GetTranslation("selectplayerskill_incorrect_enemy_index"));
+ playerEvent.PrintToChat($" {ChatColors.Red}" + playerEvent.GetTranslation("selectplayerskill_incorrect_enemy_index"));
return;
}
@@ -86,8 +94,11 @@ namespace src.player.skills
playersToTarget[player.Index] = enemy.Index;
playerInfo.SkillUsed = true;
- player.PrintToChat($" {ChatColors.Green}" + player.GetTranslation("deaf_player_info", enemy.PlayerName));
- enemy.PrintToChat($" {ChatColors.Red}" + enemy.GetTranslation("deaf_enemy_info"));
+ var enemyEvent = PlayerManager.GetPlayerFromEvent(enemy);
+ if (enemyEvent == null || !enemyEvent.IsValid) return;
+
+ playerEvent.PrintToChat($" {ChatColors.Green}" + playerEvent.GetTranslation("deaf_player_info", enemy.PlayerName));
+ enemyEvent.PrintToChat($" {ChatColors.Red}" + enemyEvent.GetTranslation("deaf_enemy_info"));
}
public static void EnableSkill(CCSPlayerController player)
@@ -96,6 +107,9 @@ namespace src.player.skills
if (playerInfo == null) return;
playerInfo.SkillUsed = false;
+ var playerEvent = PlayerManager.GetPlayerFromEvent(player);
+ if (playerEvent == null || !playerEvent.IsValid) return;
+
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)
{
@@ -103,7 +117,7 @@ namespace src.player.skills
SkillUtils.CreateMenu(player, menuItems);
}
else
- player.PrintToChat($" {ChatColors.Red}{player.GetTranslation("selectplayerskill_incorrect_enemy_index")}");
+ playerEvent.PrintToChat($" {ChatColors.Red}{playerEvent.GetTranslation("selectplayerskill_incorrect_enemy_index")}");
}
public static void DisableSkill(CCSPlayerController player)
@@ -111,6 +125,11 @@ namespace src.player.skills
if (playersToTarget.TryRemove(player.Index, out uint targetIndex))
deafPlayers.TryRemove(targetIndex, out _);
+ var target = PlayerManager.GetPlayerFromEvent(Utilities.GetPlayerFromIndex((int)targetIndex));
+ if (target != null && target.IsValid && target.PawnIsAlive && !SkillUtils.IsFreezeTime())
+ target.PrintToChat($" {ChatColors.Green}" + target.GetTranslation("deaf_disable_info"));
+ }
+
SkillUtils.CloseMenu(player);
}
diff --git a/jRandomSkills - SRC Files/src/player/skills/Duplicator.cs b/jRandomSkills - SRC Files/src/player/skills/Duplicator.cs
index cd75c12..16f3a83 100644
--- a/jRandomSkills - SRC Files/src/player/skills/Duplicator.cs
+++ b/jRandomSkills - SRC Files/src/player/skills/Duplicator.cs
@@ -59,12 +59,15 @@ namespace src.player.skills
if (playerPawn?.CBodyComponent == null) return;
if (!player.IsValid || player.LifeState != (byte)LifeState_t.LIFE_ALIVE) return;
+ var playerEvent = PlayerManager.GetPlayerFromEvent(player);
+ if (playerEvent == null || !playerEvent.IsValid) return;
+
string enemyId = commands[0];
var enemy = Utilities.GetPlayers().FirstOrDefault(p => p.Index.ToString() == enemyId);
if (enemy == null)
{
- player.PrintToChat($" {ChatColors.Red}" + player.GetTranslation("selectplayerskill_incorrect_enemy_index"));
+ playerEvent.PrintToChat($" {ChatColors.Red}" + playerEvent.GetTranslation("selectplayerskill_incorrect_enemy_index"));
return;
}
@@ -73,7 +76,10 @@ namespace src.player.skills
public static void EnableSkill(CCSPlayerController player)
{
- var enemies = Utilities.GetPlayers().Where(p => p.PawnIsAlive && p != player && p.IsValid && !p.IsHLTV && p.Team != CsTeam.Spectator && p.Team != CsTeam.None).ToArray();
+ var playerEvent = PlayerManager.GetPlayerFromEvent(player);
+ if (playerEvent == null || !playerEvent.IsValid) return;
+
+ var enemies = Utilities.GetPlayers().Where(p => p != null && p.IsValid && p != player && p.PlayerPawn?.Value?.Health > 0 && !p.IsHLTV && p.Team != CsTeam.Spectator && p.Team != CsTeam.None).ToArray();
if (enemies.Length > 0)
{
ConcurrentBag skills = [];
@@ -87,7 +93,7 @@ namespace src.player.skills
if (skillData == null) continue;
skills.Add(skillData.Skill.ToString());
- menuItems.Add(($"\u202A{enemy.PlayerName}\u202C : {player.GetSkillName(skillData.Skill)}", enemy.Index.ToString()));
+ menuItems.Add(($"\u202A{enemy.PlayerName}\u202C : {playerEvent.GetSkillName(skillData.Skill)}", enemy.Index.ToString()));
}
int ctSkills = Event.counterterroristSkills.Count(s => skills.Contains(s.Name));
@@ -100,11 +106,11 @@ namespace src.player.skills
}
SkillUtils.CreateMenu(player, menuItems);
- SkillUtils.PrintToChat(player, $"{ChatColors.DarkRed}{player.GetSkillName(skillName)}{ChatColors.Lime}: {player.GetSkillDescription(skillName)}",
+ SkillUtils.PrintToChat(player, $"{ChatColors.DarkRed}{playerEvent.GetSkillName(skillName)}{ChatColors.Lime}: {playerEvent.GetSkillDescription(skillName)}",
border: !Utilities.GetPlayers().Any(p => p.Team == player.Team && p != player) ? "tb" : "t");
}
else
- player.PrintToChat($" {ChatColors.Red}{player.GetTranslation("selectplayerskill_incorrect_enemy_index")}");
+ playerEvent.PrintToChat($" {ChatColors.Red}{playerEvent.GetTranslation("selectplayerskill_incorrect_enemy_index")}");
}
public static void DisableSkill(CCSPlayerController player)
@@ -121,6 +127,9 @@ namespace src.player.skills
var enemyInfo = PlayerManager.GetPlayerByIndex(enemy.Index);
if (playerInfo == null || enemyInfo == null) return;
+ var playerEvent = PlayerManager.GetPlayerFromEvent(player);
+ if (playerEvent == null || !playerEvent.IsValid) return;
+
var enemySkill = enemyInfo.Skill;
bool ctSkill = Event.counterterroristSkills.Any(s => s.Name == enemySkill.ToString());
bool ttSkill = Event.terroristSkills.Any(s => s.Name == enemySkill.ToString());
@@ -135,8 +144,10 @@ namespace src.player.skills
var player = Utilities.GetPlayerFromIndex((int)playerIndex);
if (player == null || !player.IsValid) return;
- Instance.SkillAction(skillName.ToString(), "EnableSkill", [player]);
- player.PrintToChat($" {ChatColors.Red}" + player.GetTranslation("thief_incorrect_skill", enemyName));
+ if (!player.IsBot)
+ Instance.SkillAction(skillName.ToString(), "EnableSkill", [player]);
+
+ playerEvent.PrintToChat($" {ChatColors.Red}" + playerEvent.GetTranslation("thief_incorrect_skill", enemyName));
}, CounterStrikeSharp.API.Modules.Timers.TimerFlags.STOP_ON_MAPCHANGE);
return;
}
@@ -160,7 +171,7 @@ namespace src.player.skills
else
Instance?.SkillAction(enemySkill.ToString(), "EnableSkill", [player]);
}, CounterStrikeSharp.API.Modules.Timers.TimerFlags.STOP_ON_MAPCHANGE);
- player.PrintToChat($" {ChatColors.Green}" + player.GetTranslation("duplicator_player_info", enemy.PlayerName));
+ playerEvent.PrintToChat($" {ChatColors.Green}" + playerEvent.GetTranslation("duplicator_player_info", enemy.PlayerName));
}
public class SkillConfig(Skills skill = skillName, bool active = true, string color = "#ffb73b", 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)
diff --git a/jRandomSkills - SRC Files/src/player/skills/Gambler.cs b/jRandomSkills - SRC Files/src/player/skills/Gambler.cs
index ac48132..9f68d6d 100644
--- a/jRandomSkills - SRC Files/src/player/skills/Gambler.cs
+++ b/jRandomSkills - SRC Files/src/player/skills/Gambler.cs
@@ -28,24 +28,27 @@ namespace src.player.skills
var playerInfo = PlayerManager.GetPlayerByIndex(player!.Index);
if (playerInfo?.Skill != skillName) return;
+ var playerEvent = PlayerManager.GetPlayerFromEvent(player);
+ if (playerEvent == null || !playerEvent.IsValid) return;
+
uint playerIndex = player.Index;
if (playerInfo.SkillUsed)
{
- player.PrintToChat($" {ChatColors.Red}{player.GetTranslation("areareaper_used_info")}");
+ playerEvent.PrintToChat($" {ChatColors.Red}{playerEvent.GetTranslation("areareaper_used_info")}");
return;
}
var skill = SkillData.Skills.FirstOrDefault(s => player.GetSkillName(s.Skill).Equals(commands[0], StringComparison.OrdinalIgnoreCase) || s.Skill.ToString().Equals(commands[0], StringComparison.OrdinalIgnoreCase));
if (skill == null)
{
- player.PrintToChat($" {ChatColors.Red}" + player.GetTranslation("skill_not_found_setskill"));
+ playerEvent.PrintToChat($" {ChatColors.Red}" + playerEvent.GetTranslation("skill_not_found_setskill"));
return;
}
if (skill.Skill == skillName && !TakeMoney(player))
{
- player.PrintToChat($" {ChatColors.Red}" + player.GetTranslation("gambler_no_money"));
+ playerEvent.PrintToChat($" {ChatColors.Red}" + playerEvent.GetTranslation("gambler_no_money"));
return;
}
@@ -96,9 +99,12 @@ namespace src.player.skills
skills.Remove(firstSkill);
var secondSkill = skills[Instance.Random.Next(skills.Count)];
- ConcurrentBag<(string, string)> menuItems = [(player.GetSkillName(firstSkill.Skill), firstSkill.Skill.ToString()),
- (player.GetSkillName(secondSkill.Skill), secondSkill.Skill.ToString())];
- SkillUtils.CreateMenu(player, menuItems, (player.GetTranslation("gambler_more", SkillsInfo.GetValue(skillName, "refreshPrice")), skillName.ToString(), false));
+ var playerEvent = PlayerManager.GetPlayerFromEvent(player);
+ if (playerEvent == null || !playerEvent.IsValid) return;
+
+ ConcurrentBag<(string, string)> menuItems = [(playerEvent.GetSkillName(firstSkill.Skill), firstSkill.Skill.ToString()),
+ (playerEvent.GetSkillName(secondSkill.Skill), secondSkill.Skill.ToString())];
+ SkillUtils.CreateMenu(player, menuItems, (playerEvent.GetTranslation("gambler_more", SkillsInfo.GetValue(skillName, "refreshPrice")), skillName.ToString(), false));
}
public static void DisableSkill(CCSPlayerController player)
diff --git a/jRandomSkills - SRC Files/src/player/skills/Glitch.cs b/jRandomSkills - SRC Files/src/player/skills/Glitch.cs
index 912e13e..b5f450f 100644
--- a/jRandomSkills - SRC Files/src/player/skills/Glitch.cs
+++ b/jRandomSkills - SRC Files/src/player/skills/Glitch.cs
@@ -1,6 +1,5 @@
using CounterStrikeSharp.API;
using CounterStrikeSharp.API.Core;
-using CounterStrikeSharp.API.Modules.Commands.Targeting;
using CounterStrikeSharp.API.Modules.Utils;
using src.utils;
using System.Collections.Concurrent;
@@ -56,30 +55,54 @@ namespace src.player.skills
var playerInfo = PlayerManager.GetPlayerByIndex(player!.Index);
if (playerInfo?.Skill != skillName) return;
+ var playerEvent = PlayerManager.GetPlayerFromEvent(player);
+ if (playerEvent == null || !playerEvent.IsValid) return;
+
if (playerInfo.SkillUsed)
{
- player.PrintToChat($" {ChatColors.Red}{player.GetTranslation("areareaper_used_info")}");
+ playerEvent.PrintToChat($" {ChatColors.Red}{playerEvent.GetTranslation("areareaper_used_info")}");
return;
}
string enemyId = commands[0];
- if (!uint.TryParse(enemyId, out uint enemyIndex)) { player.PrintToChat($" {ChatColors.Red}" + player.GetTranslation("selectplayerskill_incorrect_enemy_index")); return; }
+
+ if (!uint.TryParse(enemyId, out uint enemyIndex)) {
+ playerEvent.PrintToChat($" {ChatColors.Red}" + playerEvent.GetTranslation("selectplayerskill_incorrect_enemy_index"));
+ return;
+ }
+
var enemy = Utilities.GetPlayerFromIndex((int)enemyIndex);
if (enemy == null)
{
- player.PrintToChat($" {ChatColors.Red}" + player.GetTranslation("selectplayerskill_incorrect_enemy_index"));
+ playerEvent.PrintToChat($" {ChatColors.Red}" + playerEvent.GetTranslation("selectplayerskill_incorrect_enemy_index"));
return;
}
glitchedPlayers.TryAdd(enemy.Index, 0);
playersToTarget[player.Index] = enemy.Index;
- enemy.ReplicateConVar("sv_disable_radar", "1");
+ var enemyEvent = PlayerManager.GetPlayerFromEvent(enemy);
+ if (enemyEvent == null || !enemyEvent.IsValid) return;
+
+ enemyEvent.ReplicateConVar("sv_disable_radar", "1");
playerInfo.SkillUsed = true;
- player.PrintToChat($" {ChatColors.Green}" + player.GetTranslation("glitch_player_info", enemy.PlayerName));
- enemy.PrintToChat($" {ChatColors.Red}" + enemy.GetTranslation("glitch_enemy_info"));
+ playerEvent.PrintToChat($" {ChatColors.Green}" + playerEvent.GetTranslation("glitch_player_info", enemy.PlayerName));
+ enemyEvent.PrintToChat($" {ChatColors.Red}" + enemyEvent.GetTranslation("glitch_enemy_info"));
+ }
+
+ public static void BotTakeover(EventBotTakeover @event)
+ {
+ var bot = PlayerManager.GetPlayerEvent(@event.Botid);
+ if (bot == null || !bot.IsValid) return;
+
+ var player = @event.Userid;
+ if (player == null || !player.IsValid) return;
+
+ if (!glitchedPlayers.ContainsKey(bot.Index)) return;
+
+ player.ReplicateConVar("sv_disable_radar", "1");
}
public static void EnableSkill(CCSPlayerController player)
@@ -88,6 +111,9 @@ namespace src.player.skills
if (playerInfo == null) return;
playerInfo.SkillUsed = false;
+ var playerEvent = PlayerManager.GetPlayerFromEvent(player);
+ if (playerEvent == null || !playerEvent.IsValid) return;
+
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)
{
@@ -95,14 +121,14 @@ namespace src.player.skills
SkillUtils.CreateMenu(player, menuItems);
}
else
- player.PrintToChat($" {ChatColors.Red}{player.GetTranslation("selectplayerskill_incorrect_enemy_index")}");
+ playerEvent.PrintToChat($" {ChatColors.Red}{playerEvent.GetTranslation("selectplayerskill_incorrect_enemy_index")}");
}
public static void DisableSkill(CCSPlayerController player)
{
if (playersToTarget.TryRemove(player.Index, out uint targetIndex))
{
- var target = Utilities.GetPlayerFromIndex((int)targetIndex);
+ var target = PlayerManager.GetPlayerFromEvent(Utilities.GetPlayerFromIndex((int)targetIndex));
if (target != null && target.IsValid)
target.ReplicateConVar("sv_disable_radar", "0");
glitchedPlayers.TryRemove(targetIndex, out _);
diff --git a/jRandomSkills - SRC Files/src/player/skills/HotBomb.cs b/jRandomSkills - SRC Files/src/player/skills/HotBomb.cs
index 41ee1ff..f6cdfc7 100644
--- a/jRandomSkills - SRC Files/src/player/skills/HotBomb.cs
+++ b/jRandomSkills - SRC Files/src/player/skills/HotBomb.cs
@@ -1,5 +1,6 @@
using CounterStrikeSharp.API;
using CounterStrikeSharp.API.Core;
+using CounterStrikeSharp.API.Modules.Commands.Targeting;
using CounterStrikeSharp.API.Modules.Utils;
using src.utils;
using System.Collections.Concurrent;
@@ -19,25 +20,25 @@ namespace src.player.skills
public static void OnTick()
{
- float cooldown = SkillsInfo.GetValue(skillName, "cooldown");
- if (Server.TickCount % (int)(cooldown * 64) != 0) return;
+ int cooldown = (int)(SkillsInfo.GetValue(skillName, "cooldown") * 64);
+ if (Server.TickCount % cooldown != 0) return;
if (players.IsEmpty || jRandomSkills.Instance.GameRules?.FreezePeriod == true) return;
int damage = SkillsInfo.GetValue(skillName, "damage");
- foreach (var player in Utilities.GetPlayers().Where(p => p.IsValid && p.Team == CsTeam.Terrorist && p.PawnIsAlive))
+ foreach (var player in Utilities.GetPlayers().Where(p => p != null && p.IsValid && p.Team == CsTeam.Terrorist && p.PlayerPawn?.Value?.Health > 0))
{
- var playerEvent = PlayerManager.GetPlayerEvent(player);
+ var playerEvent = PlayerManager.GetPlayerFromEvent(player);
if (playerEvent == null || !playerEvent.IsValid) continue;
- var pawn = playerEvent.PlayerPawn.Value;
+ var pawn = player.PlayerPawn.Value;
if (pawn == null || !pawn.IsValid || pawn.WeaponServices == null) continue;
bool hasC4 = pawn.WeaponServices.MyWeapons.Any(w => w.Value?.DesignerName == "weapon_c4");
-
if (!hasC4) continue;
+
SkillUtils.TakeHealth(pawn, damage);
- player.ExecuteClientCommand("play sounds/player/burn_damage1");
+ playerEvent?.ExecuteClientCommand($"play player/player_damagebody_0{jRandomSkills.Instance.Random.Next(4, 8)}");
}
}
@@ -52,7 +53,7 @@ namespace src.player.skills
player.PrintToCenterAlert(player.GetTranslation("hotbomb_hint"));
}
- private static void ChangeC4Color()
+ private static void ChangeC4Color(Color color)
{
Server.NextFrame(() =>
{
@@ -62,7 +63,7 @@ namespace src.player.skills
var bomb = bombEntities.FirstOrDefault();
if (bomb == null) return;
- bomb.Render = Color.Red;
+ bomb.Render = color;
Utilities.SetStateChanged(bomb, "CBaseModelEntity", "m_clrRender");
});
}
@@ -83,8 +84,8 @@ namespace src.player.skills
{
if (players.IsEmpty)
{
- ChangeC4Color();
- foreach (var enemy in Utilities.GetPlayers().Where(p => p.IsValid && p.Team == CsTeam.Terrorist && p.PawnIsAlive))
+ ChangeC4Color(Color.Red);
+ foreach (var enemy in Utilities.GetPlayers().Where(p => p.IsValid && p.Team == CsTeam.Terrorist && p.PlayerPawn?.Value?.Health > 0))
enemy.PrintToCenterAlert(enemy.GetTranslation("hotbomb_hint"));
}
@@ -94,6 +95,13 @@ namespace src.player.skills
public static void DisableSkill(CCSPlayerController player)
{
players.TryRemove(player.Index, out _);
+
+ if (players.IsEmpty && !SkillUtils.IsFreezeTime())
+ {
+ ChangeC4Color(Color.White);
+ foreach (var enemy in Utilities.GetPlayers().Where(p => p.IsValid && p.Team == CsTeam.Terrorist && p.PlayerPawn?.Value?.Health > 0))
+ enemy.PrintToCenterAlert(enemy.GetTranslation("hotbomb_disable"));
+ }
}
public class SkillConfig(Skills skill = skillName, bool active = true, string color = "#baf081", CsTeam onlyTeam = CsTeam.CounterTerrorist, bool disableOnFreezeTime = false, bool needsTeammates = false, string requiredPermission = "", int maxPerServer = 1, Rarity rarity = Rarity.Common, float cooldown = 1, int damage = 2) : SkillsInfo.DefaultSkillInfo(skill, active, color, onlyTeam, disableOnFreezeTime, needsTeammates, requiredPermission, maxPerServer, rarity)
diff --git a/jRandomSkills - SRC Files/src/player/skills/Jammer.cs b/jRandomSkills - SRC Files/src/player/skills/Jammer.cs
index bc6a582..9290898 100644
--- a/jRandomSkills - SRC Files/src/player/skills/Jammer.cs
+++ b/jRandomSkills - SRC Files/src/player/skills/Jammer.cs
@@ -1,6 +1,5 @@
using CounterStrikeSharp.API;
using CounterStrikeSharp.API.Core;
-using CounterStrikeSharp.API.Modules.Commands.Targeting;
using CounterStrikeSharp.API.Modules.Utils;
using src.utils;
using System.Collections.Concurrent;
@@ -27,7 +26,12 @@ namespace src.player.skills
{
var player = Utilities.GetPlayerFromIndex((int)playerIndex);
if (player == null || !player.IsValid) continue;
+
+ var playerEvent = PlayerManager.GetPlayerFromEvent(Utilities.GetPlayerFromIndex((int)playerIndex));
+ if (playerEvent == null || !playerEvent.IsValid) continue;
+
SetCrosshair(player, true);
+ SetCrosshair(playerEvent, true);
}
jammedPlayers.Clear();
jammerToTarget.Clear();
@@ -59,48 +63,79 @@ namespace src.player.skills
var playerInfo = PlayerManager.GetPlayerByIndex(player!.Index);
if (playerInfo?.Skill != skillName) return;
+ var playerEvent = PlayerManager.GetPlayerFromEvent(player);
+ if (playerEvent == null || !playerEvent.IsValid) return;
+
if (playerInfo.SkillUsed)
{
- player.PrintToChat($" {ChatColors.Red}{player.GetTranslation("areareaper_used_info")}");
+ playerEvent.PrintToChat($" {ChatColors.Red}{playerEvent.GetTranslation("areareaper_used_info")}");
return;
}
string enemyId = commands[0];
- if (!uint.TryParse(enemyId, out uint enemyIndex)) { player.PrintToChat($" {ChatColors.Red}" + player.GetTranslation("selectplayerskill_incorrect_enemy_index")); return; }
+
+ if (!uint.TryParse(enemyId, out uint enemyIndex)) {
+ playerEvent.PrintToChat($" {ChatColors.Red}" + playerEvent.GetTranslation("selectplayerskill_incorrect_enemy_index"));
+ return;
+ }
+
var enemy = Utilities.GetPlayerFromIndex((int)enemyIndex);
if (enemy == null)
{
- player.PrintToChat($" {ChatColors.Red}" + player.GetTranslation("selectplayerskill_incorrect_enemy_index"));
+ playerEvent.PrintToChat($" {ChatColors.Red}" + playerEvent.GetTranslation("selectplayerskill_incorrect_enemy_index"));
return;
}
jammedPlayers.TryAdd(enemy.Index, 0);
jammerToTarget[player.Index] = enemy.Index;
+ var enemyEvent = PlayerManager.GetPlayerFromEvent(enemy);
+ if (enemyEvent == null || !enemyEvent.IsValid) return;
+
SetCrosshair(enemy, false);
+ SetCrosshair(enemyEvent, false);
playerInfo.SkillUsed = true;
- player.PrintToChat($" {ChatColors.Green}" + player.GetTranslation("jammer_player_info", enemy.PlayerName));
- enemy.PrintToChat($" {ChatColors.Red}" + enemy.GetTranslation("jammer_enemy_info"));
+ playerEvent.PrintToChat($" {ChatColors.Green}" + playerEvent.GetTranslation("jammer_player_info", player.PlayerName));
+ enemyEvent.PrintToChat($" {ChatColors.Red}" + enemyEvent.GetTranslation("jammer_enemy_info"));
}
private static void SetCrosshair(CCSPlayerController player, bool enabled)
{
var pawn = player.PlayerPawn.Value;
if (pawn == null || !pawn.IsValid) return;
+
pawn.HideHUD = (uint)(enabled
? (pawn.HideHUD & ~(1 << 8))
: (pawn.HideHUD | (1 << 8)));
+
Utilities.SetStateChanged(pawn, "CBasePlayerPawn", "m_iHideHUD");
}
+ public static void BotTakeover(EventBotTakeover @event)
+ {
+ var bot = PlayerManager.GetPlayerEvent(@event.Botid);
+ if (bot == null || !bot.IsValid) return;
+
+ var player = @event.Userid;
+ if (player == null || !player.IsValid) return;
+
+ if (!jammedPlayers.ContainsKey(bot.Index)) return;
+
+ SetCrosshair(bot, false);
+ SetCrosshair(player, false);
+ }
+
public static void EnableSkill(CCSPlayerController player)
{
var playerInfo = PlayerManager.GetPlayerByIndex(player!.Index);
if (playerInfo == null) return;
playerInfo.SkillUsed = false;
+ var playerEvent = PlayerManager.GetPlayerFromEvent(player);
+ if (playerEvent == null || !playerEvent.IsValid) return;
+
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)
{
@@ -108,16 +143,23 @@ namespace src.player.skills
SkillUtils.CreateMenu(player, menuItems);
}
else
- player.PrintToChat($" {ChatColors.Red}{player.GetTranslation("selectplayerskill_incorrect_enemy_index")}");
+ playerEvent.PrintToChat($" {ChatColors.Red}{playerEvent.GetTranslation("selectplayerskill_incorrect_enemy_index")}");
}
public static void DisableSkill(CCSPlayerController player)
{
if (jammerToTarget.TryRemove(player.Index, out uint targetIndex))
{
- var target = Utilities.GetPlayerFromIndex((int)targetIndex);
- if (target != null && target.IsValid)
- SetCrosshair(target, true);
+ var target1 = PlayerManager.GetPlayerFromEvent(Utilities.GetPlayerFromIndex((int)targetIndex));
+ var target2 = Utilities.GetPlayerFromIndex((int)targetIndex);
+ if (target1 != null && target1.IsValid && target2 != null && target2.IsValid)
+ {
+ SetCrosshair(target1, true);
+ SetCrosshair(target2, true);
+
+ if (target1.PawnIsAlive && !SkillUtils.IsFreezeTime())
+ target1.PrintToChat($" {ChatColors.Green}" + target1.GetTranslation("jammer_disable_info"));
+ }
jammedPlayers.TryRemove(targetIndex, out _);
}
@@ -126,10 +168,15 @@ namespace src.player.skills
public static void PlayerDeath(EventPlayerDeath @event)
{
+ var bot = PlayerManager.GetPlayerEvent(@event.Userid);
+ if (bot == null || !bot.IsValid) return;
+
var player = @event.Userid;
if (player == null || !player.IsValid) return;
+ SetCrosshair(bot, true);
SetCrosshair(player, true);
+
jammedPlayers.TryRemove(player.Index, out _);
SkillUtils.CloseMenu(player);
}
diff --git a/jRandomSkills - SRC Files/src/player/skills/JumpBan.cs b/jRandomSkills - SRC Files/src/player/skills/JumpBan.cs
index 7410f32..041c75a 100644
--- a/jRandomSkills - SRC Files/src/player/skills/JumpBan.cs
+++ b/jRandomSkills - SRC Files/src/player/skills/JumpBan.cs
@@ -71,19 +71,27 @@ namespace src.player.skills
var playerInfo = PlayerManager.GetPlayerByIndex(player!.Index);
if (playerInfo?.Skill != skillName) return;
+ var playerEvent = PlayerManager.GetPlayerFromEvent(player);
+ if (playerEvent == null || !playerEvent.IsValid) return;
+
if (playerInfo.SkillUsed)
{
- player.PrintToChat($" {ChatColors.Red}{player.GetTranslation("areareaper_used_info")}");
+ playerEvent.PrintToChat($" {ChatColors.Red}{playerEvent.GetTranslation("areareaper_used_info")}");
return;
}
string enemyId = commands[0];
- if (!uint.TryParse(enemyId, out uint enemyIndex)) { player.PrintToChat($" {ChatColors.Red}" + player.GetTranslation("selectplayerskill_incorrect_enemy_index")); return; }
+
+ if (!uint.TryParse(enemyId, out uint enemyIndex)) {
+ playerEvent.PrintToChat($" {ChatColors.Red}" + playerEvent.GetTranslation("selectplayerskill_incorrect_enemy_index"));
+ return;
+ }
+
var enemy = Utilities.GetPlayerFromIndex((int)enemyIndex);
if (enemy == null || !enemy.IsValid || enemy.PlayerPawn.Value == null || !enemy.PlayerPawn.Value.IsValid)
{
- player.PrintToChat($" {ChatColors.Red}" + player.GetTranslation("selectplayerskill_incorrect_enemy_index"));
+ playerEvent.PrintToChat($" {ChatColors.Red}" + playerEvent.GetTranslation("selectplayerskill_incorrect_enemy_index"));
return;
}
@@ -91,8 +99,11 @@ namespace src.player.skills
playersToTarget[player.Index] = enemy.Index;
playerInfo.SkillUsed = true;
- player.PrintToChat($" {ChatColors.Green}" + player.GetTranslation("jumpban_player_info", enemy.PlayerName));
- enemy.PrintToChat($" {ChatColors.Red}" + enemy.GetTranslation("jumpban_enemy_info"));
+ var enemyEvent = PlayerManager.GetPlayerFromEvent(enemy);
+ if (enemyEvent == null || !playerEvent.IsValid) return;
+
+ playerEvent.PrintToChat($" {ChatColors.Green}" + playerEvent.GetTranslation("jumpban_player_info", enemy.PlayerName));
+ enemyEvent.PrintToChat($" {ChatColors.Red}" + enemyEvent.GetTranslation("jumpban_enemy_info"));
}
public static void EnableSkill(CCSPlayerController player)
@@ -101,6 +112,9 @@ namespace src.player.skills
if (playerInfo == null) return;
playerInfo.SkillUsed = false;
+ var playerEvent = PlayerManager.GetPlayerFromEvent(player);
+ if (playerEvent == null || !playerEvent.IsValid) return;
+
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)
{
@@ -108,7 +122,7 @@ namespace src.player.skills
SkillUtils.CreateMenu(player, menuItems);
}
else
- player.PrintToChat($" {ChatColors.Red}{player.GetTranslation("selectplayerskill_incorrect_enemy_index")}");
+ playerEvent.PrintToChat($" {ChatColors.Red}{playerEvent.GetTranslation("selectplayerskill_incorrect_enemy_index")}");
}
public static void DisableSkill(CCSPlayerController player)
@@ -119,6 +133,11 @@ namespace src.player.skills
if (playersToTarget.TryRemove(player.Index, out uint targetIndex))
bannedPlayers.TryRemove(targetIndex, out _);
+ var target = PlayerManager.GetPlayerFromEvent(Utilities.GetPlayerFromIndex((int)targetIndex));
+ if (target != null && target.IsValid && target.PawnIsAlive && !SkillUtils.IsFreezeTime())
+ target.PrintToChat($" {ChatColors.Green}" + target.GetTranslation("jumpban_disable_info"));
+ }
+
SkillUtils.CloseMenu(player);
}
diff --git a/jRandomSkills - SRC Files/src/player/skills/LifeSwap.cs b/jRandomSkills - SRC Files/src/player/skills/LifeSwap.cs
index 7af9337..50ced08 100644
--- a/jRandomSkills - SRC Files/src/player/skills/LifeSwap.cs
+++ b/jRandomSkills - SRC Files/src/player/skills/LifeSwap.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;
@@ -41,29 +40,42 @@ namespace src.player.skills
public static void TypeSkill(CCSPlayerController player, string[] commands)
{
if (player == null || !player.IsValid || player.LifeState != (byte)LifeState_t.LIFE_ALIVE) return;
+
var playerInfo = PlayerManager.GetPlayerByIndex(player!.Index);
if (playerInfo?.Skill != skillName) return;
+ var playerEvent = PlayerManager.GetPlayerFromEvent(player);
+ if (playerEvent == null || !playerEvent.IsValid) return;
+
if (playerInfo.SkillUsed)
{
- player.PrintToChat($" {ChatColors.Red}{player.GetTranslation("areareaper_used_info")}");
+ playerEvent.PrintToChat($" {ChatColors.Red}{playerEvent.GetTranslation("areareaper_used_info")}");
return;
}
string enemyId = commands[0];
- if (!uint.TryParse(enemyId, out uint enemyIndex)) { player.PrintToChat($" {ChatColors.Red}" + player.GetTranslation("selectplayerskill_incorrect_enemy_index")); return; }
+
+ if (!uint.TryParse(enemyId, out uint enemyIndex)) {
+ playerEvent.PrintToChat($" {ChatColors.Red}" + playerEvent.GetTranslation("selectplayerskill_incorrect_enemy_index"));
+ return;
+ }
+
var enemy = Utilities.GetPlayerFromIndex((int)enemyIndex);
if (enemy == null)
{
- player.PrintToChat($" {ChatColors.Red}" + player.GetTranslation("selectplayerskill_incorrect_enemy_index"));
+ playerEvent.PrintToChat($" {ChatColors.Red}" + playerEvent.GetTranslation("selectplayerskill_incorrect_enemy_index"));
return;
}
SwapHealth(player, enemy);
playerInfo.SkillUsed = true;
- player.PrintToChat($" {ChatColors.Green}" + player.GetTranslation("lifeswap_player_info", enemy.PlayerName));
- enemy.PrintToChat($" {ChatColors.Red}" + enemy.GetTranslation("lifeswap_enemy_info"));
+
+ playerEvent.PrintToChat($" {ChatColors.Green}" + playerEvent.GetTranslation("lifeswap_player_info", enemy.PlayerName));
+
+ var enemyEvent = PlayerManager.GetPlayerFromEvent(enemy);
+ if (enemyEvent != null && enemyEvent.IsValid)
+ enemyEvent.PrintToChat($" {ChatColors.Red}" + enemyEvent.GetTranslation("lifeswap_enemy_info"));
}
public static void EnableSkill(CCSPlayerController player)
diff --git a/jRandomSkills - SRC Files/src/player/skills/Magnifier.cs b/jRandomSkills - SRC Files/src/player/skills/Magnifier.cs
index 7b1b264..cf3a60c 100644
--- a/jRandomSkills - SRC Files/src/player/skills/Magnifier.cs
+++ b/jRandomSkills - SRC Files/src/player/skills/Magnifier.cs
@@ -55,31 +55,56 @@ namespace src.player.skills
var playerInfo = PlayerManager.GetPlayerByIndex(player!.Index);
if (playerInfo?.Skill != skillName) return;
+ var playerEvent = PlayerManager.GetPlayerFromEvent(player);
+ if (playerEvent == null || !playerEvent.IsValid) return;
+
if (playerInfo.SkillUsed)
{
- player.PrintToChat($" {ChatColors.Red}{player.GetTranslation("areareaper_used_info")}" );
+ playerEvent.PrintToChat($" {ChatColors.Red}{playerEvent.GetTranslation("areareaper_used_info")}" );
return;
}
string enemyId = commands[0];
- if (!uint.TryParse(enemyId, out uint enemyIndex)) { player.PrintToChat($" {ChatColors.Red}" + player.GetTranslation("selectplayerskill_incorrect_enemy_index")); return; }
+
+ if (!uint.TryParse(enemyId, out uint enemyIndex)) {
+ playerEvent.PrintToChat($" {ChatColors.Red}" + playerEvent.GetTranslation("selectplayerskill_incorrect_enemy_index"));
+ return;
+ }
+
var enemy = Utilities.GetPlayerFromIndex((int)enemyIndex);
if (enemy == null)
{
- player.PrintToChat($" {ChatColors.Red}" + player.GetTranslation("selectplayerskill_incorrect_enemy_index"));
+ playerEvent.PrintToChat($" {ChatColors.Red}" + playerEvent.GetTranslation("selectplayerskill_incorrect_enemy_index"));
return;
}
playersFOV.AddOrUpdate(enemy.Index, enemy.DesiredFOV, (k, v) => enemy.DesiredFOV);
playersToTarget[player.Index] = enemy.Index;
- enemy.DesiredFOV = SkillsInfo.GetValue(skillName, "customFOV");
- Utilities.SetStateChanged(enemy, "CBasePlayerController", "m_iDesiredFOV");
+ var enemyEvent = PlayerManager.GetPlayerFromEvent(enemy);
+ if (enemyEvent == null || !enemyEvent.IsValid) return;
+
+ enemyEvent.DesiredFOV = SkillsInfo.GetValue(skillName, "customFOV");
+ Utilities.SetStateChanged(enemyEvent, "CBasePlayerController", "m_iDesiredFOV");
playerInfo.SkillUsed = true;
- player.PrintToChat($" {ChatColors.Green}" + player.GetTranslation("magnifier_player_info", enemy.PlayerName));
- enemy.PrintToChat($" {ChatColors.Red}" + enemy.GetTranslation("magnifier_enemy_info"));
+ playerEvent.PrintToChat($" {ChatColors.Green}" + playerEvent.GetTranslation("magnifier_player_info", enemy.PlayerName));
+ enemyEvent.PrintToChat($" {ChatColors.Red}" + enemyEvent.GetTranslation("magnifier_enemy_info"));
+ }
+
+ public static void BotTakeover(EventBotTakeover @event)
+ {
+ var bot = PlayerManager.GetPlayerEvent(@event.Botid);
+ if (bot == null || !bot.IsValid) return;
+
+ var player = @event.Userid;
+ if (player == null || !player.IsValid) return;
+
+ if (!playersFOV.ContainsKey(bot.Index)) return;
+
+ player.DesiredFOV = SkillsInfo.GetValue(skillName, "customFOV");
+ Utilities.SetStateChanged(player, "CBasePlayerController", "m_iDesiredFOV");
}
public static void EnableSkill(CCSPlayerController player)
@@ -88,6 +113,9 @@ namespace src.player.skills
if (playerInfo == null) return;
playerInfo.SkillUsed = false;
+ var playerEvent = PlayerManager.GetPlayerFromEvent(player);
+ if (playerEvent == null || !playerEvent.IsValid) return;
+
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)
{
@@ -95,7 +123,7 @@ namespace src.player.skills
SkillUtils.CreateMenu(player, menuItems);
}
else
- player.PrintToChat($" {ChatColors.Red}{player.GetTranslation("selectplayerskill_incorrect_enemy_index")}");
+ playerEvent.PrintToChat($" {ChatColors.Red}{playerEvent.GetTranslation("selectplayerskill_incorrect_enemy_index")}");
}
public static void DisableSkill(CCSPlayerController player)
@@ -104,7 +132,7 @@ namespace src.player.skills
if (playersToTarget.TryRemove(player.Index, out uint targetIndex))
{
- var target = Utilities.GetPlayerFromIndex((int)targetIndex);
+ var target = PlayerManager.GetPlayerFromEvent(Utilities.GetPlayerFromIndex((int)targetIndex));
if (target != null && target.IsValid)
if (playersFOV.TryGetValue(targetIndex, out uint fov))
{
diff --git a/jRandomSkills - SRC Files/src/player/skills/MoneySwap.cs b/jRandomSkills - SRC Files/src/player/skills/MoneySwap.cs
index fff4743..12aa679 100644
--- a/jRandomSkills - SRC Files/src/player/skills/MoneySwap.cs
+++ b/jRandomSkills - SRC Files/src/player/skills/MoneySwap.cs
@@ -40,17 +40,26 @@ namespace src.player.skills
public static void TypeSkill(CCSPlayerController player, string[] commands)
{
if (player == null || !player.IsValid || player.LifeState != (byte)LifeState_t.LIFE_ALIVE) return;
+
var playerInfo = PlayerManager.GetPlayerByIndex(player!.Index);
if (playerInfo?.Skill != skillName) return;
- if (playerInfo.SkillUsed)
+ var playerEvent = PlayerManager.GetPlayerFromEvent(player);
+ if (playerEvent == null || !playerEvent.IsValid) return;
+
+ if (playerInfo.SkillUsed)
{
- player.PrintToChat($" {ChatColors.Red}{player.GetTranslation("areareaper_used_info")}");
+ playerEvent.PrintToChat($" {ChatColors.Red}{playerEvent.GetTranslation("areareaper_used_info")}");
return;
}
string enemyId = commands[0];
- if (!uint.TryParse(enemyId, out uint enemyIndex)) { player.PrintToChat($" {ChatColors.Red}" + player.GetTranslation("selectplayerskill_incorrect_enemy_index")); return; }
+
+ if (!uint.TryParse(enemyId, out uint enemyIndex)) {
+ playerEvent.PrintToChat($" {ChatColors.Red}" + playerEvent.GetTranslation("selectplayerskill_incorrect_enemy_index"));
+ return;
+ }
+
var enemy = Utilities.GetPlayerFromIndex((int)enemyIndex);
if (enemy == null)
@@ -61,8 +70,11 @@ namespace src.player.skills
SwapMoney(player, enemy);
playerInfo.SkillUsed = true;
- player.PrintToChat($" {ChatColors.Green}" + player.GetTranslation("moneyswap_player_info", enemy.PlayerName));
- enemy.PrintToChat($" {ChatColors.Red}" + enemy.GetTranslation("moneyswap_enemy_info"));
+ playerEvent.PrintToChat($" {ChatColors.Green}" + playerEvent.GetTranslation("moneyswap_player_info", enemy.PlayerName));
+
+ var enemyEvent = PlayerManager.GetPlayerFromEvent(enemy);
+ if (enemyEvent != null && enemyEvent.IsValid)
+ enemyEvent.PrintToChat($" {ChatColors.Red}" + enemyEvent.GetTranslation("moneyswap_enemy_info"));
}
public static void EnableSkill(CCSPlayerController player)
diff --git a/jRandomSkills - SRC Files/src/player/skills/Ninja.cs b/jRandomSkills - SRC Files/src/player/skills/Ninja.cs
index a63ebe8..396d7d6 100644
--- a/jRandomSkills - SRC Files/src/player/skills/Ninja.cs
+++ b/jRandomSkills - SRC Files/src/player/skills/Ninja.cs
@@ -110,7 +110,7 @@ namespace src.player.skills
foreach (var player in Utilities.GetPlayers())
{
- if (player.LifeState != (byte)LifeState_t.LIFE_ALIVE)
+ if (player.PlayerPawn?.Value == null || player.PlayerPawn?.Value?.Health <= 0)
invisiblePlayers.TryRemove(player.Index, out _);
var playerInfo = PlayerManager.GetPlayerByIndex(player!.Index);
@@ -181,6 +181,11 @@ namespace src.player.skills
{
if (player == null || !player.IsValid) return;
+ if (player.PlayerPawn?.Value?.Health <= 0)
+ return;
+
+ Server.PrintToChatAll($"Update ninja for {player.PlayerName}");
+
var playerEvent = PlayerManager.GetPlayerEvent(player);
if (playerEvent == null || !playerEvent.IsValid) return;
diff --git a/jRandomSkills - SRC Files/src/player/skills/Poison.cs b/jRandomSkills - SRC Files/src/player/skills/Poison.cs
index 6b9f619..ed2b072 100644
--- a/jRandomSkills - SRC Files/src/player/skills/Poison.cs
+++ b/jRandomSkills - SRC Files/src/player/skills/Poison.cs
@@ -29,8 +29,12 @@ namespace src.player.skills
public static void OnTick()
{
- if (Server.TickCount % (int)(64 * SkillsInfo.GetValue(skillName, "Cooldown")) == 0)
+ int cooldown = (int)(64 * SkillsInfo.GetValue(skillName, "Cooldown"));
+
+ if (Server.TickCount % cooldown == 0)
{
+ int cooldown2 = cooldown * 2;
+
foreach (var playerIndex in poisonedPlayers.Keys)
{
var player = Utilities.GetPlayerFromIndex((int)playerIndex);
@@ -39,8 +43,13 @@ namespace src.player.skills
var pawn = player.PlayerPawn.Value;
if (pawn == null || !pawn.IsValid) continue;
+ if (Jester.GetJesterInfo(playerIndex)?.Active == true) continue;
+
if (pawn.Health <= SkillsInfo.GetValue(skillName, "MinHealth")) continue;
SkillUtils.TakeHealth(pawn, SkillsInfo.GetValue(skillName, "Damage"));
+
+ if (Server.TickCount % cooldown2 == 0)
+ PlayerManager.GetPlayerFromEvent(player)?.ExecuteClientCommand($"play player/player_damagebody_0{jRandomSkills.Instance.Random.Next(4, 8)}");
}
}
@@ -64,19 +73,27 @@ namespace src.player.skills
var playerInfo = PlayerManager.GetPlayerByIndex(player!.Index);
if (playerInfo?.Skill != skillName) return;
+ var playerEvent = PlayerManager.GetPlayerFromEvent(player);
+ if (playerEvent == null || !playerEvent.IsValid) return;
+
if (playerInfo.SkillUsed)
{
- player.PrintToChat($" {ChatColors.Red}{player.GetTranslation("areareaper_used_info")}");
+ playerEvent.PrintToChat($" {ChatColors.Red}{playerEvent.GetTranslation("areareaper_used_info")}");
return;
}
string enemyId = commands[0];
- if (!uint.TryParse(enemyId, out uint enemyIndex)) { player.PrintToChat($" {ChatColors.Red}" + player.GetTranslation("selectplayerskill_incorrect_enemy_index")); return; }
+
+ if (!uint.TryParse(enemyId, out uint enemyIndex)) {
+ playerEvent.PrintToChat($" {ChatColors.Red}" + playerEvent.GetTranslation("selectplayerskill_incorrect_enemy_index"));
+ return;
+ }
+
var enemy = Utilities.GetPlayerFromIndex((int)enemyIndex);
if (enemy == null)
{
- player.PrintToChat($" {ChatColors.Red}" + player.GetTranslation("selectplayerskill_incorrect_enemy_index"));
+ playerEvent.PrintToChat($" {ChatColors.Red}" + playerEvent.GetTranslation("selectplayerskill_incorrect_enemy_index"));
return;
}
@@ -84,8 +101,11 @@ namespace src.player.skills
playersToTarget[player.Index] = enemy.Index;
playerInfo.SkillUsed = true;
- player.PrintToChat($" {ChatColors.Green}" + player.GetTranslation("poison_player_info", enemy.PlayerName));
- enemy.PrintToChat($" {ChatColors.Red}" + enemy.GetTranslation("poison_enemy_info"));
+ var enemyEvent = PlayerManager.GetPlayerFromEvent(enemy);
+ if (enemyEvent == null || !enemyEvent.IsValid) return;
+
+ playerEvent.PrintToChat($" {ChatColors.Green}" + playerEvent.GetTranslation("poison_player_info", enemy.PlayerName));
+ enemyEvent.PrintToChat($" {ChatColors.Red}" + enemyEvent.GetTranslation("poison_enemy_info"));
}
public static void EnableSkill(CCSPlayerController player)
@@ -94,6 +114,9 @@ namespace src.player.skills
if (playerInfo == null) return;
playerInfo.SkillUsed = false;
+ var playerEvent = PlayerManager.GetPlayerFromEvent(player);
+ if (playerEvent == null || !playerEvent.IsValid) return;
+
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)
{
@@ -101,7 +124,7 @@ namespace src.player.skills
SkillUtils.CreateMenu(player, menuItems);
}
else
- player.PrintToChat($" {ChatColors.Red}{player.GetTranslation("selectplayerskill_incorrect_enemy_index")}");
+ playerEvent.PrintToChat($" {ChatColors.Red}{player.GetTranslation("selectplayerskill_incorrect_enemy_index")}");
}
public static void DisableSkill(CCSPlayerController player)
@@ -109,6 +132,11 @@ namespace src.player.skills
if (playersToTarget.TryRemove(player.Index, out uint targetIndex))
poisonedPlayers.TryRemove(targetIndex, out _);
+ var target = PlayerManager.GetPlayerFromEvent(Utilities.GetPlayerFromIndex((int)targetIndex));
+ if (target != null && target.IsValid && target.PawnIsAlive && !SkillUtils.IsFreezeTime())
+ target.PrintToChat($" {ChatColors.Green}" + target.GetTranslation("poison_disable_info"));
+ }
+
SkillUtils.CloseMenu(player);
}
diff --git a/jRandomSkills - SRC Files/src/player/skills/PrimaryBan.cs b/jRandomSkills - SRC Files/src/player/skills/PrimaryBan.cs
index 1cf624d..5179091 100644
--- a/jRandomSkills - SRC Files/src/player/skills/PrimaryBan.cs
+++ b/jRandomSkills - SRC Files/src/player/skills/PrimaryBan.cs
@@ -14,8 +14,13 @@ namespace src.player.skills
private static readonly object setLock = new();
private static readonly string[] disabledWeapons =
[
- "ak47", "m4a1", "m4a4", "m4a1_silencer", "famas", "galilar", "aug", "sg553", "mp9", "mac10", "bizon", "mp7", "ump45",
- "p90", "mp5sd", "ssg08", "awp", "scar20", "g3sg1", "nova", "xm1014", "mag7", "sawedoff", "m249", "negev"
+ "weapon_ak47", "weapon_m4a4", "weapon_m4a1", "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", "weapon_sg556"
];
public static void LoadSkill()
@@ -37,11 +42,14 @@ namespace src.player.skills
public static void WeaponEquip(EventItemEquip @event)
{
- var player = PlayerManager.GetPlayerEvent(@event.Userid);
+ var player = @event.Userid;
+ var playerEvent = PlayerManager.GetPlayerEvent(@event.Userid);
var weapon = @event.Item;
- if (player == null || !player.IsValid) return;
- if (!bannedPlayers.ContainsKey(player.Index) || !disabledWeapons.Contains(weapon)) return;
- player.ExecuteClientCommand("slot3");
+
+ if (player == null || !player.IsValid || playerEvent == null || !playerEvent.IsValid) return;
+ if (!bannedPlayers.ContainsKey(playerEvent.Index) || !disabledWeapons.Contains("weapon_" + weapon)) return;
+
+ SetWeaponAttack(player, true);
}
public static void OnTick()
@@ -66,39 +74,40 @@ namespace src.player.skills
var playerInfo = PlayerManager.GetPlayerByIndex(player!.Index);
if (playerInfo?.Skill != skillName) return;
+ var playerEvent = PlayerManager.GetPlayerFromEvent(player);
+ if (playerEvent == null || !playerEvent.IsValid) return;
+
if (playerInfo.SkillUsed)
{
- player.PrintToChat($" {ChatColors.Red}{player.GetTranslation("areareaper_used_info")}");
+ playerEvent.PrintToChat($" {ChatColors.Red}{playerEvent.GetTranslation("areareaper_used_info")}");
return;
}
string enemyId = commands[0];
- if (!uint.TryParse(enemyId, out uint enemyIndex)) { player.PrintToChat($" {ChatColors.Red}" + player.GetTranslation("selectplayerskill_incorrect_enemy_index")); return; }
+
+ if (!uint.TryParse(enemyId, out uint enemyIndex)) {
+ playerEvent.PrintToChat($" {ChatColors.Red}" + playerEvent.GetTranslation("selectplayerskill_incorrect_enemy_index"));
+ return;
+ }
+
var enemy = Utilities.GetPlayerFromIndex((int)enemyIndex);
if (enemy == null)
{
- player.PrintToChat($" {ChatColors.Red}" + player.GetTranslation("selectplayerskill_incorrect_enemy_index"));
+ playerEvent.PrintToChat($" {ChatColors.Red}" + playerEvent.GetTranslation("selectplayerskill_incorrect_enemy_index"));
return;
}
bannedPlayers.TryAdd(enemy.Index, 0);
playersToTarget[player.Index] = enemy.Index;
- CheckWeapon(enemy);
+ SetWeaponAttack(enemy, true);
playerInfo.SkillUsed = true;
- player.PrintToChat($" {ChatColors.Green}" + player.GetTranslation("primaryban_player_info", enemy.PlayerName));
- enemy.PrintToChat($" {ChatColors.Red}" + enemy.GetTranslation("primaryban_enemy_info"));
- }
+ var enemyEvent = PlayerManager.GetPlayerFromEvent(enemy);
+ if (enemyEvent == null || !enemyEvent.IsValid) return;
- private static void CheckWeapon(CCSPlayerController player)
- {
- var activeWeapon = player.PlayerPawn.Value?.WeaponServices?.ActiveWeapon?.Value;
- if (activeWeapon == null || !activeWeapon.IsValid) return;
- if (activeWeapon.DesignerName == null || string.IsNullOrEmpty(activeWeapon.DesignerName)) return;
-
- if (!bannedPlayers.ContainsKey(player.Index) || !disabledWeapons.Contains(activeWeapon.DesignerName?.Replace("weapon_", ""))) return;
- player.ExecuteClientCommand("slot3");
+ playerEvent.PrintToChat($" {ChatColors.Green}" + playerEvent.GetTranslation("primaryban_player_info", enemy.PlayerName));
+ enemyEvent.PrintToChat($" {ChatColors.Red}" + enemyEvent.GetTranslation("primaryban_enemy_info"));
}
public static void EnableSkill(CCSPlayerController player)
@@ -107,6 +116,9 @@ namespace src.player.skills
if (playerInfo == null) return;
playerInfo.SkillUsed = false;
+ var playerEvent = PlayerManager.GetPlayerFromEvent(player);
+ if (playerEvent == null || !playerEvent.IsValid) return;
+
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)
{
@@ -114,7 +126,7 @@ namespace src.player.skills
SkillUtils.CreateMenu(player, menuItems);
}
else
- player.PrintToChat($" {ChatColors.Red}{player.GetTranslation("selectplayerskill_incorrect_enemy_index")}");
+ playerEvent.PrintToChat($" {ChatColors.Red}{playerEvent.GetTranslation("selectplayerskill_incorrect_enemy_index")}");
}
public static void DisableSkill(CCSPlayerController player)
@@ -122,6 +134,14 @@ namespace src.player.skills
if (playersToTarget.TryRemove(player.Index, out uint targetIndex))
bannedPlayers.TryRemove(targetIndex, out _);
+ var target = PlayerManager.GetPlayerFromEvent(Utilities.GetPlayerFromIndex((int)targetIndex));
+ if (target != null && target.IsValid && target.PawnIsAlive && !SkillUtils.IsFreezeTime())
+ {
+ target.PrintToChat($" {ChatColors.Green}" + target.GetTranslation("primaryban_disable_info"));
+ SetWeaponAttack(target, false);
+ }
+ }
+
SkillUtils.CloseMenu(player);
}
@@ -131,9 +151,32 @@ namespace src.player.skills
if (player == null || !player.IsValid) return;
bannedPlayers.TryRemove(player.Index, out _);
+ SetWeaponAttack(player, false);
SkillUtils.CloseMenu(player);
}
+ private static void SetWeaponAttack(CCSPlayerController? player, bool disableWeapon)
+ {
+ player = PlayerManager.GetPlayerEvent(player);
+ if (player == null || !player.IsValid) return;
+
+ var pawn = player?.PlayerPawn?.Value;
+ 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 && !string.IsNullOrEmpty(weapon.Value.DesignerName))
+ {
+ string weaponName = weapon.Value.DesignerName;
+ if (disabledWeapons.Contains(weaponName))
+ {
+ weapon.Value.NextPrimaryAttackTick = disableWeapon ? int.MaxValue : Server.TickCount;
+ weapon.Value.NextSecondaryAttackTick = disableWeapon ? int.MaxValue : Server.TickCount;
+
+ Utilities.SetStateChanged(weapon.Value, "CBasePlayerWeapon", "m_nNextPrimaryAttackTick");
+ Utilities.SetStateChanged(weapon.Value, "CBasePlayerWeapon", "m_nNextSecondaryAttackTick");
+ }
+ }
+ }
+
public class SkillConfig(Skills skill = skillName, bool active = true, string color = "#ffc061", 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)
{
}
diff --git a/jRandomSkills - SRC Files/src/player/skills/Thief.cs b/jRandomSkills - SRC Files/src/player/skills/Thief.cs
index c3c2792..443d5f9 100644
--- a/jRandomSkills - SRC Files/src/player/skills/Thief.cs
+++ b/jRandomSkills - SRC Files/src/player/skills/Thief.cs
@@ -73,23 +73,26 @@ namespace src.player.skills
if (playerPawn?.CBodyComponent == null) return;
if (player.LifeState != (byte)LifeState_t.LIFE_ALIVE) return;
+ var playerEvent = PlayerManager.GetPlayerFromEvent(player);
+ if (playerEvent == null || !playerEvent.IsValid) return;
+
if (commands == null || commands.Length == 0)
{
- player.PrintToChat($" {ChatColors.Red}" + player.GetTranslation("selectplayerskill_incorrect_enemy_index"));
+ playerEvent.PrintToChat($" {ChatColors.Red}" + playerEvent.GetTranslation("selectplayerskill_incorrect_enemy_index"));
return;
}
string enemyId = commands[0];
if (!uint.TryParse(enemyId, out uint enemyIndex))
{
- player.PrintToChat($" {ChatColors.Red}" + player.GetTranslation("selectplayerskill_incorrect_enemy_index"));
+ playerEvent.PrintToChat($" {ChatColors.Red}" + playerEvent.GetTranslation("selectplayerskill_incorrect_enemy_index"));
return;
}
var enemy = Utilities.GetPlayerFromIndex((int)enemyIndex);
if (enemy == null || !enemy.IsValid)
{
- player.PrintToChat($" {ChatColors.Red}" + player.GetTranslation("selectplayerskill_incorrect_enemy_index"));
+ playerEvent.PrintToChat($" {ChatColors.Red}" + playerEvent.GetTranslation("selectplayerskill_incorrect_enemy_index"));
return;
}
@@ -100,11 +103,14 @@ namespace src.player.skills
{
if (player == null || !player.IsValid) return;
+ var playerEvent = PlayerManager.GetPlayerFromEvent(player);
+ if (playerEvent == null || !playerEvent.IsValid) return;
+
var enemies = Utilities.GetPlayers()
.Where(p => p != null
- && p.PawnIsAlive
- && p.Team != player.Team
&& p.IsValid
+ && p.Team != player.Team
+ && p.PlayerPawn?.Value?.Health > 0
&& p.Team != CsTeam.Spectator
&& p.Team != CsTeam.None)
.ToArray();
@@ -128,7 +134,7 @@ namespace src.player.skills
border: !Utilities.GetPlayers().Any(p => p != null && p.Team == player.Team && p != player) ? "tb" : "t");
}
else
- player.PrintToChat($" {ChatColors.Red}{player.GetTranslation("selectplayerskill_incorrect_enemy_index")}");
+ playerEvent.PrintToChat($" {ChatColors.Red}{playerEvent.GetTranslation("selectplayerskill_incorrect_enemy_index")}");
}
public static void DisableSkill(CCSPlayerController player)
@@ -167,8 +173,13 @@ namespace src.player.skills
var p = Utilities.GetPlayerFromIndex((int)playerIndex);
if (p == null || !p.IsValid) return;
- Instance.SkillAction(skillName.ToString(), "EnableSkill", [p]);
- p.PrintToChat($" {ChatColors.Red}" + p.GetTranslation("thief_incorrect_skill", e.PlayerName));
+ var playerEvent = PlayerManager.GetPlayerFromEvent(p);
+ if (playerEvent == null || !playerEvent.IsValid) return;
+
+ if (!player.IsBot)
+ Instance.SkillAction(skillName.ToString(), "EnableSkill", [p]);
+
+ playerEvent.PrintToChat($" {ChatColors.Red}" + playerEvent.GetTranslation("thief_incorrect_skill", e.PlayerName));
}, CounterStrikeSharp.API.Modules.Timers.TimerFlags.STOP_ON_MAPCHANGE);
return;
}
@@ -182,6 +193,9 @@ namespace src.player.skills
var p = Utilities.GetPlayerFromIndex((int)playerIndex);
if (p == null || !p.IsValid) return;
+ var playerEvent = PlayerManager.GetPlayerFromEvent(p);
+ if (playerEvent == null || !playerEvent.IsValid) return;
+
var pInfo = PlayerManager.GetPlayerByIndex(p.Index);
if (pInfo == null) return;
@@ -191,7 +205,7 @@ namespace src.player.skills
SkillUtils.CloseMenu(p);
Instance.SkillAction(enemySkill.ToString(), "EnableSkill", [p]);
- p.PrintToChat($" {ChatColors.Green}" + p.GetTranslation("thief_player_info", e.PlayerName));
+ playerEvent.PrintToChat($" {ChatColors.Green}" + playerEvent.GetTranslation("thief_player_info", e.PlayerName));
if (SkillsInfo.GetValue(enemySkill, "disableOnFreezeTime") && SkillUtils.IsFreezeTime())
{
@@ -218,11 +232,14 @@ namespace src.player.skills
var e = Utilities.GetPlayerFromIndex((int)enemyIndex);
if (e == null || !e.IsValid) return;
+ var enemyEvent = PlayerManager.GetPlayerFromEvent(e);
+ if (enemyEvent == null || !enemyEvent.IsValid) return;
+
Instance.SkillAction(enemySkill.ToString(), "DisableSkill", [e]);
eInfo.SpecialSkill = enemySkill;
eInfo.Skill = Skills.None;
- e.PrintToChat($" {ChatColors.Red}" + e.GetTranslation("thief_enemy_info"));
+ enemyEvent.PrintToChat($" {ChatColors.Red}" + enemyEvent.GetTranslation("thief_enemy_info"));
}, CounterStrikeSharp.API.Modules.Timers.TimerFlags.STOP_ON_MAPCHANGE);
}
diff --git a/jRandomSkills - SRC Files/src/player/skills/WildThrow.cs b/jRandomSkills - SRC Files/src/player/skills/WildThrow.cs
index ebb7ca2..77b5641 100644
--- a/jRandomSkills - SRC Files/src/player/skills/WildThrow.cs
+++ b/jRandomSkills - SRC Files/src/player/skills/WildThrow.cs
@@ -37,6 +37,9 @@ namespace src.player.skills
if (playerInfo == null) return;
playerInfo.SkillUsed = false;
+ var playerEvent = PlayerManager.GetPlayerFromEvent(player);
+ if (playerEvent == null || !playerEvent.IsValid) return;
+
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)
{
@@ -44,14 +47,20 @@ namespace src.player.skills
SkillUtils.CreateMenu(player, menuItems);
}
else
- player.PrintToChat($" {ChatColors.Red}{player.GetTranslation("selectplayerskill_incorrect_enemy_index")}");
+ playerEvent.PrintToChat($" {ChatColors.Red}{playerEvent.GetTranslation("selectplayerskill_incorrect_enemy_index")}");
}
public static void DisableSkill(CCSPlayerController player)
{
if (playersToTarget.TryRemove(player.Index, out uint targetIndex))
+ {
infectedPlayers.TryRemove(targetIndex, out _);
+ var target = PlayerManager.GetPlayerFromEvent(Utilities.GetPlayerFromIndex((int)targetIndex));
+ if (target != null && target.IsValid && target.PawnIsAlive && !SkillUtils.IsFreezeTime())
+ target.PrintToChat($" {ChatColors.Green}{target.GetTranslation("wildthrow_disable_info")}");
+ }
+
SkillUtils.CloseMenu(player);
}
@@ -100,19 +109,27 @@ namespace src.player.skills
var playerInfo = PlayerManager.GetPlayerByIndex(player!.Index);
if (playerInfo?.Skill != skillName) return;
+ var playerEvent = PlayerManager.GetPlayerFromEvent(player);
+ if (playerEvent == null || !playerEvent.IsValid) return;
+
if (playerInfo.SkillUsed)
{
- player.PrintToChat($" {ChatColors.Red}{player.GetTranslation("areareaper_used_info")}");
+ playerEvent.PrintToChat($" {ChatColors.Red}{playerEvent.GetTranslation("areareaper_used_info")}");
return;
}
string enemyId = commands[0];
- if (!uint.TryParse(enemyId, out uint enemyIndex)) { player.PrintToChat($" {ChatColors.Red}" + player.GetTranslation("selectplayerskill_incorrect_enemy_index")); return; }
+
+ if (!uint.TryParse(enemyId, out uint enemyIndex)) {
+ playerEvent.PrintToChat($" {ChatColors.Red}" + playerEvent.GetTranslation("selectplayerskill_incorrect_enemy_index"));
+ return;
+ }
+
var enemy = Utilities.GetPlayerFromIndex((int)enemyIndex);
if (enemy == null)
{
- player.PrintToChat($" {ChatColors.Red}" + player.GetTranslation("selectplayerskill_incorrect_enemy_index"));
+ playerEvent.PrintToChat($" {ChatColors.Red}" + playerEvent.GetTranslation("selectplayerskill_incorrect_enemy_index"));
return;
}
@@ -120,7 +137,12 @@ namespace src.player.skills
playersToTarget[player.Index] = enemy.Index;
playerInfo.SkillUsed = true;
- player.PrintToChat($" {ChatColors.Green}" + player.GetTranslation("wildthrow_player_info", enemy.PlayerName));
+ playerEvent.PrintToChat($" {ChatColors.Green}" + playerEvent.GetTranslation("wildthrow_player_info", enemy.PlayerName));
+
+ var enemyEvent = PlayerManager.GetPlayerFromEvent(enemy);
+ if (enemyEvent == null || !enemyEvent.IsValid) return;
+
+ enemyEvent.PrintToChat($" {ChatColors.Red}" + enemyEvent.GetTranslation("wildthrow_enemy_info"));
}
public static void OnEntitySpawned(CEntityInstance @event)
@@ -137,6 +159,9 @@ namespace src.player.skills
if (pawn.Controller.Value == null || !pawn.Controller.Value.IsValid) return;
var player = pawn.Controller.Value.As();
+ player = PlayerManager.GetPlayerEvent(player);
+ if (player == null || !player.IsValid) return;
+
if (!infectedPlayers.ContainsKey(player.Index)) return;
Server.NextFrame(() => {
diff --git a/jRandomSkills - Server Files/plugins/jRandomSkills/WASDMenuAPI.dll b/jRandomSkills - Server Files/plugins/jRandomSkills/WASDMenuAPI.dll
index 0b03600..b6f84f2 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/skillsInfo.json b/jRandomSkills - Server Files/plugins/jRandomSkills/configs/skillsInfo.json
index 979c6e2..575ace8 100644
--- a/jRandomSkills - Server Files/plugins/jRandomSkills/configs/skillsInfo.json
+++ b/jRandomSkills - Server Files/plugins/jRandomSkills/configs/skillsInfo.json
@@ -1486,7 +1486,7 @@
"Active": true,
"Name": "AreaReaper",
"RequiredPermission": "",
- "MaxPerServer": -1,
+ "MaxPerServer": 1,
"Rarity": "Common"
},
{
diff --git a/jRandomSkills - Server Files/plugins/jRandomSkills/jRandomSkills.dll b/jRandomSkills - Server Files/plugins/jRandomSkills/jRandomSkills.dll
index e8e0d41..1fdf43f 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 d0adf2d..4d8fd37 100644
--- a/jRandomSkills - Server Files/plugins/jRandomSkills/languages/de.json
+++ b/jRandomSkills - Server Files/plugins/jRandomSkills/languages/de.json
@@ -24,6 +24,7 @@
"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_teammates_info": "Bereich {0} wurde für das Pflanzen der Bombe gesperrt.",
"areareaper_bombsite_disabled": "Dieser Bombenplatz wurde deaktiviert!",
"armored": "Gepanzert",
@@ -62,6 +63,7 @@
"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_disable_info": "Fehlschüsse verursachen keinen Schaden mehr.",
"carefulbullets_player_info": "‚{0}‘ muss jetzt vorsichtiger sein.",
"carefulbullets_select_info": "Fehler schaden dem Spieler:",
@@ -85,6 +87,7 @@
"darkness": "Dunkelheit",
"darkness_desc": "Wendet einen Dunkelheitseffekt auf einen ausgewählten Gegner an",
"darkness_enemy_info": "Lass die Lichter ausgehen",
+ "darkness_disable_info": "Das Licht ist zurück.",
"darkness_player_info": "Die Dunkelheit hat den Spieler \"{0}\" überwältigt.",
"darkness_select_info": "Wähle einen Spieler für die Dunkelheit aus:",
@@ -97,6 +100,7 @@
"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_disable_info": "Du kannst wieder hören.",
"deaf_player_info": "Der Ton für den Spieler ‚{0}‘ wurde deaktiviert.",
"deaf_select_info": "Alle Töne für den Spieler stummschalten:",
@@ -167,6 +171,7 @@
"glitch": "Glitch",
"glitch_desc": "Deaktiviert das Radar für einen ausgewählten Gegner",
"glitch_enemy_info": "Dein Radar wurde deaktiviert",
+ "glitch_disable_info": "Dein Radar funktioniert wieder.",
"glitch_player_info": "Das Radar des Spielers ‚{0}‘ wurde deaktiviert.",
"glitch_select_info": "Radar des Spielers ausschalten:",
@@ -196,6 +201,7 @@
"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_disable_info": "Die Bombe ist nicht mehr heiß.",
"iana": "Hologramm",
"iana_desc": "Klicken Sie auf [css_useSkill], um Ihr Hologramm für einige Sekunden zu steuern",
@@ -218,6 +224,7 @@
"jammer": "Störsender",
"jammer_desc": "Wähle einen Spieler aus, um dessen Fadenkreuz zu deaktivieren",
"jammer_enemy_info": "Dein Fadenkreuz wurde deaktiviert.",
+ "jammer_disable_info": "Dein Fadenkreuz funktioniert wieder.",
"jammer_player_info": "Das Fadenkreuz von Spieler ‚{0}‘ wurde deaktiviert.",
"jammer_select_info": "Fadenkreuz des Spielers deaktivieren:",
@@ -230,6 +237,7 @@
"jumpban": "Beinlos",
"jumpban_desc": "Wähle einen Spieler, der nicht springen kann",
"jumpban_enemy_info": "Jemand hat dir die Beine abgeschnitten.",
+ "jumpban_disable_info": "Du kannst deine Beine wieder benutzen.",
"jumpban_player_info": "Der Spieler ‚{0}‘ kann nicht mehr springen.",
"jumpban_select_info": "Spieler vom Springen ausschließen:",
@@ -260,6 +268,7 @@
"magnifier": "Lupe",
"magnifier_desc": "Vergrößert den Bildschirm des Gegners und verringert dessen Sichtfeld",
"magnifier_enemy_info": "Dein Sichtfeld wurde verzerrt!",
+ "magnifier_disable_info": "Deine Sicht ist wieder normal.",
"magnifier_player_info": "Der Spieler ‚{0}‘ wurde in den Zoom-Modus versetzt.",
"magnifier_select_info": "Bildschirm des Spielers vergrößern:",
@@ -321,12 +330,14 @@
"poison": "Gift",
"poison_desc": "Wähle einen Spieler aus, der alle paar Sekunden Schaden nimmt",
"poison_enemy_info": "Du wurdest vergiftet",
+ "poison_disable_info": "Du bist jetzt immun gegen Gift.",
"poison_player_info": "Der Spieler ‚{0}‘ wurde vergiftet",
"poison_select_info": "Einen Spieler vergiften:",
"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_disable_info": "Du kannst wieder Gewehre benutzen.",
"primaryban_player_info": "Der Spieler ‚{0}‘ kann keine Gewehre mehr verwenden.",
"primaryban_select_info": "Gewehre für Spieler verbieten:",
@@ -457,6 +468,8 @@
"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_enemy_info": "Du wirst beim Werfen von Granaten zu nervös.",
+ "wildthrow_disable_info": "Deine Erinnerung daran, wie man Granaten wirft, ist wieder normal.",
"wildthrow_select_info": "Wähle einen Spieler aus:",
"zeus": "Zeus",
diff --git a/jRandomSkills - Server Files/plugins/jRandomSkills/languages/en.json b/jRandomSkills - Server Files/plugins/jRandomSkills/languages/en.json
index f972310..031cb61 100644
--- a/jRandomSkills - Server Files/plugins/jRandomSkills/languages/en.json
+++ b/jRandomSkills - Server Files/plugins/jRandomSkills/languages/en.json
@@ -24,6 +24,7 @@
"areareaper_select_info": "Select site to deactivate:",
"areareaper_site_disabled": "Bomb site {0} has been deactivated - no bombs can be planted there!",
"areareaper_used_info": "Your skill has already been used.",
+ "areareaper_teammates_info": "Bombsite {0} has been blocked for planting.",
"areareaper_bombsite_disabled": "This bombsite has been disabled!",
"armored": "Armored",
@@ -62,6 +63,7 @@
"carefulbullets": "Careful Bullets",
"carefulbullets_desc": "Select a player who takes damage for every missed shot",
"carefulbullets_enemy_info": "From now on, inaccuracy will literally hurt.",
+ "carefulbullets_disable_info": "Missing shots no longer hurts you.",
"carefulbullets_player_info": "'{0}' must now be more careful.",
"carefulbullets_select_info": "Inaccuracy hurts the player:",
@@ -85,6 +87,7 @@
"darkness": "Darkness",
"darkness_desc": "Applies a darkness effect to a chosen enemy",
"darkness_enemy_info": "Let the lights go out.",
+ "darkness_disable_info": "The lights are back on.",
"darkness_player_info": "Darkness has overtaken player '{0}'.",
"darkness_select_info": "Select player for darkness:",
@@ -97,6 +100,7 @@
"deaf": "Deaf",
"deaf_desc": "Choose a player to mute all sounds for",
"deaf_enemy_info": "Your headphones have left the game.",
+ "deaf_disable_info": "You can hear again.",
"deaf_player_info": "Sound has been disabled for player '{0}'.",
"deaf_select_info": "Mute all sounds for player:",
@@ -167,6 +171,7 @@
"glitch": "Glitch",
"glitch_desc": "Disables the radar for a chosen enemy",
"glitch_enemy_info": "Your radar has been disabled.",
+ "glitch_disable_info": "Your radar is back to normal.",
"glitch_player_info": "Player '{0}'s radar has been disabled.",
"glitch_select_info": "Turn off player's radar:",
@@ -196,6 +201,7 @@
"hotbomb": "Hot Bomb",
"hotbomb_desc": "As long as you are alive, the bomb deals damage to its carrier",
"hotbomb_hint": "Careful, the bomb is hot!",
+ "hotbomb_disable_info": "The bomb is no longer hot.",
"iana": "Hologram",
"iana_desc": "Click [css_useSkill] to control your hologram for a few seconds",
@@ -218,6 +224,7 @@
"jammer": "Jammer",
"jammer_desc": "Choose a player to disable their crosshair",
"jammer_enemy_info": "Your crosshair has been disabled.",
+ "jammer_disable_info": "Your crosshair is back to normal.",
"jammer_player_info": "Player '{0}'s crosshair has been disabled.",
"jammer_select_info": "Disable player's crosshair:",
@@ -230,6 +237,7 @@
"jumpban": "Legless",
"jumpban_desc": "Choose a player who cannot jump",
"jumpban_enemy_info": "Someone cut off your legs.",
+ "jumpban_disable_info": "You can use your legs again.",
"jumpban_player_info": "Player '{0}' can no longer jump.",
"jumpban_select_info": "Ban player from jumping:",
@@ -260,6 +268,7 @@
"magnifier": "Magnifier",
"magnifier_desc": "Forces the enemy's screen to zoom in, reducing their field of view",
"magnifier_enemy_info": "Your field of view has been distorted!",
+ "magnifier_disable_info": "Your vision is back to normal.",
"magnifier_player_info": "Player '{0}' has been forced into zoom mode.",
"magnifier_select_info": "Magnify player's screen:",
@@ -321,12 +330,14 @@
"poison": "Poison",
"poison_desc": "Choose a player who will take damage every few seconds",
"poison_enemy_info": "You have been poisoned.",
+ "poison_disable_info": "You are now immune to poison.",
"poison_player_info": "Player '{0}' has been poisoned.",
"poison_select_info": "Poison a player:",
"primaryban": "No Rifles",
"primaryban_desc": "Choose a player who cannot use rifles",
"primaryban_enemy_info": "You can no longer use rifles.",
+ "primaryban_disable_info": "You can use rifles again.",
"primaryban_player_info": "Player '{0}' can no longer use rifles.",
"primaryban_select_info": "Ban rifles for player:",
@@ -457,6 +468,8 @@
"wildthrow": "Wild Throws",
"wildthrow_desc": "Choose a player who will have trouble throwing grenades",
"wildthrow_player_info": "Player '{0}' has forgotten all their lineups",
+ "wildthrow_enemy_info": "You get too excited when throwing grenades.",
+ "wildthrow_disable_info": "Your memory of how to throw grenades is back to normal.",
"wildthrow_select_info": "Select a player:",
"zeus": "Zeus",
diff --git a/jRandomSkills - Server Files/plugins/jRandomSkills/languages/fr.json b/jRandomSkills - Server Files/plugins/jRandomSkills/languages/fr.json
index 02c5543..f6f6a9d 100644
--- a/jRandomSkills - Server Files/plugins/jRandomSkills/languages/fr.json
+++ b/jRandomSkills - Server Files/plugins/jRandomSkills/languages/fr.json
@@ -24,6 +24,7 @@
"areareaper_select_info": "Sélectionnez un site à désactiver :",
"areareaper_site_disabled": "Le site de bombe {0} a été désactivé – aucune bombe ne peut y être posée !",
"areareaper_used_info": "Votre compétence a déjà été utilisée.",
+ "areareaper_teammates_info": "Le site de bombe {0} est désormais interdit au plant.",
"areareaper_bombsite_disabled": "Ce site de bombe a été désactivé !",
"armored": "Blindé",
@@ -62,6 +63,7 @@
"carefulbullets": "Balles prudentes",
"carefulbullets_desc": "Sélectionnez un joueur qui subit des dégâts à chaque tir manqué",
"carefulbullets_enemy_info": "À partir de maintenant, l'inexactitude fera littéralement mal.",
+ "carefulbullets_disable_info": "Rater vos tirs ne vous blessera plus.",
"carefulbullets_player_info": "« {0} » doit désormais être plus prudent.",
"carefulbullets_select_info": "L'inexactitude nuit au joueur :",
@@ -85,6 +87,7 @@
"darkness": "Obscurité",
"darkness_desc": "Applique un effet d’obscurité à un ennemi choisi",
"darkness_enemy_info": "Que la lumière s’éteigne.",
+ "darkness_disable_info": "Les lumières sont revenues.",
"darkness_player_info": "L’obscurité a envahi le joueur « {0} ».",
"darkness_select_info": "Sélectionnez un joueur pour l’obscurité :",
@@ -97,6 +100,7 @@
"deaf": "Sourd",
"deaf_desc": "Choisissez un joueur pour couper tous ses sons",
"deaf_enemy_info": "Votre casque a quitté la partie.",
+ "deaf_disable_info": "Vous entendez de nouveau.",
"deaf_player_info": "Le son a été désactivé pour le joueur « {0} ».",
"deaf_select_info": "Couper tous les sons du joueur :",
@@ -167,6 +171,7 @@
"glitch": "Glitch",
"glitch_desc": "Désactive le radar d’un ennemi choisi",
"glitch_enemy_info": "Votre radar a été désactivé.",
+ "glitch_disable_info": "Votre radar est revenu à la normale.",
"glitch_player_info": "Le radar du joueur « {0} » a été désactivé.",
"glitch_select_info": "Désactiver le radar du joueur :",
@@ -196,6 +201,7 @@
"hotbomb": "Bombe brûlante",
"hotbomb_desc": "Tant que vous êtes en vie, la bombe inflige des dégâts à son porteur",
"hotbomb_hint": "Attention, la bombe est brûlante !",
+ "hotbomb_disable_info": "La bombe ne brûle plus.",
"iana": "Hologramme",
"iana_desc": "Cliquez sur [css_useSkill] pour contrôler votre hologramme pendant quelques secondes",
@@ -218,6 +224,7 @@
"jammer": "Brouilleur",
"jammer_desc": "Choisissez un joueur pour désactiver son viseur",
"jammer_enemy_info": "Votre viseur a été désactivé.",
+ "jammer_disable_info": "Votre réticule est revenu à la normale.",
"jammer_player_info": "Le viseur du joueur « {0} » a été désactivé.",
"jammer_select_info": "Désactiver le viseur d’un joueur :",
@@ -230,6 +237,7 @@
"jumpban": "Sans Jambes",
"jumpban_desc": "Choisissez un joueur qui ne pourra plus sauter",
"jumpban_enemy_info": "Quelqu’un vous a coupé les jambes.",
+ "jumpban_disable_info": "Vous pouvez de nouveau utiliser vos jambes.",
"jumpban_player_info": "Le joueur « {0} » ne peut plus sauter.",
"jumpban_select_info": "Interdire de sauter au joueur :",
@@ -260,6 +268,7 @@
"magnifier": "Loupe",
"magnifier_desc": "Force l’écran de l’ennemi à zoomer, réduisant son champ de vision",
"magnifier_enemy_info": "Votre champ de vision a été déformé !",
+ "magnifier_disable_info": "Votre vision est revenue à la normale.",
"magnifier_player_info": "Le joueur « {0} » a été forcé en mode zoom.",
"magnifier_select_info": "Forcer l’écran du joueur à zoomer :",
@@ -321,12 +330,14 @@
"poison": "Poison",
"poison_desc": "Choisissez un joueur qui subira des dégâts toutes les quelques secondes",
"poison_enemy_info": "Vous avez été empoisonné.",
+ "poison_disable_info": "Vous êtes désormais immunisé contre le poison.",
"poison_player_info": "Le joueur « {0} » a été empoisonné.",
"poison_select_info": "Empoisonner un joueur :",
"primaryban": "Sans Fusils",
"primaryban_desc": "Choisissez un joueur qui ne pourra plus utiliser de fusils",
"primaryban_enemy_info": "Vous ne pouvez plus utiliser de fusils.",
+ "primaryban_disable_info": "Vous pouvez de nouveau utiliser des fusils.",
"primaryban_player_info": "Le joueur « {0} » ne peut plus utiliser de fusils.",
"primaryban_select_info": "Interdire les fusils pour un joueur :",
@@ -457,6 +468,8 @@
"wildthrow": "Lancers sauvages",
"wildthrow_desc": "Choisissez un joueur qui aura des difficultés à lancer des grenades",
"wildthrow_player_info": "Le joueur '{0}' a oublié tous ses alignements (lineups)",
+ "wildthrow_enemy_info": "Vous êtes trop nerveux lorsque vous lancez des grenades.",
+ "wildthrow_disable_info": "Votre mémoire concernant le lancer de grenades est revenue à la normale.",
"wildthrow_select_info": "Sélectionnez un joueur :",
"zeus": "Zeus",
diff --git a/jRandomSkills - Server Files/plugins/jRandomSkills/languages/pl.json b/jRandomSkills - Server Files/plugins/jRandomSkills/languages/pl.json
index 321c9d9..4afd41b 100644
--- a/jRandomSkills - Server Files/plugins/jRandomSkills/languages/pl.json
+++ b/jRandomSkills - Server Files/plugins/jRandomSkills/languages/pl.json
@@ -24,6 +24,7 @@
"areareaper_select_info": "Wybierz strefę do dezaktyw.:",
"areareaper_site_disabled": "Strefa detonacji {0} została dezaktywowana - nie można na niej podłożyć bomby!",
"areareaper_used_info": "Twoja moc została już wykorzystana.",
+ "areareaper_teammates_info": "Strefa {0} została zablokowana do podłożenia bomby.",
"areareaper_bombsite_disabled": "Ten bombsite został wyłączony!",
"armored": "Gruby",
@@ -62,6 +63,7 @@
"carefulbullets": "Ostrożne pociski",
"carefulbullets_desc": "Wybierz gracza, który otrzymuje obrażenia za każdy niecelny strzał",
"carefulbullets_enemy_info": "Od teraz niecelność będzie dosłownie bolała.",
+ "carefulbullets_disable_info": "Pudłowanie nie zadaje już obrażeń.",
"carefulbullets_player_info": "'{0}' musi teraz być bardziej ostrożny.",
"carefulbullets_select_info": "Niedokładność szkodzi graczowi:",
@@ -85,6 +87,7 @@
"darkness": "Mrok",
"darkness_desc": "Nadaje efekt ciemności wybranemu przeciwnikowi",
"darkness_enemy_info": "Niech zgasną światła.",
+ "darkness_disable_info": "Światła wróciły.",
"darkness_player_info": "Ciemność opanowała gracza '{0}'.",
"darkness_select_info": "Nałóż efekt ciemności:",
@@ -97,6 +100,7 @@
"deaf": "Głuchy",
"deaf_desc": "Wybierasz gracza, dla którego chcesz wyłączyć wszystkie dźwięki",
"deaf_enemy_info": "Słuchawki opuściły grę.",
+ "deaf_disable_info": "Znowu słyszysz.",
"deaf_player_info": "Dźwięk został wyłączony dla gracza '{0}'.",
"deaf_select_info": "Wycisz dźwięki gracza:",
@@ -167,6 +171,7 @@
"glitch": "Glitch",
"glitch_desc": "Wyłączasz radar wybranemu przeciwnikowi",
"glitch_enemy_info": "Twój radar został wyłączony.",
+ "glitch_disable_info": "Twój radar wrócił do normy.",
"glitch_player_info": "Radar gracza '{0}' został wyłączony.",
"glitch_select_info": "Wyłącz radar dla gracza:",
@@ -196,6 +201,7 @@
"hotbomb": "Gorąca Bomba",
"hotbomb_desc": "Dopóki żyjesz, bomba zadaje obrażenia osobie, która ją niesie",
"hotbomb_hint": "Ostrożnie, bomba parzy!",
+ "hotbomb_disable_info": "Bomba już nie parzy.",
"iana": "Hologram",
"iana_desc": "Kliknij [css_useSkill], aby sterować hologramem przez kilka sekund",
@@ -218,6 +224,7 @@
"jammer": "Zakłócacz",
"jammer_desc": "Wybierasz gracza, dla którego chcesz wyłączyć celownik",
"jammer_enemy_info": "Twój celownik został wyłączony.",
+ "jammer_disable_info": "Twój celownik wrócił do normy.",
"jammer_player_info": "Celownik gracza '{0}' została wyłączona.",
"jammer_select_info": "Wyłącz celownik dla gracza:",
@@ -230,6 +237,7 @@
"jumpban": "Beznogi",
"jumpban_desc": "Wybierasz gracza, który nie będzie mógł skakać",
"jumpban_enemy_info": "Ktoś odciął ci nogi.",
+ "jumpban_disable_info": "Możesz znowu używać nóg.",
"jumpban_player_info": "Gracz '{0}' nie może teraz skakać.",
"jumpban_select_info": "Zablokuj skok dla gracza:",
@@ -260,6 +268,7 @@
"magnifier": "Lupa",
"magnifier_desc": "Przybiżasz ekran wybranemu przeciwnikowi",
"magnifier_enemy_info": "Twoje pole widzenia zostało zniekształcone!",
+ "magnifier_disable_info": "Twój wzrok wrócił do normy.",
"magnifier_player_info": "Gracz '{0}' został zmuszony do przejścia w tryb powiększenia.",
"magnifier_select_info": "Powiększ ekran gracza:",
@@ -321,12 +330,14 @@
"poison": "Trutka",
"poison_desc": "Wybierasz gracza, który co kilka sekund będzie otrzymywał obrażenia",
"poison_enemy_info": "Zostałeś otruty.",
+ "poison_disable_info": "Jesteś teraz odporny na truciznę.",
"poison_player_info": "Gracz '{0}' został otruty.",
"poison_select_info": "Zatruj gracza:",
"primaryban": "Brak Karabinów",
"primaryban_desc": "Wybierasz gracza, który nie może używać karabinów",
"primaryban_enemy_info": "Nie możesz już używać karabinów.",
+ "primaryban_disable_info": "Możesz znowu używać karabinów.",
"primaryban_player_info": "Gracz '{0}' nie może już używać karabinów.",
"primaryban_select_info": "Zablokuj karabiny dla gracza:",
@@ -457,6 +468,8 @@
"wildthrow": "Dzikie Rzuty",
"wildthrow_desc": "Wybierz gracza, który będzie miał trudności z rzucaniem granatami",
"wildthrow_player_info": "Gracz '{0}' zapomniał wszystkie lineup'y",
+ "wildthrow_enemy_info": "Za bardzo denerwujesz się podczas rzucania granatami.",
+ "wildthrow_disable_info": "Twoja pamięć odnośnie granatów wróciła do normy.",
"wildthrow_select_info": "Wybierz gracza:",
"zeus": "Zeus",
diff --git a/jRandomSkills - Server Files/plugins/jRandomSkills/languages/pt-br.json b/jRandomSkills - Server Files/plugins/jRandomSkills/languages/pt-br.json
index b953a61..117b829 100644
--- a/jRandomSkills - Server Files/plugins/jRandomSkills/languages/pt-br.json
+++ b/jRandomSkills - Server Files/plugins/jRandomSkills/languages/pt-br.json
@@ -24,6 +24,7 @@
"areareaper_select_info": "Escolha o bomb p/ desativar:",
"areareaper_site_disabled": "Bombsite {0} foi desativado - nenhuma bomba pode ser plantada lá!",
"areareaper_used_info": "Seu poder já foi usado.",
+ "areareaper_teammates_info": "A área {0} foi bloqueada para plantar a bomba.",
"areareaper_bombsite_disabled": "Este local de bomba foi desativado!",
"armored": "Super Tiro",
@@ -62,6 +63,7 @@
"carefulbullets": "Errou, mamou",
"carefulbullets_desc": "Selecione um jogador vai sofrer dano ao errar cada tiro",
"carefulbullets_enemy_info": "A partir de agora, seu erro vai literalmente doer.",
+ "carefulbullets_disable_info": "Errar tiros não causará mais dano.",
"carefulbullets_player_info": "'{0}' agora precisa ter mais cuidado.",
"carefulbullets_select_info": "O erro prejudica o jogador:",
@@ -85,6 +87,7 @@
"darkness": "Escuridão",
"darkness_desc": "Aplica um efeito de escuridão a um inimigo escolhido",
"darkness_enemy_info": "Que as luzes se apaguem.",
+ "darkness_disable_info": "As luzes voltaram.",
"darkness_player_info": "A escuridão tomou conta do jogador '{0}'.",
"darkness_select_info": "Escolha jogador: escuridão:",
@@ -97,6 +100,7 @@
"deaf": "Surdo",
"deaf_desc": "Escolha um jogador para desativar todos os sons",
"deaf_enemy_info": "Seus fones de ouvido saíram do jogo.",
+ "deaf_disable_info": "Você pode ouvir novamente.",
"deaf_player_info": "O som foi desativado para o jogador '{0}'.",
"deaf_select_info": "Silenciar jogador:",
@@ -167,6 +171,7 @@
"glitch": "Sem Mapa",
"glitch_desc": "Desativa o radar de um inimigo escolhido",
"glitch_enemy_info": "Seu radar foi desativado.",
+ "glitch_disable_info": "Seu radar voltou ao normal.",
"glitch_player_info": "O radar do jogador '{0}' foi desativado.",
"glitch_select_info": "Desativar radar do jogador:",
@@ -196,6 +201,7 @@
"hotbomb": "Bomba Quente",
"hotbomb_desc": "Enquanto você estiver vivo, a bomba causa dano ao portador",
"hotbomb_hint": "Cuidado, a bomba está quente!",
+ "hotbomb_disable_info": "A bomba não está mais queimando.",
"iana": "Holograma",
"iana_desc": "Clique em [css_useSkill] para controlar seu holograma por alguns segundos",
@@ -218,6 +224,7 @@
"jammer": "No Scope",
"jammer_desc": "Escolha um jogador para desativar a mira",
"jammer_enemy_info": "Sua mira foi desativada.",
+ "jammer_disable_info": "Sua mira voltou ao normal.",
"jammer_player_info": "A mira do jogador '{0}' foi desativada.",
"jammer_select_info": "Desativar mira do jogador:",
@@ -230,6 +237,7 @@
"jumpban": "Perneta",
"jumpban_desc": "Escolha um jogador que não poderá pular",
"jumpban_enemy_info": "Cortaram as suas pernas.",
+ "jumpban_disable_info": "Você recuperou o uso das pernas.",
"jumpban_player_info": "O jogador '{0}' não pode mais pular.",
"jumpban_select_info": "Banir pulo do jogador:",
@@ -260,6 +268,7 @@
"magnifier": "Lupa",
"magnifier_desc": "Força a tela do inimigo a dar um zoom, reduzindo seu campo de visão",
"magnifier_enemy_info": "Seu campo de visão foi distorcido!",
+ "magnifier_disable_info": "Sua visão voltou ao normal.",
"magnifier_player_info": "O jogador ‘{0}’ foi forçado a entrar no modo zoom.",
"magnifier_select_info": "Ampliar tela do jogador:",
@@ -321,12 +330,14 @@
"poison": "Veneno",
"poison_desc": "Escolha um jogador que receberá dano a cada poucos segundos",
"poison_enemy_info": "Você foi envenenado.",
+ "poison_disable_info": "Você agora está imune ao veneno.",
"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_disable_info": "Você pode usar rifles novamente.",
"primaryban_player_info": "O jogador '{0}' não pode mais usar rifles.",
"primaryban_select_info": "Banir rifles do jogador:",
@@ -457,6 +468,8 @@
"wildthrow": "Arremesso Selvagem",
"wildthrow_desc": "Escolha um jogador que terá problemas para lançar granadas",
"wildthrow_player_info": "O jogador '{0}' esqueceu todos os seus lineups",
+ "wildthrow_enemy_info": "Você fica muito nervoso ao lançar granadas.",
+ "wildthrow_disable_info": "Sua memória sobre como lançar granadas voltou ao normal.",
"wildthrow_select_info": "Selecione um jogador:",
"zeus": "Zeus",
diff --git a/jRandomSkills - Server Files/plugins/jRandomSkills/languages/ru.json b/jRandomSkills - Server Files/plugins/jRandomSkills/languages/ru.json
index e8fc4c3..0eae893 100644
--- a/jRandomSkills - Server Files/plugins/jRandomSkills/languages/ru.json
+++ b/jRandomSkills - Server Files/plugins/jRandomSkills/languages/ru.json
@@ -24,6 +24,7 @@
"areareaper_select_info": "Выберите сайт для деактивации:",
"areareaper_site_disabled": "Бомб-сайт {0} деактивирован — бомбу нельзя установить там!",
"areareaper_used_info": "Ваш навык уже был использован.",
+ "areareaper_teammates_info": "Установка бомбы на точке {0} запрещена.",
"areareaper_bombsite_disabled": "Этот бомб-сайт отключён!",
"armored": "Бронированный",
@@ -62,6 +63,7 @@
"carefulbullets": "Осторожные пули",
"carefulbullets_desc": "Выберите игрока, который будет получать урон за каждое ваше промахивание",
"carefulbullets_enemy_info": "Точность теперь буквально имеет значение.",
+ "carefulbullets_disable_info": "Промахи больше не наносят урон.",
"carefulbullets_player_info": "'{0}' теперь должен быть осторожнее.",
"carefulbullets_select_info": "Промахи ранят игрока:",
@@ -85,6 +87,7 @@
"darkness": "Тьма",
"darkness_desc": "Накладывает эффекть тьмы на выбранного врага",
"darkness_enemy_info": "Пусть свет погаснет.",
+ "darkness_disable_info": "Свет снова включился.",
"darkness_player_info": "Тьма охватила игрока '{0}'.",
"darkness_select_info": "Выберите игрока для тьмы:",
@@ -97,6 +100,7 @@
"deaf": "Глухой",
"deaf_desc": "Выберите игрока, у которого будет отключён весь звук",
"deaf_enemy_info": "Ваши наушники покинули игру.",
+ "deaf_disable_info": "Ты снова слышишь.",
"deaf_player_info": "Звук отключён для игрока '{0}'.",
"deaf_select_info": "Отключить звук для игрока:",
@@ -167,6 +171,7 @@
"glitch": "Глитч",
"glitch_desc": "Отключает радар выбранному врагу",
"glitch_enemy_info": "Ваш радар был отключён.",
+ "glitch_disable_info": "Твой радар снова работает.",
"glitch_player_info": "Радар игрока '{0}' был отключён.",
"glitch_select_info": "Отключить радар игроку:",
@@ -196,6 +201,7 @@
"hotbomb": "Горячая бомба",
"hotbomb_desc": "Пока вы живы, бомба наносит урон её носителю",
"hotbomb_hint": "Осторожно, бомба горячая!",
+ "hotbomb_disable_info": "Бомба больше не обжигает.",
"iana": "Голограмма",
"iana_desc": "Нажмите [css_useSkill], чтобы управлять своей голограммой несколько секунд",
@@ -218,6 +224,7 @@
"jammer": "Глушилка",
"jammer_desc": "Выберите игрока, чтобы отключить его прицел",
"jammer_enemy_info": "Ваш прицел был отключён.",
+ "jammer_disable_info": "Твой прицел снова работает.",
"jammer_player_info": "Прицел игрока '{0}' был отключён.",
"jammer_select_info": "Отключить прицел игроку:",
@@ -230,6 +237,7 @@
"jumpban": "Безногий",
"jumpban_desc": "Выберите игрока, который не сможет прыгать",
"jumpban_enemy_info": "Кто-то отрезал вам ноги.",
+ "jumpban_disable_info": "Ты снова можешь нормально двигаться.",
"jumpban_player_info": "Игрок '{0}' больше не может прыгать.",
"jumpban_select_info": "Запретить прыжки игроку:",
@@ -260,6 +268,7 @@
"magnifier": "Лупа",
"magnifier_desc": "Приближает экран врага, уменьшая его поле зрения",
"magnifier_enemy_info": "Ваше поле зрения было искажено!",
+ "magnifier_disable_info": "Твоё зрение восстановилось.",
"magnifier_player_info": "Игрок '{0}' принудительно переведён в режим увеличения.",
"magnifier_select_info": "Увеличить экран игрока:",
@@ -321,12 +330,14 @@
"poison": "Яд",
"poison_desc": "Выберите игрока, который будет получать урон каждые несколько секунд",
"poison_enemy_info": "Вы были отравлены.",
+ "poison_disable_info": "Теперь ты невосприимчив к яду.",
"poison_player_info": "Игрок '{0}' был отравлен.",
"poison_select_info": "Отравить игрока:",
"primaryban": "Без винтовок",
"primaryban_desc": "Выберите игрока, который не сможет использовать винтовки",
"primaryban_enemy_info": "Вы больше не можете использовать винтовки.",
+ "primaryban_disable_info": "Ты снова можешь использовать винтовки.",
"primaryban_player_info": "Игрок '{0}' больше не может использовать винтовки.",
"primaryban_select_info": "Запретить винтовки игроку:",
@@ -457,6 +468,8 @@
"wildthrow": "Дикие броски",
"wildthrow_desc": "Выберите игрока, у которого будут проблемы с бросанием гранат",
"wildthrow_player_info": "Игрок '{0}' забыл все свои гранатлайны",
+ "wildthrow_enemy_info": "Ты слишком волнуешься, когда бросаешь гранаты.",
+ "wildthrow_disable_info": "Твоя память о том, как бросать гранаты, вернулась в норму.",
"wildthrow_select_info": "Выберите игрока:",
"zeus": "Зевс",
@@ -516,4 +529,4 @@
"menu_controlls_scroll": "W/S — Прокрутка",
"menu_controlls_padding": " | ",
"menu_controlls_select": "E — Выбрать"
-}
+}
\ No newline at end of file
diff --git a/jRandomSkills - Server Files/plugins/jRandomSkills/languages/tr.json b/jRandomSkills - Server Files/plugins/jRandomSkills/languages/tr.json
index fca1676..87d07ef 100644
--- a/jRandomSkills - Server Files/plugins/jRandomSkills/languages/tr.json
+++ b/jRandomSkills - Server Files/plugins/jRandomSkills/languages/tr.json
@@ -24,6 +24,7 @@
"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_teammates_info": "{0} Bölgesi bomba kurmaya kapatıldı.",
"areareaper_bombsite_disabled": "Bu bomba alanı kullanıma kapatıldı!",
"armored": "Zırhlı",
@@ -62,6 +63,7 @@
"carefulbullets": "Dikkatli Mermiler",
"carefulbullets_desc": "Düşman mermi kaçırırsa hasar alır",
"carefulbullets_enemy_info": "Mermi kaçırmak canını yakacak",
+ "carefulbullets_disable_info": "Artık mermi kaçırmak can yakmayacak.",
"carefulbullets_player_info": "'{0}' artık mermi sıkarken iki kere düşünecek",
"carefulbullets_select_info": "İsabetsiz atışların hasar vereceği oyuncu:",
@@ -85,6 +87,7 @@
"darkness": "Karanlık",
"darkness_desc": "Bir düşmanın ekranını karart",
"darkness_enemy_info": "Işıklar sönsün",
+ "darkness_disable_info": "Işıklar geldi.",
"darkness_player_info": "'{0}' isimli oyuncunun dünyasını kararttın",
"darkness_select_info": "Karanlık bir oyuncuyu seç:",
@@ -97,6 +100,7 @@
"deaf": "Sağır",
"deaf_desc": "Bir düşmanın kulağını kapat ve sesleri duymaz hale getir",
"deaf_enemy_info": "Kulaklıkların tıkandı",
+ "deaf_disable_info": "Kulakların açıldı.",
"deaf_player_info": "'{0}' isimli oyuncu için sesler kapatıldı.",
"deaf_select_info": "Sağır bir oyuncuyu seç:",
@@ -167,6 +171,7 @@
"glitch": "Glitç",
"glitch_desc": "Seçilen bir düşmanın radarını kapatır",
"glitch_enemy_info": "Radarın kapandı",
+ "glitch_disable_info": "Radarın açıldı",
"glitch_player_info": "'{0}' isimli oyuncunun radarı devre dışı bırakıldı.",
"glitch_select_info": "Radarı kapatılacak oyuncuyu seç:",
@@ -196,6 +201,7 @@
"hotbomb": "Sıcak C4",
"hotbomb_desc": "Yaşadığın sürece bombacının canı azalıyor",
"hotbomb_hint": "Bomba çok sıcak!",
+ "hotbomb_disable_info": "Bomba artık yakmıyor.",
"iana": "Hologram",
"iana_desc": "[css_useSkill] tuşuna basarak bir hologram oluştur",
@@ -218,6 +224,7 @@
"jammer": "Sinyal Kesici",
"jammer_desc": "Bir oyuncunun nişangahını (crosshair) kapatmak için seç",
"jammer_enemy_info": "Nişangahın kapatıldı.",
+ "jammer_disable_info": "Nişangahın açıldı",
"jammer_player_info": "'{0}' isimli oyuncunun nişangahı kapatıldı.",
"jammer_select_info": "Nişangahı kapatılacak oyuncuyu seç:",
@@ -230,6 +237,7 @@
"jumpban": "Bacaksız",
"jumpban_desc": "Zıplayamayacak bir oyuncu seç",
"jumpban_enemy_info": "Bacakların kesildi",
+ "jumpban_disable_info": "Bacaklarına kavuştun",
"jumpban_player_info": "'{0}' artık zıplayamaz.",
"jumpban_select_info": "Zıplaması yasaklanacak oyuncu:",
@@ -260,6 +268,7 @@
"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üşün bozuldu!",
+ "magnifier_disable_info": "Görüşün düzeldi",
"magnifier_player_info": "'{0}' isimli oyuncunun ekranı yakınlaştırıldı.",
"magnifier_select_info": "Ekranı büyütülecek oyuncuyu seç:",
@@ -321,12 +330,14 @@
"poison": "Zehir",
"poison_desc": "Birkaç saniyede bir hasar alacak bir oyuncu seç",
"poison_enemy_info": "Zehirlendin.",
+ "poison_disable_info": "Zehire bağışıklık kazandın",
"poison_player_info": "'{0}' isimli oyuncu zehirlendi.",
"poison_select_info": "Zehirlenecek oyuncuyu seç:",
"primaryban": "Tüfek Yasak",
"primaryban_desc": "Tüfek kullanamayacak bir oyuncu seç",
"primaryban_enemy_info": "Tüfek kullanmayı unuttun",
+ "primaryban_disable_info": "Tüfek kullanabilirsin",
"primaryban_player_info": "'{0}' artık tüfek kullanamaz.",
"primaryban_select_info": "Tüfek kullanımı yasaklanacak oyuncu:",
@@ -457,6 +468,8 @@
"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_enemy_info": "Bomba atarken çok heyecanlanıyorsun.",
+ "wildthrow_disable_info": "El bombası atma hafızan normale döndü.",
"wildthrow_select_info": "Bir oyuncu seçin:",
"zeus": "Zeus",