v1.2.2.b3

## 📋 Changelog

- #### 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.
This commit is contained in:
Juzlus 2026-06-29 06:12:53 +02:00
parent 425bbaa784
commit 2ae293d1aa
45 changed files with 831 additions and 173 deletions

42
.github/en.md vendored
View file

@ -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
![Preview](https://github.com/Juzlus/jRandomSkills/blob/main/.github/preview.gif?raw=true)
@ -357,6 +357,46 @@ This plugin uses content from the following projects:
## 📋 Changelog
<details>
<summary><b>v1.2.2.b3</b></summary>
- #### 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.
</details>
<details>
<summary><b>v1.2.2.b2</b></summary>

56
.github/pl.md vendored
View file

@ -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
![Preview](https://github.com/Juzlus/jRandomSkills/blob/main/.github/preview.gif?raw=true)
@ -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
<details>
<summary><b>v1.2.2.b3</b></summary>
- #### 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.
</details>
<details>
<summary><b>v1.2.2.b2</b></summary>
@ -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.

View file

@ -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;

View file

@ -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",

View file

@ -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",

View file

@ -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",

View file

@ -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",

View file

@ -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",

View file

@ -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": "Зевс",

View file

@ -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",

View file

@ -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);

View file

@ -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 _) { }

View file

@ -51,6 +51,7 @@ namespace src.player
Instance.RegisterEventHandler<EventPlayerBlind>(PlayerBlind);
Instance.RegisterEventHandler<EventPlayerHurt>(PlayerHurt);
Instance.RegisterEventHandler<EventPlayerJump>(PlayerJump);
Instance.RegisterEventHandler<EventBotTakeover>(BotTakeover);
Instance.RegisterEventHandler<EventWeaponFire>(WeaponFire);
Instance.RegisterEventHandler<EventItemEquip>(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)

View file

@ -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)
{
}
}

View file

@ -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<CCSPlayerController>((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)

View file

@ -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);

View file

@ -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<int>(skillName, "damageAfterMiss"));
}
lastShot.TryRemove(playerIndex, out _);
});
}
@ -155,6 +175,8 @@ namespace src.player.skills
return;
CCSPlayerController attacker = PlayerManager.GetPlayerEvent(attackerPawn.Controller.Value.As<CCSPlayerController>())!;
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);

View file

@ -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();

View file

@ -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"));
}
}

View file

@ -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);
}

View file

@ -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<string> 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;
if (!player.IsBot)
Instance.SkillAction(skillName.ToString(), "EnableSkill", [player]);
player.PrintToChat($" {ChatColors.Red}" + player.GetTranslation("thief_incorrect_skill", enemyName));
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)

View file

@ -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<int>(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<int>(skillName, "refreshPrice")), skillName.ToString(), false));
}
public static void DisableSkill(CCSPlayerController player)

View file

@ -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 _);

View file

@ -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<float>(skillName, "cooldown");
if (Server.TickCount % (int)(cooldown * 64) != 0) return;
int cooldown = (int)(SkillsInfo.GetValue<float>(skillName, "cooldown") * 64);
if (Server.TickCount % cooldown != 0) return;
if (players.IsEmpty || jRandomSkills.Instance.GameRules?.FreezePeriod == true) return;
int damage = SkillsInfo.GetValue<int>(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)

View file

@ -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);
}

View file

@ -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);
}

View file

@ -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)

View file

@ -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<uint>(skillName, "customFOV");
Utilities.SetStateChanged(enemy, "CBasePlayerController", "m_iDesiredFOV");
var enemyEvent = PlayerManager.GetPlayerFromEvent(enemy);
if (enemyEvent == null || !enemyEvent.IsValid) return;
enemyEvent.DesiredFOV = SkillsInfo.GetValue<uint>(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<uint>(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))
{

View file

@ -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;
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)

View file

@ -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;

View file

@ -29,8 +29,12 @@ namespace src.player.skills
public static void OnTick()
{
if (Server.TickCount % (int)(64 * SkillsInfo.GetValue<float>(skillName, "Cooldown")) == 0)
int cooldown = (int)(64 * SkillsInfo.GetValue<float>(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<int>(skillName, "MinHealth")) continue;
SkillUtils.TakeHealth(pawn, SkillsInfo.GetValue<int>(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);
}

View file

@ -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)
{
}

View file

@ -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;
var playerEvent = PlayerManager.GetPlayerFromEvent(p);
if (playerEvent == null || !playerEvent.IsValid) return;
if (!player.IsBot)
Instance.SkillAction(skillName.ToString(), "EnableSkill", [p]);
p.PrintToChat($" {ChatColors.Red}" + p.GetTranslation("thief_incorrect_skill", e.PlayerName));
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<bool>(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);
}

View file

@ -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<CCSPlayerController>();
player = PlayerManager.GetPlayerEvent(player);
if (player == null || !player.IsValid) return;
if (!infectedPlayers.ContainsKey(player.Index)) return;
Server.NextFrame(() => {

View file

@ -1486,7 +1486,7 @@
"Active": true,
"Name": "AreaReaper",
"RequiredPermission": "",
"MaxPerServer": -1,
"MaxPerServer": 1,
"Rarity": "Common"
},
{

View file

@ -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",

View file

@ -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",

View file

@ -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",

View file

@ -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",

View file

@ -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",

View file

@ -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": "Зевс",

View file

@ -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",