diff --git a/jRandomSkills - SRC Files/!jRandomSkills.csproj.user b/jRandomSkills - SRC Files/!jRandomSkills.csproj.user
deleted file mode 100644
index a324019..0000000
--- a/jRandomSkills - SRC Files/!jRandomSkills.csproj.user
+++ /dev/null
@@ -1,9 +0,0 @@
-
-
-
-
-
- Designer
-
-
-
\ No newline at end of file
diff --git a/jRandomSkills - SRC Files/Properties/Resources.Designer.cs b/jRandomSkills - SRC Files/Properties/Resources.Designer.cs
index d45662c..90c5831 100644
--- a/jRandomSkills - SRC Files/Properties/Resources.Designer.cs
+++ b/jRandomSkills - SRC Files/Properties/Resources.Designer.cs
@@ -8,7 +8,7 @@
//
//------------------------------------------------------------------------------
-namespace src.player.skills.Properties {
+namespace jRandomSkills.Properties {
using System;
diff --git a/jRandomSkills - SRC Files/!jRandomSkills.csproj b/jRandomSkills - SRC Files/jRandomSkills.csproj
similarity index 91%
rename from jRandomSkills - SRC Files/!jRandomSkills.csproj
rename to jRandomSkills - SRC Files/jRandomSkills.csproj
index dfd9bbb..bcbde77 100644
--- a/jRandomSkills - SRC Files/!jRandomSkills.csproj
+++ b/jRandomSkills - SRC Files/jRandomSkills.csproj
@@ -14,14 +14,14 @@
-
+
-
+
diff --git a/jRandomSkills - SRC Files/jRandomSkills.sln b/jRandomSkills - SRC Files/jRandomSkills.sln
index 6fe0607..58731d2 100644
--- a/jRandomSkills - SRC Files/jRandomSkills.sln
+++ b/jRandomSkills - SRC Files/jRandomSkills.sln
@@ -3,7 +3,9 @@ Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.9.34728.123
MinimumVisualStudioVersion = 10.0.40219.1
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "!jRandomSkills", "!jRandomSkills.csproj", "{1412DD25-558C-425A-A7F6-347C970136E5}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "jRandomSkills", "jRandomSkills.csproj", "{1412DD25-558C-425A-A7F6-347C970136E5}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WASDMenuAPI", "..\..\..\source\repos\WASDMenuAPI-master\WASDMenuAPI\WASDMenuAPI.csproj", "{E13A84FA-EAB5-CAC7-8143-DD55AB40EAB5}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
@@ -15,6 +17,10 @@ Global
{1412DD25-558C-425A-A7F6-347C970136E5}.Debug|Any CPU.Build.0 = Debug|Any CPU
{1412DD25-558C-425A-A7F6-347C970136E5}.Release|Any CPU.ActiveCfg = Release|Any CPU
{1412DD25-558C-425A-A7F6-347C970136E5}.Release|Any CPU.Build.0 = Release|Any CPU
+ {E13A84FA-EAB5-CAC7-8143-DD55AB40EAB5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {E13A84FA-EAB5-CAC7-8143-DD55AB40EAB5}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {E13A84FA-EAB5-CAC7-8143-DD55AB40EAB5}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {E13A84FA-EAB5-CAC7-8143-DD55AB40EAB5}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
diff --git a/jRandomSkills - SRC Files/src/command/Command.cs b/jRandomSkills - SRC Files/src/command/Command.cs
index 7e3bd95..2876434 100644
--- a/jRandomSkills - SRC Files/src/command/Command.cs
+++ b/jRandomSkills - SRC Files/src/command/Command.cs
@@ -78,6 +78,9 @@ namespace src.command
if (playerPawn?.CBodyComponent == null) return;
if (!player.IsValid || !player.PawnIsAlive) return;
+ if (SkillsInfo.GetValue(playerInfo.Skill, "disableOnFreezeTime") && SkillUtils.IsFreezeTime())
+ return;
+
string[] commands = _.ArgString.Trim().Split(" ", StringSplitOptions.RemoveEmptyEntries);
Debug.WriteToDebug($"Player {player.PlayerName} used the skill: {playerInfo.Skill}");
if (commands == null || commands.Length == 0)
@@ -464,14 +467,12 @@ namespace src.command
if (player == null || !player.IsValid) return;
if (!string.IsNullOrEmpty(config.NormalCommands.ChangeLanguageCommand.Permissions) && !AdminManager.PlayerHasPermissions(player, config.NormalCommands.ChangeLanguageCommand.Permissions)) return;
- string fileName;
+ string fileName = Config.LoadedConfig.LanguageSystem.DefaultLangCode;
string newLangCode = command.GetArg(1).ToUpper();
foreach (var langInfo in Config.LoadedConfig.LanguageSystem.LanguageInfos)
if (langInfo.IsoCodes.Contains(newLangCode))
fileName = langInfo.FileName;
- if (!Localization.HasTranslation(newLangCode))
- fileName = Config.LoadedConfig.LanguageSystem.DefaultLangCode;
- else
+ if (Localization.HasTranslation(newLangCode))
fileName = newLangCode.ToLower();
Localization.ChangePlayerLanguage(player, fileName);
}
@@ -508,17 +509,5 @@ namespace src.command
}
}
}
-
-
-
-
-
-
-
-
-
-
-
-
}
}
\ No newline at end of file
diff --git a/jRandomSkills - SRC Files/src/jRandomSkills.cs b/jRandomSkills - SRC Files/src/jRandomSkills.cs
index 1ad7ed5..c8aa550 100644
--- a/jRandomSkills - SRC Files/src/jRandomSkills.cs
+++ b/jRandomSkills - SRC Files/src/jRandomSkills.cs
@@ -27,7 +27,7 @@ namespace src
public override string ModuleName => "[CS2] [ jRandomSkills ]";
public override string ModuleAuthor => "D3X, Juzlus";
public override string ModuleDescription => "Plugin adds random skills every round for CS2 by D3X. Modified by Juzlus.";
- public override string ModuleVersion => "1.1.9f";
+ public override string ModuleVersion => "1.10.0";
public override void Load(bool hotReload)
{
diff --git a/jRandomSkills - SRC Files/src/lang/de.json b/jRandomSkills - SRC Files/src/lang/de.json
new file mode 100644
index 0000000..161f149
--- /dev/null
+++ b/jRandomSkills - SRC Files/src/lang/de.json
@@ -0,0 +1,477 @@
+{
+ "none": "Keine",
+ "none_desc": "Du hast keine Fertigkeit",
+
+ "aimbot": "Aimbot",
+ "aimbot_desc": "Jede Kugel, die du triffst, zählt als Kopfschuss",
+
+ "anomaly": "Anomalie",
+ "anomaly_desc": "Du spulst die Zeit um einige Sekunden zurück",
+
+ "antyflash": "Anti-Flash",
+ "antyflash_desc": "Du bist immun gegen Blendgranaten und deine Blendgranaten halten 7 Sekunden lang",
+
+ "antyhead": "Eiserner Kopf",
+ "antyhead_desc": "Du erleidest keinen Schaden durch Kopfschüsse",
+
+ "areareaper": "Zone Reaper",
+ "areareaper_desc": "Du kannst einen Bombenort auswählen, den du deaktivieren möchtest",
+ "areareaper_incorrect_site": "Kein solcher Bombenort gefunden",
+ "areareaper_no_site": "Keine Bombenstandorte gefunden.",
+ "areareaper_select_info": "Standort zum Deaktivieren auswählen:",
+ "areareaper_site_disabled": "Bombenstandort {0} wurde deaktiviert – dort können keine Bomben platziert werden!",
+ "areareaper_used_info": "Deine Fähigkeit wurde bereits eingesetzt.",
+
+ "armored": "Gepanzert",
+ "armored_desc": "Du hast einen zufälligen Schadensmultiplikator",
+ "armored_desc2": "Dein Schadensmultiplikator beträgt: {0}x",
+
+ "assassin": "Attentäter",
+ "assassin_desc": "Du fügst Gegnern von hinten erhöhten Schaden zu",
+
+ "astronaut": "Astronaut",
+ "astronaut_desc": "Du erhältst zu Beginn der Runde einen zufälligen Schwerkraftwert",
+ "astronaut_desc2": "Deine zufällige Schwerkraft beträgt: {0}x",
+
+ "moneyswap": "Steuerbeamter",
+ "moneyswap_desc": "Wähle einen Spieler aus, mit dem du Geld tauschen möchtest",
+ "moneyswap_enemy_info": "Das Finanzamt hat dich erwischt.",
+ "moneyswap_player_info": "Du hast Geld mit dem Spieler \"{0}\" getauscht.",
+ "moneyswap_select_info": "Geld mit Spieler tauschen:",
+
+ "baseball": "Baseballspieler",
+ "baseball_desc": "Deine Attrappe prallt von Wänden ab und tötet einen Gegner sofort beim Aufprall.",
+
+ "behind": "Feind drehen",
+ "behind_desc": "Du hast eine zufällige Chance, einen Feind um 180 Grad zu drehen, wenn du ihn triffst",
+ "behind_desc2": "Deine Chance, einen Feind bei einem Treffer zu drehen, beträgt: {0} %",
+
+ "blademaster": "Schwertmeister",
+ "blademaster_desc": "Wenn du ein Messer hältst, hast du eine hohe Chance, einen Schuss abzuwehren",
+
+ "bunnyhop": "Hase",
+ "bunnyhop_desc": "Du erhältst automatisch bunnyhop",
+
+ "c4camouflage": "C4-Tarnung",
+ "c4camouflage_desc": "Du bist unsichtbar, während du die Bombe hältst",
+
+ "carefulbullets": "Vorsichtige Kugeln",
+ "carefulbullets_desc": "Wähle einen Spieler aus, der für jeden Fehlschuss Schaden nimmt",
+ "carefulbullets_enemy_info": "Von nun an wird Ungenauigkeit buchstäblich wehtun.",
+ "carefulbullets_player_info": "‚{0}‘ muss jetzt vorsichtiger sein.",
+ "carefulbullets_select_info": "Fehler schaden dem Spieler:",
+
+ "catapult": "Katapult",
+ "catapult_desc": "Du hast eine zufällige Chance, einen Gegner nach oben zu schleudern",
+ "catapult_desc2": "Deine Chance, einen Gegner bei einem Treffer zu schleudern, beträgt: {0} %",
+
+ "chicken": "Huhn",
+ "chicken_desc": "Du erhältst ein Huhn-Modell + 10 % schnellere Bewegung – 50 HP",
+
+ "chillout": "Chillout",
+ "chillout_desc": "Das Platzieren der Bombe dauert deutlich länger",
+
+ "cutter": "Cutter",
+ "cutter_desc": "Sofortiger Tod mit einem Messer",
+
+ "cypher": "Kamera",
+ "cypher_desc": "Klicken Sie auf [css_useSkill], um eine Kamera zu erstellen/zu wechseln",
+ "cypher_nospace": "Die Kamera muss im rechten Winkel zur Wand positioniert werden",
+
+ "darkness": "Dunkelheit",
+ "darkness_desc": "Wendet einen Dunkelheitseffekt auf einen ausgewählten Gegner an",
+ "darkness_enemy_info": "Lass die Lichter ausgehen",
+ "darkness_player_info": "Die Dunkelheit hat den Spieler \"{0}\" überwältigt.",
+ "darkness_select_info": "Wähle einen Spieler für die Dunkelheit aus:",
+
+ "deactivator": "Deaktivator",
+ "deactivator_desc": "Wähle einen Spieler aus, dessen Fähigkeit du deaktivieren möchtest",
+ "deactivator_enemy_info": "Deine Fähigkeit wurde deaktiviert",
+ "deactivator_player_info": "Die Fähigkeit des Spielers ‚{0}‘ wurde deaktiviert",
+ "deactivator_select_info": "Fähigkeit eines Spielers deaktivieren:",
+
+ "deaf": "Taub",
+ "deaf_desc": "Wähle einen Spieler aus, für den alle Sounds stummgeschaltet werden sollen",
+ "deaf_enemy_info": "Deine Kopfhörer haben das Spiel verlassen.",
+ "deaf_player_info": "Der Ton für den Spieler ‚{0}‘ wurde deaktiviert.",
+ "deaf_select_info": "Alle Töne für den Spieler stummschalten:",
+
+ "disarmament": "Entwaffnung",
+ "disarmament_desc": "Du hast eine zufällige Chance, einen Gegner bei einem Treffer seine Waffe fallen zu lassen.",
+ "disarmament_desc2": "Ihre Chance, einen Gegner zu entwaffnen, beträgt: {0} %",
+
+ "distancer": "Entfernungsmesser",
+ "distancer_desc": "Sie können die Entfernung zum nächsten Gegner sehen",
+
+ "dash": "Sprinten",
+ "dash_desc": "Führe einen zweiten Sprung aus, um zu sprinten",
+
+ "dracula": "Dracula",
+ "dracula_desc": "Wenn du einen Gegner triffst, wird deine Gesundheit um einen Prozentsatz des verursachten Schadens wiederhergestellt",
+
+ "duplicator": "Duplikator",
+ "duplicator_desc": "Wähle einen Spieler aus, dessen Fertigkeit du kopieren möchtest",
+ "duplicator_player_info": "Die Fertigkeit des Spielers ‚{0}‘ wurde kopiert.",
+ "duplicator_select_info": "Kopiere die Fertigkeit eines Spielers:",
+
+ "dwarf": "Zwerg",
+ "dwarf_desc": "Zufällige Charaktergröße zu Beginn der Runde",
+ "dwarf_desc2": "Dein Größenmultiplikator beträgt: {0}x",
+
+ "enemyspawn": "Feindes-Spawn",
+ "enemyspawn_desc": "Klicke auf [css_useSkill], um zum Feindes-Spawn zu teleportieren",
+
+ "explosiveshot": "Explosiver Schuss",
+ "explosiveshot_desc": "Zufällige Chance, beim Schießen eine explosive Kugel abzufeuern",
+ "explosiveshot_desc2": "Deine Chance, eine explosive Kugel abzufeuern: {0} %",
+
+ "falconeye": "Falkenauge",
+ "falconeye_desc": "Klicke auf [css_useSkill], um eine Vogelperspektive zu aktivieren",
+
+ "fastreload": "Schnellnachladen",
+ "fastreload_desc": "Klicke auf [css_useSkill], um die Waffe, die du gerade hältst, nachzuladen",
+
+ "flash": "Blitz",
+ "flash_desc": "Zufällige Spielergeschwindigkeit zu Beginn der Runde",
+ "flash_desc2": "Dein Geschwindigkeitsmultiplikator beträgt: {0}x",
+
+ "fortnite": "Fortnite",
+ "fortnite_desc": "Klicke auf [css_useSkill], um eine zerstörbare Barrikade zu erstellen",
+
+ "fragilebomb": "Fragile Bombe",
+ "fragilebomb_desc": "Das Schießen auf die Bombe beschädigt sie",
+ "fragilebomb_bomb_health": "Bombengesundheit",
+
+ "friendlyfire": "Friendly Fire",
+ "friendlyfire_desc": "Das Schießen auf Teamkameraden heilt sie",
+
+ "frozendecoy": "Eisige Attrappe",
+ "frozendecoy_desc": "Deine Attrappe friert alle Spieler in der Nähe ein",
+
+ "gambler": "Zocker",
+ "gambler_desc": "Wähle eine Fertigkeit aus der Liste aus.",
+ "gambler_select_info": "Wähle deine Fähigkeit aus:",
+ "gambler_more": "#00FF00|Aktualisieren für ${0}",
+ "gambler_no_money": "Nicht genug Geld.",
+
+ "ghost": "Geist",
+ "ghost_desc": "Du bist vollständig unsichtbar",
+
+ "glaz": "Glaz",
+ "glaz_desc": "Du kannst durch Rauchgranaten hindurchsehen",
+
+ "glitch": "Glitch",
+ "glitch_desc": "Deaktiviert das Radar für einen ausgewählten Gegner",
+ "glitch_enemy_info": "Dein Radar wurde deaktiviert",
+ "glitch_player_info": "Das Radar des Spielers ‚{0}‘ wurde deaktiviert.",
+ "glitch_select_info": "Radar des Spielers ausschalten:",
+
+ "glue": "Glue",
+ "glue_desc": "Deine Granaten haften an Wänden",
+
+ "godmode": "Gott-Modus",
+ "godmode_desc": "Klicke auf [css_useSkill], um für kurze Zeit unsterblich zu werden",
+ "godmode_off": "Unsterblichkeit deaktiviert",
+ "godmode_on": "Unsterblichkeit aktiviert",
+
+ "grenadier": "Grenadier",
+ "grenadier_desc": "Du hast unendlich viele Granaten",
+
+ "healingsmoke": "Heilender Rauch",
+ "healingsmoke_desc": "Deine Rauchgranaten heilen",
+
+ "hermit": "Einsiedler",
+ "hermit_desc": "Durch das Töten von Gegnern werden Munition und ein Teil der Gesundheit wiederhergestellt",
+
+ "holyhandgrenade": "Heilige Handgranate",
+ "holyhandgrenade_desc": "Deine HE-Granaten verursachen doppelten Schaden und haben doppelte Reichweite",
+
+ "iana": "Hologramm",
+ "iana_desc": "Klicken Sie auf [css_useSkill], um Ihr Hologramm für einige Sekunden zu steuern",
+
+ "impostor": "Betrüger",
+ "impostor_desc": "Du beginnst die Runde mit einem feindlichen Spielermodell",
+
+ "infiniteammo": "Unendliche Munition",
+ "infiniteammo_desc": "Du erhältst unendliche Munition für alle deine Waffen",
+
+ "jackal": "Spürhund",
+ "jackal_desc": "Jeder Gegner hinterlässt eine Spur",
+
+ "jammer": "Störsender",
+ "jammer_desc": "Wähle einen Spieler aus, um dessen Fadenkreuz zu deaktivieren",
+ "jammer_enemy_info": "Dein Fadenkreuz wurde deaktiviert.",
+ "jammer_player_info": "Das Fadenkreuz von Spieler ‚{0}‘ wurde deaktiviert.",
+ "jammer_select_info": "Fadenkreuz des Spielers deaktivieren:",
+
+ "jester": "Narr",
+ "jester_desc": "Im Narrenmodus kannst du keinen Schaden erleiden oder verursachen. Dieser Modus ändert sich alle paar Sekunden.",
+ "jester_mode": "Jester-Modus",
+ "jester_on": "EIN",
+ "jester_off": "AUS",
+
+ "jumpban": "Beinlos",
+ "jumpban_desc": "Wähle einen Spieler, der nicht springen kann",
+ "jumpban_enemy_info": "Jemand hat dir die Beine abgeschnitten.",
+ "jumpban_player_info": "Der Spieler ‚{0}‘ kann nicht mehr springen.",
+ "jumpban_select_info": "Spieler vom Springen ausschließen:",
+
+ "jumpingjack": "Jumping Jack",
+ "jumpingjack_desc": "Durch Springen wird die Gesundheit wiederhergestellt",
+
+ "killerflash": "Killer Flash",
+ "killerflash_desc": "Jeder, der durch deine Blendgranate vollständig geblendet wird, stirbt (einschließlich dir selbst)",
+
+ "lifeswap": "Lebensaustausch",
+ "lifeswap_desc": "Wähle einen Spieler aus, mit dem du deine Gesundheit austauschen möchtest",
+ "lifeswap_enemy_info": "Jemand hat sich deine Gesundheit ausgeliehen",
+ "lifeswap_player_info": "Du hast deine Gesundheit mit dem Spieler \"{0}\" ausgetauscht",
+ "lifeswap_select_info": "Tausche Gesundheit mit Spieler:",
+
+ "longknife": "Langes Messer",
+ "longknife_desc": "Ein Messerangriff verursacht unabhängig von der Entfernung Schaden",
+
+ "longzeus": "Langer Zeus",
+ "longzeus_desc": "Zeus verursacht unabhängig von der Entfernung Schaden",
+
+ "magnifier": "Lupe",
+ "magnifier_desc": "Vergrößert den Bildschirm des Gegners und verringert dessen Sichtfeld",
+ "magnifier_enemy_info": "Dein Sichtfeld wurde verzerrt!",
+ "magnifier_player_info": "Der Spieler ‚{0}‘ wurde in den Zoom-Modus versetzt.",
+ "magnifier_select_info": "Bildschirm des Spielers vergrößern:",
+
+ "medic": "Sanitäter",
+ "medic_desc": "Klicke auf [css_useSkill], um eine Heilungsladung zu verwenden, die 50 Gesundheitspunkte wiederherstellt",
+
+ "bankrupt": "Bankrott",
+ "bankrupt_desc": "Wähle den Spieler aus, der sein gesamtes Geld verlieren wird",
+ "bankrupt_enemy_info": "Du bist bankrott.",
+ "bankrupt_player_info": "Der Spieler ‚{0}‘ ist bankrott.",
+ "bankrupt_select_info": "Wähle einen Spieler aus, der bankrott gehen soll:",
+
+ "muhammed": "Muhammed",
+ "muhammed_desc": "Du explodierst beim Tod und tötest Spieler in deiner Nähe",
+ "muhammed_explosion": "ALLAHU AKBAR!!!",
+
+ "ninja": "Ninja",
+ "ninja_desc": "Wenn du stillstehst, erhöht sich deine Unsichtbarkeit um 33 %, wenn du dich duckst um 33 % und wenn du ein Messer hältst um 33 %",
+
+ "nonades": "No-Nades",
+ "nonades_desc": "Granaten fügen dir keinen Schaden zu",
+
+ "norecoil": "Fokus",
+ "norecoil_desc": "Kein Rückstoß beim Schießen",
+
+ "noclip": "NoClip",
+ "noclip_desc": "Klicke auf [css_useSkill], um NoClip für kurze Zeit zu aktivieren",
+
+ "oneshot": "One-Shot",
+ "oneshot_desc": "Ein Treffer tötet einen Gegner sofort",
+
+ "onlyhead": "Nur Kopf",
+ "onlyhead_desc": "Du erleidest nur Schaden am Kopf",
+
+ "paweljumper": "Pawel Jumper",
+ "paweljumper_desc": "Du erhältst eine zufällige Anzahl zusätzlicher Sprünge",
+ "paweljumper_desc2": "Du erhältst {0} zusätzliche Sprünge",
+
+ "phoenix": "Phönix",
+ "phoenix_desc": "Du hast eine zufällige Chance, nach dem Tod wieder zu erscheinen",
+ "phoenix_desc2": "Deine Chance, nach dem Tod wieder zu erscheinen: {0} %",
+ "phoenix_respawn": "Du bist dank der Kraft von CHATCOLORS.REDPhoenix aus der Asche auferstanden",
+
+ "psychicdefusing": "Psychic Defusing",
+ "psychicdefusing_desc": "Wenn du dich in der Nähe der Bombe befindest, beginnst du, sie zu entschärfen",
+ "psychicdefusing_hud_info": "{0} Sekunden verbleibend bis zur Entschärfung",
+
+ "pilot": "Pilot",
+ "pilot_desc": "Fliege für eine begrenzte Zeit. Halte [USE - E] gedrückt, um zu fliegen",
+ "pilot_hud_info": "Treibstoff",
+
+ "planter": "Freier Planter",
+ "planter_desc": "Du kannst die Bombe überall platzieren, die Detonationszeit beträgt 60 Sekunden.",
+
+ "poison": "Gift",
+ "poison_desc": "Wähle einen Spieler aus, der alle paar Sekunden Schaden nimmt",
+ "poison_enemy_info": "Du wurdest vergiftet",
+ "poison_player_info": "Der Spieler ‚{0}‘ wurde vergiftet",
+ "poison_select_info": "Einen Spieler vergiften:",
+
+ "primaryban": "Keine Gewehre",
+ "primaryban_desc": "Wähle einen Spieler aus, der keine Gewehre verwenden kann",
+ "primaryban_enemy_info": "Du kannst keine Gewehre mehr verwenden.",
+ "primaryban_player_info": "Der Spieler ‚{0}‘ kann keine Gewehre mehr verwenden.",
+ "primaryban_select_info": "Gewehre für Spieler verbieten:",
+
+ "prosthesis": "Prothese",
+ "prosthesis_desc": "Arme und Beine sind kugelsicher",
+
+ "push": "Pusher",
+ "push_desc": "Du hast eine zufällige Chance, einen Gegner zurückzustoßen, wenn du ihn triffst",
+ "push_desc2": "Deine Chancen, den Gegner zurückzustoßen, betragen: {0} %",
+
+ "pyro": "Pyro",
+ "pyro_desc": "Molotow-Cocktail stellt Gesundheit wieder her",
+
+ "quickshot": "Schnellfeuer",
+ "quickshot_desc": "Alle Kugeln werden sehr schnell abgefeuert",
+
+ "radarhack": "Radar-Hack",
+ "radarhack_desc": "Gegner sind auf dem Radar sichtbar",
+
+ "rambo": "Rambo",
+ "rambo_desc": "Du erhältst zu Beginn der Runde eine zufällige Menge an Gesundheit",
+
+ "randomweapon": "Zufällige Waffe",
+ "randomweapon_desc": "Klicke auf [css_useSkill], um eine zufällige Waffe zu erhalten",
+
+ "rezombie": "Re-Zombie",
+ "rezombie_desc": "Nach dem Tod spawnst du als Zombie mit erhöhter Gesundheit und ohne Waffen",
+
+ "reactivearmor": "Reaktive Rüstung",
+ "reactivearmor_desc": "Die Rüstung absorbiert den ersten erlittenen Schaden",
+
+ "regeneration": "Regeneration",
+ "regeneration_desc": "Du stellst alle paar Sekunden Gesundheit wieder her",
+
+ "replicator": "Replikator",
+ "replicator_desc": "Klicke auf [css_useSkill], um eine Replik zu erstellen, die bei Treffer Schaden verursacht",
+
+ "retreat": "Rückzug",
+ "retreat_desc": "Klicke auf [css_useSkill], um zum Spawn zurückzukehren",
+
+ "returntosender": "Zurück zum Absender",
+ "returntosender_desc": "Der erste Treffer eines Gegners schickt ihn zurück zu seinem Spawn",
+
+ "richboy": "Rich Boy",
+ "richboy_desc": "Du erhältst zu Beginn der Runde einen zufälligen Geldbetrag",
+
+ "robinhood": "Robin Hood",
+ "robinhood_desc": "Wenn du einem Gegner Schaden zufügst, stiehlst du ihm sein Geld",
+
+ "rubber": "Gummigeschosse",
+ "rubber_desc": "Deine Kugeln verlangsamen Spieler erheblich",
+
+ "saper": "Sapper",
+ "saper_desc": "Du kannst Bomben schneller legen und entschärfen",
+
+ "secondlife": "Zweite Chance",
+ "secondlife_desc": "Nach dem Tod spawnst du mit derselben Gesundheitsanzeige wieder",
+
+ "shade": "Schatten",
+ "shade_desc": "Du hast eine zufällige Chance, dich hinter einen getroffenen Gegner zu teleportieren",
+ "shade_desc2": "Deine Chancen, dich hinter einen getroffenen Gegner zu teleportieren, betragen: {0} %",
+ "shade_nospace": "Kein Platz verfügbar",
+
+ "shortbomb": "Kurze Zündschnur",
+ "shortbomb_desc": "Die Bombe explodiert viel schneller",
+
+ "silent": "Leise",
+ "silent_desc": "Deine Schritte und Sprünge sind für ANDERE Spieler lautlos",
+
+ "sniperelite": "Sniper Elite",
+ "sniperelite_customname": "Sniper Elite-Fähigkeit",
+ "sniperelite_desc": "Klicke auf [css_useSkill], um deine aktuelle Waffe gegen eine AWP auszutauschen",
+
+ "soldier": "Soldat",
+ "soldier_desc": "Du hast einen zufälligen Schadensmultiplikator",
+ "soldier_desc2": "Dein Schadensmultiplikator beträgt: {0}x",
+
+ "soundmaker": "Soundmaker",
+ "soundmaker_desc": "Klicke auf [css_useSkill], um für jeden Gegner einen Sound auszulösen",
+
+ "spectator": "Zuschauer",
+ "spectator_desc": "Klicke auf [css_useSkill], um einen zufälligen Gegner zu beobachten",
+
+ "swapposition": "Positionstausch",
+ "swapposition_desc": "Klicke auf [css_useSkill], um mit einem zufälligen Gegner die Plätze zu tauschen",
+
+ "teleporter": "Teleporter",
+ "teleporter_desc": "Du tauschst mit dem getroffenen Gegner die Plätze",
+
+ "thief": "Dieb",
+ "thief_desc": "Du kannst einem ausgewählten Spieler eine Fertigkeit stehlen",
+ "thief_enemy_info": "Deine Fertigkeit wurde gestohlen",
+ "thief_player_info": "Die Fertigkeit des Spielers ‚{0}‘ wurde gestohlen",
+ "thief_select_info": "Fähigkeit eines Spielers stehlen:",
+ "thief_incorrect_skill": "Diese Fähigkeit kann nicht ausgewählt werden!",
+
+ "thirdeye": "Drittes Auge",
+ "thirdeye_desc": "Klicke auf [css_useSkill], um die Third-Person-Ansicht zu aktivieren",
+
+ "thorns": "Dornen",
+ "thorns_desc": "Dein Gegner erhält einen Teil des Schadens, den er dir zugefügt hat",
+
+ "toxicsmoke": "Giftiger Rauch",
+ "toxicsmoke_desc": "Deine Rauchgranaten verursachen Schaden",
+
+ "wallhack": "Wallhack",
+ "wallhack_desc": "Du kannst Feinde durch Wände hindurch sehen",
+
+ "watchmaker": "Uhrmacher",
+ "watchmaker_desc": "Jeder Granatenwurf verändert die Rundenzeit",
+ "watchmaker_ct": "Rundenzeit um {0} Sekunden verkürzt",
+ "watchmaker_tt": "Rundenzeit um {0} Sekunden verlängert",
+
+ "weaponsswap": "Waffenwechsel",
+ "weaponsswap_desc": "Klicke auf [css_useSkill], um mit einem zufälligen Gegner die Waffen zu tauschen",
+ "weaponsswap_hud_info2": "Du hast keine Waffe zum Tauschen",
+
+ "zeus": "Zeus",
+ "zeus_desc": "Zeus x27 lädt sich sofort wieder auf",
+
+ "your_skill": "Deine aktuelle Fertigkeit",
+ "enemy_skill": "Fähigkeit des Gegners",
+ "observer_skill": "Fähigkeit des Spielers",
+ "welcome_message": "Willkommen {PLAYER} bei {SERVER_NAME}",
+ "drawing_skill": "Eine Fertigkeit zeichnen",
+ "disabled_weapon": "Du kannst diese Waffe nicht verwenden",
+
+ "hud_info": "Warte weitere {0} Sekunden",
+ "hud_info_no_enemy": "Kein Feind gefunden",
+ "active_hud_info": "Noch {0} Millisekunden aktiv",
+
+ "skills_menu": "Fähigkeitenliste",
+ "no_player": "Kein passender Spieler gefunden.",
+ "duplicate_player": "Mehr als ein Spieler mit demselben Namen gefunden.",
+ "selectplayerskill_command": "Gib /t ein",
+ "selectplayerskill_incorrect_enemy_index": "Es wurden keine Spieler gefunden, die ausgewählt werden können.",
+
+ "skill_not_found_setskill": "Keine solche CHATCOLORS.REDskill gefunden",
+ "player_not_found_setskill": "Kein solcher CHATCOLORS.REDplayer gefunden",
+ "correct_form_setskill": "Korrekte Verwendung: CHATCOLORS.RED!setskill ",
+ "correct_form_setscore": "Korrekte Verwendung: CHATCOLORS.RED!setscore ",
+ "done_setskill": "Fähigkeit festgelegt",
+ "error_setskill": "CHATCOLORS.REDskill konnte nicht festgelegt werden",
+ "for_setskill": "für",
+
+ "invalid_map": "Kartenname falsch eingegeben!",
+ "loading_map": "Neue Karte wird geladen",
+
+ "pause": "Spiel wurde unterbrochen",
+ "unpause": "Spiel wurde fortgesetzt",
+ "healed": "Du wurdest geheilt.",
+ "game_start": "Spiel gestartet!",
+ "reload": "Sprachen und Konfigurationen wurden neu geladen.",
+ "hud_on": "HUD wurde aktiviert.",
+ "hud_off": "HUD wurde deaktiviert.",
+
+ "vote_started": "Abstimmung gestartet: ‚{0}‘",
+ "vote_timeout": "Zeitlimit für Abstimmung ‚{0}‘ abgelaufen!",
+ "vote_wait": "Sie müssen warten, bevor Sie eine weitere Abstimmung starten können!",
+ "vote_same_wait": "Sie müssen warten, bevor Sie dieselbe Abstimmung erneut starten können!",
+ "vote_not_enough_players": "Nicht genügend Spieler, um eine Abstimmung zu starten!",
+ "vote_alredy_voted": "Du hast bereits abgestimmt!",
+ "vote_vote": "Abstimmen",
+
+ "bombsite_a": "Bombenplatz A",
+ "bombsite_b": "Bombenplatz B",
+ "bombplanted": "Die Bombe wurde gelegt\n{0} Sekunden bis zur Detonation",
+
+ "teammate_skills": "Die Fähigkeiten Ihrer Teamkollegen",
+ "summary": "Zusammenfassung der letzten runde",
+
+ "menu_controlls_scroll": "W/S – Scrollen",
+ "menu_controlls_padding": " | ",
+ "menu_controlls_select": "E – Auswählen"
+}
\ No newline at end of file
diff --git a/jRandomSkills - SRC Files/src/lang/en.json b/jRandomSkills - SRC Files/src/lang/en.json
index 38b95e3..32a8e1a 100644
--- a/jRandomSkills - SRC Files/src/lang/en.json
+++ b/jRandomSkills - SRC Files/src/lang/en.json
@@ -55,6 +55,12 @@
"c4camouflage": "C4 Camouflage",
"c4camouflage_desc": "You are invisible while holding the bomb",
+ "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_player_info": "'{0}' must now be more careful.",
+ "carefulbullets_select_info": "Inaccuracy hurts the player:",
+
"catapult": "Catapult",
"catapult_desc": "You have a random chance to launch an enemy upwards",
"catapult_desc2": "Your chance to launch an enemy on hit is: {0}%",
@@ -68,6 +74,10 @@
"cutter": "Cutter",
"cutter_desc": "Instant kill with a knife",
+ "cypher": "Cypher",
+ "cypher_desc": "Click [css_useSkill] to create/switch to a camera",
+ "cypher_nospace": "The camera must be positioned at right angles to the wall",
+
"darkness": "Darkness",
"darkness_desc": "Applies a darkness effect to a chosen enemy",
"darkness_enemy_info": "Let the lights go out.",
@@ -176,6 +186,9 @@
"holyhandgrenade": "Holy Hand Grenade",
"holyhandgrenade_desc": "Your HE grenades deal double damage and have double range",
+ "iana": "Hologram",
+ "iana_desc": "Click [css_useSkill] to control your hologram for a few seconds",
+
"impostor": "Impostor",
"impostor_desc": "You start the round with an enemy player model",
@@ -357,6 +370,7 @@
"silent_desc": "Your footsteps and jumps are silent to OTHER players",
"sniperelite": "Sniper Elite",
+ "sniperelite_customname": "Sniper Elite Skill",
"sniperelite_desc": "Click [css_useSkill] to swap your current weapon for an AWP",
"soldier": "Soldier",
@@ -452,6 +466,7 @@
"bombsite_a": "Bombsite A",
"bombsite_b": "Bombsite B",
+ "bombplanted": "The bomb has been planted\n{0} seconds till detonation",
"teammate_skills": "Your teammates' skills",
"summary": "Summary of the last round",
diff --git a/jRandomSkills - SRC Files/src/lang/fr.json b/jRandomSkills - SRC Files/src/lang/fr.json
index 7dfa8f1..91cfcd7 100644
--- a/jRandomSkills - SRC Files/src/lang/fr.json
+++ b/jRandomSkills - SRC Files/src/lang/fr.json
@@ -55,6 +55,12 @@
"c4camouflage": "Camouflage C4",
"c4camouflage_desc": "Vous êtes invisible en tenant la bombe",
+ "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_player_info": "« {0} » doit désormais être plus prudent.",
+ "carefulbullets_select_info": "L'inexactitude nuit au joueur :",
+
"catapult": "Catapulte",
"catapult_desc": "Vous avez une chance aléatoire de projeter un ennemi en l’air",
"catapult_desc2": "Votre chance de projeter un ennemi à l’impact est : {0}%",
@@ -68,6 +74,10 @@
"cutter": "Trancheur",
"cutter_desc": "Coup de couteau = mort instantanée",
+ "cypher": "Caméra",
+ "cypher_desc": "Cliquez sur [css_useSkill] pour créer/passer à une caméra.",
+ "cypher_nospace": "La caméra doit être positionnée à angle droit par rapport au mur",
+
"darkness": "Obscurité",
"darkness_desc": "Applique un effet d’obscurité à un ennemi choisi",
"darkness_enemy_info": "Que la lumière s’éteigne.",
@@ -176,6 +186,9 @@
"holyhandgrenade": "Grenade Sacrée",
"holyhandgrenade_desc": "Vos grenades HE infligent le double de dégâts et ont une portée doublée",
+ "iana": "Hologramme",
+ "iana_desc": "Cliquez sur [css_useSkill] pour contrôler votre hologramme pendant quelques secondes",
+
"impostor": "Imposteur",
"impostor_desc": "Vous commencez le round avec un modèle de joueur ennemi",
@@ -357,6 +370,7 @@
"silent_desc": "Vos pas et vos sauts sont silencieux pour les AUTRES joueurs",
"sniperelite": "Sniper d’Élite",
+ "sniperelite_customname": "Compétence Sniper d’Élite",
"sniperelite_desc": "Appuyez sur [css_useSkill] pour échanger votre arme actuelle contre un AWP",
"soldier": "Soldat",
@@ -452,12 +466,12 @@
"bombsite_a": "Site de bombe A",
"bombsite_b": "Site de bombe B",
+ "bombplanted": "La bombe a été posée\n{0} secondes avant l'explosion",
"teammate_skills": "Compétences de vos coéquipiers",
- "summary_start": "Résumé du dernier round",
- "summary_end": "===================================",
+ "summary": "Résumé du dernier round",
"menu_controlls_scroll": "W/S - Défilement",
"menu_controlls_padding": " | ",
"menu_controlls_select": "E - Sélectionner"
-}
+}
\ No newline at end of file
diff --git a/jRandomSkills - SRC Files/src/lang/pl.json b/jRandomSkills - SRC Files/src/lang/pl.json
index 5fba217..0a2f4f9 100644
--- a/jRandomSkills - SRC Files/src/lang/pl.json
+++ b/jRandomSkills - SRC Files/src/lang/pl.json
@@ -55,6 +55,12 @@
"c4camouflage": "C4 Kamuflaż",
"c4camouflage_desc": "Kiedy trzymasz bombę, jesteś niewidzialny",
+ "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_player_info": "'{0}' musi teraz być bardziej ostrożny.",
+ "carefulbullets_select_info": "Niedokładność szkodzi graczowi:",
+
"catapult": "Katapulta",
"catapult_desc": "Masz losową szanse na podrzucenie wroga",
"catapult_desc2": "Twoje szanse na podrzucenie wroga po trafieniu to: {0}%",
@@ -68,6 +74,10 @@
"cutter": "Scyzoryk",
"cutter_desc": "Natychmiastowe zabójstwo nożem",
+ "cypher": "Kamera",
+ "cypher_desc": "Kliknij [css_useSkill], aby utworzyć/przełączyć się na kamerę",
+ "cypher_nospace": "Kamera musi być ustawiona pod kątem prostym do ściany",
+
"darkness": "Mrok",
"darkness_desc": "Nadaje efekt ciemności wybranemu przeciwnikowi",
"darkness_enemy_info": "Niech zgasną światła.",
@@ -176,6 +186,9 @@
"holyhandgrenade": "Święty Granat Ręczny",
"holyhandgrenade_desc": "Twoje granaty uderzeniowe zadają podwójne obrażenia i mają podwójny zasięg",
+ "iana": "Hologram",
+ "iana_desc": "Kliknij [css_useSkill], aby sterować hologramem przez kilka sekund",
+
"impostor": "Szpieg",
"impostor_desc": "Na początku rundy otrzymujesz model postaci przeciwnika",
@@ -357,6 +370,7 @@
"silent_desc": "Twoje kroki i skoki są niesłyszalne dla INNYCH graczy",
"sniperelite": "SzeliS",
+ "sniperelite_customname": "Mityczna AWP",
"sniperelite_desc": "Kliknij [css_useSkill], aby zamienić aktualną broń na AWP",
"soldier": "Żołnierz",
@@ -452,10 +466,10 @@
"bombsite_a": "Strefa detonacji A",
"bombsite_b": "Strefa detonacji B",
+ "bombplanted": "Bomba została podłożona\n{0} sekund do detonacji",
"teammate_skills": "Supermoce twoich sojuszników",
- "summary_start": "Podsumowanie z ostatniej rundy",
- "summary_end": "============================================",
+ "summary": "Podsumowanie z ostatniej rundy",
"menu_controlls_scroll": "W/S – Przewijanie",
"menu_controlls_padding": " | ",
diff --git a/jRandomSkills - SRC Files/src/lang/pt-br.json b/jRandomSkills - SRC Files/src/lang/pt-br.json
index dcc4b4b..8884abb 100644
--- a/jRandomSkills - SRC Files/src/lang/pt-br.json
+++ b/jRandomSkills - SRC Files/src/lang/pt-br.json
@@ -55,6 +55,12 @@
"c4camouflage": "Camuflagem C4",
"c4camouflage_desc": "Você fica invisível enquanto segura a bomba",
+ "carefulbullets": "Balas cuidadosas",
+ "carefulbullets_desc": "Selecione um jogador que sofra dano por cada tiro errado",
+ "carefulbullets_enemy_info": "A partir de agora, a imprecisão vai literalmente doer.",
+ "carefulbullets_player_info": "Agora, '{0}' precisa ter mais cuidado.",
+ "carefulbullets_select_info": "A imprecisão prejudica o jogador:",
+
"catapult": "Catapulta",
"catapult_desc": "Você tem uma chance aleatória de lançar um inimigo para cima",
"catapult_desc2": "Sua chance de lançar um inimigo ao acertar é: {0}%",
@@ -68,6 +74,10 @@
"cutter": "Cortador",
"cutter_desc": "Mata instantaneamente com uma faca",
+ "cypher": "Câmera",
+ "cypher_desc": "Clique em [css_useSkill] para criar/mudar para uma câmera",
+ "cypher_nospace": "A câmera deve ser posicionada em ângulo reto com a parede",
+
"darkness": "Escuridão",
"darkness_desc": "Aplica um efeito de escuridão a um inimigo escolhido",
"darkness_enemy_info": "Que as luzes se apaguem.",
@@ -176,6 +186,9 @@
"holyhandgrenade": "Granada Sagrada",
"holyhandgrenade_desc": "Suas granadas explosivas causam dano dobrado e têm alcance dobrado",
+ "iana": "Holograma",
+ "iana_desc": "Clique em [css_useSkill] para controlar seu holograma por alguns segundos",
+
"impostor": "Impostor",
"impostor_desc": "Você começa a rodada com um modelo de jogador inimigo",
@@ -357,6 +370,7 @@
"silent_desc": "Seus passos e pulos são silenciosos para OUTROS jogadores",
"sniperelite": "Atirador de Elite",
+ "sniperelite_customname": "Habilidade de Atirador de Elite",
"sniperelite_desc": "Clique em [css_useSkill] para trocar sua arma atual por uma AWP",
"soldier": "Soldado",
@@ -452,10 +466,10 @@
"bombsite_a": "Zona de detonação A",
"bombsite_b": "Zona de detonação B",
+ "bombplanted": "A bomba foi colocada\n{0} segundos até a detonação",
"teammate_skills": "Habilidades dos seus companheiros de equipe",
- "summary_start": "Resumo da última rodada",
- "summary_end": "=======================================",
+ "summary": "Resumo da última rodada",
"menu_controlls_scroll": "W/S - Rolar",
"menu_controlls_padding": " | ",
diff --git a/jRandomSkills - SRC Files/src/lang/zh.json b/jRandomSkills - SRC Files/src/lang/zh.json
index 2489a55..245438e 100644
--- a/jRandomSkills - SRC Files/src/lang/zh.json
+++ b/jRandomSkills - SRC Files/src/lang/zh.json
@@ -55,6 +55,12 @@
"c4camouflage": "C4伪装",
"c4camouflage_desc": "你持有炸弹时隐形",
+ "carefulbullets": "谨慎的子弹",
+ "carefulbullets_desc": "选择一名球员,每当他投篮未中时就会受到伤害",
+ "carefulbullets_enemy_info": "从现在起,不准确将带来切实的伤害。",
+ "carefulbullets_player_info": "'{0}' 现在必须更加谨慎。",
+ "carefulbullets_select_info": "不准确会伤害玩家:",
+
"catapult": "弹射",
"catapult_desc": "你有随机几率将敌人向上弹射",
"catapult_desc2": "你击中敌人将其弹射的几率是:{0}%",
@@ -68,6 +74,10 @@
"cutter": "切割者",
"cutter_desc": "用刀可立即杀死敌人",
+ "cypher": "相机",
+ "cypher_desc": "点击 [css_useSkill] 创建/切换摄像机",
+ "cypher_nospace": "相机必须与墙壁呈直角放置",
+
"darkness": "黑暗",
"darkness_desc": "对选定的敌人施加黑暗效果",
"darkness_enemy_info": "让灯光熄灭。",
@@ -176,6 +186,9 @@
"holyhandgrenade": "神圣手榴弹",
"holyhandgrenade_desc": "你的高爆手榴弹造成双倍伤害并拥有双倍范围",
+ "iana": "全息图",
+ "iana_desc": "点击 [css_useSkill] 可控制你的全息影像数秒",
+
"impostor": "冒名顶替者",
"impostor_desc": "回合开始时你获得敌方玩家模型",
@@ -357,6 +370,7 @@
"silent_desc": "你的脚步和跳跃对其他玩家无声",
"sniperelite": "狙击精英",
+ "sniperelite_customname": "狙击精英技能",
"sniperelite_desc": "点击 [css_useSkill] 将当前武器替换为AWP",
"soldier": "士兵",
@@ -452,10 +466,10 @@
"bombsite_a": "爆轰区A",
"bombsite_b": "爆轰区B",
+ "bombplanted": "炸弹已安装完毕{0}秒后引爆",
"teammate_skills": "你队友的技能",
- "summary_start": "上一回合总结",
- "summary_end": "=======================================",
+ "summary": "上一回合总结",
"menu_controlls_scroll": "W/S - 滚动",
"menu_controlls_padding": " | ",
diff --git a/jRandomSkills - SRC Files/src/player/ISkill.cs b/jRandomSkills - SRC Files/src/player/ISkill.cs
index 3d43247..5911433 100644
--- a/jRandomSkills - SRC Files/src/player/ISkill.cs
+++ b/jRandomSkills - SRC Files/src/player/ISkill.cs
@@ -64,6 +64,7 @@ public enum Skills
BladeMaster,
BunnyHop,
C4Camouflage,
+ CarefulBullets,
Catapult,
Chicken,
ChillOut,
diff --git a/jRandomSkills - SRC Files/src/player/PlayerEvents.cs b/jRandomSkills - SRC Files/src/player/PlayerEvents.cs
index b0e3b4b..1050774 100644
--- a/jRandomSkills - SRC Files/src/player/PlayerEvents.cs
+++ b/jRandomSkills - SRC Files/src/player/PlayerEvents.cs
@@ -3,6 +3,7 @@ using CounterStrikeSharp.API.Core;
using CounterStrikeSharp.API.Core.Attributes;
using CounterStrikeSharp.API.Modules.Admin;
using CounterStrikeSharp.API.Modules.Cvars;
+using CounterStrikeSharp.API.Modules.Events;
using CounterStrikeSharp.API.Modules.Memory;
using CounterStrikeSharp.API.Modules.Memory.DynamicFunctions;
using CounterStrikeSharp.API.Modules.UserMessages;
@@ -11,7 +12,6 @@ using src.utils;
using System.Collections.Concurrent;
using static CounterStrikeSharp.API.Core.Listeners;
using static src.jRandomSkills;
-using static System.Net.Mime.MediaTypeNames;
namespace src.player
{
@@ -38,6 +38,7 @@ namespace src.player
{
Instance.RegisterEventHandler(PlayerConnectFull);
Instance.RegisterEventHandler(PlayerDisconnect);
+ // Instance.RegisterEventHandler(PlayerChat);
Instance.RegisterEventHandler(RoundStart);
Instance.RegisterEventHandler(RoundEnd);
@@ -350,6 +351,39 @@ namespace src.player
}
}
+ private static HookResult PlayerChat(EventPlayerChat @event, GameEventInfo info)
+ {
+ var userID = @event.Userid;
+ if (userID == 0 || string.IsNullOrEmpty(@event.Text)) return HookResult.Continue;
+
+ string text = @event.Text.Split(' ')[0].Trim();
+
+ string commandName = text.StartsWith('!') || text.StartsWith('/') ? text[1..] : text;
+
+ foreach (var cmd in Instance.CommandDefinitions)
+ Server.PrintToChatAll("1. " + cmd.Name);
+
+ foreach (var cmd in Instance.CommandListeners.Keys)
+ Server.PrintToChatAll("2. " + cmd?.Target?.ToString());
+
+ var player = Utilities.GetPlayerFromUserid(userID);
+ if (player == null || !player.IsValid) return HookResult.Continue;
+
+ var skillPlayer = Instance?.SkillPlayer.FirstOrDefault(p => p.SteamID == player.SteamID);
+ if (skillPlayer == null) return HookResult.Continue;
+
+ var temp = skillPlayer.SkillHudExpired;
+ skillPlayer.SkillHudExpired = DateTime.MinValue;
+;
+ Instance.AddTimer(5f, () =>
+ {
+ if (skillPlayer.SkillHudExpired == DateTime.MinValue)
+ skillPlayer.SkillHudExpired = temp;
+ });
+
+ return HookResult.Continue;
+ }
+
private static HookResult RoundStart(EventRoundStart @event, GameEventInfo info)
{
lock (setLock)
@@ -398,7 +432,10 @@ namespace src.player
lock (setLock)
{
isTransmitRegistered = false;
- Instance.AddTimer(.1f, () => DisableAll());
+ Instance.AddTimer(.1f, () => {
+ DisableAll();
+ ConVar.Find("sv_legacy_jump")?.SetValue("1");
+ });
Instance.RemoveListener(CheckTransmit);
playersSkills.Clear();
staticSkills.Clear();
diff --git a/jRandomSkills - SRC Files/src/player/skills/AntyHead.cs b/jRandomSkills - SRC Files/src/player/skills/AntyHead.cs
index f1d55ec..d8d6751 100644
--- a/jRandomSkills - SRC Files/src/player/skills/AntyHead.cs
+++ b/jRandomSkills - SRC Files/src/player/skills/AntyHead.cs
@@ -23,19 +23,7 @@ namespace src.player.skills
if (!Instance.IsPlayerValid(attacker) || !Instance.IsPlayerValid(victim) || attacker == victim) return;
var playerInfo = Instance.SkillPlayer.FirstOrDefault(p => p.SteamID == victim?.SteamID);
if (playerInfo?.Skill == skillName && hitgroup == (int)HitGroup_t.HITGROUP_HEAD)
- ApplyIronHeadEffect(victim!, @event.DmgHealth);
- }
-
- private static void ApplyIronHeadEffect(CCSPlayerController victim, float damage)
- {
- var playerPawn = victim.PlayerPawn.Value;
- if (playerPawn == null || !playerPawn.IsValid) return;
- var newHealth = playerPawn.Health + damage;
-
- if (newHealth > 100)
- newHealth = 100;
-
- playerPawn.Health = (int)newHealth;
+ SkillUtils.RestoreHealth(victim);
}
public class SkillConfig(Skills skill = skillName, bool active = true, string color = "#8B4513", CsTeam onlyTeam = CsTeam.None, bool disableOnFreezeTime = false, bool needsTeammates = false, string requiredPermission = "") : SkillsInfo.DefaultSkillInfo(skill, active, color, onlyTeam, disableOnFreezeTime, needsTeammates, requiredPermission)
diff --git a/jRandomSkills - SRC Files/src/player/skills/BladeMaster.cs b/jRandomSkills - SRC Files/src/player/skills/BladeMaster.cs
index 81985d4..73c7aad 100644
--- a/jRandomSkills - SRC Files/src/player/skills/BladeMaster.cs
+++ b/jRandomSkills - SRC Files/src/player/skills/BladeMaster.cs
@@ -66,20 +66,7 @@ namespace src.player.skills
if (weaponServices.ActiveWeapon == null || !weaponServices.ActiveWeapon.IsValid || weaponServices.ActiveWeapon.Value == null || !weaponServices.ActiveWeapon.Value.IsValid || weaponServices.ActiveWeapon.Value.DesignerName != "weapon_knife")
return;
- RestoreHealth(victim, damage);
- }
-
- private static void RestoreHealth(CCSPlayerController victim, float damage)
- {
- var playerPawn = victim.PlayerPawn.Value;
- if (playerPawn == null || !playerPawn.IsValid || playerPawn.LifeState != (byte)LifeState_t.LIFE_ALIVE) return;
- var newHealth = playerPawn.Health + damage;
-
- if (newHealth > 100)
- newHealth = 100;
-
- playerPawn.Health = (int)newHealth;
- Utilities.SetStateChanged(playerPawn, "CBaseEntity", "m_iHealth");
+ SkillUtils.RestoreHealth(victim);
}
public class SkillConfig(Skills skill = skillName, bool active = true, string color = "#cc7504", CsTeam onlyTeam = CsTeam.None, bool disableOnFreezeTime = false, bool needsTeammates = false, string requiredPermission = "", float torseReflectionChance = .95f, float legReflectionChance = .80f, float velocityModifier = .85f) : SkillsInfo.DefaultSkillInfo(skill, active, color, onlyTeam, disableOnFreezeTime, needsTeammates, requiredPermission)
diff --git a/jRandomSkills - SRC Files/src/player/skills/BunnyHop.cs b/jRandomSkills - SRC Files/src/player/skills/BunnyHop.cs
index 9349f2d..410ee7c 100644
--- a/jRandomSkills - SRC Files/src/player/skills/BunnyHop.cs
+++ b/jRandomSkills - SRC Files/src/player/skills/BunnyHop.cs
@@ -2,6 +2,7 @@ using CounterStrikeSharp.API;
using CounterStrikeSharp.API.Core;
using CounterStrikeSharp.API.Modules.Utils;
using src.utils;
+using System.Collections.Concurrent;
using static src.jRandomSkills;
namespace src.player.skills
@@ -9,6 +10,7 @@ namespace src.player.skills
public class BunnyHop : ISkill
{
private const Skills skillName = Skills.BunnyHop;
+ private static readonly ConcurrentDictionary playersLastJump = [];
public static void LoadSkill()
{
@@ -34,7 +36,13 @@ namespace src.player.skills
var flags = (PlayerFlags)playerPawn.Flags;
var buttons = player.Buttons;
- if (buttons.HasFlag(PlayerButtons.Jump) && flags.HasFlag(PlayerFlags.FL_ONGROUND) && !playerPawn.MoveType.HasFlag(MoveType_t.MOVETYPE_LADDER))
+ if ((playerPawn.MovementServices?.QueuedButtonChangeMask & (ulong)PlayerButtons.Jump) != 0)
+ playersLastJump.AddOrUpdate(player.SteamID, Server.TickCount, (_, _) => Server.TickCount);
+
+ bool jumpPressed = buttons.HasFlag(PlayerButtons.Jump)
+ || (playersLastJump.TryGetValue(player.SteamID, out int tick) && tick + 20 >= Server.TickCount);
+
+ if (jumpPressed && flags.HasFlag(PlayerFlags.FL_ONGROUND) && !playerPawn.MoveType.HasFlag(MoveType_t.MOVETYPE_LADDER))
{
playerPawn.AbsVelocity.Z = SkillsInfo.GetValue(skillName, "jumpVelocity");
var maxSpeed = SkillsInfo.GetValue(skillName, "maxSpeed");
diff --git a/jRandomSkills - SRC Files/src/player/skills/C4Camouflage.cs b/jRandomSkills - SRC Files/src/player/skills/C4Camouflage.cs
index a7cd937..2d2ead8 100644
--- a/jRandomSkills - SRC Files/src/player/skills/C4Camouflage.cs
+++ b/jRandomSkills - SRC Files/src/player/skills/C4Camouflage.cs
@@ -61,7 +61,7 @@ namespace src.player.skills
{
foreach (var (info, player) in infoList)
{
- if (player == null) continue;
+ if (player == null || !player.IsValid) continue;
foreach (var _player in invisiblePlayers.Keys)
if (player.SteamID != _player.SteamID)
{
@@ -72,8 +72,9 @@ namespace src.player.skills
if (entity == null || !entity.IsValid) continue;
info.TransmitEntities.Remove(entity.Index);
- var bombIndex = HideBomb(_player);
+ var bombIndex = GetBombIndex();
if (bombIndex == null) continue;
+
var bombEntity = Utilities.GetEntityFromIndex((int)bombIndex);
if (bombEntity == null || !bombEntity.IsValid) continue;
info.TransmitEntities.Remove(bombEntity.Index);
@@ -124,7 +125,7 @@ namespace src.player.skills
particle.AcceptInput("Start");
}
- private static uint? HideBomb(CCSPlayerController player)
+ private static uint? GetBombIndex()
{
var bombEntities = Utilities.FindAllEntitiesByDesignerName("weapon_c4").ToList();
if (bombEntities.Count == 0) return null;
@@ -132,15 +133,6 @@ namespace src.player.skills
var bomb = bombEntities.FirstOrDefault();
if (bomb == null) return null;
- // if (bomb.OwnerEntity.Index != player.Index) return null;
-
- bomb.EntitySpottedState.Spotted = false;
- Utilities.SetStateChanged(bomb, "CCSPlayerPawn", "m_entitySpottedState", Schema.GetSchemaOffset("EntitySpottedState_t", "m_bSpotted"));
-
- for (int i = 0; i < bomb.EntitySpottedState.SpottedByMask.Length; i++)
- bomb.EntitySpottedState.SpottedByMask[i] = 0;
- Utilities.SetStateChanged(bomb, "CCSPlayerPawn", "m_entitySpottedState", Schema.GetSchemaOffset("EntitySpottedState_t", "m_bSpottedByMask"));
-
return bomb.Index;
}
diff --git a/jRandomSkills - SRC Files/src/player/skills/CarefulBullets.cs b/jRandomSkills - SRC Files/src/player/skills/CarefulBullets.cs
new file mode 100644
index 0000000..c67492f
--- /dev/null
+++ b/jRandomSkills - SRC Files/src/player/skills/CarefulBullets.cs
@@ -0,0 +1,153 @@
+using CounterStrikeSharp.API.Core;
+using CounterStrikeSharp.API.Modules.Memory.DynamicFunctions;
+using CounterStrikeSharp.API.Modules.Utils;
+using static src.jRandomSkills;
+using System.Collections.Concurrent;
+using src.utils;
+using CounterStrikeSharp.API;
+
+namespace src.player.skills
+{
+ public class CarefulBullets : ISkill
+ {
+ private const Skills skillName = Skills.CarefulBullets;
+ private static readonly ConcurrentDictionary targetPlayers = [];
+ private static readonly ConcurrentDictionary lastShot = [];
+ private static readonly object setLock = new();
+
+ public static void LoadSkill()
+ {
+ SkillUtils.RegisterSkill(skillName, SkillsInfo.GetValue(skillName, "color"));
+ }
+
+ public static void NewRound()
+ {
+ lock (setLock)
+ {
+ targetPlayers.Clear();
+ lastShot.Clear();
+ }
+ foreach (var player in Utilities.GetPlayers())
+ {
+ DisableSkill(player);
+ SkillUtils.CloseMenu(player);
+ }
+ }
+
+ public static void PlayerDeath(EventPlayerDeath @event)
+ {
+ var player = @event.Userid;
+ if (player == null) return;
+ DisableSkill(player);
+ }
+
+ public static void OnTick()
+ {
+ if (Server.TickCount % 32 != 0) return;
+ foreach (var player in Utilities.GetPlayers())
+ {
+ if (!SkillUtils.HasMenu(player)) continue;
+ var playerInfo = Instance.SkillPlayer.FirstOrDefault(p => p.SteamID == player.SteamID);
+
+ if (playerInfo == null || playerInfo.Skill != skillName) continue;
+ var enemies = Utilities.GetPlayers().Where(p => p.PawnIsAlive && p.Team != player.Team && p.IsValid && !p.IsBot && !p.IsHLTV && p.Team != CsTeam.Spectator && p.Team != CsTeam.None).ToArray();
+
+ ConcurrentBag<(string, string)> menuItems = [.. enemies.Select(e => (e.PlayerName, e.Index.ToString()))];
+ SkillUtils.UpdateMenu(player, menuItems);
+ }
+ }
+
+ public static void TypeSkill(CCSPlayerController player, string[] commands)
+ {
+ if (player == null || !player.IsValid || !player.PawnIsAlive) return;
+ var playerInfo = Instance.SkillPlayer.FirstOrDefault(p => p.SteamID == player.SteamID);
+ if (playerInfo?.Skill != skillName) return;
+
+ if (playerInfo.SkillUsed)
+ {
+ player.PrintToChat($" {ChatColors.Red}{player.GetTranslation("areareaper_used_info")}");
+ return;
+ }
+
+ string enemyId = commands[0];
+ var enemy = Utilities.GetPlayers().FirstOrDefault(p => p.Team != player.Team && p.Index.ToString() == enemyId);
+
+ if (enemy == null)
+ {
+ player.PrintToChat($" {ChatColors.Red}" + player.GetTranslation("selectplayerskill_incorrect_enemy_index"));
+ return;
+ }
+
+ targetPlayers.TryAdd(enemy.SteamID, 0);
+ playerInfo.SkillUsed = true;
+ player.PrintToChat($" {ChatColors.Green}" + player.GetTranslation("carefulbullets_player_info", enemy.PlayerName));
+ enemy.PrintToChat($" {ChatColors.Red}" + enemy.GetTranslation("carefulbullets_enemy_info"));
+ }
+
+ public static void EnableSkill(CCSPlayerController player)
+ {
+ var playerInfo = Instance.SkillPlayer.FirstOrDefault(p => p.SteamID == player.SteamID);
+ if (playerInfo == null) return;
+ playerInfo.SkillUsed = false;
+
+ var enemies = Utilities.GetPlayers().Where(p => p.PawnIsAlive && p.Team != player.Team && p.IsValid && !p.IsBot && !p.IsHLTV && p.Team != CsTeam.Spectator && p.Team != CsTeam.None).ToArray();
+ if (enemies.Length > 0)
+ {
+ ConcurrentBag<(string, string)> menuItems = [.. enemies.Select(e => (e.PlayerName, e.Index.ToString()))];
+ SkillUtils.CreateMenu(player, menuItems);
+ }
+ else
+ player.PrintToChat($" {ChatColors.Red}{player.GetTranslation("selectplayerskill_incorrect_enemy_index")}");
+ }
+
+ public static void OnTakeDamage(DynamicHook h)
+ {
+ CEntityInstance param = h.GetParam(0);
+ CTakeDamageInfo param2 = h.GetParam(1);
+
+ if (param?.Entity == null || param2?.Attacker?.Value == null)
+ return;
+
+ CCSPlayerPawn attackerPawn = new(param2.Attacker.Value.Handle);
+
+ if (attackerPawn.DesignerName != "player")
+ return;
+
+ if (attackerPawn == null || attackerPawn.Controller?.Value == null)
+ return;
+
+ CCSPlayerController attacker = attackerPawn.Controller.Value.As();
+
+ if (!targetPlayers.ContainsKey(attacker.SteamID) || !attacker.PawnIsAlive)
+ return;
+
+ bool hitPlayer = param.DesignerName == "player";
+
+ if (!lastShot.ContainsKey(attacker.SteamID))
+ {
+ lastShot.TryAdd(attacker.SteamID, hitPlayer);
+
+ Instance.AddTickTimer(1, () =>
+ {
+ if (lastShot.TryRemove(attacker.SteamID, out bool didHit) && !didHit)
+ SkillUtils.TakeHealth(attackerPawn, SkillsInfo.GetValue(skillName, "damageAfterMiss"));
+ lastShot.TryRemove(attacker.SteamID, out _);
+ });
+ }
+ else if (hitPlayer)
+ lastShot.TryUpdate(attacker.SteamID, true, false);
+ }
+
+ public static void DisableSkill(CCSPlayerController player)
+ {
+ targetPlayers.TryRemove(player.SteamID, out _);
+ lastShot.TryRemove(player.SteamID, out _);
+ SkillUtils.CloseMenu(player);
+ }
+
+ public class SkillConfig(Skills skill = skillName, bool active = true, string color = "#db6c35", CsTeam onlyTeam = CsTeam.None, bool disableOnFreezeTime = false, bool needsTeammates = false, string requiredPermission = "", int damageAfterMiss = 5) : SkillsInfo.DefaultSkillInfo(skill, active, color, onlyTeam, disableOnFreezeTime, needsTeammates, requiredPermission)
+ {
+ public int DamageAfterMiss { get; set; } = damageAfterMiss;
+ }
+ }
+}
\ No newline at end of file
diff --git a/jRandomSkills - SRC Files/src/player/skills/Cypher.cs b/jRandomSkills - SRC Files/src/player/skills/Cypher.cs
index 3afc1fb..fd8b4bb 100644
--- a/jRandomSkills - SRC Files/src/player/skills/Cypher.cs
+++ b/jRandomSkills - SRC Files/src/player/skills/Cypher.cs
@@ -1,8 +1,7 @@
using CounterStrikeSharp.API;
using CounterStrikeSharp.API.Core;
-using CounterStrikeSharp.API.Modules.Entities;
-using CounterStrikeSharp.API.Modules.Entities.Constants;
using CounterStrikeSharp.API.Modules.Memory.DynamicFunctions;
+using CounterStrikeSharp.API.Modules.Timers;
using CounterStrikeSharp.API.Modules.Utils;
using CS2TraceRay.Class;
using CS2TraceRay.Struct;
@@ -10,6 +9,7 @@ using src.utils;
using System.Collections.Concurrent;
using System.Drawing;
using System.Numerics;
+using Timer = CounterStrikeSharp.API.Modules.Timers.Timer;
using Vector = CounterStrikeSharp.API.Modules.Utils.Vector;
namespace src.player.skills
@@ -25,7 +25,7 @@ namespace src.player.skills
public static void LoadSkill()
{
- // SkillUtils.RegisterSkill(skillName, SkillsInfo.GetValue(skillName, "color"));
+ SkillUtils.RegisterSkill(skillName, SkillsInfo.GetValue(skillName, "color"));
jRandomSkills.Instance.AddToManifest(cameraPropModel);
jRandomSkills.Instance.AddToManifest(cameraViewModel);
}
@@ -56,7 +56,9 @@ namespace src.player.skills
CameraView = null,
CameraActive = false,
NextCamera = 0,
+ NoSpace = 0,
PlayerCameraRaw = player.PlayerPawn.Value.CameraServices.ViewEntity.Raw,
+ LastAngle = QAngle.Zero
});
}
@@ -85,6 +87,7 @@ namespace src.player.skills
playerSkill.CameraProp.AcceptInput("Kill");
playerSkill.CameraProp = null;
}
+ playerSkill.NextCamera = Server.TickCount + SkillsInfo.GetValue(skillName, "Cooldown") * 64;
}
public static void OnTick()
@@ -114,8 +117,13 @@ namespace src.player.skills
{
if (player.NextCamera > Server.TickCount) return;
player.CameraProp = CreateCameraProp(player.Player);
+ if (player.CameraProp == null)
+ {
+ player.NoSpace = Server.TickCount + (64 * 2);
+ return;
+ }
player.CameraView = CreateCameraView(player.Player);
- player.NextCamera = Server.TickCount + SkillsInfo.GetValue(skillName, "Cooldown") * 64;
+ if (player.CameraView == null) return;
}
var pawn = player.Player.PlayerPawn.Value;
@@ -123,13 +131,52 @@ namespace src.player.skills
return;
BlockWeapon(player.Player, player.CameraActive);
- pawn!.CameraServices!.ViewEntity.Raw = player.CameraActive && player.CameraView != null ? player.CameraView.EntityHandle.Raw : player.PlayerCameraRaw;
- Utilities.SetStateChanged(pawn, "CBasePlayerPawn", "m_pCameraServices");
- if (player.CameraActive && player.CameraView != null)
+ Server.NextWorldUpdate(() =>
{
- SkillUtils.ApplyScreenColor(player.Player, 0, 0, 255, 20, 100, 1020);
- }
+ if (pawn != null && pawn.LifeState == (byte)LifeState_t.LIFE_ALIVE)
+ {
+ if (player.CameraActive && player.CameraProp != null)
+ {
+ if ( pawn.AbsRotation != null)
+ player.LastAngle = new QAngle(pawn.AbsRotation.X, pawn.AbsRotation.Y, pawn.AbsRotation.Z);
+ pawn.Teleport(null, player.CameraProp.AbsRotation);
+ }
+ else if (!forceToDefault)
+ pawn.Teleport(null, player.LastAngle);
+ }
+
+ if (player.CameraActive && player.CameraView != null)
+ {
+ pawn!.CameraServices!.ViewEntity.Raw = player.CameraView.EntityHandle.Raw;
+ SkillUtils.ApplyScreenColor(player.Player, 0, 0, 255, 20, 100, 1020);
+
+ Timer? cameraTimer = null;
+ ulong playerSteamID = player.Player.SteamID;
+
+ cameraTimer = jRandomSkills.Instance.AddTimer(2f, () =>
+ {
+ var target = Utilities.GetPlayerFromSteamId(playerSteamID);
+ if (target == null || !target.IsValid || !target.PawnIsAlive)
+ {
+ cameraTimer?.Kill();
+ return;
+ }
+
+ if (!playersInfo.TryGetValue(target, out var playerSkill) || playerSkill.CameraActive == false)
+ {
+ cameraTimer?.Kill();
+ return;
+ }
+
+ SkillUtils.ApplyScreenColor(target, 0, 0, 255, 20, 100, 1020);
+ }, TimerFlags.STOP_ON_MAPCHANGE | TimerFlags.REPEAT);
+ }
+ else
+ pawn!.CameraServices!.ViewEntity.Raw = player.PlayerCameraRaw;
+
+ Utilities.SetStateChanged(pawn, "CBasePlayerPawn", "m_pCameraServices");
+ });
}
private static CDynamicProp? CreateCameraProp(CCSPlayerController player)
@@ -140,7 +187,6 @@ namespace src.player.skills
camera.Collision.SolidType = SolidType_t.SOLID_VPHYSICS;
camera.CBodyComponent!.SceneNode!.Owner!.Entity!.Flags = (uint)(camera.CBodyComponent!.SceneNode!.Owner!.Entity!.Flags & ~(1 << 2));
camera.Entity!.Name = camera.Globalname = $"CypherCamera_{Server.TickCount}_{player.SteamID}";
- camera.DispatchSpawn();
var playerPawn = player.PlayerPawn.Value;
if (playerPawn == null || !playerPawn.IsValid) return null;
@@ -150,10 +196,14 @@ namespace src.player.skills
if (cameraVector == null) return null;
cameraVector = new Vector(cameraVector.X + diffVector.X, cameraVector.Y + diffVector.Y, cameraVector.Z);
+ if (!CheckCameraPosition(cameraVector, player))
+ return null;
+
Server.NextFrame(() =>
{
camera.SetModel(cameraPropModel);
camera.Teleport(cameraVector, new QAngle(0, playerPawn.V_angle.Y + 180, 0));
+ camera.DispatchSpawn();
});
return camera;
@@ -163,7 +213,6 @@ namespace src.player.skills
{
var camera = Utilities.CreateEntityByName("prop_dynamic");
if (camera == null || !camera.IsValid) return null;
- camera.DispatchSpawn();
var playerPawn = player.PlayerPawn.Value;
if (playerPawn == null || !playerPawn.IsValid) return null;
@@ -172,14 +221,15 @@ namespace src.player.skills
Vector diffVector = SkillUtils.GetForwardVector(playerPawn.V_angle) * 25;
if (cameraVector == null) return null;
-
cameraVector = new Vector(cameraVector.X - diffVector.X, cameraVector.Y - diffVector.Y, cameraVector.Z);
if (cameraVector == null) return null;
+
Server.NextFrame(() =>
{
camera.SetModel(cameraViewModel);
camera.Render = Color.FromArgb(0, 255, 255, 255);
camera.Teleport(cameraVector, playerPawn.EyeAngles);
+ camera.DispatchSpawn();
});
return camera;
@@ -227,7 +277,7 @@ namespace src.player.skills
}
}
- private unsafe static Vector? GetNewCameraPosition(CCSPlayerController player)
+ private static Vector? GetNewCameraPosition(CCSPlayerController player)
{
var playerPawn = player.PlayerPawn.Value;
if (playerPawn == null || !playerPawn.IsValid || playerPawn.AbsOrigin == null) return null;
@@ -235,30 +285,54 @@ namespace src.player.skills
Vector eyePos = new(playerPawn.AbsOrigin.X, playerPawn.AbsOrigin.Y, playerPawn.AbsOrigin.Z + playerPawn.ViewOffset.Z);
Vector endPos = eyePos + SkillUtils.GetForwardVector(playerPawn.V_angle) * 4096f;
- Ray ray = new(Vector3.Zero);
- CTraceFilter filter = new(playerPawn.Index, playerPawn.Index)
- {
- m_nObjectSetMask = 0xf,
- m_nCollisionGroup = (byte)CollisionGroup.COLLISION_GROUP_PROJECTILE,
- m_nInteractsWith = 8589946881,
- m_nInteractsExclude = 0,
- m_nBits = 11,
- m_bIterateEntities = true,
- m_bHitTriggers = false,
- m_nInteractsAs = 0x40000,
- m_bOnlyHitIfHasPhysics = true
- };
+ ulong solid = 0x1;
+ ulong window = 0x1000;
+ ulong passBullets = 0x2000;
- filter.m_nHierarchyIds[0] = playerPawn.GetHierarchyId();
- filter.m_nHierarchyIds[1] = 0;
- CGameTrace trace = TraceRay.TraceHull(eyePos, endPos, filter, ray);
+ ulong mask = solid | window | passBullets;
+ ulong contents = playerPawn.Collision.CollisionGroup;
+ CGameTrace trace = TraceRay.TraceShape(eyePos, endPos, mask, contents, player);
if (trace.HitWorld(out _))
- return new Vector(trace.EndPos.X, trace.EndPos.Y, trace.EndPos.Z);
+ {
+ Vector3 hitPost = trace.EndPos;
+ Vector3 normal = trace.Normal;
+
+ float offset = 8;
+ Vector finalPos = new(
+ hitPost.X + (normal.X * offset),
+ hitPost.Y + (normal.Y * offset),
+ hitPost.Z + (normal.Z * offset)
+ );
+
+ return finalPos;
+ }
return null;
}
+ private static bool CheckCameraPosition(Vector cameraVector, CCSPlayerController player)
+ {
+ var playerPawn = player.PlayerPawn.Value;
+ if (playerPawn == null || !playerPawn.IsValid || playerPawn.AbsOrigin == null) return false;
+
+ Vector endPos = cameraVector + SkillUtils.GetForwardVector(new QAngle(0, playerPawn.V_angle.Y + 180, 0)) * -5;
+ cameraVector += SkillUtils.GetForwardVector(new QAngle(0, playerPawn.V_angle.Y + 180, 0)) * 5;
+
+ ulong solid = 0x1;
+ ulong window = 0x1000;
+ ulong passBullets = 0x2000;
+
+ ulong mask = solid | window | passBullets;
+ ulong contents = playerPawn.Collision.CollisionGroup;
+ CGameTrace trace = TraceRay.TraceShape(cameraVector, endPos, mask, contents, player);
+
+ if (trace.HitWorld(out _))
+ return true;
+
+ return false;
+ }
+
private static void UpdateHUD(PlayerSkill playerSkill)
{
if (playerSkill == null || playerSkill.Player == null) return;
@@ -270,7 +344,9 @@ namespace src.player.skills
var playerInfo = jRandomSkills.Instance.SkillPlayer.FirstOrDefault(s => s.SteamID == playerSkill?.Player?.SteamID);
if (playerInfo == null) return;
- if (cooldown == 0)
+ if (playerSkill.NoSpace >= Server.TickCount)
+ playerInfo.PrintHTML = $"{playerSkill.Player.GetTranslation("cypher_nospace")}";
+ else if (cooldown == 0)
playerInfo.PrintHTML = null;
else if (playerSkill?.CameraProp == null)
playerInfo.PrintHTML = $"{playerSkill?.Player.GetTranslation("hud_info", $"{cooldown}")}";
@@ -284,6 +360,8 @@ namespace src.player.skills
public uint PlayerCameraRaw { get; set; }
public bool CameraActive { get; set; }
public float NextCamera { get; set; }
+ public float NoSpace { get; set; }
+ public required QAngle LastAngle { get; set; }
}
public class SkillConfig(Skills skill = skillName, bool active = true, string color = "#34ebd5", CsTeam onlyTeam = CsTeam.None, bool disableOnFreezeTime = true, bool needsTeammates = false, string requiredPermission = "", float cooldown = 30) : SkillsInfo.DefaultSkillInfo(skill, active, color, onlyTeam, disableOnFreezeTime, needsTeammates, requiredPermission)
diff --git a/jRandomSkills - SRC Files/src/player/skills/Darkness.cs b/jRandomSkills - SRC Files/src/player/skills/Darkness.cs
index 2317e38..9113c0b 100644
--- a/jRandomSkills - SRC Files/src/player/skills/Darkness.cs
+++ b/jRandomSkills - SRC Files/src/player/skills/Darkness.cs
@@ -5,6 +5,7 @@ using CounterStrikeSharp.API.Modules.Utils;
using src.utils;
using System.Collections.Concurrent;
using static src.jRandomSkills;
+using Timer = CounterStrikeSharp.API.Modules.Timers.Timer;
namespace src.player.skills
{
@@ -111,34 +112,32 @@ namespace src.player.skills
private static void SetUpPostProcessing(CCSPlayerController player, bool turnOff = false)
{
if (player == null || !player.IsValid) return;
- var pawn = player.PlayerPawn.Value;
- if (pawn == null || !pawn.IsValid || pawn.CameraServices == null) return;
+ ulong playerSteamID = player.SteamID;
lock (setLock)
{
if (!turnOff)
{
- playersInDark.TryAdd(player.SteamID, 0);
- SkillUtils.ApplyScreenColor(player,
- r: SkillsInfo.GetValue(skillName, "R"),
- g: SkillsInfo.GetValue(skillName, "G"),
- b: SkillsInfo.GetValue(skillName, "B"),
- a: SkillsInfo.GetValue(skillName, "A"),
- duration: 100,
- holdTime: 3000);
+ playersInDark.TryAdd(playerSteamID, 0);
+ ApplyColor(player);
- Instance.AddTimer(2.5f, () => {
- if (!playersInDark.ContainsKey(player.SteamID))
+ Timer? darkTimer = null;
+ darkTimer = Instance.AddTimer(5f, () => {
+ if (!playersInDark.ContainsKey(playerSteamID))
+ {
+ darkTimer?.Kill();
return;
+ }
- if (player.IsValid && player.PawnIsAlive)
- SkillUtils.ApplyScreenColor(player,
- r: SkillsInfo.GetValue(skillName, "R"),
- g: SkillsInfo.GetValue(skillName, "G"),
- b: SkillsInfo.GetValue(skillName, "B"),
- a: SkillsInfo.GetValue(skillName, "A"),
- duration: 100,
- holdTime: 3000);
+ var target = Utilities.GetPlayerFromSteamId(playerSteamID);
+ if (target == null || !target.IsValid)
+ {
+ darkTimer?.Kill();
+ return;
+ }
+
+ if (target.PawnIsAlive)
+ ApplyColor(player);
}, TimerFlags.STOP_ON_MAPCHANGE | TimerFlags.REPEAT);
}
else
@@ -149,6 +148,17 @@ namespace src.player.skills
}
}
+ private static void ApplyColor(CCSPlayerController player)
+ {
+ SkillUtils.ApplyScreenColor(player,
+ r: SkillsInfo.GetValue(skillName, "R"),
+ g: SkillsInfo.GetValue(skillName, "G"),
+ b: SkillsInfo.GetValue(skillName, "B"),
+ a: SkillsInfo.GetValue(skillName, "A"),
+ duration: 100,
+ holdTime: 3000);
+ }
+
public class SkillConfig(Skills skill = skillName, bool active = true, string color = "#383838", CsTeam onlyTeam = CsTeam.None, bool disableOnFreezeTime = false, bool needsTeammates = false, string requiredPermission = "", int r = 0, int g = 0, int b = 0, int a = 230) : SkillsInfo.DefaultSkillInfo(skill, active, color, onlyTeam, disableOnFreezeTime, needsTeammates, requiredPermission)
{
public int R { get; set; } = r;
diff --git a/jRandomSkills - SRC Files/src/player/skills/Dash.cs b/jRandomSkills - SRC Files/src/player/skills/Dash.cs
index 05b614d..8226000 100644
--- a/jRandomSkills - SRC Files/src/player/skills/Dash.cs
+++ b/jRandomSkills - SRC Files/src/player/skills/Dash.cs
@@ -2,6 +2,7 @@
using CounterStrikeSharp.API.Core;
using CounterStrikeSharp.API.Modules.Utils;
using src.utils;
+using System.Collections.Concurrent;
using static src.jRandomSkills;
namespace src.player.skills
@@ -9,15 +10,22 @@ namespace src.player.skills
public class Dash : ISkill
{
private const Skills skillName = Skills.Dash;
- private static readonly PlayerFlags[] LF = new PlayerFlags[64];
- private static readonly int?[] J = new int?[64];
- private static readonly PlayerButtons[] LB = new PlayerButtons[64];
+ private static readonly ConcurrentDictionary SkillPlayerInfo = [];
+ private static readonly object setLock = new();
public static void LoadSkill()
{
SkillUtils.RegisterSkill(skillName, SkillsInfo.GetValue(skillName, "color"));
}
+ public static void NewRound()
+ {
+ lock (setLock)
+ {
+ SkillPlayerInfo.Clear();
+ }
+ }
+
public static void OnTick()
{
foreach (var player in Utilities.GetPlayers())
@@ -25,11 +33,55 @@ namespace src.player.skills
if (!Instance.IsPlayerValid(player)) return;
var playerInfo = Instance.SkillPlayer.FirstOrDefault(p => p.SteamID == player.SteamID);
if (playerInfo?.Skill == skillName)
- HandleDash(player);
+ if (SkillPlayerInfo.TryGetValue(player.SteamID, out var skillInfo))
+ {
+ UpdateHUD(player, skillInfo);
+ HandleDash(player, skillInfo);
+ }
}
}
- private static void HandleDash(CCSPlayerController player)
+ public static void EnableSkill(CCSPlayerController player)
+ {
+ SkillPlayerInfo.TryAdd(player.SteamID, new PlayerSkillInfo
+ {
+ SteamID = player.SteamID,
+ CanUse = true,
+ Cooldown = DateTime.MinValue,
+ LastFlags = 0,
+ Jumps = 0,
+ LastButtons = 0
+ });
+ }
+
+ public static void DisableSkill(CCSPlayerController player)
+ {
+ SkillPlayerInfo.TryRemove(player.SteamID, out _);
+ SkillUtils.ResetPrintHTML(player);
+ }
+
+ private static void UpdateHUD(CCSPlayerController player, PlayerSkillInfo skillInfo)
+ {
+ float cooldown = 0;
+ if (skillInfo != null)
+ {
+ float time = (int)Math.Ceiling((skillInfo.Cooldown.AddSeconds(SkillsInfo.GetValue(skillName, "cooldown")) - DateTime.Now).TotalSeconds);
+ cooldown = Math.Max(time, 0);
+
+ if (cooldown == 0 && skillInfo?.CanUse == false)
+ skillInfo.CanUse = true;
+ }
+
+ var playerInfo = Instance.SkillPlayer.FirstOrDefault(s => s.SteamID == player?.SteamID);
+ if (playerInfo == null) return;
+
+ if (cooldown == 0)
+ playerInfo.PrintHTML = null;
+ else
+ playerInfo.PrintHTML = $"{player.GetTranslation("hud_info", $"{cooldown}")}";
+ }
+
+ private static void HandleDash(CCSPlayerController player, PlayerSkillInfo skillInfo)
{
var playerPawn = player.PlayerPawn.Value;
if (playerPawn == null || !playerPawn.IsValid) return;
@@ -37,55 +89,81 @@ namespace src.player.skills
var flags = (PlayerFlags)playerPawn.Flags;
var buttons = player.Buttons;
+ bool jumpPressed = (buttons & PlayerButtons.Jump) != 0
+ || (playerPawn.MovementServices?.QueuedButtonChangeMask & (ulong)PlayerButtons.Jump) != 0;
+
var playerInfo = Instance.SkillPlayer.FirstOrDefault(p => p.SteamID == player.SteamID);
if (playerPawn == null || playerInfo == null) return;
- if ((LF[player.Slot] & PlayerFlags.FL_ONGROUND) != 0 && (flags & PlayerFlags.FL_ONGROUND) == 0 && (LB[player.Slot] & PlayerButtons.Jump) == 0 && (buttons & PlayerButtons.Jump) != 0)
+ bool wasOnGround = (skillInfo.LastFlags & PlayerFlags.FL_ONGROUND) != 0;
+ bool isOnGround = (flags & PlayerFlags.FL_ONGROUND) != 0;
+
+ if (wasOnGround && !isOnGround && jumpPressed)
+ skillInfo.Jumps = 0;
+ else if (isOnGround)
+ skillInfo.Jumps = 0;
+ else if (!isOnGround && jumpPressed && skillInfo.Jumps < 1)
{
- }
- else if ((flags & PlayerFlags.FL_ONGROUND) != 0)
- {
- J[player.Slot] = 0;
- }
- else if ((LB[player.Slot] & PlayerButtons.Jump) == 0 && (buttons & PlayerButtons.Jump) != 0 && J[player.Slot] < 1)
- {
- J[player.Slot]++;
+ bool lastJumpPressed = (skillInfo.LastButtons & PlayerButtons.Jump) != 0;
+ if (!lastJumpPressed && skillInfo.CanUse)
+ {
+ skillInfo.Jumps++;
+ skillInfo.CanUse = false;
+ skillInfo.Cooldown = DateTime.Now;
- float moveX = 0;
- float moveY = 0;
+ float moveX = 0;
+ float moveY = 0;
- PlayerButtons playerButtons = player.Buttons;
- if (playerButtons.HasFlag(PlayerButtons.Forward))
- moveY += 1;
- if (playerButtons.HasFlag(PlayerButtons.Back))
- moveY -= 1;
- if (playerButtons.HasFlag(PlayerButtons.Moveleft))
- moveX += 1;
- if (playerButtons.HasFlag(PlayerButtons.Moveright))
- moveX -= 1;
+ PlayerButtons playerButtons = player.Buttons;
+ if (SkillsInfo.GetValue(skillName, "anyDirection"))
+ {
+ if (playerButtons.HasFlag(PlayerButtons.Forward))
+ moveY += 1;
+ if (playerButtons.HasFlag(PlayerButtons.Back))
+ moveY -= 1;
+ if (playerButtons.HasFlag(PlayerButtons.Moveleft))
+ moveX += 1;
+ if (playerButtons.HasFlag(PlayerButtons.Moveright))
+ moveX -= 1;
- if (moveX == 0 && moveY == 0)
- moveY = 1;
+ if (moveX == 0 && moveY == 0)
+ moveY = 1;
+ }
+ else
+ moveY = 1;
- float moveAngle = MathF.Atan2(moveX, moveY) * (180f / MathF.PI);
- QAngle dashAngles = new(0, playerPawn.EyeAngles.Y + moveAngle, 0);
+ float moveAngle = MathF.Atan2(moveX, moveY) * (180f / MathF.PI);
+ QAngle dashAngles = new(0, playerPawn.EyeAngles.Y + moveAngle, 0);
- Vector newVelocity = SkillUtils.GetForwardVector(dashAngles) * SkillsInfo.GetValue(skillName, "pushVelocity");
- newVelocity.Z = playerPawn.AbsVelocity.Z + SkillsInfo.GetValue(skillName, "jumpVelocity");
+ Vector newVelocity = SkillUtils.GetForwardVector(dashAngles) * SkillsInfo.GetValue(skillName, "pushVelocity");
+ newVelocity.Z = playerPawn.AbsVelocity.Z + SkillsInfo.GetValue(skillName, "jumpVelocity");
- playerPawn.AbsVelocity.X = newVelocity.X;
- playerPawn.AbsVelocity.Y = newVelocity.Y;
- playerPawn.AbsVelocity.Z = newVelocity.Z;
+ playerPawn.AbsVelocity.X = newVelocity.X;
+ playerPawn.AbsVelocity.Y = newVelocity.Y;
+ playerPawn.AbsVelocity.Z = newVelocity.Z;
+ }
}
- LF[player.Slot] = flags;
- LB[player.Slot] = buttons;
+ skillInfo.LastFlags = flags;
+ skillInfo.LastButtons = buttons;
}
- public class SkillConfig(Skills skill = skillName, bool active = true, string color = "#42bbfc", CsTeam onlyTeam = CsTeam.None, bool disableOnFreezeTime = false, bool needsTeammates = false, string requiredPermission = "", float jumpVelocity = 150f, float pushVelocity = 600f) : SkillsInfo.DefaultSkillInfo(skill, active, color, onlyTeam, disableOnFreezeTime, needsTeammates, requiredPermission)
+ public class PlayerSkillInfo
+ {
+ public ulong SteamID { get; set; }
+ public bool CanUse { get; set; }
+ public DateTime Cooldown { get; set; }
+ public PlayerFlags LastFlags { get; set; }
+ public int Jumps { get; set; }
+ public PlayerButtons LastButtons { get; set; }
+ }
+
+ public class SkillConfig(Skills skill = skillName, bool active = true, string color = "#42bbfc", CsTeam onlyTeam = CsTeam.None, bool disableOnFreezeTime = false, bool needsTeammates = false, string requiredPermission = "", float jumpVelocity = 150f, float pushVelocity = 600f, bool anyDirection = true, float cooldown = 2f) : SkillsInfo.DefaultSkillInfo(skill, active, color, onlyTeam, disableOnFreezeTime, needsTeammates, requiredPermission)
{
public float JumpVelocity { get; set; } = jumpVelocity;
public float PushVelocity { get; set; } = pushVelocity;
+ public bool AnyDirection { get; set; } = anyDirection;
+ public float Cooldown { get; set; } = cooldown;
}
}
}
\ No newline at end of file
diff --git a/jRandomSkills - SRC Files/src/player/skills/Ghost.cs b/jRandomSkills - SRC Files/src/player/skills/Ghost.cs
index a75d406..010be1b 100644
--- a/jRandomSkills - SRC Files/src/player/skills/Ghost.cs
+++ b/jRandomSkills - SRC Files/src/player/skills/Ghost.cs
@@ -76,7 +76,7 @@ namespace src.player.skills
if (entity == null || !entity.IsValid) continue;
info.TransmitEntities.Remove(entity.Index);
- var bombIndex = HideBomb(_player);
+ var bombIndex = GetBombIndex(_player);
if (bombIndex == null) continue;
var bombEntity = Utilities.GetEntityFromIndex((int)bombIndex);
if (bombEntity == null || !bombEntity.IsValid) continue;
@@ -170,7 +170,7 @@ namespace src.player.skills
playerInfo.PrintHTML = $"{player.GetTranslation("disabled_weapon")}";
}
- private static uint? HideBomb(CCSPlayerController player)
+ private static uint? GetBombIndex(CCSPlayerController player)
{
var bombEntities = Utilities.FindAllEntitiesByDesignerName("weapon_c4").ToList();
if (bombEntities.Count == 0) return null;
@@ -179,14 +179,6 @@ namespace src.player.skills
if (bomb == null) return null;
if (bomb.OwnerEntity.Index != player.Index) return null;
-
- bomb.EntitySpottedState.Spotted = false;
- Utilities.SetStateChanged(bomb, "CCSPlayerPawn", "m_entitySpottedState", Schema.GetSchemaOffset("EntitySpottedState_t", "m_bSpotted"));
-
- for (int i = 0; i < bomb.EntitySpottedState.SpottedByMask.Length; i++)
- bomb.EntitySpottedState.SpottedByMask[i] = 0;
- Utilities.SetStateChanged(bomb, "CCSPlayerPawn", "m_entitySpottedState", Schema.GetSchemaOffset("EntitySpottedState_t", "m_bSpottedByMask"));
-
return bomb.Index;
}
diff --git a/jRandomSkills - SRC Files/src/player/skills/HealingSmoke.cs b/jRandomSkills - SRC Files/src/player/skills/HealingSmoke.cs
index 58ffee5..cf501fd 100644
--- a/jRandomSkills - SRC Files/src/player/skills/HealingSmoke.cs
+++ b/jRandomSkills - SRC Files/src/player/skills/HealingSmoke.cs
@@ -72,7 +72,7 @@ namespace src.player.skills
{
foreach (Vector smokePos in smokes.Keys)
foreach (var player in Utilities.GetPlayers())
- if (Server.TickCount % 17 == 0)
+ if (Server.TickCount % 16 == 0)
if (player.PlayerPawn.Value != null && player.PlayerPawn.Value.IsValid && player.PlayerPawn.Value.AbsOrigin != null)
if (SkillUtils.GetDistance(smokePos, player.PlayerPawn.Value.AbsOrigin) <= SkillsInfo.GetValue(skillName, "smokeRadius"))
AddHealth(player.PlayerPawn.Value, SkillsInfo.GetValue(skillName, "smokeHeal"));
diff --git a/jRandomSkills - SRC Files/src/player/skills/Iana.cs b/jRandomSkills - SRC Files/src/player/skills/Iana.cs
index 17f18b7..d88d3f1 100644
--- a/jRandomSkills - SRC Files/src/player/skills/Iana.cs
+++ b/jRandomSkills - SRC Files/src/player/skills/Iana.cs
@@ -1,7 +1,5 @@
using CounterStrikeSharp.API;
using CounterStrikeSharp.API.Core;
-using CounterStrikeSharp.API.Modules.Entities.Constants;
-using CounterStrikeSharp.API.Modules.Memory;
using CounterStrikeSharp.API.Modules.Memory.DynamicFunctions;
using CounterStrikeSharp.API.Modules.Timers;
using CounterStrikeSharp.API.Modules.Utils;
@@ -9,7 +7,7 @@ using CS2TraceRay.Class;
using CS2TraceRay.Struct;
using src.utils;
using System.Collections.Concurrent;
-using System.Numerics;
+using Timer = CounterStrikeSharp.API.Modules.Timers.Timer;
using Vector = CounterStrikeSharp.API.Modules.Utils.Vector;
namespace src.player.skills
@@ -22,7 +20,7 @@ namespace src.player.skills
public static void LoadSkill()
{
- // SkillUtils.RegisterSkill(skillName, SkillsInfo.GetValue(skillName, "color"));
+ SkillUtils.RegisterSkill(skillName, SkillsInfo.GetValue(skillName, "color"));
}
public static void NewRound()
@@ -143,8 +141,9 @@ namespace src.player.skills
clone.Teleport(playerPawn.AbsOrigin, new QAngle(0, playerPawn.V_angle.Y, 0));
playerPawn.Teleport(pos);
- SkillUtils.ApplyScreenColor(player, 255, 255, 0, 20, 100, 1020);
+ SkillUtils.ApplyScreenColor(player, r: 255, g: 255, b: 0, a: 20, duration: 100, holdTime: 1020);
BlockWeapon(playerSkill.Player, true);
+
playerSkill.UseTime = Server.TickCount;
playerSkill.NextUse = Server.TickCount + 64000;
playerSkill.CloneProp = clone;
@@ -155,18 +154,25 @@ namespace src.player.skills
KillClone(playerSkill);
});
- jRandomSkills.Instance.AddTimer(2f, () => {
- if (playerSkill.CloneProp == null)
- return;
+ Timer? cloneTimer = null;
+ ulong playerSteamID = player.SteamID;
- if (player.IsValid && player.PawnIsAlive)
- SkillUtils.ApplyScreenColor(player,
- r: 255,
- g: 255,
- b: 0,
- a: 20,
- duration: 100,
- holdTime: 1020);
+ cloneTimer = jRandomSkills.Instance.AddTimer(2f, () =>
+ {
+ var target = Utilities.GetPlayerFromSteamId(playerSteamID);
+ if (target == null || !target.IsValid || !target.PawnIsAlive)
+ {
+ cloneTimer?.Kill();
+ return;
+ }
+
+ if (!playersInfo.TryGetValue(target, out var playerSkill) || playerSkill.CloneProp == null)
+ {
+ cloneTimer?.Kill();
+ return;
+ }
+
+ SkillUtils.ApplyScreenColor(target, r: 255, g: 255, b: 0, a: 20, duration: 100, holdTime: 1020);
}, TimerFlags.STOP_ON_MAPCHANGE | TimerFlags.REPEAT);
});
@@ -181,22 +187,9 @@ namespace src.player.skills
Vector eyePos = new(playerPawn.AbsOrigin.X, playerPawn.AbsOrigin.Y, playerPawn.AbsOrigin.Z + 25);
endPos.Z += 25;
- Ray ray = new(Vector3.Zero);
- CTraceFilter filter = new(playerPawn.Index, playerPawn.Index)
- {
- m_nObjectSetMask = 0xf,
- m_nCollisionGroup = (byte)CollisionGroup.COLLISION_GROUP_PLAYER_MOVEMENT,
- m_nInteractsWith = playerPawn.GetInteractsWith(),
- m_nInteractsExclude = 0,
- m_nBits = 11,
- m_bIterateEntities = true,
- m_bHitTriggers = false,
- m_nInteractsAs = 0x40000
- };
-
- filter.m_nHierarchyIds[0] = playerPawn.GetHierarchyId();
- filter.m_nHierarchyIds[1] = 0;
- CGameTrace trace = TraceRay.TraceHull(eyePos, endPos, filter, ray);
+ ulong mask = playerPawn.Collision.CollisionAttribute.InteractsWith;
+ ulong contents = playerPawn.Collision.CollisionGroup;
+ CGameTrace trace = TraceRay.TraceShape(eyePos, endPos, mask, contents, player);
return !trace.DidHit();
}
@@ -282,9 +275,7 @@ namespace src.player.skills
if (playersInfo.TryGetValue(victim, out var playerSkill) && playerSkill.CloneProp != null)
{
KillClone(playerSkill);
- var victimPawn = victim.PlayerPawn.Value;
- if (victimPawn == null) return;
- SkillUtils.AddHealth(victimPawn, @event.DmgHealth);
+ SkillUtils.RestoreHealth(victim);
}
}
diff --git a/jRandomSkills - SRC Files/src/player/skills/Jackal.cs b/jRandomSkills - SRC Files/src/player/skills/Jackal.cs
index 8c88a2b..35bac69 100644
--- a/jRandomSkills - SRC Files/src/player/skills/Jackal.cs
+++ b/jRandomSkills - SRC Files/src/player/skills/Jackal.cs
@@ -34,23 +34,31 @@ namespace src.player.skills
{
foreach( var (info, player) in infoList)
{
- if (player == null) continue;
+ if (player == null || !player.IsValid) continue;
+ var playerInfo = Instance.SkillPlayer.FirstOrDefault(p => p.SteamID == player.SteamID);
+
+ var targetHandle = player.Pawn.Value?.ObserverServices?.ObserverTarget.Value?.Handle ?? nint.Zero;
+ bool isObservingJackal = false;
+
+ if (targetHandle != nint.Zero)
+ {
+ var target = Utilities.GetPlayers().FirstOrDefault(p => p?.Pawn?.Value?.Handle == targetHandle);
+ var targetInfo = Instance.SkillPlayer.FirstOrDefault(p => p.SteamID == target?.SteamID);
+ if (targetInfo?.Skill == skillName) isObservingJackal = true;
+ }
+
+ bool hasSkill = playerInfo?.Skill == skillName || isObservingJackal;
+
foreach (var param in playersStep)
{
var enemy = param.Key;
var step = param.Value;
- if (step == null || step.IsValid) continue;
-
- var observedPlayer = Utilities.GetPlayers().FirstOrDefault(p => p?.Pawn?.Value?.Handle == player?.Pawn?.Value?.ObserverServices?.ObserverTarget?.Value?.Handle);
- var playerInfo = Instance.SkillPlayer.FirstOrDefault(p => p.SteamID == player.SteamID);
- var observerInfo = Instance.SkillPlayer.FirstOrDefault(p => p.SteamID == observedPlayer?.SteamID);
+ if (step == null || !step.IsValid) continue;
var entity = Utilities.GetEntityFromIndex((int)step.Index);
if (entity == null || !entity.IsValid) continue;
- if (playerInfo?.Skill != skillName && observerInfo?.Skill != skillName)
- info.TransmitEntities.Remove(entity.Index);
- else if (enemy.Team == player.Team)
+ if (!hasSkill || enemy.Team == player.Team)
info.TransmitEntities.Remove(entity.Index);
}
}
diff --git a/jRandomSkills - SRC Files/src/player/skills/Jester.cs b/jRandomSkills - SRC Files/src/player/skills/Jester.cs
index 925f683..432ec33 100644
--- a/jRandomSkills - SRC Files/src/player/skills/Jester.cs
+++ b/jRandomSkills - SRC Files/src/player/skills/Jester.cs
@@ -50,25 +50,13 @@ namespace src.player.skills
if (!Instance.IsPlayerValid(attacker))
{
if (victimInfo?.Skill == skillName)
- RestoreHealth(victim!, @event.DmgHealth);
+ SkillUtils.RestoreHealth(victim);
return;
}
var attackerInfo = Instance.SkillPlayer.FirstOrDefault(p => p.SteamID == attacker?.SteamID);
if (attackerInfo?.Skill == skillName || victimInfo?.Skill == skillName)
- RestoreHealth(victim!, @event.DmgHealth);
- }
-
- private static void RestoreHealth(CCSPlayerController victim, float damage)
- {
- var playerPawn = victim.PlayerPawn.Value;
- if (playerPawn == null || !playerPawn.IsValid) return;
- var newHealth = playerPawn.Health + damage;
-
- if (newHealth > 100)
- newHealth = 100;
-
- playerPawn.Health = (int)newHealth;
+ SkillUtils.RestoreHealth(victim);
}
public static void EnableSkill(CCSPlayerController _)
diff --git a/jRandomSkills - SRC Files/src/player/skills/JumpingJack.cs b/jRandomSkills - SRC Files/src/player/skills/JumpingJack.cs
index 499a282..fd7d955 100644
--- a/jRandomSkills - SRC Files/src/player/skills/JumpingJack.cs
+++ b/jRandomSkills - SRC Files/src/player/skills/JumpingJack.cs
@@ -1,4 +1,5 @@
-using CounterStrikeSharp.API.Core;
+using CounterStrikeSharp.API;
+using CounterStrikeSharp.API.Core;
using CounterStrikeSharp.API.Modules.Utils;
using src.utils;
using static src.jRandomSkills;
diff --git a/jRandomSkills - SRC Files/src/player/skills/LongKnife.cs b/jRandomSkills - SRC Files/src/player/skills/LongKnife.cs
index 7132f08..b82ae1a 100644
--- a/jRandomSkills - SRC Files/src/player/skills/LongKnife.cs
+++ b/jRandomSkills - SRC Files/src/player/skills/LongKnife.cs
@@ -1,6 +1,5 @@
using CounterStrikeSharp.API;
using CounterStrikeSharp.API.Core;
-using CounterStrikeSharp.API.Modules.Entities.Constants;
using CounterStrikeSharp.API.Modules.Memory.DynamicFunctions;
using CounterStrikeSharp.API.Modules.Utils;
using CS2TraceRay.Class;
@@ -9,7 +8,6 @@ using CS2TraceRay.Struct;
using src.utils;
using System.Collections.Concurrent;
using System.Drawing;
-using System.Numerics;
using static src.jRandomSkills;
using Vector = CounterStrikeSharp.API.Modules.Utils.Vector;
@@ -24,6 +22,8 @@ namespace src.player.skills
private static readonly ConcurrentDictionary playersInAction = [];
private static readonly MemoryFunctionVoid Shoot_Secondary = new(GameData.GetSignature("Shoot_Secondary"));
+ private static int i = 0;
+
public static void LoadSkill()
{
SkillUtils.RegisterSkill(skillName, SkillsInfo.GetValue(skillName, "color"));
@@ -100,23 +100,11 @@ namespace src.player.skills
Vector eyePos = new(pawn.AbsOrigin.X, pawn.AbsOrigin.Y, pawn.AbsOrigin.Z + pawn.ViewOffset.Z);
Vector endPos = eyePos + SkillUtils.GetForwardVector(pawn.EyeAngles) * SkillsInfo.GetValue(skillName, "maxDistance");
- Ray ray = new(Vector3.Zero);
- CTraceFilter filter = new(pawn.Index, pawn.Index)
- {
- m_nObjectSetMask = 0xf,
- m_nCollisionGroup = (byte)CollisionGroup.COLLISION_GROUP_PLAYER_MOVEMENT,
- m_nInteractsWith = pawn.GetInteractsWith(),
- m_nInteractsExclude = 0,
- m_nBits = 11,
- m_bIterateEntities = true,
- m_bHitTriggers = false,
- m_nInteractsAs = 0x40000
- };
-
- filter.m_nHierarchyIds[0] = pawn.GetHierarchyId();
- filter.m_nHierarchyIds[1] = 0;
- CGameTrace trace = TraceRay.TraceHull(eyePos, endPos, filter, ray);
-
+ ulong hitboxes = 0x2;
+ ulong mask = pawn.Collision.CollisionAttribute.InteractsWith | hitboxes;
+ ulong contents = pawn.Collision.CollisionGroup;
+ CGameTrace trace = TraceRay.TraceShape(eyePos, endPos, mask, contents, player);
+
if (Config.LoadedConfig.CS2TraceRayDebug)
{
CreateLine(eyePos, endPos, Color.FromArgb(255, 255, 255, 0));
@@ -126,12 +114,17 @@ namespace src.player.skills
if (trace.DidHit())
{
var val = Activator.CreateInstance(typeof(CBaseEntity), trace.HitEntity) as CBaseEntity;
- player.PrintToChat($"Hit: {trace.DidHit()}, Entity: {(val == null ? "null" : val.DesignerName)}, Solid: {trace.AllSolid}, Contents: {(Contents)trace.Contents}");
+ player.PrintToChat($"Hit: {trace.DidHit()}, Entity: {(val == null ? "null" : val.DesignerName)}, Solid: {trace.AllSolid}, Contents: {(Contents)trace.Contents}, Hitbox: {trace.HitboxData[0].HitGroup}");
}
else
- player.PrintToChat($"Hit: {trace.DidHit()}, Entity: {trace.HitEntity}, Solid: {trace.AllSolid}, Contents: {(Contents)trace.Contents}");
+ player.PrintToChat($"Hit: {trace.DidHit()}, Object: {trace.HitEntity}, Solid: {trace.AllSolid}, Contents: {(Contents)trace.Contents}, Hitbox: {trace.HitboxData[0].HitGroup}");
}
+ CEntityInstance entityInstance = new(trace.HitEntity);
+ if (string.IsNullOrEmpty(entityInstance.DesignerName))
+ return;
+
+ CBaseEntity entity = entityInstance.As();
if (!trace.HitPlayer(out CCSPlayerController? target) || target == null)
return;
diff --git a/jRandomSkills - SRC Files/src/player/skills/LongZeus.cs b/jRandomSkills - SRC Files/src/player/skills/LongZeus.cs
index c872b97..bfc74e4 100644
--- a/jRandomSkills - SRC Files/src/player/skills/LongZeus.cs
+++ b/jRandomSkills - SRC Files/src/player/skills/LongZeus.cs
@@ -7,7 +7,6 @@ using CS2TraceRay.Enum;
using CS2TraceRay.Struct;
using src.utils;
using System.Drawing;
-using System.Numerics;
using static src.jRandomSkills;
using Vector = CounterStrikeSharp.API.Modules.Utils.Vector;
@@ -39,22 +38,10 @@ namespace src.player.skills
Vector eyePos = new(pawn.AbsOrigin.X, pawn.AbsOrigin.Y, pawn.AbsOrigin.Z + pawn.ViewOffset.Z);
Vector endPos = eyePos + SkillUtils.GetForwardVector(pawn.EyeAngles) * SkillsInfo.GetValue(skillName, "maxDistance");
- Ray ray = new(Vector3.Zero);
- CTraceFilter filter = new(pawn.Index, pawn.Index)
- {
- m_nObjectSetMask = 0xf,
- m_nCollisionGroup = (byte)CollisionGroup.COLLISION_GROUP_PLAYER_MOVEMENT,
- m_nInteractsWith = pawn.GetInteractsWith(),
- m_nInteractsExclude = 0,
- m_nBits = 11,
- m_bIterateEntities = true,
- m_bHitTriggers = false,
- m_nInteractsAs = 0x40000
- };
-
- filter.m_nHierarchyIds[0] = pawn.GetHierarchyId();
- filter.m_nHierarchyIds[1] = 0;
- CGameTrace trace = TraceRay.TraceHull(eyePos, endPos, filter, ray);
+ ulong hitboxes = 0x2;
+ ulong mask = pawn.Collision.CollisionAttribute.InteractsWith | hitboxes;
+ ulong contents = pawn.Collision.CollisionGroup;
+ CGameTrace trace = TraceRay.TraceShape(eyePos, endPos, mask, contents, player);
if (Config.LoadedConfig.CS2TraceRayDebug)
{
@@ -65,10 +52,10 @@ namespace src.player.skills
if (trace.DidHit())
{
var val = Activator.CreateInstance(typeof(CBaseEntity), trace.HitEntity) as CBaseEntity;
- player.PrintToChat($"Hit: {trace.DidHit()}, Entity: {(val == null ? "null" : val.DesignerName)}, Solid: {trace.AllSolid}, Contents: {(Contents)trace.Contents}");
+ player.PrintToChat($"Hit: {trace.DidHit()}, Entity: {(val == null ? "null" : val.DesignerName)}, Solid: {trace.AllSolid}, Contents: {(Contents)trace.Contents}, Hitbox: {trace.HitboxData[0].HitGroup}");
}
else
- player.PrintToChat($"Hit: {trace.DidHit()}, Entity: {trace.HitEntity}, Solid: {trace.AllSolid}, Contents: {(Contents)trace.Contents}");
+ player.PrintToChat($"Hit: {trace.DidHit()}, Object: {trace.HitEntity}, Solid: {trace.AllSolid}, Contents: {(Contents)trace.Contents}, Hitbox: {trace.HitboxData[0].HitGroup}");
}
if (!trace.HitPlayer(out CCSPlayerController? target) || target == null)
diff --git a/jRandomSkills - SRC Files/src/player/skills/Ninja.cs b/jRandomSkills - SRC Files/src/player/skills/Ninja.cs
index 0bdc11c..53e95a5 100644
--- a/jRandomSkills - SRC Files/src/player/skills/Ninja.cs
+++ b/jRandomSkills - SRC Files/src/player/skills/Ninja.cs
@@ -68,7 +68,7 @@ namespace src.player.skills
if (entity == null || !entity.IsValid) continue;
info.TransmitEntities.Remove(entity.Index);
- var bombIndex = HideBomb(_player);
+ var bombIndex = GetBombIndex(_player);
if (bombIndex == null) continue;
var bombEntity = Utilities.GetEntityFromIndex((int)bombIndex);
if (bombEntity == null || !bombEntity.IsValid) continue;
@@ -170,7 +170,7 @@ namespace src.player.skills
particle.AcceptInput("Start");
}
- private static uint? HideBomb(CCSPlayerController player)
+ private static uint? GetBombIndex(CCSPlayerController player)
{
var bombEntities = Utilities.FindAllEntitiesByDesignerName("weapon_c4").ToList();
if (bombEntities.Count == 0) return null;
@@ -179,14 +179,6 @@ namespace src.player.skills
if (bomb == null) return null;
if (bomb.OwnerEntity.Index != player.Index) return null;
-
- bomb.EntitySpottedState.Spotted = false;
- Utilities.SetStateChanged(bomb, "CCSPlayerPawn", "m_entitySpottedState", Schema.GetSchemaOffset("EntitySpottedState_t", "m_bSpotted"));
-
- for (int i = 0; i < bomb.EntitySpottedState.SpottedByMask.Length; i++)
- bomb.EntitySpottedState.SpottedByMask[i] = 0;
- Utilities.SetStateChanged(bomb, "CCSPlayerPawn", "m_entitySpottedState", Schema.GetSchemaOffset("EntitySpottedState_t", "m_bSpottedByMask"));
-
return bomb.Index;
}
diff --git a/jRandomSkills - SRC Files/src/player/skills/NoNades.cs b/jRandomSkills - SRC Files/src/player/skills/NoNades.cs
index b8200d9..2851990 100644
--- a/jRandomSkills - SRC Files/src/player/skills/NoNades.cs
+++ b/jRandomSkills - SRC Files/src/player/skills/NoNades.cs
@@ -1,4 +1,5 @@
-using CounterStrikeSharp.API.Core;
+using CounterStrikeSharp.API;
+using CounterStrikeSharp.API.Core;
using CounterStrikeSharp.API.Modules.Utils;
using src.utils;
using static src.jRandomSkills;
@@ -24,8 +25,8 @@ namespace src.player.skills
var playerInfo = Instance.SkillPlayer.FirstOrDefault(p => p.SteamID == player?.SteamID);
if (playerInfo?.Skill != skillName) return;
- if (weapon == "hegrenade" || weapon == "inferno")
- SkillUtils.AddHealth(player!.PlayerPawn.Value, damage);
+ if (weapon == "hegrenade" || weapon == "inferno" || weapon == "decoy" || weapon == "flashbang" || weapon == "smokegrenade" || weapon == "molotov")
+ SkillUtils.RestoreHealth(player);
}
public class SkillConfig(Skills skill = skillName, bool active = true, string color = "#a38c1a", CsTeam onlyTeam = CsTeam.None, bool disableOnFreezeTime = false, bool needsTeammates = false, string requiredPermission = "") : SkillsInfo.DefaultSkillInfo(skill, active, color, onlyTeam, disableOnFreezeTime, needsTeammates, requiredPermission)
diff --git a/jRandomSkills - SRC Files/src/player/skills/OnlyHead.cs b/jRandomSkills - SRC Files/src/player/skills/OnlyHead.cs
index b89d523..3e6f8be 100644
--- a/jRandomSkills - SRC Files/src/player/skills/OnlyHead.cs
+++ b/jRandomSkills - SRC Files/src/player/skills/OnlyHead.cs
@@ -28,20 +28,7 @@ namespace src.player.skills
HitGroup_t[] disabledHitbox = [HitGroup_t.HITGROUP_LEFTARM, HitGroup_t.HITGROUP_RIGHTARM, HitGroup_t.HITGROUP_LEFTLEG, HitGroup_t.HITGROUP_RIGHTLEG];
if (hitgroup != HitGroup_t.HITGROUP_HEAD)
- RestoreHealth(victim!, damage);
- }
-
- private static void RestoreHealth(CCSPlayerController victim, float damage)
- {
- var playerPawn = victim.PlayerPawn.Value;
- if (playerPawn == null || !playerPawn.IsValid) return;
- var newHealth = playerPawn.Health + damage;
-
- if (newHealth > 100)
- newHealth = 100;
-
- playerPawn.Health = (int)newHealth;
- Utilities.SetStateChanged(playerPawn, "CBaseEntity", "m_iHealth");
+ SkillUtils.RestoreHealth(victim);
}
public class SkillConfig(Skills skill = skillName, bool active = true, string color = "#3c47de", CsTeam onlyTeam = CsTeam.None, bool disableOnFreezeTime = false, bool needsTeammates = false, string requiredPermission = "") : SkillsInfo.DefaultSkillInfo(skill, active, color, onlyTeam, disableOnFreezeTime, needsTeammates, requiredPermission)
diff --git a/jRandomSkills - SRC Files/src/player/skills/PawelJumper.cs b/jRandomSkills - SRC Files/src/player/skills/PawelJumper.cs
index de8ef31..4ae2893 100644
--- a/jRandomSkills - SRC Files/src/player/skills/PawelJumper.cs
+++ b/jRandomSkills - SRC Files/src/player/skills/PawelJumper.cs
@@ -52,18 +52,20 @@ namespace src.player.skills
var flags = (PlayerFlags)playerPawn.Flags;
var buttons = player.Buttons;
+ bool isJumpDown = (playerPawn.MovementServices?.Buttons?.ButtonStates[0] & (ulong)PlayerButtons.Jump) != 0 || (buttons & PlayerButtons.Jump) != 0;
+ bool wasJumpDown = (LB[player.Slot] & PlayerButtons.Jump) != 0;
+
+ bool jumpPressed = (isJumpDown && !wasJumpDown)
+ || (playerPawn.MovementServices?.QueuedButtonChangeMask & (ulong)PlayerButtons.Jump) != 0;
+
var playerInfo = Instance.SkillPlayer.FirstOrDefault(p => p.SteamID == player.SteamID);
if (playerPawn == null || playerInfo == null) return;
- if ((LF[player.Slot] & PlayerFlags.FL_ONGROUND) != 0 && (flags & PlayerFlags.FL_ONGROUND) == 0 && (LB[player.Slot] & PlayerButtons.Jump) == 0 && (buttons & PlayerButtons.Jump) != 0)
- {
- //J[player.Slot] ++;
- }
- else if ((flags & PlayerFlags.FL_ONGROUND) != 0)
- {
+ bool isOnGround = (flags & PlayerFlags.FL_ONGROUND) != 0;
+
+ if (isOnGround)
J[player.Slot] = 0;
- }
- else if ((LB[player.Slot] & PlayerButtons.Jump) == 0 && (buttons & PlayerButtons.Jump) != 0 && J[player.Slot] < playerInfo.SkillChance)
+ else if (jumpPressed && J[player.Slot] < playerInfo.SkillChance + 1)
{
J[player.Slot]++;
playerPawn.AbsVelocity.Z = 300;
diff --git a/jRandomSkills - SRC Files/src/player/skills/Planter.cs b/jRandomSkills - SRC Files/src/player/skills/Planter.cs
index 0c7cbb6..06c9d16 100644
--- a/jRandomSkills - SRC Files/src/player/skills/Planter.cs
+++ b/jRandomSkills - SRC Files/src/player/skills/Planter.cs
@@ -27,6 +27,8 @@ namespace src.player.skills
var plantedBomb = Utilities.FindAllEntitiesByDesignerName("planted_c4").FirstOrDefault();
if (plantedBomb != null)
Server.NextFrame(() => plantedBomb.C4Blow = (float)Server.EngineTime + SkillsInfo.GetValue(skillName, "extraC4BlowTime"));
+
+ player!.PrintToCenterAlert(player.GetTranslation("bombplanted", SkillsInfo.GetValue(skillName, "extraC4BlowTime")));
}
public static void DisableSkill(CCSPlayerController player)
diff --git a/jRandomSkills - SRC Files/src/player/skills/Prosthesis.cs b/jRandomSkills - SRC Files/src/player/skills/Prosthesis.cs
index 20a67b5..ef23357 100644
--- a/jRandomSkills - SRC Files/src/player/skills/Prosthesis.cs
+++ b/jRandomSkills - SRC Files/src/player/skills/Prosthesis.cs
@@ -28,20 +28,7 @@ namespace src.player.skills
HitGroup_t[] disabledHitbox = [HitGroup_t.HITGROUP_LEFTARM, HitGroup_t.HITGROUP_RIGHTARM, HitGroup_t.HITGROUP_LEFTLEG, HitGroup_t.HITGROUP_RIGHTLEG];
if (disabledHitbox.Contains(hitgroup))
- RestoreHealth(victim!, damage);
- }
-
- private static void RestoreHealth(CCSPlayerController victim, float damage)
- {
- var playerPawn = victim.PlayerPawn.Value;
- if (playerPawn == null || !playerPawn.IsValid) return;
- var newHealth = playerPawn.Health + damage;
-
- if (newHealth > 100)
- newHealth = 100;
-
- playerPawn.Health = (int)newHealth;
- Utilities.SetStateChanged(playerPawn, "CBaseEntity", "m_iHealth");
+ SkillUtils.RestoreHealth(victim);
}
public class SkillConfig(Skills skill = skillName, bool active = true, string color = "#9c9c9c", CsTeam onlyTeam = CsTeam.None, bool disableOnFreezeTime = false, bool needsTeammates = false, string requiredPermission = "") : SkillsInfo.DefaultSkillInfo(skill, active, color, onlyTeam, disableOnFreezeTime, needsTeammates, requiredPermission)
diff --git a/jRandomSkills - SRC Files/src/player/skills/Pyro.cs b/jRandomSkills - SRC Files/src/player/skills/Pyro.cs
index b302106..0fc962a 100644
--- a/jRandomSkills - SRC Files/src/player/skills/Pyro.cs
+++ b/jRandomSkills - SRC Files/src/player/skills/Pyro.cs
@@ -26,7 +26,8 @@ namespace src.player.skills
var victimInfo = Instance.SkillPlayer.FirstOrDefault(p => p.SteamID == victim?.SteamID);
if (victimInfo == null || victimInfo.Skill != skillName) return ;
- RestoreHealth(victim!, damage * SkillsInfo.GetValue(skillName, "regenerationMultiplier"));
+ var pawn = victim!.PlayerPawn.Value;
+ SkillUtils.AddHealth(pawn, (int)(damage * SkillsInfo.GetValue(skillName, "regenerationMultiplier")));
}
public static void EnableSkill(CCSPlayerController player)
@@ -34,19 +35,6 @@ namespace src.player.skills
SkillUtils.TryGiveWeapon(player, player.Team == CsTeam.CounterTerrorist ? CsItem.IncendiaryGrenade : CsItem.Molotov);
}
- private static void RestoreHealth(CCSPlayerController victim, float damage)
- {
- var playerPawn = victim.PlayerPawn.Value;
- if (playerPawn == null || !playerPawn.IsValid) return;
- var newHealth = playerPawn.Health + damage;
-
- if (newHealth > 100)
- newHealth = 100;
-
- playerPawn.Health = (int)newHealth;
- Utilities.SetStateChanged(playerPawn, "CBaseEntity", "m_iHealth");
- }
-
public class SkillConfig(Skills skill = skillName, bool active = true, string color = "#3c47de", CsTeam onlyTeam = CsTeam.None, bool disableOnFreezeTime = false, bool needsTeammates = false, string requiredPermission = "", float regenerationMultiplier = 1.5f) : SkillsInfo.DefaultSkillInfo(skill, active, color, onlyTeam, disableOnFreezeTime, needsTeammates, requiredPermission)
{
public float RegenerationMultiplier { get; set; } = regenerationMultiplier;
diff --git a/jRandomSkills - SRC Files/src/player/skills/RCMelon.cs b/jRandomSkills - SRC Files/src/player/skills/RCMelon.cs
index 98e17b2..e11a942 100644
--- a/jRandomSkills - SRC Files/src/player/skills/RCMelon.cs
+++ b/jRandomSkills - SRC Files/src/player/skills/RCMelon.cs
@@ -1,14 +1,11 @@
using CounterStrikeSharp.API;
using CounterStrikeSharp.API.Core;
-using CounterStrikeSharp.API.Modules.Entities.Constants;
using CounterStrikeSharp.API.Modules.Memory.DynamicFunctions;
-using CounterStrikeSharp.API.Modules.Timers;
using CounterStrikeSharp.API.Modules.Utils;
using CS2TraceRay.Class;
using CS2TraceRay.Struct;
using src.utils;
using System.Collections.Concurrent;
-using System.Numerics;
using Vector = CounterStrikeSharp.API.Modules.Utils.Vector;
using static src.jRandomSkills;
@@ -170,22 +167,9 @@ namespace src.player.skills
Vector eyePos = new(playerPawn.AbsOrigin.X, playerPawn.AbsOrigin.Y, playerPawn.AbsOrigin.Z + 25);
endPos.Z += 25;
- Ray ray = new(Vector3.Zero);
- CTraceFilter filter = new(playerPawn.Index, playerPawn.Index)
- {
- m_nObjectSetMask = 0xf,
- m_nCollisionGroup = (byte)CollisionGroup.COLLISION_GROUP_PLAYER_MOVEMENT,
- m_nInteractsWith = playerPawn.GetInteractsWith(),
- m_nInteractsExclude = 0,
- m_nBits = 11,
- m_bIterateEntities = true,
- m_bHitTriggers = false,
- m_nInteractsAs = 0x40000
- };
-
- filter.m_nHierarchyIds[0] = playerPawn.GetHierarchyId();
- filter.m_nHierarchyIds[1] = 0;
- CGameTrace trace = TraceRay.TraceHull(eyePos, endPos, filter, ray);
+ ulong mask = playerPawn.Collision.CollisionAttribute.InteractsWith;
+ ulong contents = playerPawn.Collision.CollisionGroup;
+ CGameTrace trace = TraceRay.TraceShape(eyePos, endPos, mask, contents, player);
return !trace.DidHit();
}
@@ -225,9 +209,7 @@ namespace src.player.skills
if (playersInfo.TryGetValue(victim, out var playerSkill) && playerSkill.CloneProp != null)
{
KillClone(playerSkill);
- var victimPawn = victim.PlayerPawn.Value;
- if (victimPawn == null) return;
- SkillUtils.AddHealth(victimPawn, @event.DmgHealth);
+ SkillUtils.RestoreHealth(victim);
}
}
diff --git a/jRandomSkills - SRC Files/src/player/skills/ReactiveArmor.cs b/jRandomSkills - SRC Files/src/player/skills/ReactiveArmor.cs
index 043a514..a9a06f0 100644
--- a/jRandomSkills - SRC Files/src/player/skills/ReactiveArmor.cs
+++ b/jRandomSkills - SRC Files/src/player/skills/ReactiveArmor.cs
@@ -47,7 +47,7 @@ namespace src.player.skills
if (!victim.IsValid || !victim.PawnIsAlive || !skillInfo.CanUse) return;
skillInfo.CanUse = false;
skillInfo.Cooldown = DateTime.Now;
- RestoreHealth(victim, damage);
+ SkillUtils.RestoreHealth(victim);
}
}
@@ -88,19 +88,6 @@ namespace src.player.skills
playerInfo.PrintHTML = $"{player.GetTranslation("hud_info", $"{cooldown}")}";
}
- private static void RestoreHealth(CCSPlayerController victim, float damage)
- {
- var playerPawn = victim.PlayerPawn.Value;
- if (playerPawn == null || !playerPawn.IsValid) return;
- var newHealth = playerPawn.Health + damage;
-
- if (newHealth > 100)
- newHealth = 100;
-
- playerPawn.Health = (int)newHealth;
- Utilities.SetStateChanged(playerPawn, "CBaseEntity", "m_iHealth");
- }
-
public class PlayerSkillInfo
{
public ulong SteamID { get; set; }
diff --git a/jRandomSkills - SRC Files/src/player/skills/RichBoy.cs b/jRandomSkills - SRC Files/src/player/skills/RichBoy.cs
index 2b120c1..268fd2d 100644
--- a/jRandomSkills - SRC Files/src/player/skills/RichBoy.cs
+++ b/jRandomSkills - SRC Files/src/player/skills/RichBoy.cs
@@ -20,6 +20,12 @@ namespace src.player.skills
var playerInfo = Instance.SkillPlayer.FirstOrDefault(p => p.SteamID == player.SteamID);
if (playerInfo == null) return;
int moneyBonus = Instance.Random.Next(SkillsInfo.GetValue(skillName, "minMoney"), SkillsInfo.GetValue(skillName, "maxMoney"));
+
+ var moneyServices = player.InGameMoneyServices;
+ if (moneyServices == null) return;
+
+ moneyBonus = Math.Min(moneyBonus, 16000 - moneyServices.Account);
+
playerInfo.SkillChance = moneyBonus;
AddMoney(player, moneyBonus);
}
@@ -28,16 +34,22 @@ namespace src.player.skills
{
var playerInfo = Instance.SkillPlayer.FirstOrDefault(p => p.SteamID == player.SteamID);
if (playerInfo == null) return;
- AddMoney(player, -(int)(playerInfo.SkillChance ?? 0));
+
+ var moneyServices = player.InGameMoneyServices;
+ if (moneyServices == null) return;
+
+ player.PrintToChat(moneyServices.CashSpentThisRound.ToString());
+ int money = Math.Abs((int)playerInfo.SkillChance! - moneyServices.CashSpentThisRound);
+ AddMoney(player, -money, 3000);
}
- private static void AddMoney(CCSPlayerController player, int money)
+ private static void AddMoney(CCSPlayerController player, int money, int minimum = 0)
{
if (player == null || !player.IsValid) return;
var moneyServices = player.InGameMoneyServices;
if (moneyServices == null) return;
- moneyServices.Account = Math.Min(Math.Max(moneyServices.Account + money, 0), 16000);
+ moneyServices.Account = Math.Clamp(moneyServices.Account + money, minimum, 16000);
Utilities.SetStateChanged(player, "CCSPlayerController", "m_pInGameMoneyServices");
}
diff --git a/jRandomSkills - SRC Files/src/player/skills/Shade.cs b/jRandomSkills - SRC Files/src/player/skills/Shade.cs
index 0536f3e..e2c3651 100644
--- a/jRandomSkills - SRC Files/src/player/skills/Shade.cs
+++ b/jRandomSkills - SRC Files/src/player/skills/Shade.cs
@@ -1,10 +1,8 @@
using CounterStrikeSharp.API;
using CounterStrikeSharp.API.Core;
-using CounterStrikeSharp.API.Modules.Entities.Constants;
using CounterStrikeSharp.API.Modules.Utils;
using CS2TraceRay.Class;
using CS2TraceRay.Struct;
-using System.Numerics;
using static src.jRandomSkills;
using Vector = CounterStrikeSharp.API.Modules.Utils.Vector;
using System.Collections.Concurrent;
@@ -69,29 +67,18 @@ namespace src.player.skills
{
var playerInfo = Instance.SkillPlayer.FirstOrDefault(s => s.SteamID == player?.SteamID);
if (playerInfo == null) return;
- playerInfo.PrintHTML = $"{player.GetTranslation("shade_nospace")}";
+ playerInfo.PrintHTML = $"{player.GetTranslation("shade_nospace")}";
}
private unsafe static bool CheckTeleport(CCSPlayerController player, Vector startPos, Vector endPos)
{
var pawn = player.PlayerPawn.Value;
if (pawn == null || !pawn.IsValid) return false;
- Ray ray = new(new Vector3(-16, -16, -0), new Vector3(16, 16, 72));
- CTraceFilter filter = new(pawn.Index, pawn.Index)
- {
- m_nObjectSetMask = 0xf,
- m_nCollisionGroup = (byte)CollisionGroup.COLLISION_GROUP_PLAYER_MOVEMENT,
- m_nInteractsWith = pawn.GetInteractsWith(),
- m_nInteractsExclude = 0,
- m_nBits = 11,
- m_bIterateEntities = true,
- m_bHitTriggers = false,
- m_nInteractsAs = 0x40000
- };
- filter.m_nHierarchyIds[0] = pawn.GetHierarchyId();
- filter.m_nHierarchyIds[1] = 0;
- CGameTrace trace = TraceRay.TraceHull(startPos, endPos, filter, ray);
+ ulong mask = pawn.Collision.CollisionAttribute.InteractsWith;
+ ulong contents = pawn.Collision.CollisionGroup;
+ CGameTrace trace = TraceRay.TraceShape(startPos, endPos, mask, contents, player);
+
return !trace.HitWorld(out _);
}
diff --git a/jRandomSkills - SRC Files/src/player/skills/ShortBomb.cs b/jRandomSkills - SRC Files/src/player/skills/ShortBomb.cs
index 3f239de..32850e0 100644
--- a/jRandomSkills - SRC Files/src/player/skills/ShortBomb.cs
+++ b/jRandomSkills - SRC Files/src/player/skills/ShortBomb.cs
@@ -26,6 +26,8 @@ namespace src.player.skills
var plantedBomb = Utilities.FindAllEntitiesByDesignerName("planted_c4").FirstOrDefault();
if (plantedBomb != null)
Server.NextFrame(() => plantedBomb.C4Blow = (float)Server.EngineTime + SkillsInfo.GetValue(skillName, "detonationTime"));
+
+ player!.PrintToCenterAlert(player.GetTranslation("bombplanted", SkillsInfo.GetValue(skillName, "detonationTime")));
}
public class SkillConfig(Skills skill = skillName, bool active = true, string color = "#f5b74c", CsTeam onlyTeam = CsTeam.Terrorist, bool disableOnFreezeTime = false, bool needsTeammates = false, string requiredPermission = "", int detonationTime = 20) : SkillsInfo.DefaultSkillInfo(skill, active, color, onlyTeam, disableOnFreezeTime, needsTeammates, requiredPermission)
diff --git a/jRandomSkills - SRC Files/src/player/skills/SniperElite.cs b/jRandomSkills - SRC Files/src/player/skills/SniperElite.cs
index 0985ad0..c31aeb4 100644
--- a/jRandomSkills - SRC Files/src/player/skills/SniperElite.cs
+++ b/jRandomSkills - SRC Files/src/player/skills/SniperElite.cs
@@ -1,19 +1,23 @@
using CounterStrikeSharp.API;
using CounterStrikeSharp.API.Core;
+using CounterStrikeSharp.API.Modules.Memory;
using CounterStrikeSharp.API.Modules.Utils;
-using static src.jRandomSkills;
-using System.Collections.Concurrent;
using src.utils;
+using System.Collections.Concurrent;
+using System.Drawing;
+using static src.jRandomSkills;
namespace src.player.skills
{
public class SniperElite : ISkill
{
private const Skills skillName = Skills.SniperElite;
- private static readonly ConcurrentDictionary> playerAWPs = [];
- private static readonly ConcurrentDictionary sniperElites = [];
+ private static readonly ConcurrentDictionary> playerAWPIndexes = [];
+ private static readonly ConcurrentDictionary savedWeapons = [];
+ private static readonly ConcurrentDictionary isProcessing = [];
private static readonly object setLock = new();
+ private const string weapon_awp = "weapon_awp";
private static readonly string[] rifles = [ "weapon_mp9", "weapon_mac10", "weapon_bizon", "weapon_mp7", "weapon_ump45", "weapon_p90",
"weapon_mp5sd", "weapon_famas", "weapon_galilar", "weapon_m4a1", "weapon_m4a1_silencer", "weapon_ak47",
"weapon_aug", "weapon_sg553", "weapon_ssg08", "weapon_awp", "weapon_scar20", "weapon_g3sg1",
@@ -29,8 +33,9 @@ namespace src.player.skills
lock (setLock)
{
- sniperElites.Clear();
- playerAWPs.Clear();
+ savedWeapons.Clear();
+ playerAWPIndexes.Clear();
+ isProcessing.Clear();
}
}
@@ -38,6 +43,7 @@ namespace src.player.skills
{
var player = @event.Userid;
if (player == null || !player.IsValid) return;
+
var playerInfo = Instance.SkillPlayer.FirstOrDefault(p => p.SteamID == player.SteamID);
if (playerInfo?.Skill == skillName)
DisableSkill(player);
@@ -47,118 +53,169 @@ namespace src.player.skills
{
var player = @event.Userid;
if (player == null || !player.IsValid) return;
+
var playerInfo = Instance.SkillPlayer.FirstOrDefault(p => p.SteamID == player.SteamID);
if (playerInfo?.Skill == skillName)
+ {
+ if (rifles.Contains(@event.Item) && @event.Item != weapon_awp)
+ savedWeapons.AddOrUpdate(player.SteamID, string.Empty, (_, _) => string.Empty);
DeleteDroppedAWP(player);
+ }
}
public static void EnableSkill(CCSPlayerController player)
{
- sniperElites.TryAdd(player.SteamID, "weapon_awp");
+ savedWeapons.TryAdd(player.SteamID, string.Empty);
}
public static void DisableSkill(CCSPlayerController player)
{
- sniperElites.TryRemove(player.SteamID, out _);
- playerAWPs.TryRemove(player.SteamID, out _);
+ player.ExecuteClientCommand("slot3");
+
+ if (playerAWPIndexes.TryGetValue(player.SteamID, out var AWPs))
+ foreach (var index in AWPs.ToList())
+ {
+ var ent = Utilities.GetEntityFromIndex((int)index);
+ if (ent != null && ent.IsValid)
+ ent.AcceptInput("Kill");
+ }
+
+ if (savedWeapons.TryGetValue(player.SteamID, out string? savedWeapon) && !string.IsNullOrWhiteSpace(savedWeapon))
+ Server.NextFrame(() =>
+ player.PlayerPawn.Value?.ItemServices?.As().GiveNamedItem(savedWeapon));
+
+ Server.NextFrame(() => player.ExecuteClientCommand("lastinv"));
+
+ savedWeapons.TryRemove(player.SteamID, out _);
+ playerAWPIndexes.TryRemove(player.SteamID, out _);
+ isProcessing.TryRemove(player.SteamID, out _);
}
public static void UseSkill(CCSPlayerController player)
{
- var playerPawn = player.PlayerPawn.Value;
- if (playerPawn?.CBodyComponent == null) return;
-
- if (sniperElites.ContainsKey(player.SteamID))
+ if (player.PlayerPawn.Value == null || !player.PlayerPawn.Value.IsValid || isProcessing.ContainsKey(player.SteamID)) return;
+ if (savedWeapons.ContainsKey(player.SteamID))
RemoveAndGiveWeapon(player);
}
private static void RemoveAndGiveWeapon(CCSPlayerController player)
{
- string holdedWeapon = "weapon_awp";
- if (sniperElites.TryGetValue(player.SteamID, out string? weapon))
- if (!string.IsNullOrEmpty(weapon))
- holdedWeapon = weapon;
-
+ ulong steamID = player.SteamID;
try
{
+ if (!isProcessing.TryAdd(steamID, 0)) return;
+
CBasePlayerWeapon? activeRifle = GetActiveRifle(player);
+ string weaponToGive = weapon_awp;
+
if (activeRifle != null && activeRifle.IsValid)
- RemoveWeapon(player, activeRifle.DesignerName);
+ {
+ string currentWeaponName = SkillUtils.GetDesignerName(activeRifle);
+ bool isScriptAWP = false;
- sniperElites.TryAdd(player.SteamID, (activeRifle != null && activeRifle.IsValid) ? SkillUtils.GetDesignerName(activeRifle) : "weapon_awp");
- Server.NextFrame(() => {
- string weapon = holdedWeapon ?? "weapon_awp";
- if (player == null || !player.IsValid || player.PlayerPawn.Value == null || !player.PlayerPawn.Value.IsValid) return;
- var createdWeapon = player.PlayerPawn.Value?.ItemServices?.As().GiveNamedItem(weapon);
+ lock (setLock)
+ isScriptAWP = playerAWPIndexes.TryGetValue(steamID, out var indexes) && indexes.Contains(activeRifle.Index);
- if (createdWeapon != null && createdWeapon.IsValid && createdWeapon.DesignerName == "weapon_awp")
+ if (isScriptAWP)
{
- lock (setLock)
+ if (savedWeapons.TryGetValue(steamID, out var savedWeapon) && !string.IsNullOrEmpty(savedWeapon))
{
- if (playerAWPs.TryGetValue(player.SteamID, out var list))
- list.Add(createdWeapon);
- else
- playerAWPs.TryAdd(player.SteamID, [createdWeapon]);
+ weaponToGive = savedWeapon;
+ savedWeapons.AddOrUpdate(steamID, string.Empty, (_, _) => string.Empty);
+ }
+ else
+ {
+ isProcessing.TryRemove(steamID, out _);
+ return;
}
}
+ else
+ {
+ savedWeapons.AddOrUpdate(steamID, currentWeaponName, (_, _) => currentWeaponName);
+ weaponToGive = weapon_awp + "_script";
+ }
+
+ activeRifle.AcceptInput("Kill");
+ }
+ else
+ {
+ if (savedWeapons.TryGetValue(steamID, out string? savedWeapon) && !string.IsNullOrEmpty(savedWeapon))
+ {
+ weaponToGive = savedWeapon;
+ savedWeapons.AddOrUpdate(steamID, string.Empty, (_, _) => string.Empty);
+ }
+ else
+ weaponToGive = weapon_awp + "_script";
+ }
+
+ Server.NextFrame(() =>
+ {
+ if (player != null && player.IsValid && player.PlayerPawn.Value != null && player.PlayerPawn.Value.IsValid)
+ {
+ var createdWeapon = player.PlayerPawn.Value?.ItemServices?.As().GiveNamedItem(weaponToGive.Replace("_script", ""));
+
+ if (createdWeapon != null && createdWeapon.IsValid && weaponToGive.EndsWith("_script"))
+ {
+ CBasePlayerWeapon weapon = createdWeapon.As();
+ if (weapon?.AttributeManager.Item.NetworkedDynamicAttributes != null)
+ weapon.AttributeManager.Item.CustomName = player.GetTranslation("sniperelite_customname");
+
+ lock (setLock)
+ {
+ if (!playerAWPIndexes.ContainsKey(steamID))
+ playerAWPIndexes.TryAdd(steamID, []);
+
+ if (playerAWPIndexes.TryGetValue(steamID, out var list))
+ list.Add(createdWeapon.Index);
+ }
+ }
+ }
+
DeleteDroppedAWP(player);
+ isProcessing.TryRemove(steamID, out _);
});
}
- catch { }
+ catch {
+ isProcessing.TryRemove(steamID, out _);
+ }
}
- private static void DeleteDroppedAWP(CCSPlayerController player)
+ private static void DeleteDroppedAWP(CCSPlayerController? player)
{
- var pawn = player.PlayerPawn.Value;
- if (pawn == null || !pawn.IsValid) return;
- var weaponServices = pawn.WeaponServices;
- if (weaponServices == null) return;
+ if (player == null || !player.IsValid) return;
- ConcurrentBag playerWeapons = [.. weaponServices.MyWeapons.Where(w => w != null && w.IsValid && w.Value != null && w.Value.IsValid)
- .Select(w => w.Value!.Index)];
+ var pawn = player.PlayerPawn.Value;
+ if (pawn == null || !pawn.IsValid || pawn.WeaponServices == null) return;
+
+ var myWeapons = pawn.WeaponServices.MyWeapons;
+ ConcurrentBag myWeaponsIndexes = [.. myWeapons
+ .Where(w => w != null && w.IsValid && w.Value != null && w.Value.IsValid)
+ .Select(w => w.Value!.Index)];
lock (setLock)
{
- if (playerAWPs.TryGetValue(player.SteamID, out var AWPs))
- foreach (var awp in AWPs.ToList())
- {
- if (awp != null && awp.IsValid)
+ if (playerAWPIndexes.TryGetValue(player.SteamID, out var AWPs))
+ foreach (var index in AWPs.ToList())
+ if (!myWeaponsIndexes.Contains(index))
{
- if (!playerWeapons.Contains(awp.Index))
- {
- awp.AcceptInput("Kill");
- AWPs.Remove(awp);
- }
+ var ent = Utilities.GetEntityFromIndex((int)index);
+ if (ent != null && ent.IsValid)
+ ent.AcceptInput("Kill");
+
+ AWPs.Remove(index);
}
- else
- AWPs.Remove(awp!);
- }
}
}
private static CBasePlayerWeapon? GetActiveRifle(CCSPlayerController player)
{
- CBasePlayerWeapon? rifle = null;
var pawn = player.PlayerPawn.Value;
- if (pawn == null || !pawn.IsValid) return rifle;
- var weaponServices = pawn.WeaponServices;
- if (weaponServices == null) return rifle;
-
- foreach (var weapon in weaponServices.MyWeapons)
- if (weapon != null && weapon.IsValid && weapon.Value != null && weapon.Value.IsValid)
- if (rifles.Contains(weapon.Value.DesignerName))
- rifle = weapon.Value;
- return rifle;
- }
-
- private static void RemoveWeapon(CCSPlayerController player, string designerName)
- {
- var pawn = player.PlayerPawn.Value;
- if (pawn == null || !pawn.IsValid || pawn.WeaponServices == null) return;
-
- foreach (var item in pawn.WeaponServices.MyWeapons)
- if (item != null && item.IsValid && item.Value != null && item.Value.IsValid && item.Value.DesignerName == designerName)
- item.Value.AcceptInput("Kill");
+ if (pawn == null || !pawn.IsValid || pawn.WeaponServices == null) return null;
+
+ var activeWeapon = pawn.WeaponServices?.ActiveWeapon.Value;
+ if (activeWeapon != null && activeWeapon.IsValid && rifles.Contains(activeWeapon.DesignerName))
+ return activeWeapon;
+ return null;
}
public class SkillConfig(Skills skill = skillName, bool active = true, string color = "#e0873a", CsTeam onlyTeam = CsTeam.None, bool disableOnFreezeTime = false, bool needsTeammates = false, string requiredPermission = "") : SkillsInfo.DefaultSkillInfo(skill, active, color, onlyTeam, disableOnFreezeTime, needsTeammates, requiredPermission)
diff --git a/jRandomSkills - SRC Files/src/player/skills/ToxicSmoke.cs b/jRandomSkills - SRC Files/src/player/skills/ToxicSmoke.cs
index 23a9df1..e072ed3 100644
--- a/jRandomSkills - SRC Files/src/player/skills/ToxicSmoke.cs
+++ b/jRandomSkills - SRC Files/src/player/skills/ToxicSmoke.cs
@@ -5,6 +5,7 @@ using CounterStrikeSharp.API.Modules.Memory;
using CounterStrikeSharp.API.Modules.Utils;
using src.utils;
using System.Collections.Concurrent;
+using System.Runtime.InteropServices;
using static src.jRandomSkills;
namespace src.player.skills
@@ -19,7 +20,8 @@ namespace src.player.skills
public static void LoadSkill()
{
- SkillUtils.RegisterSkill(skillName, SkillsInfo.GetValue(skillName, "color"));
+ if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux))
+ SkillUtils.RegisterSkill(skillName, SkillsInfo.GetValue(skillName, "color"));
}
public static void NewRound()
diff --git a/jRandomSkills - SRC Files/src/player/skills/Watchmaker.cs b/jRandomSkills - SRC Files/src/player/skills/Watchmaker.cs
index 40771ac..897a362 100644
--- a/jRandomSkills - SRC Files/src/player/skills/Watchmaker.cs
+++ b/jRandomSkills - SRC Files/src/player/skills/Watchmaker.cs
@@ -21,11 +21,6 @@ namespace src.player.skills
bombPlanted = false;
}
- public static void DisableSkill(CCSPlayerController player)
- {
- SkillUtils.ResetPrintHTML(player);
- }
-
public static void BombPlanted(EventBombPlanted _)
{
bombPlanted = true;
@@ -56,30 +51,10 @@ namespace src.player.skills
else
Localization.PrintTranslationToChatAll($" {ChatColors.LightBlue}{{0}}", ["watchmaker_ct"], [roundTime]);
player.EmitSound(SkillsInfo.GetValue(skillName, "SoundEvent"));
- }
- public static void OnTick()
- {
- if (bombPlanted) return;
- if (SkillUtils.IsFreezeTime()) return;
- foreach (var player in Utilities.GetPlayers())
- {
- var playerInfo = Instance.SkillPlayer.FirstOrDefault(p => p.SteamID == player.SteamID);
- if (playerInfo?.Skill == skillName)
- UpdateHUD(player);
- }
- }
-
- private static void UpdateHUD(CCSPlayerController player)
- {
- var skillData = SkillData.Skills.FirstOrDefault(s => s.Skill == skillName);
- if (skillData == null || Instance?.GameRules == null || Instance?.GameRules?.RoundTime == null || Instance.GameRules?.RoundStartTime == null) return;
-
- int seconds = 1 + (int)(Instance.GameRules.RoundTime - (Server.CurrentTime - Instance.GameRules.RoundStartTime));
-
- var playerInfo = Instance.SkillPlayer.FirstOrDefault(s => s.SteamID == player?.SteamID);
- if (playerInfo == null) return;
- playerInfo.PrintHTML = SkillUtils.SecondsToTimer(seconds);
+ var proxy = Utilities.FindAllEntitiesByDesignerName("cs_gamerules").FirstOrDefault();
+ if (proxy == null) return;
+ Utilities.SetStateChanged(proxy, "CCSGameRulesProxy", "m_pGameRules");
}
public class SkillConfig(Skills skill = skillName, bool active = true, string color = "#ff462e", CsTeam onlyTeam = CsTeam.None, bool disableOnFreezeTime = false, bool needsTeammates = false, string requiredPermission = "", int changeRoundTime = 7, string soundEvent = "UIPanorama.sidemenu_select") : SkillsInfo.DefaultSkillInfo(skill, active, color, onlyTeam, disableOnFreezeTime, needsTeammates, requiredPermission)
diff --git a/jRandomSkills - SRC Files/src/utils/Config.cs b/jRandomSkills - SRC Files/src/utils/Config.cs
index 105dbda..fef56f7 100644
--- a/jRandomSkills - SRC Files/src/utils/Config.cs
+++ b/jRandomSkills - SRC Files/src/utils/Config.cs
@@ -98,7 +98,7 @@ namespace src.utils
KillerSkillChatInfo = true;
TeamMateSkillChatInfo = true;
SummaryAfterTheRound = true;
- DebugMode = true;
+ DebugMode = false;
AlternativeSkillButton = null;
SkillTimeBeforeStart = 7;
SkillHudDuration = 999;
@@ -107,7 +107,7 @@ namespace src.utils
FlashingHtmlHudFix = true;
CS2TraceRayDebug = false;
DisableSpectateHUD = false;
- DisableHUDOnDeathPermission = "@jRandmosSkills/death";
+ DisableHUDOnDeathPermission = "@jRandomSkills/death";
DisableSkillsOnRoundEnd = false;
LanguageSystem = new LanguageSystem
@@ -116,11 +116,12 @@ namespace src.utils
DisableGeoLite = false,
LanguageInfos =
[
- new LanguageInfo("CN, TW, HK, MO, SG", "pt-br"),
- new LanguageInfo("PT, BR, AO, CV, GW, MZ, ST, TL", "zh"),
+ new LanguageInfo("ZH, CN, TW, HK, MO, SG", "zh"),
+ new LanguageInfo("PT-BR, PT, BR, AO, CV, GW, MZ, ST, TL", "pt-br"),
new LanguageInfo("FR, MC, HT", "fr"),
+ new LanguageInfo("DE, AT, CH, LI, LU, BE", "de"),
new LanguageInfo("PL", "pl"),
- new LanguageInfo("GB, US", "en")
+ new LanguageInfo("EN, GB, US", "en")
]
};
@@ -158,25 +159,25 @@ namespace src.utils
NormalCommands = new NormalCommands
{
- SetSkillCommand = new NormalCommand("ustawskill, ustaw_skill, setskill, set_skill, definirhabilidade, configurarhabilidade, 设置技能, 配置技能", "@jRandmosSkills/admin"),
- SkillsListCommand = new NormalCommand("supermoc, skille, listamocy, supermoce, skills, listaHabilidades, habilidades, 技能列表, 超能力列表", "@jRandmosSkills/admin"),
- UseSkillCommand = new NormalCommand("t, useSkill, usarHabilidade, 技能使用, 使用技能", "@jRandmosSkills/admin"),
- HealCommand = new NormalCommand("heal, ulecz, curar, tratar, 治疗, 治愈", "@jRandmosSkills/admin"),
- ConsoleCommand = new NormalCommand("console, sv, 控制台, 服务器", "@jRandmosSkills/owner"),
+ SetSkillCommand = new NormalCommand("ustawskill, ustaw_skill, setskill, set_skill, definirhabilidade, configurarhabilidade, 设置技能, 配置技能", "@jRandomSkills/admin"),
+ SkillsListCommand = new NormalCommand("supermoc, skille, listamocy, supermoce, skills, listaHabilidades, habilidades, 技能列表, 超能力列表", "@jRandomSkills/admin"),
+ UseSkillCommand = new NormalCommand("t, useSkill, usarHabilidade, 技能使用, 使用技能", "@jRandomSkills/admin"),
+ HealCommand = new NormalCommand("heal, ulecz, curar, tratar, 治疗, 治愈", "@jRandomSkills/admin"),
+ ConsoleCommand = new NormalCommand("console, sv, 控制台, 服务器", "@jRandomSkills/owner"),
HudCommand = new NormalCommand("hud, hood", ""),
- SetStaticSkillCommand = new NormalCommand("ustawstatycznyskill, ustaw_statyczny_skill, setstaticskill, set_static_skill", "@jRandmosSkills/admin"),
+ SetStaticSkillCommand = new NormalCommand("ustawstatycznyskill, ustaw_statyczny_skill, setstaticskill, set_static_skill", "@jRandomSkills/admin"),
ChangeLanguageCommand = new NormalCommand("lang, language, changelang, change_lang, jezyk, język", ""),
- ReloadCommand = new NormalCommand("reload, refresh", "@jRandmosSkills/admin"),
+ ReloadCommand = new NormalCommand("reload, refresh", "@jRandomSkills/admin"),
};
VotingCommands = new VotingCommands
{
- StartGameCommand = new StartGameCommand(true, "start, go, começar, iniciar, 开始, 启动", "@jRandmosSkills/admin", "mp_freezetime 15; mp_forcecamera 0; mp_overtime_enable 1; sv_cheats 0", "mp_freezetime 0; mp_forcecamera 0; mp_overtime_enable 1; sv_cheats 1", 15, 60, 15, 500, 2),
- ChangeMapCommand = new VotingCommand(true, "map, mapa, changemap, zmienmape, zmienmape, mudarMapa, trocarMapa, 更换地图, 更改地图", "@jRandmosSkills/admin", 25, 90, 15, 500, 2),
- SwapCommand = new VotingCommand(true, "swap, zmiana, trocar, 交换, 切换", "@jRandmosSkills/admin", 15, 90, 15, 20, 2),
- ShuffleCommand = new VotingCommand(true, "shuffle, embaralhar, 随机排序, 洗牌", "@jRandmosSkills/admin", 15, 90, 15, 20, 2),
- PauseCommand = new VotingCommand(true, "pause, unpause, pausar, despausar, 暂停, 恢复", "@jRandmosSkills/admin", 15, 60, 15, 2, 2),
- SetScoreCommand = new VotingCommand(true, "setscore, wynik, definirPontuacao, configurarPontos, 设置分数, 调整分数", "@jRandmosSkills/owner", 15, 90, 15, 90, 2),
+ StartGameCommand = new StartGameCommand(true, "start, go, começar, iniciar, 开始, 启动", "@jRandomSkills/admin", "mp_freezetime 15; mp_forcecamera 0; mp_overtime_enable 1; sv_cheats 0", "mp_freezetime 0; mp_forcecamera 0; mp_overtime_enable 1; sv_cheats 1", 15, 60, 15, 500, 2),
+ ChangeMapCommand = new VotingCommand(true, "map, mapa, changemap, zmienmape, zmienmape, mudarMapa, trocarMapa, 更换地图, 更改地图", "@jRandomSkills/admin", 25, 90, 15, 500, 2),
+ SwapCommand = new VotingCommand(true, "swap, zmiana, trocar, 交换, 切换", "@jRandomSkills/admin", 15, 90, 15, 20, 2),
+ ShuffleCommand = new VotingCommand(true, "shuffle, embaralhar, 随机排序, 洗牌", "@jRandomSkills/admin", 15, 90, 15, 20, 2),
+ PauseCommand = new VotingCommand(true, "pause, unpause, pausar, despausar, 暂停, 恢复", "@jRandomSkills/admin", 15, 60, 15, 2, 2),
+ SetScoreCommand = new VotingCommand(true, "setscore, wynik, definirPontuacao, configurarPontos, 设置分数, 调整分数", "@jRandomSkills/owner", 15, 90, 15, 90, 2),
};
}
}
diff --git a/jRandomSkills - SRC Files/src/utils/SkillUtils.cs b/jRandomSkills - SRC Files/src/utils/SkillUtils.cs
index da32e36..196e07b 100644
--- a/jRandomSkills - SRC Files/src/utils/SkillUtils.cs
+++ b/jRandomSkills - SRC Files/src/utils/SkillUtils.cs
@@ -9,6 +9,7 @@ using CounterStrikeSharp.API.Modules.Utils;
using src.player;
using src.player.skills;
using System.Collections.Concurrent;
+using System.Globalization;
using System.Runtime.InteropServices;
using WASDMenuAPI.Classes;
using WASDSharedAPI;
@@ -110,14 +111,23 @@ namespace src.utils
if (scale <= 0 || skeleton == null) return;
skeleton.Scale = scale;
- playerPawn.AcceptInput("SetScale", null, null, scale.ToString());
- Server.NextFrame(() => Utilities.SetStateChanged(playerPawn, "CBaseEntity", "m_CBodyComponent"));
+ playerPawn.AcceptInput("SetScale", null, null, scale.ToString(CultureInfo.InvariantCulture));
+ Server.NextWorldUpdate(() => Utilities.SetStateChanged(player.PlayerPawn.Value!, "CBaseEntity", "m_CBodyComponent"));
}
public static Vector? GetSpawnPointVector(CCSPlayerController player, bool enemySpawn = false)
{
- var spawns = Utilities.FindAllEntitiesByDesignerName(player.Team == CsTeam.Terrorist && !enemySpawn
- ? "info_player_terrorist" : "info_player_counterterrorist").ToList();
+ if (player == null || player.Team is CsTeam.None or CsTeam.Spectator) return null;
+
+ CsTeam targetTeam = enemySpawn
+ ? (player.Team == CsTeam.CounterTerrorist ? CsTeam.Terrorist : CsTeam.CounterTerrorist)
+ : player.Team;
+
+ string spawnPointName = targetTeam == CsTeam.CounterTerrorist
+ ? "info_player_counterterrorist"
+ : "info_player_terrorist";
+
+ var spawns = Utilities.FindAllEntitiesByDesignerName(spawnPointName).ToList();
if (spawns.Count != 0)
{
var randomSpawn = spawns[jRandomSkills.Instance.Random.Next(spawns.Count)];
@@ -208,6 +218,19 @@ namespace src.utils
Utilities.SetStateChanged(pawn, "CBaseEntity", "m_iMaxHealth");
}
+ public static void RestoreHealth(CCSPlayerController? player)
+ {
+ if (player == null || !player.IsValid || player.PlayerPawn == null)
+ return;
+
+ CBasePlayerPawn? pawn = player.PlayerPawn.Value;
+ if (pawn == null || !pawn.IsValid || pawn.LifeState != (byte)LifeState_t.LIFE_ALIVE)
+ return;
+
+ pawn.Health = (int)player.PawnHealth;
+ Utilities.SetStateChanged(pawn, "CBaseEntity", "m_iHealth");
+ }
+
public static string GetDesignerName(CBasePlayerWeapon? weapon)
{
if (weapon == null || !weapon.IsValid) return string.Empty;
diff --git a/jRandomSkills - Server Files/plugins/!jRandomSkills/!jRandomSkills.dll b/jRandomSkills - Server Files/plugins/!jRandomSkills/!jRandomSkills.dll
deleted file mode 100644
index 09f8333..0000000
Binary files a/jRandomSkills - Server Files/plugins/!jRandomSkills/!jRandomSkills.dll and /dev/null differ
diff --git a/jRandomSkills - Server Files/plugins/!jRandomSkills/MaxMind.Db.dll b/jRandomSkills - Server Files/plugins/!jRandomSkills/MaxMind.Db.dll
deleted file mode 100644
index 0608dde..0000000
Binary files a/jRandomSkills - Server Files/plugins/!jRandomSkills/MaxMind.Db.dll and /dev/null differ
diff --git a/jRandomSkills - Server Files/plugins/!jRandomSkills/Newtonsoft.Json.dll b/jRandomSkills - Server Files/plugins/!jRandomSkills/Newtonsoft.Json.dll
deleted file mode 100644
index d035c38..0000000
Binary files a/jRandomSkills - Server Files/plugins/!jRandomSkills/Newtonsoft.Json.dll and /dev/null differ
diff --git a/jRandomSkills - Server Files/plugins/!jRandomSkills/WASDMenuAPI.dll b/jRandomSkills - Server Files/plugins/!jRandomSkills/WASDMenuAPI.dll
deleted file mode 100644
index e18b762..0000000
Binary files a/jRandomSkills - Server Files/plugins/!jRandomSkills/WASDMenuAPI.dll and /dev/null differ
diff --git a/jRandomSkills - Server Files/plugins/!jRandomSkills/configs/config.json b/jRandomSkills - Server Files/plugins/jRandomSkills/configs/config.json
similarity index 78%
rename from jRandomSkills - Server Files/plugins/!jRandomSkills/configs/config.json
rename to jRandomSkills - Server Files/plugins/jRandomSkills/configs/config.json
index 5999716..3a0631f 100644
--- a/jRandomSkills - Server Files/plugins/!jRandomSkills/configs/config.json
+++ b/jRandomSkills - Server Files/plugins/jRandomSkills/configs/config.json
@@ -7,35 +7,40 @@
"DebugMode": false,
"AlternativeSkillButton": null,
"SkillTimeBeforeStart": 7.0,
- "SkillDescriptionDuration": 7.0,
+ "SkillHudDuration": 999.0,
+ "SkillDescriptionDuration": 999.0,
"DisplayAlwaysDescription": false,
"DisableSpectateHUD": false,
"FlashingHtmlHudFix": true,
"CS2TraceRayDebug": false,
- "DisableHUDOnDeathPermission": "@jRandmosSkills/death",
+ "DisableHUDOnDeathPermission": "@jRandomSkills/death",
"DisableSkillsOnRoundEnd": false,
"LanguageSystem": {
"DefaultLangCode": "en",
"DisableGeoLite": false,
"LanguageInfos": [
{
- "IsoCodes": "CN, TW, HK, MO, SG",
- "FileName": "pt-br"
+ "IsoCodes": "ZH, CN, TW, HK, MO, SG",
+ "FileName": "zh"
},
{
- "IsoCodes": "PT, BR, AO, CV, GW, MZ, ST, TL",
- "FileName": "zh"
+ "IsoCodes": "PT-BR, PT, BR, AO, CV, GW, MZ, ST, TL",
+ "FileName": "pt-br"
},
{
"IsoCodes": "FR, MC, HT",
"FileName": "fr"
},
+ {
+ "IsoCodes": "DE, AT, CH, LI, LU, BE",
+ "FileName": "de"
+ },
{
"IsoCodes": "PL",
"FileName": "pl"
},
{
- "IsoCodes": "GB, US",
+ "IsoCodes": "EN, GB, US",
"FileName": "en"
}
]
@@ -58,26 +63,36 @@
"WSADMenuControllsLineColor2": "white",
"WSADMenuControllsLineColor3": "green"
},
+ "ChatMessage": {
+ "MaxWidth": 1280.0,
+ "LineSymbol": "―",
+ "LineColor": "\u0004",
+ "LineShow": true,
+ "InfoPlayerNameColor": "\u0002",
+ "InfoSkillColor": "\u0006",
+ "InfoMessageShow": true,
+ "TagFormat": "\u0002◢◆◤ {TAG} ◥◆◣"
+ },
"NormalCommands": {
"SetSkillCommand": {
"Alias": "ustawskill, ustaw_skill, setskill, set_skill, definirhabilidade, configurarhabilidade, 设置技能, 配置技能",
- "Permissions": "@jRandmosSkills/admin"
+ "Permissions": "@jRandomSkills/admin"
},
"SkillsListCommand": {
"Alias": "supermoc, skille, listamocy, supermoce, skills, listaHabilidades, habilidades, 技能列表, 超能力列表",
- "Permissions": "@jRandmosSkills/admin"
+ "Permissions": "@jRandomSkills/admin"
},
"UseSkillCommand": {
"Alias": "t, useSkill, usarHabilidade, 技能使用, 使用技能",
- "Permissions": "@jRandmosSkills/admin"
+ "Permissions": "@jRandomSkills/admin"
},
"HealCommand": {
"Alias": "heal, ulecz, curar, tratar, 治疗, 治愈",
- "Permissions": "@jRandmosSkills/admin"
+ "Permissions": "@jRandomSkills/admin"
},
"ConsoleCommand": {
"Alias": "console, sv, 控制台, 服务器",
- "Permissions": "@jRandmosSkills/owner"
+ "Permissions": "@jRandomSkills/owner"
},
"HudCommand": {
"Alias": "hud, hood",
@@ -85,7 +100,7 @@
},
"SetStaticSkillCommand": {
"Alias": "ustawstatycznyskill, ustaw_statyczny_skill, setstaticskill, set_static_skill",
- "Permissions": "@jRandmosSkills/admin"
+ "Permissions": "@jRandomSkills/admin"
},
"ChangeLanguageCommand": {
"Alias": "lang, language, changelang, change_lang, jezyk, język",
@@ -93,14 +108,14 @@
},
"ReloadCommand": {
"Alias": "reload, refresh",
- "Permissions": "@jRandmosSkills/admin"
+ "Permissions": "@jRandomSkills/admin"
}
},
"VotingCommands": {
"StartGameCommand": {
"EnableVoting": true,
"Alias": "start, go, começar, iniciar, 开始, 启动",
- "Permissions": "@jRandmosSkills/admin",
+ "Permissions": "@jRandomSkills/admin",
"StartParams": "mp_freezetime 15; mp_forcecamera 0; mp_overtime_enable 1; sv_cheats 0",
"SVStartParams": "mp_freezetime 0; mp_forcecamera 0; mp_overtime_enable 1; sv_cheats 1",
"TimeToVote": 15.0,
@@ -117,7 +132,7 @@
"TimeToNextSameVoting": 500.0,
"MinimumPlayersToStartVoting": 2,
"Alias": "map, mapa, changemap, zmienmape, zmienmape, mudarMapa, trocarMapa, 更换地图, 更改地图",
- "Permissions": "@jRandmosSkills/admin"
+ "Permissions": "@jRandomSkills/admin"
},
"SwapCommand": {
"EnableVoting": true,
@@ -127,7 +142,7 @@
"TimeToNextSameVoting": 20.0,
"MinimumPlayersToStartVoting": 2,
"Alias": "swap, zmiana, trocar, 交换, 切换",
- "Permissions": "@jRandmosSkills/admin"
+ "Permissions": "@jRandomSkills/admin"
},
"ShuffleCommand": {
"EnableVoting": true,
@@ -137,7 +152,7 @@
"TimeToNextSameVoting": 20.0,
"MinimumPlayersToStartVoting": 2,
"Alias": "shuffle, embaralhar, 随机排序, 洗牌",
- "Permissions": "@jRandmosSkills/admin"
+ "Permissions": "@jRandomSkills/admin"
},
"PauseCommand": {
"EnableVoting": true,
@@ -147,7 +162,7 @@
"TimeToNextSameVoting": 2.0,
"MinimumPlayersToStartVoting": 2,
"Alias": "pause, unpause, pausar, despausar, 暂停, 恢复",
- "Permissions": "@jRandmosSkills/admin"
+ "Permissions": "@jRandomSkills/admin"
},
"SetScoreCommand": {
"EnableVoting": true,
@@ -157,7 +172,7 @@
"TimeToNextSameVoting": 90.0,
"MinimumPlayersToStartVoting": 2,
"Alias": "setscore, wynik, definirPontuacao, configurarPontos, 设置分数, 调整分数",
- "Permissions": "@jRandmosSkills/owner"
+ "Permissions": "@jRandomSkills/owner"
}
}
}
\ No newline at end of file
diff --git a/jRandomSkills - Server Files/plugins/jRandomSkills/configs/playersLanguage.json b/jRandomSkills - Server Files/plugins/jRandomSkills/configs/playersLanguage.json
new file mode 100644
index 0000000..326b788
--- /dev/null
+++ b/jRandomSkills - Server Files/plugins/jRandomSkills/configs/playersLanguage.json
@@ -0,0 +1 @@
+{"0":"en","76561199562070178":"en","76561198150092992":"pt-br"}
\ No newline at end of file
diff --git a/jRandomSkills - Server Files/plugins/!jRandomSkills/configs/skillsInfo.json b/jRandomSkills - Server Files/plugins/jRandomSkills/configs/skillsInfo.json
similarity index 71%
rename from jRandomSkills - Server Files/plugins/!jRandomSkills/configs/skillsInfo.json
rename to jRandomSkills - Server Files/plugins/jRandomSkills/configs/skillsInfo.json
index c3ec575..d39d9bd 100644
--- a/jRandomSkills - Server Files/plugins/!jRandomSkills/configs/skillsInfo.json
+++ b/jRandomSkills - Server Files/plugins/jRandomSkills/configs/skillsInfo.json
@@ -5,7 +5,8 @@
"OnlyTeam": 0,
"Color": "#fbff00",
"Active": true,
- "Name": "Zeus"
+ "Name": "Zeus",
+ "RequiredPermission": ""
},
{
"Cooldown": 30.0,
@@ -14,16 +15,19 @@
"OnlyTeam": 0,
"Color": "#c7e03a",
"Active": true,
- "Name": "WeaponsSwap"
+ "Name": "WeaponsSwap",
+ "RequiredPermission": ""
},
{
- "ChangeRoundTime": 10,
+ "ChangeRoundTime": 7,
+ "SoundEvent": "UIPanorama.sidemenu_select",
"NeedsTeammates": false,
"DisableOnFreezeTime": false,
"OnlyTeam": 0,
"Color": "#ff462e",
"Active": true,
- "Name": "Watchmaker"
+ "Name": "Watchmaker",
+ "RequiredPermission": ""
},
{
"NeedsTeammates": false,
@@ -31,7 +35,8 @@
"OnlyTeam": 0,
"Color": "#5d00ff",
"Active": true,
- "Name": "Wallhack"
+ "Name": "Wallhack",
+ "RequiredPermission": ""
},
{
"SmokeDamage": 2,
@@ -41,7 +46,8 @@
"OnlyTeam": 0,
"Color": "#507529",
"Active": true,
- "Name": "ToxicSmoke"
+ "Name": "ToxicSmoke",
+ "RequiredPermission": ""
},
{
"HealthTakenScale": 0.3,
@@ -50,7 +56,8 @@
"OnlyTeam": 0,
"Color": "#962631",
"Active": true,
- "Name": "Thorns"
+ "Name": "Thorns",
+ "RequiredPermission": ""
},
{
"Distance": 100.0,
@@ -59,7 +66,8 @@
"OnlyTeam": 0,
"Color": "#1b04cc",
"Active": true,
- "Name": "ThirdEye"
+ "Name": "ThirdEye",
+ "RequiredPermission": ""
},
{
"NeedsTeammates": false,
@@ -67,7 +75,8 @@
"OnlyTeam": 0,
"Color": "#adaec7",
"Active": true,
- "Name": "Thief"
+ "Name": "Thief",
+ "RequiredPermission": ""
},
{
"NeedsTeammates": false,
@@ -75,7 +84,8 @@
"OnlyTeam": 0,
"Color": "#8A2BE2",
"Active": true,
- "Name": "Teleporter"
+ "Name": "Teleporter",
+ "RequiredPermission": ""
},
{
"Cooldown": 30.0,
@@ -85,7 +95,8 @@
"OnlyTeam": 0,
"Color": "#1466F5",
"Active": true,
- "Name": "SwapPosition"
+ "Name": "SwapPosition",
+ "RequiredPermission": ""
},
{
"Distance": 100.0,
@@ -94,16 +105,20 @@
"OnlyTeam": 0,
"Color": "#42f5da",
"Active": true,
- "Name": "Spectator"
+ "Name": "Spectator",
+ "RequiredPermission": ""
},
{
"Cooldown": 5.0,
+ "CTSoundEvent": "c4.disarmstart",
+ "TSoundEvent": "C4.PlantSoundB",
"NeedsTeammates": false,
"DisableOnFreezeTime": false,
"OnlyTeam": 0,
"Color": "#e3ed8c",
"Active": true,
- "Name": "SoundMaker"
+ "Name": "SoundMaker",
+ "RequiredPermission": ""
},
{
"ChanceFrom": 1.15,
@@ -113,7 +128,8 @@
"OnlyTeam": 0,
"Color": "#09ba00",
"Active": true,
- "Name": "Soldier"
+ "Name": "Soldier",
+ "RequiredPermission": ""
},
{
"NeedsTeammates": false,
@@ -121,7 +137,8 @@
"OnlyTeam": 0,
"Color": "#e0873a",
"Active": true,
- "Name": "SniperElite"
+ "Name": "SniperElite",
+ "RequiredPermission": ""
},
{
"NeedsTeammates": false,
@@ -129,7 +146,8 @@
"OnlyTeam": 0,
"Color": "#333333",
"Active": true,
- "Name": "Silent"
+ "Name": "Silent",
+ "RequiredPermission": ""
},
{
"DetonationTime": 20,
@@ -138,7 +156,8 @@
"OnlyTeam": 2,
"Color": "#f5b74c",
"Active": true,
- "Name": "ShortBomb"
+ "Name": "ShortBomb",
+ "RequiredPermission": ""
},
{
"TeleportDistance": 100.0,
@@ -149,7 +168,8 @@
"OnlyTeam": 0,
"Color": "#4d4d4d",
"Active": true,
- "Name": "Shade"
+ "Name": "Shade",
+ "RequiredPermission": ""
},
{
"StartHealth": 50,
@@ -158,7 +178,8 @@
"OnlyTeam": 0,
"Color": "#d41c1c",
"Active": true,
- "Name": "SecondLife"
+ "Name": "SecondLife",
+ "RequiredPermission": ""
},
{
"NeedsTeammates": false,
@@ -166,7 +187,8 @@
"OnlyTeam": 0,
"Color": "#8A2BE2",
"Active": true,
- "Name": "Saper"
+ "Name": "Saper",
+ "RequiredPermission": ""
},
{
"SlownessTime": 2.0,
@@ -176,7 +198,8 @@
"OnlyTeam": 0,
"Color": "#8B4513",
"Active": true,
- "Name": "Rubber"
+ "Name": "Rubber",
+ "RequiredPermission": ""
},
{
"MoneyMultiplier": 35,
@@ -185,7 +208,8 @@
"OnlyTeam": 0,
"Color": "#119125",
"Active": true,
- "Name": "RobinHood"
+ "Name": "RobinHood",
+ "RequiredPermission": ""
},
{
"MinMoney": 5000,
@@ -195,16 +219,18 @@
"OnlyTeam": 0,
"Color": "#D4AF37",
"Active": true,
- "Name": "RichBoy"
+ "Name": "RichBoy",
+ "RequiredPermission": ""
},
{
- "ZombieHealth": 200,
+ "ZombieHealth": 250,
"NeedsTeammates": false,
"DisableOnFreezeTime": false,
"OnlyTeam": 0,
"Color": "#ff5C0A",
"Active": true,
- "Name": "ReZombie"
+ "Name": "ReZombie",
+ "RequiredPermission": ""
},
{
"NeedsTeammates": false,
@@ -212,7 +238,8 @@
"OnlyTeam": 0,
"Color": "#a68132",
"Active": true,
- "Name": "ReturnToSender"
+ "Name": "ReturnToSender",
+ "RequiredPermission": ""
},
{
"Cooldown": 15.0,
@@ -221,16 +248,20 @@
"OnlyTeam": 0,
"Color": "#a86eff",
"Active": true,
- "Name": "Retreat"
+ "Name": "Retreat",
+ "RequiredPermission": ""
},
{
"Cooldown": 15.0,
+ "YourTeamDamage": 10,
+ "EnemyTeamDamage": 20,
"NeedsTeammates": false,
"DisableOnFreezeTime": true,
"OnlyTeam": 0,
"Color": "#a3000b",
"Active": true,
- "Name": "Replicator"
+ "Name": "Replicator",
+ "RequiredPermission": ""
},
{
"HealthToAdd": 1,
@@ -240,7 +271,8 @@
"OnlyTeam": 0,
"Color": "#ff462e",
"Active": true,
- "Name": "Regeneration"
+ "Name": "Regeneration",
+ "RequiredPermission": ""
},
{
"Cooldown": 15.0,
@@ -249,7 +281,19 @@
"OnlyTeam": 0,
"Color": "#3cded3",
"Active": true,
- "Name": "ReactiveArmor"
+ "Name": "ReactiveArmor",
+ "RequiredPermission": ""
+ },
+ {
+ "Cooldown": 30.0,
+ "Duration": 10.0,
+ "NeedsTeammates": false,
+ "DisableOnFreezeTime": true,
+ "OnlyTeam": 0,
+ "Color": "#d0d930",
+ "Active": false,
+ "Name": "RCMelon",
+ "RequiredPermission": ""
},
{
"Cooldown": 15.0,
@@ -258,7 +302,8 @@
"OnlyTeam": 0,
"Color": "#e0873a",
"Active": true,
- "Name": "RandomWeapon"
+ "Name": "RandomWeapon",
+ "RequiredPermission": ""
},
{
"MinExtraHealth": 50,
@@ -268,7 +313,8 @@
"OnlyTeam": 0,
"Color": "#009905",
"Active": true,
- "Name": "Rambo"
+ "Name": "Rambo",
+ "RequiredPermission": ""
},
{
"NeedsTeammates": false,
@@ -276,7 +322,8 @@
"OnlyTeam": 0,
"Color": "#2effcb",
"Active": true,
- "Name": "RadarHack"
+ "Name": "RadarHack",
+ "RequiredPermission": ""
},
{
"NeedsTeammates": false,
@@ -284,7 +331,8 @@
"OnlyTeam": 0,
"Color": "#8a42f5",
"Active": true,
- "Name": "QuickShot"
+ "Name": "QuickShot",
+ "RequiredPermission": ""
},
{
"RegenerationMultiplier": 1.5,
@@ -293,7 +341,8 @@
"OnlyTeam": 0,
"Color": "#3c47de",
"Active": true,
- "Name": "Pyro"
+ "Name": "Pyro",
+ "RequiredPermission": ""
},
{
"ChanceFrom": 0.3,
@@ -305,7 +354,8 @@
"OnlyTeam": 0,
"Color": "#1e9ab0",
"Active": true,
- "Name": "Push"
+ "Name": "Push",
+ "RequiredPermission": ""
},
{
"MaxDefusingRange": 80.0,
@@ -315,7 +365,8 @@
"OnlyTeam": 3,
"Color": "#507529",
"Active": true,
- "Name": "PsychicDefusing"
+ "Name": "PsychicDefusing",
+ "RequiredPermission": ""
},
{
"NeedsTeammates": false,
@@ -323,7 +374,8 @@
"OnlyTeam": 0,
"Color": "#9c9c9c",
"Active": true,
- "Name": "Prosthesis"
+ "Name": "Prosthesis",
+ "RequiredPermission": ""
},
{
"NeedsTeammates": false,
@@ -331,17 +383,20 @@
"OnlyTeam": 0,
"Color": "#ffc061",
"Active": true,
- "Name": "PrimaryBan"
+ "Name": "PrimaryBan",
+ "RequiredPermission": ""
},
{
"Damage": 1,
- "Cooldown": 1.0,
+ "Cooldown": 0.85,
+ "MinHealth": 30,
"NeedsTeammates": false,
"DisableOnFreezeTime": true,
"OnlyTeam": 0,
"Color": "#902eff",
"Active": true,
- "Name": "Poison"
+ "Name": "Poison",
+ "RequiredPermission": ""
},
{
"ExtraC4BlowTime": 60,
@@ -350,7 +405,8 @@
"OnlyTeam": 2,
"Color": "#7d7d7d",
"Active": true,
- "Name": "Planter"
+ "Name": "Planter",
+ "RequiredPermission": ""
},
{
"MaximumFuel": 150.0,
@@ -361,7 +417,8 @@
"OnlyTeam": 0,
"Color": "#1466F5",
"Active": true,
- "Name": "Pilot"
+ "Name": "Pilot",
+ "RequiredPermission": ""
},
{
"ChanceFrom": 0.2,
@@ -371,7 +428,8 @@
"OnlyTeam": 0,
"Color": "#ff5C0A",
"Active": true,
- "Name": "Phoenix"
+ "Name": "Phoenix",
+ "RequiredPermission": ""
},
{
"ExtraJumpsMin": 1,
@@ -381,7 +439,8 @@
"OnlyTeam": 0,
"Color": "#FFA500",
"Active": true,
- "Name": "PawelJumper"
+ "Name": "PawelJumper",
+ "RequiredPermission": ""
},
{
"NeedsTeammates": false,
@@ -389,7 +448,8 @@
"OnlyTeam": 0,
"Color": "#3c47de",
"Active": true,
- "Name": "OnlyHead"
+ "Name": "OnlyHead",
+ "RequiredPermission": ""
},
{
"NeedsTeammates": false,
@@ -397,7 +457,8 @@
"OnlyTeam": 0,
"Color": "#ff5CD9",
"Active": true,
- "Name": "OneShot"
+ "Name": "OneShot",
+ "RequiredPermission": ""
},
{
"NeedsTeammates": false,
@@ -405,7 +466,8 @@
"OnlyTeam": 0,
"Color": "#8a42f5",
"Active": true,
- "Name": "NoRecoil"
+ "Name": "NoRecoil",
+ "RequiredPermission": ""
},
{
"NeedsTeammates": false,
@@ -413,7 +475,8 @@
"OnlyTeam": 0,
"Color": "#FFFFFF",
"Active": true,
- "Name": "None"
+ "Name": "None",
+ "RequiredPermission": ""
},
{
"NeedsTeammates": false,
@@ -421,7 +484,8 @@
"OnlyTeam": 0,
"Color": "#a38c1a",
"Active": true,
- "Name": "NoNades"
+ "Name": "NoNades",
+ "RequiredPermission": ""
},
{
"Cooldown": 30.0,
@@ -431,7 +495,8 @@
"OnlyTeam": 0,
"Color": "#44ebd4",
"Active": true,
- "Name": "Noclip"
+ "Name": "Noclip",
+ "RequiredPermission": ""
},
{
"IdlePercentInvisibility": 0.3,
@@ -442,7 +507,8 @@
"OnlyTeam": 0,
"Color": "#dedede",
"Active": true,
- "Name": "Ninja"
+ "Name": "Ninja",
+ "RequiredPermission": ""
},
{
"ExplosionRadius": 500.0,
@@ -452,7 +518,8 @@
"OnlyTeam": 0,
"Color": "#F5CB42",
"Active": true,
- "Name": "Muhammed"
+ "Name": "Muhammed",
+ "RequiredPermission": ""
},
{
"NeedsTeammates": false,
@@ -460,7 +527,8 @@
"OnlyTeam": 0,
"Color": "#52f54c",
"Active": true,
- "Name": "MoneySwap"
+ "Name": "MoneySwap",
+ "RequiredPermission": ""
},
{
"HealthToAdd": 50,
@@ -471,7 +539,8 @@
"OnlyTeam": 0,
"Color": "#10c212",
"Active": true,
- "Name": "Medic"
+ "Name": "Medic",
+ "RequiredPermission": ""
},
{
"CustomFOV": 50,
@@ -480,7 +549,8 @@
"OnlyTeam": 0,
"Color": "#9ba882",
"Active": true,
- "Name": "Magnifier"
+ "Name": "Magnifier",
+ "RequiredPermission": ""
},
{
"MaxDistance": 4096.0,
@@ -489,7 +559,8 @@
"OnlyTeam": 0,
"Color": "#6effc7",
"Active": true,
- "Name": "LongZeus"
+ "Name": "LongZeus",
+ "RequiredPermission": ""
},
{
"MaxDistance": 4096.0,
@@ -498,7 +569,8 @@
"OnlyTeam": 0,
"Color": "#c9f8ff",
"Active": true,
- "Name": "LongKnife"
+ "Name": "LongKnife",
+ "RequiredPermission": ""
},
{
"NeedsTeammates": false,
@@ -506,7 +578,8 @@
"OnlyTeam": 0,
"Color": "#a3651a",
"Active": true,
- "Name": "LifeSwap"
+ "Name": "LifeSwap",
+ "RequiredPermission": ""
},
{
"FlashDuration": 1.0,
@@ -515,7 +588,8 @@
"OnlyTeam": 0,
"Color": "#57bcff",
"Active": true,
- "Name": "KillerFlash"
+ "Name": "KillerFlash",
+ "RequiredPermission": ""
},
{
"HealthToAdd": 3,
@@ -524,7 +598,8 @@
"OnlyTeam": 0,
"Color": "#a86eff",
"Active": true,
- "Name": "JumpingJack"
+ "Name": "JumpingJack",
+ "RequiredPermission": ""
},
{
"NeedsTeammates": false,
@@ -532,7 +607,8 @@
"OnlyTeam": 0,
"Color": "#b01e5d",
"Active": true,
- "Name": "JumpBan"
+ "Name": "JumpBan",
+ "RequiredPermission": ""
},
{
"MinTime": 10.0,
@@ -542,7 +618,8 @@
"OnlyTeam": 0,
"Color": "#8f108f",
"Active": true,
- "Name": "Jester"
+ "Name": "Jester",
+ "RequiredPermission": ""
},
{
"NeedsTeammates": false,
@@ -550,16 +627,17 @@
"OnlyTeam": 0,
"Color": "#42f5a7",
"Active": true,
- "Name": "Jammer"
+ "Name": "Jammer",
+ "RequiredPermission": ""
},
{
- "MaxStepBeam": 100,
"NeedsTeammates": false,
"DisableOnFreezeTime": false,
"OnlyTeam": 0,
"Color": "#f542ef",
- "Active": false,
- "Name": "Jackal"
+ "Active": true,
+ "Name": "Jackal",
+ "RequiredPermission": ""
},
{
"NeedsTeammates": false,
@@ -567,7 +645,8 @@
"OnlyTeam": 0,
"Color": "#0000FF",
"Active": true,
- "Name": "InfiniteAmmo"
+ "Name": "InfiniteAmmo",
+ "RequiredPermission": ""
},
{
"NeedsTeammates": false,
@@ -575,7 +654,19 @@
"OnlyTeam": 0,
"Color": "#99140B",
"Active": true,
- "Name": "Impostor"
+ "Name": "Impostor",
+ "RequiredPermission": ""
+ },
+ {
+ "Cooldown": 30.0,
+ "Duration": 10.0,
+ "NeedsTeammates": false,
+ "DisableOnFreezeTime": true,
+ "OnlyTeam": 0,
+ "Color": "#d0d930",
+ "Active": true,
+ "Name": "Iana",
+ "RequiredPermission": ""
},
{
"DamageMultiplier": 2.0,
@@ -585,7 +676,8 @@
"OnlyTeam": 0,
"Color": "#ffdd00",
"Active": true,
- "Name": "HolyHandGrenade"
+ "Name": "HolyHandGrenade",
+ "RequiredPermission": ""
},
{
"HealthToAdd": 25,
@@ -594,7 +686,8 @@
"OnlyTeam": 0,
"Color": "#ded678",
"Active": true,
- "Name": "Hermit"
+ "Name": "Hermit",
+ "RequiredPermission": ""
},
{
"SmokeHeal": 1,
@@ -604,7 +697,8 @@
"OnlyTeam": 0,
"Color": "#1fe070",
"Active": true,
- "Name": "HealingSmoke"
+ "Name": "HealingSmoke",
+ "RequiredPermission": ""
},
{
"NeedsTeammates": false,
@@ -612,7 +706,8 @@
"OnlyTeam": 0,
"Color": "#4a6e21",
"Active": true,
- "Name": "Grenadier"
+ "Name": "Grenadier",
+ "RequiredPermission": ""
},
{
"Cooldown": 30.0,
@@ -622,7 +717,8 @@
"OnlyTeam": 0,
"Color": "#e0d83a",
"Active": true,
- "Name": "GodMode"
+ "Name": "GodMode",
+ "RequiredPermission": ""
},
{
"NeedsTeammates": false,
@@ -630,7 +726,8 @@
"OnlyTeam": 0,
"Color": "#fff52e",
"Active": true,
- "Name": "Glue"
+ "Name": "Glue",
+ "RequiredPermission": ""
},
{
"NeedsTeammates": false,
@@ -638,7 +735,8 @@
"OnlyTeam": 0,
"Color": "#f542ef",
"Active": true,
- "Name": "Glitch"
+ "Name": "Glitch",
+ "RequiredPermission": ""
},
{
"NeedsTeammates": false,
@@ -646,7 +744,8 @@
"OnlyTeam": 0,
"Color": "#5d00ff",
"Active": true,
- "Name": "Glaz"
+ "Name": "Glaz",
+ "RequiredPermission": ""
},
{
"NeedsTeammates": false,
@@ -654,7 +753,8 @@
"OnlyTeam": 0,
"Color": "#FFFFFF",
"Active": true,
- "Name": "Ghost"
+ "Name": "Ghost",
+ "RequiredPermission": ""
},
{
"RefreshPrice": 150,
@@ -663,7 +763,8 @@
"OnlyTeam": 0,
"Color": "#7eff47",
"Active": true,
- "Name": "Gambler"
+ "Name": "Gambler",
+ "RequiredPermission": ""
},
{
"TriggerRadius": 180.0,
@@ -673,7 +774,8 @@
"OnlyTeam": 0,
"Color": "#00eaff",
"Active": true,
- "Name": "FrozenDecoy"
+ "Name": "FrozenDecoy",
+ "RequiredPermission": ""
},
{
"HealthMultiplier": 1.5,
@@ -682,7 +784,8 @@
"OnlyTeam": 0,
"Color": "#ff0000",
"Active": true,
- "Name": "FriendlyFire"
+ "Name": "FriendlyFire",
+ "RequiredPermission": ""
},
{
"MaxBombHealth": 1000,
@@ -691,7 +794,8 @@
"OnlyTeam": 3,
"Color": "#5d00ff",
"Active": true,
- "Name": "FragileBomb"
+ "Name": "FragileBomb",
+ "RequiredPermission": ""
},
{
"Cooldown": 2.0,
@@ -702,7 +806,8 @@
"OnlyTeam": 0,
"Color": "#1b04cc",
"Active": true,
- "Name": "Fortnite"
+ "Name": "Fortnite",
+ "RequiredPermission": ""
},
{
"ChanceFrom": 1.2,
@@ -712,7 +817,8 @@
"OnlyTeam": 0,
"Color": "#A31912",
"Active": true,
- "Name": "Flash"
+ "Name": "Flash",
+ "RequiredPermission": ""
},
{
"NeedsTeammates": false,
@@ -720,7 +826,8 @@
"OnlyTeam": 0,
"Color": "#ffc061",
"Active": true,
- "Name": "FastReload"
+ "Name": "FastReload",
+ "RequiredPermission": ""
},
{
"Distance": 1000.0,
@@ -729,7 +836,8 @@
"OnlyTeam": 0,
"Color": "#d1f542",
"Active": true,
- "Name": "FalconEye"
+ "Name": "FalconEye",
+ "RequiredPermission": ""
},
{
"Damage": 25.0,
@@ -741,7 +849,8 @@
"OnlyTeam": 0,
"Color": "#9c0000",
"Active": true,
- "Name": "ExplosiveShot"
+ "Name": "ExplosiveShot",
+ "RequiredPermission": ""
},
{
"Cooldown": 15.0,
@@ -751,7 +860,8 @@
"OnlyTeam": 0,
"Color": "#ff8c92",
"Active": true,
- "Name": "EnemySpawn"
+ "Name": "EnemySpawn",
+ "RequiredPermission": ""
},
{
"Cooldown": 16.0,
@@ -764,7 +874,8 @@
"OnlyTeam": 0,
"Color": "#42f59b",
"Active": false,
- "Name": "Earthquake"
+ "Name": "Earthquake",
+ "RequiredPermission": ""
},
{
"MinScale": 0.6,
@@ -774,7 +885,8 @@
"OnlyTeam": 0,
"Color": "#ffff00",
"Active": true,
- "Name": "Dwarf"
+ "Name": "Dwarf",
+ "RequiredPermission": ""
},
{
"NeedsTeammates": false,
@@ -782,7 +894,8 @@
"OnlyTeam": 0,
"Color": "#ffb73b",
"Active": true,
- "Name": "Duplicator"
+ "Name": "Duplicator",
+ "RequiredPermission": ""
},
{
"HealthRegainScale": 0.3,
@@ -791,7 +904,8 @@
"OnlyTeam": 0,
"Color": "#FA050D",
"Active": true,
- "Name": "Dracula"
+ "Name": "Dracula",
+ "RequiredPermission": ""
},
{
"NeedsTeammates": false,
@@ -799,7 +913,8 @@
"OnlyTeam": 0,
"Color": "#00f2ff",
"Active": true,
- "Name": "Distancer"
+ "Name": "Distancer",
+ "RequiredPermission": ""
},
{
"ChanceFrom": 0.2,
@@ -809,7 +924,8 @@
"OnlyTeam": 0,
"Color": "#FF4500",
"Active": true,
- "Name": "Disarmament"
+ "Name": "Disarmament",
+ "RequiredPermission": ""
},
{
"NeedsTeammates": false,
@@ -817,7 +933,8 @@
"OnlyTeam": 0,
"Color": "#dae01f",
"Active": true,
- "Name": "Deaf"
+ "Name": "Deaf",
+ "RequiredPermission": ""
},
{
"NeedsTeammates": false,
@@ -825,26 +942,44 @@
"OnlyTeam": 0,
"Color": "#919191",
"Active": true,
- "Name": "Deactivator"
+ "Name": "Deactivator",
+ "RequiredPermission": ""
},
{
"JumpVelocity": 150.0,
"PushVelocity": 600.0,
+ "AnyDirection": true,
+ "Cooldown": 2.0,
"NeedsTeammates": false,
"DisableOnFreezeTime": false,
"OnlyTeam": 0,
"Color": "#42bbfc",
"Active": true,
- "Name": "Dash"
+ "Name": "Dash",
+ "RequiredPermission": ""
},
{
- "Brightness": 0.01,
+ "R": 0,
+ "G": 0,
+ "B": 0,
+ "A": 230,
"NeedsTeammates": false,
"DisableOnFreezeTime": false,
"OnlyTeam": 0,
"Color": "#383838",
"Active": true,
- "Name": "Darkness"
+ "Name": "Darkness",
+ "RequiredPermission": ""
+ },
+ {
+ "Cooldown": 30.0,
+ "NeedsTeammates": false,
+ "DisableOnFreezeTime": true,
+ "OnlyTeam": 0,
+ "Color": "#34ebd5",
+ "Active": true,
+ "Name": "Cypher",
+ "RequiredPermission": ""
},
{
"NeedsTeammates": false,
@@ -852,7 +987,8 @@
"OnlyTeam": 0,
"Color": "#88a31a",
"Active": true,
- "Name": "Cutter"
+ "Name": "Cutter",
+ "RequiredPermission": ""
},
{
"BombArmedTime": 10.0,
@@ -861,7 +997,8 @@
"OnlyTeam": 3,
"Color": "#343deb",
"Active": true,
- "Name": "ChillOut"
+ "Name": "ChillOut",
+ "RequiredPermission": ""
},
{
"NeedsTeammates": false,
@@ -869,7 +1006,8 @@
"OnlyTeam": 0,
"Color": "#FF8B42",
"Active": true,
- "Name": "Chicken"
+ "Name": "Chicken",
+ "RequiredPermission": ""
},
{
"ChanceFrom": 0.2,
@@ -879,7 +1017,18 @@
"OnlyTeam": 0,
"Color": "#FF4500",
"Active": true,
- "Name": "Catapult"
+ "Name": "Catapult",
+ "RequiredPermission": ""
+ },
+ {
+ "DamageAfterMiss": 5,
+ "NeedsTeammates": false,
+ "DisableOnFreezeTime": false,
+ "OnlyTeam": 0,
+ "Color": "#db6c35",
+ "Active": true,
+ "Name": "CarefulBullets",
+ "RequiredPermission": ""
},
{
"NeedsTeammates": false,
@@ -887,7 +1036,8 @@
"OnlyTeam": 2,
"Color": "#00911f",
"Active": true,
- "Name": "C4Camouflage"
+ "Name": "C4Camouflage",
+ "RequiredPermission": ""
},
{
"MaxSpeed": 500.0,
@@ -898,7 +1048,8 @@
"OnlyTeam": 0,
"Color": "#d1430a",
"Active": true,
- "Name": "BunnyHop"
+ "Name": "BunnyHop",
+ "RequiredPermission": ""
},
{
"TorseReflectionChance": 0.95,
@@ -909,7 +1060,8 @@
"OnlyTeam": 0,
"Color": "#cc7504",
"Active": true,
- "Name": "BladeMaster"
+ "Name": "BladeMaster",
+ "RequiredPermission": ""
},
{
"ChanceFrom": 0.2,
@@ -919,7 +1071,8 @@
"OnlyTeam": 0,
"Color": "#00FF00",
"Active": true,
- "Name": "Behind"
+ "Name": "Behind",
+ "RequiredPermission": ""
},
{
"SpeedMultipier": 2.0,
@@ -930,7 +1083,8 @@
"OnlyTeam": 0,
"Color": "#2effc7",
"Active": true,
- "Name": "Baseball"
+ "Name": "Baseball",
+ "RequiredPermission": ""
},
{
"NeedsTeammates": false,
@@ -938,7 +1092,8 @@
"OnlyTeam": 0,
"Color": "#abab33",
"Active": true,
- "Name": "Bankrupt"
+ "Name": "Bankrupt",
+ "RequiredPermission": ""
},
{
"ChanceFrom": 0.1,
@@ -948,7 +1103,8 @@
"OnlyTeam": 0,
"Color": "#7E10AD",
"Active": true,
- "Name": "Astronaut"
+ "Name": "Astronaut",
+ "RequiredPermission": ""
},
{
"DamageMultiplier": 2.0,
@@ -958,7 +1114,8 @@
"OnlyTeam": 0,
"Color": "#d9d9d9",
"Active": true,
- "Name": "Assassin"
+ "Name": "Assassin",
+ "RequiredPermission": ""
},
{
"ChanceFrom": 0.65,
@@ -968,7 +1125,8 @@
"OnlyTeam": 0,
"Color": "#d1430a",
"Active": true,
- "Name": "Armored"
+ "Name": "Armored",
+ "RequiredPermission": ""
},
{
"NeedsTeammates": false,
@@ -976,7 +1134,8 @@
"OnlyTeam": 3,
"Color": "#edf5b5",
"Active": true,
- "Name": "AreaReaper"
+ "Name": "AreaReaper",
+ "RequiredPermission": ""
},
{
"NeedsTeammates": false,
@@ -984,7 +1143,8 @@
"OnlyTeam": 0,
"Color": "#8B4513",
"Active": true,
- "Name": "AntyHead"
+ "Name": "AntyHead",
+ "RequiredPermission": ""
},
{
"FlashDuration": 7.0,
@@ -993,7 +1153,8 @@
"OnlyTeam": 0,
"Color": "#D6E6FF",
"Active": true,
- "Name": "AntyFlash"
+ "Name": "AntyFlash",
+ "RequiredPermission": ""
},
{
"SecondsInBack": 5,
@@ -1003,7 +1164,8 @@
"OnlyTeam": 0,
"Color": "#a86eff",
"Active": true,
- "Name": "Anomaly"
+ "Name": "Anomaly",
+ "RequiredPermission": ""
},
{
"NeedsTeammates": false,
@@ -1011,6 +1173,7 @@
"OnlyTeam": 0,
"Color": "#ff0000",
"Active": true,
- "Name": "Aimbot"
+ "Name": "Aimbot",
+ "RequiredPermission": ""
}
]
\ No newline at end of file
diff --git a/jRandomSkills - Server Files/plugins/jRandomSkills/languages/de.json b/jRandomSkills - Server Files/plugins/jRandomSkills/languages/de.json
new file mode 100644
index 0000000..161f149
--- /dev/null
+++ b/jRandomSkills - Server Files/plugins/jRandomSkills/languages/de.json
@@ -0,0 +1,477 @@
+{
+ "none": "Keine",
+ "none_desc": "Du hast keine Fertigkeit",
+
+ "aimbot": "Aimbot",
+ "aimbot_desc": "Jede Kugel, die du triffst, zählt als Kopfschuss",
+
+ "anomaly": "Anomalie",
+ "anomaly_desc": "Du spulst die Zeit um einige Sekunden zurück",
+
+ "antyflash": "Anti-Flash",
+ "antyflash_desc": "Du bist immun gegen Blendgranaten und deine Blendgranaten halten 7 Sekunden lang",
+
+ "antyhead": "Eiserner Kopf",
+ "antyhead_desc": "Du erleidest keinen Schaden durch Kopfschüsse",
+
+ "areareaper": "Zone Reaper",
+ "areareaper_desc": "Du kannst einen Bombenort auswählen, den du deaktivieren möchtest",
+ "areareaper_incorrect_site": "Kein solcher Bombenort gefunden",
+ "areareaper_no_site": "Keine Bombenstandorte gefunden.",
+ "areareaper_select_info": "Standort zum Deaktivieren auswählen:",
+ "areareaper_site_disabled": "Bombenstandort {0} wurde deaktiviert – dort können keine Bomben platziert werden!",
+ "areareaper_used_info": "Deine Fähigkeit wurde bereits eingesetzt.",
+
+ "armored": "Gepanzert",
+ "armored_desc": "Du hast einen zufälligen Schadensmultiplikator",
+ "armored_desc2": "Dein Schadensmultiplikator beträgt: {0}x",
+
+ "assassin": "Attentäter",
+ "assassin_desc": "Du fügst Gegnern von hinten erhöhten Schaden zu",
+
+ "astronaut": "Astronaut",
+ "astronaut_desc": "Du erhältst zu Beginn der Runde einen zufälligen Schwerkraftwert",
+ "astronaut_desc2": "Deine zufällige Schwerkraft beträgt: {0}x",
+
+ "moneyswap": "Steuerbeamter",
+ "moneyswap_desc": "Wähle einen Spieler aus, mit dem du Geld tauschen möchtest",
+ "moneyswap_enemy_info": "Das Finanzamt hat dich erwischt.",
+ "moneyswap_player_info": "Du hast Geld mit dem Spieler \"{0}\" getauscht.",
+ "moneyswap_select_info": "Geld mit Spieler tauschen:",
+
+ "baseball": "Baseballspieler",
+ "baseball_desc": "Deine Attrappe prallt von Wänden ab und tötet einen Gegner sofort beim Aufprall.",
+
+ "behind": "Feind drehen",
+ "behind_desc": "Du hast eine zufällige Chance, einen Feind um 180 Grad zu drehen, wenn du ihn triffst",
+ "behind_desc2": "Deine Chance, einen Feind bei einem Treffer zu drehen, beträgt: {0} %",
+
+ "blademaster": "Schwertmeister",
+ "blademaster_desc": "Wenn du ein Messer hältst, hast du eine hohe Chance, einen Schuss abzuwehren",
+
+ "bunnyhop": "Hase",
+ "bunnyhop_desc": "Du erhältst automatisch bunnyhop",
+
+ "c4camouflage": "C4-Tarnung",
+ "c4camouflage_desc": "Du bist unsichtbar, während du die Bombe hältst",
+
+ "carefulbullets": "Vorsichtige Kugeln",
+ "carefulbullets_desc": "Wähle einen Spieler aus, der für jeden Fehlschuss Schaden nimmt",
+ "carefulbullets_enemy_info": "Von nun an wird Ungenauigkeit buchstäblich wehtun.",
+ "carefulbullets_player_info": "‚{0}‘ muss jetzt vorsichtiger sein.",
+ "carefulbullets_select_info": "Fehler schaden dem Spieler:",
+
+ "catapult": "Katapult",
+ "catapult_desc": "Du hast eine zufällige Chance, einen Gegner nach oben zu schleudern",
+ "catapult_desc2": "Deine Chance, einen Gegner bei einem Treffer zu schleudern, beträgt: {0} %",
+
+ "chicken": "Huhn",
+ "chicken_desc": "Du erhältst ein Huhn-Modell + 10 % schnellere Bewegung – 50 HP",
+
+ "chillout": "Chillout",
+ "chillout_desc": "Das Platzieren der Bombe dauert deutlich länger",
+
+ "cutter": "Cutter",
+ "cutter_desc": "Sofortiger Tod mit einem Messer",
+
+ "cypher": "Kamera",
+ "cypher_desc": "Klicken Sie auf [css_useSkill], um eine Kamera zu erstellen/zu wechseln",
+ "cypher_nospace": "Die Kamera muss im rechten Winkel zur Wand positioniert werden",
+
+ "darkness": "Dunkelheit",
+ "darkness_desc": "Wendet einen Dunkelheitseffekt auf einen ausgewählten Gegner an",
+ "darkness_enemy_info": "Lass die Lichter ausgehen",
+ "darkness_player_info": "Die Dunkelheit hat den Spieler \"{0}\" überwältigt.",
+ "darkness_select_info": "Wähle einen Spieler für die Dunkelheit aus:",
+
+ "deactivator": "Deaktivator",
+ "deactivator_desc": "Wähle einen Spieler aus, dessen Fähigkeit du deaktivieren möchtest",
+ "deactivator_enemy_info": "Deine Fähigkeit wurde deaktiviert",
+ "deactivator_player_info": "Die Fähigkeit des Spielers ‚{0}‘ wurde deaktiviert",
+ "deactivator_select_info": "Fähigkeit eines Spielers deaktivieren:",
+
+ "deaf": "Taub",
+ "deaf_desc": "Wähle einen Spieler aus, für den alle Sounds stummgeschaltet werden sollen",
+ "deaf_enemy_info": "Deine Kopfhörer haben das Spiel verlassen.",
+ "deaf_player_info": "Der Ton für den Spieler ‚{0}‘ wurde deaktiviert.",
+ "deaf_select_info": "Alle Töne für den Spieler stummschalten:",
+
+ "disarmament": "Entwaffnung",
+ "disarmament_desc": "Du hast eine zufällige Chance, einen Gegner bei einem Treffer seine Waffe fallen zu lassen.",
+ "disarmament_desc2": "Ihre Chance, einen Gegner zu entwaffnen, beträgt: {0} %",
+
+ "distancer": "Entfernungsmesser",
+ "distancer_desc": "Sie können die Entfernung zum nächsten Gegner sehen",
+
+ "dash": "Sprinten",
+ "dash_desc": "Führe einen zweiten Sprung aus, um zu sprinten",
+
+ "dracula": "Dracula",
+ "dracula_desc": "Wenn du einen Gegner triffst, wird deine Gesundheit um einen Prozentsatz des verursachten Schadens wiederhergestellt",
+
+ "duplicator": "Duplikator",
+ "duplicator_desc": "Wähle einen Spieler aus, dessen Fertigkeit du kopieren möchtest",
+ "duplicator_player_info": "Die Fertigkeit des Spielers ‚{0}‘ wurde kopiert.",
+ "duplicator_select_info": "Kopiere die Fertigkeit eines Spielers:",
+
+ "dwarf": "Zwerg",
+ "dwarf_desc": "Zufällige Charaktergröße zu Beginn der Runde",
+ "dwarf_desc2": "Dein Größenmultiplikator beträgt: {0}x",
+
+ "enemyspawn": "Feindes-Spawn",
+ "enemyspawn_desc": "Klicke auf [css_useSkill], um zum Feindes-Spawn zu teleportieren",
+
+ "explosiveshot": "Explosiver Schuss",
+ "explosiveshot_desc": "Zufällige Chance, beim Schießen eine explosive Kugel abzufeuern",
+ "explosiveshot_desc2": "Deine Chance, eine explosive Kugel abzufeuern: {0} %",
+
+ "falconeye": "Falkenauge",
+ "falconeye_desc": "Klicke auf [css_useSkill], um eine Vogelperspektive zu aktivieren",
+
+ "fastreload": "Schnellnachladen",
+ "fastreload_desc": "Klicke auf [css_useSkill], um die Waffe, die du gerade hältst, nachzuladen",
+
+ "flash": "Blitz",
+ "flash_desc": "Zufällige Spielergeschwindigkeit zu Beginn der Runde",
+ "flash_desc2": "Dein Geschwindigkeitsmultiplikator beträgt: {0}x",
+
+ "fortnite": "Fortnite",
+ "fortnite_desc": "Klicke auf [css_useSkill], um eine zerstörbare Barrikade zu erstellen",
+
+ "fragilebomb": "Fragile Bombe",
+ "fragilebomb_desc": "Das Schießen auf die Bombe beschädigt sie",
+ "fragilebomb_bomb_health": "Bombengesundheit",
+
+ "friendlyfire": "Friendly Fire",
+ "friendlyfire_desc": "Das Schießen auf Teamkameraden heilt sie",
+
+ "frozendecoy": "Eisige Attrappe",
+ "frozendecoy_desc": "Deine Attrappe friert alle Spieler in der Nähe ein",
+
+ "gambler": "Zocker",
+ "gambler_desc": "Wähle eine Fertigkeit aus der Liste aus.",
+ "gambler_select_info": "Wähle deine Fähigkeit aus:",
+ "gambler_more": "#00FF00|Aktualisieren für ${0}",
+ "gambler_no_money": "Nicht genug Geld.",
+
+ "ghost": "Geist",
+ "ghost_desc": "Du bist vollständig unsichtbar",
+
+ "glaz": "Glaz",
+ "glaz_desc": "Du kannst durch Rauchgranaten hindurchsehen",
+
+ "glitch": "Glitch",
+ "glitch_desc": "Deaktiviert das Radar für einen ausgewählten Gegner",
+ "glitch_enemy_info": "Dein Radar wurde deaktiviert",
+ "glitch_player_info": "Das Radar des Spielers ‚{0}‘ wurde deaktiviert.",
+ "glitch_select_info": "Radar des Spielers ausschalten:",
+
+ "glue": "Glue",
+ "glue_desc": "Deine Granaten haften an Wänden",
+
+ "godmode": "Gott-Modus",
+ "godmode_desc": "Klicke auf [css_useSkill], um für kurze Zeit unsterblich zu werden",
+ "godmode_off": "Unsterblichkeit deaktiviert",
+ "godmode_on": "Unsterblichkeit aktiviert",
+
+ "grenadier": "Grenadier",
+ "grenadier_desc": "Du hast unendlich viele Granaten",
+
+ "healingsmoke": "Heilender Rauch",
+ "healingsmoke_desc": "Deine Rauchgranaten heilen",
+
+ "hermit": "Einsiedler",
+ "hermit_desc": "Durch das Töten von Gegnern werden Munition und ein Teil der Gesundheit wiederhergestellt",
+
+ "holyhandgrenade": "Heilige Handgranate",
+ "holyhandgrenade_desc": "Deine HE-Granaten verursachen doppelten Schaden und haben doppelte Reichweite",
+
+ "iana": "Hologramm",
+ "iana_desc": "Klicken Sie auf [css_useSkill], um Ihr Hologramm für einige Sekunden zu steuern",
+
+ "impostor": "Betrüger",
+ "impostor_desc": "Du beginnst die Runde mit einem feindlichen Spielermodell",
+
+ "infiniteammo": "Unendliche Munition",
+ "infiniteammo_desc": "Du erhältst unendliche Munition für alle deine Waffen",
+
+ "jackal": "Spürhund",
+ "jackal_desc": "Jeder Gegner hinterlässt eine Spur",
+
+ "jammer": "Störsender",
+ "jammer_desc": "Wähle einen Spieler aus, um dessen Fadenkreuz zu deaktivieren",
+ "jammer_enemy_info": "Dein Fadenkreuz wurde deaktiviert.",
+ "jammer_player_info": "Das Fadenkreuz von Spieler ‚{0}‘ wurde deaktiviert.",
+ "jammer_select_info": "Fadenkreuz des Spielers deaktivieren:",
+
+ "jester": "Narr",
+ "jester_desc": "Im Narrenmodus kannst du keinen Schaden erleiden oder verursachen. Dieser Modus ändert sich alle paar Sekunden.",
+ "jester_mode": "Jester-Modus",
+ "jester_on": "EIN",
+ "jester_off": "AUS",
+
+ "jumpban": "Beinlos",
+ "jumpban_desc": "Wähle einen Spieler, der nicht springen kann",
+ "jumpban_enemy_info": "Jemand hat dir die Beine abgeschnitten.",
+ "jumpban_player_info": "Der Spieler ‚{0}‘ kann nicht mehr springen.",
+ "jumpban_select_info": "Spieler vom Springen ausschließen:",
+
+ "jumpingjack": "Jumping Jack",
+ "jumpingjack_desc": "Durch Springen wird die Gesundheit wiederhergestellt",
+
+ "killerflash": "Killer Flash",
+ "killerflash_desc": "Jeder, der durch deine Blendgranate vollständig geblendet wird, stirbt (einschließlich dir selbst)",
+
+ "lifeswap": "Lebensaustausch",
+ "lifeswap_desc": "Wähle einen Spieler aus, mit dem du deine Gesundheit austauschen möchtest",
+ "lifeswap_enemy_info": "Jemand hat sich deine Gesundheit ausgeliehen",
+ "lifeswap_player_info": "Du hast deine Gesundheit mit dem Spieler \"{0}\" ausgetauscht",
+ "lifeswap_select_info": "Tausche Gesundheit mit Spieler:",
+
+ "longknife": "Langes Messer",
+ "longknife_desc": "Ein Messerangriff verursacht unabhängig von der Entfernung Schaden",
+
+ "longzeus": "Langer Zeus",
+ "longzeus_desc": "Zeus verursacht unabhängig von der Entfernung Schaden",
+
+ "magnifier": "Lupe",
+ "magnifier_desc": "Vergrößert den Bildschirm des Gegners und verringert dessen Sichtfeld",
+ "magnifier_enemy_info": "Dein Sichtfeld wurde verzerrt!",
+ "magnifier_player_info": "Der Spieler ‚{0}‘ wurde in den Zoom-Modus versetzt.",
+ "magnifier_select_info": "Bildschirm des Spielers vergrößern:",
+
+ "medic": "Sanitäter",
+ "medic_desc": "Klicke auf [css_useSkill], um eine Heilungsladung zu verwenden, die 50 Gesundheitspunkte wiederherstellt",
+
+ "bankrupt": "Bankrott",
+ "bankrupt_desc": "Wähle den Spieler aus, der sein gesamtes Geld verlieren wird",
+ "bankrupt_enemy_info": "Du bist bankrott.",
+ "bankrupt_player_info": "Der Spieler ‚{0}‘ ist bankrott.",
+ "bankrupt_select_info": "Wähle einen Spieler aus, der bankrott gehen soll:",
+
+ "muhammed": "Muhammed",
+ "muhammed_desc": "Du explodierst beim Tod und tötest Spieler in deiner Nähe",
+ "muhammed_explosion": "ALLAHU AKBAR!!!",
+
+ "ninja": "Ninja",
+ "ninja_desc": "Wenn du stillstehst, erhöht sich deine Unsichtbarkeit um 33 %, wenn du dich duckst um 33 % und wenn du ein Messer hältst um 33 %",
+
+ "nonades": "No-Nades",
+ "nonades_desc": "Granaten fügen dir keinen Schaden zu",
+
+ "norecoil": "Fokus",
+ "norecoil_desc": "Kein Rückstoß beim Schießen",
+
+ "noclip": "NoClip",
+ "noclip_desc": "Klicke auf [css_useSkill], um NoClip für kurze Zeit zu aktivieren",
+
+ "oneshot": "One-Shot",
+ "oneshot_desc": "Ein Treffer tötet einen Gegner sofort",
+
+ "onlyhead": "Nur Kopf",
+ "onlyhead_desc": "Du erleidest nur Schaden am Kopf",
+
+ "paweljumper": "Pawel Jumper",
+ "paweljumper_desc": "Du erhältst eine zufällige Anzahl zusätzlicher Sprünge",
+ "paweljumper_desc2": "Du erhältst {0} zusätzliche Sprünge",
+
+ "phoenix": "Phönix",
+ "phoenix_desc": "Du hast eine zufällige Chance, nach dem Tod wieder zu erscheinen",
+ "phoenix_desc2": "Deine Chance, nach dem Tod wieder zu erscheinen: {0} %",
+ "phoenix_respawn": "Du bist dank der Kraft von CHATCOLORS.REDPhoenix aus der Asche auferstanden",
+
+ "psychicdefusing": "Psychic Defusing",
+ "psychicdefusing_desc": "Wenn du dich in der Nähe der Bombe befindest, beginnst du, sie zu entschärfen",
+ "psychicdefusing_hud_info": "{0} Sekunden verbleibend bis zur Entschärfung",
+
+ "pilot": "Pilot",
+ "pilot_desc": "Fliege für eine begrenzte Zeit. Halte [USE - E] gedrückt, um zu fliegen",
+ "pilot_hud_info": "Treibstoff",
+
+ "planter": "Freier Planter",
+ "planter_desc": "Du kannst die Bombe überall platzieren, die Detonationszeit beträgt 60 Sekunden.",
+
+ "poison": "Gift",
+ "poison_desc": "Wähle einen Spieler aus, der alle paar Sekunden Schaden nimmt",
+ "poison_enemy_info": "Du wurdest vergiftet",
+ "poison_player_info": "Der Spieler ‚{0}‘ wurde vergiftet",
+ "poison_select_info": "Einen Spieler vergiften:",
+
+ "primaryban": "Keine Gewehre",
+ "primaryban_desc": "Wähle einen Spieler aus, der keine Gewehre verwenden kann",
+ "primaryban_enemy_info": "Du kannst keine Gewehre mehr verwenden.",
+ "primaryban_player_info": "Der Spieler ‚{0}‘ kann keine Gewehre mehr verwenden.",
+ "primaryban_select_info": "Gewehre für Spieler verbieten:",
+
+ "prosthesis": "Prothese",
+ "prosthesis_desc": "Arme und Beine sind kugelsicher",
+
+ "push": "Pusher",
+ "push_desc": "Du hast eine zufällige Chance, einen Gegner zurückzustoßen, wenn du ihn triffst",
+ "push_desc2": "Deine Chancen, den Gegner zurückzustoßen, betragen: {0} %",
+
+ "pyro": "Pyro",
+ "pyro_desc": "Molotow-Cocktail stellt Gesundheit wieder her",
+
+ "quickshot": "Schnellfeuer",
+ "quickshot_desc": "Alle Kugeln werden sehr schnell abgefeuert",
+
+ "radarhack": "Radar-Hack",
+ "radarhack_desc": "Gegner sind auf dem Radar sichtbar",
+
+ "rambo": "Rambo",
+ "rambo_desc": "Du erhältst zu Beginn der Runde eine zufällige Menge an Gesundheit",
+
+ "randomweapon": "Zufällige Waffe",
+ "randomweapon_desc": "Klicke auf [css_useSkill], um eine zufällige Waffe zu erhalten",
+
+ "rezombie": "Re-Zombie",
+ "rezombie_desc": "Nach dem Tod spawnst du als Zombie mit erhöhter Gesundheit und ohne Waffen",
+
+ "reactivearmor": "Reaktive Rüstung",
+ "reactivearmor_desc": "Die Rüstung absorbiert den ersten erlittenen Schaden",
+
+ "regeneration": "Regeneration",
+ "regeneration_desc": "Du stellst alle paar Sekunden Gesundheit wieder her",
+
+ "replicator": "Replikator",
+ "replicator_desc": "Klicke auf [css_useSkill], um eine Replik zu erstellen, die bei Treffer Schaden verursacht",
+
+ "retreat": "Rückzug",
+ "retreat_desc": "Klicke auf [css_useSkill], um zum Spawn zurückzukehren",
+
+ "returntosender": "Zurück zum Absender",
+ "returntosender_desc": "Der erste Treffer eines Gegners schickt ihn zurück zu seinem Spawn",
+
+ "richboy": "Rich Boy",
+ "richboy_desc": "Du erhältst zu Beginn der Runde einen zufälligen Geldbetrag",
+
+ "robinhood": "Robin Hood",
+ "robinhood_desc": "Wenn du einem Gegner Schaden zufügst, stiehlst du ihm sein Geld",
+
+ "rubber": "Gummigeschosse",
+ "rubber_desc": "Deine Kugeln verlangsamen Spieler erheblich",
+
+ "saper": "Sapper",
+ "saper_desc": "Du kannst Bomben schneller legen und entschärfen",
+
+ "secondlife": "Zweite Chance",
+ "secondlife_desc": "Nach dem Tod spawnst du mit derselben Gesundheitsanzeige wieder",
+
+ "shade": "Schatten",
+ "shade_desc": "Du hast eine zufällige Chance, dich hinter einen getroffenen Gegner zu teleportieren",
+ "shade_desc2": "Deine Chancen, dich hinter einen getroffenen Gegner zu teleportieren, betragen: {0} %",
+ "shade_nospace": "Kein Platz verfügbar",
+
+ "shortbomb": "Kurze Zündschnur",
+ "shortbomb_desc": "Die Bombe explodiert viel schneller",
+
+ "silent": "Leise",
+ "silent_desc": "Deine Schritte und Sprünge sind für ANDERE Spieler lautlos",
+
+ "sniperelite": "Sniper Elite",
+ "sniperelite_customname": "Sniper Elite-Fähigkeit",
+ "sniperelite_desc": "Klicke auf [css_useSkill], um deine aktuelle Waffe gegen eine AWP auszutauschen",
+
+ "soldier": "Soldat",
+ "soldier_desc": "Du hast einen zufälligen Schadensmultiplikator",
+ "soldier_desc2": "Dein Schadensmultiplikator beträgt: {0}x",
+
+ "soundmaker": "Soundmaker",
+ "soundmaker_desc": "Klicke auf [css_useSkill], um für jeden Gegner einen Sound auszulösen",
+
+ "spectator": "Zuschauer",
+ "spectator_desc": "Klicke auf [css_useSkill], um einen zufälligen Gegner zu beobachten",
+
+ "swapposition": "Positionstausch",
+ "swapposition_desc": "Klicke auf [css_useSkill], um mit einem zufälligen Gegner die Plätze zu tauschen",
+
+ "teleporter": "Teleporter",
+ "teleporter_desc": "Du tauschst mit dem getroffenen Gegner die Plätze",
+
+ "thief": "Dieb",
+ "thief_desc": "Du kannst einem ausgewählten Spieler eine Fertigkeit stehlen",
+ "thief_enemy_info": "Deine Fertigkeit wurde gestohlen",
+ "thief_player_info": "Die Fertigkeit des Spielers ‚{0}‘ wurde gestohlen",
+ "thief_select_info": "Fähigkeit eines Spielers stehlen:",
+ "thief_incorrect_skill": "Diese Fähigkeit kann nicht ausgewählt werden!",
+
+ "thirdeye": "Drittes Auge",
+ "thirdeye_desc": "Klicke auf [css_useSkill], um die Third-Person-Ansicht zu aktivieren",
+
+ "thorns": "Dornen",
+ "thorns_desc": "Dein Gegner erhält einen Teil des Schadens, den er dir zugefügt hat",
+
+ "toxicsmoke": "Giftiger Rauch",
+ "toxicsmoke_desc": "Deine Rauchgranaten verursachen Schaden",
+
+ "wallhack": "Wallhack",
+ "wallhack_desc": "Du kannst Feinde durch Wände hindurch sehen",
+
+ "watchmaker": "Uhrmacher",
+ "watchmaker_desc": "Jeder Granatenwurf verändert die Rundenzeit",
+ "watchmaker_ct": "Rundenzeit um {0} Sekunden verkürzt",
+ "watchmaker_tt": "Rundenzeit um {0} Sekunden verlängert",
+
+ "weaponsswap": "Waffenwechsel",
+ "weaponsswap_desc": "Klicke auf [css_useSkill], um mit einem zufälligen Gegner die Waffen zu tauschen",
+ "weaponsswap_hud_info2": "Du hast keine Waffe zum Tauschen",
+
+ "zeus": "Zeus",
+ "zeus_desc": "Zeus x27 lädt sich sofort wieder auf",
+
+ "your_skill": "Deine aktuelle Fertigkeit",
+ "enemy_skill": "Fähigkeit des Gegners",
+ "observer_skill": "Fähigkeit des Spielers",
+ "welcome_message": "Willkommen {PLAYER} bei {SERVER_NAME}",
+ "drawing_skill": "Eine Fertigkeit zeichnen",
+ "disabled_weapon": "Du kannst diese Waffe nicht verwenden",
+
+ "hud_info": "Warte weitere {0} Sekunden",
+ "hud_info_no_enemy": "Kein Feind gefunden",
+ "active_hud_info": "Noch {0} Millisekunden aktiv",
+
+ "skills_menu": "Fähigkeitenliste",
+ "no_player": "Kein passender Spieler gefunden.",
+ "duplicate_player": "Mehr als ein Spieler mit demselben Namen gefunden.",
+ "selectplayerskill_command": "Gib /t ein",
+ "selectplayerskill_incorrect_enemy_index": "Es wurden keine Spieler gefunden, die ausgewählt werden können.",
+
+ "skill_not_found_setskill": "Keine solche CHATCOLORS.REDskill gefunden",
+ "player_not_found_setskill": "Kein solcher CHATCOLORS.REDplayer gefunden",
+ "correct_form_setskill": "Korrekte Verwendung: CHATCOLORS.RED!setskill ",
+ "correct_form_setscore": "Korrekte Verwendung: CHATCOLORS.RED!setscore ",
+ "done_setskill": "Fähigkeit festgelegt",
+ "error_setskill": "CHATCOLORS.REDskill konnte nicht festgelegt werden",
+ "for_setskill": "für",
+
+ "invalid_map": "Kartenname falsch eingegeben!",
+ "loading_map": "Neue Karte wird geladen",
+
+ "pause": "Spiel wurde unterbrochen",
+ "unpause": "Spiel wurde fortgesetzt",
+ "healed": "Du wurdest geheilt.",
+ "game_start": "Spiel gestartet!",
+ "reload": "Sprachen und Konfigurationen wurden neu geladen.",
+ "hud_on": "HUD wurde aktiviert.",
+ "hud_off": "HUD wurde deaktiviert.",
+
+ "vote_started": "Abstimmung gestartet: ‚{0}‘",
+ "vote_timeout": "Zeitlimit für Abstimmung ‚{0}‘ abgelaufen!",
+ "vote_wait": "Sie müssen warten, bevor Sie eine weitere Abstimmung starten können!",
+ "vote_same_wait": "Sie müssen warten, bevor Sie dieselbe Abstimmung erneut starten können!",
+ "vote_not_enough_players": "Nicht genügend Spieler, um eine Abstimmung zu starten!",
+ "vote_alredy_voted": "Du hast bereits abgestimmt!",
+ "vote_vote": "Abstimmen",
+
+ "bombsite_a": "Bombenplatz A",
+ "bombsite_b": "Bombenplatz B",
+ "bombplanted": "Die Bombe wurde gelegt\n{0} Sekunden bis zur Detonation",
+
+ "teammate_skills": "Die Fähigkeiten Ihrer Teamkollegen",
+ "summary": "Zusammenfassung der letzten runde",
+
+ "menu_controlls_scroll": "W/S – Scrollen",
+ "menu_controlls_padding": " | ",
+ "menu_controlls_select": "E – Auswählen"
+}
\ No newline at end of file
diff --git a/jRandomSkills - Server Files/plugins/!jRandomSkills/languages/en.json b/jRandomSkills - Server Files/plugins/jRandomSkills/languages/en.json
similarity index 95%
rename from jRandomSkills - Server Files/plugins/!jRandomSkills/languages/en.json
rename to jRandomSkills - Server Files/plugins/jRandomSkills/languages/en.json
index 745900b..32a8e1a 100644
--- a/jRandomSkills - Server Files/plugins/!jRandomSkills/languages/en.json
+++ b/jRandomSkills - Server Files/plugins/jRandomSkills/languages/en.json
@@ -55,6 +55,12 @@
"c4camouflage": "C4 Camouflage",
"c4camouflage_desc": "You are invisible while holding the bomb",
+ "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_player_info": "'{0}' must now be more careful.",
+ "carefulbullets_select_info": "Inaccuracy hurts the player:",
+
"catapult": "Catapult",
"catapult_desc": "You have a random chance to launch an enemy upwards",
"catapult_desc2": "Your chance to launch an enemy on hit is: {0}%",
@@ -68,6 +74,10 @@
"cutter": "Cutter",
"cutter_desc": "Instant kill with a knife",
+ "cypher": "Cypher",
+ "cypher_desc": "Click [css_useSkill] to create/switch to a camera",
+ "cypher_nospace": "The camera must be positioned at right angles to the wall",
+
"darkness": "Darkness",
"darkness_desc": "Applies a darkness effect to a chosen enemy",
"darkness_enemy_info": "Let the lights go out.",
@@ -142,6 +152,7 @@
"gambler_desc": "Select a skill from the list provided.",
"gambler_select_info": "Select your skill:",
"gambler_more": "#00FF00|Refresh for ${0}",
+ "gambler_no_money": "Not enough money.",
"ghost": "Ghost",
"ghost_desc": "You are completely invisible",
@@ -175,6 +186,9 @@
"holyhandgrenade": "Holy Hand Grenade",
"holyhandgrenade_desc": "Your HE grenades deal double damage and have double range",
+ "iana": "Hologram",
+ "iana_desc": "Click [css_useSkill] to control your hologram for a few seconds",
+
"impostor": "Impostor",
"impostor_desc": "You start the round with an enemy player model",
@@ -356,6 +370,7 @@
"silent_desc": "Your footsteps and jumps are silent to OTHER players",
"sniperelite": "Sniper Elite",
+ "sniperelite_customname": "Sniper Elite Skill",
"sniperelite_desc": "Click [css_useSkill] to swap your current weapon for an AWP",
"soldier": "Soldier",
@@ -451,10 +466,10 @@
"bombsite_a": "Bombsite A",
"bombsite_b": "Bombsite B",
+ "bombplanted": "The bomb has been planted\n{0} seconds till detonation",
"teammate_skills": "Your teammates' skills",
- "summary_start": "======SUMMARY=OF=THE=LAST=ROUND======",
- "summary_end": "=======================================",
+ "summary": "Summary of the last round",
"menu_controlls_scroll": "W/S - Scroll",
"menu_controlls_padding": " | ",
diff --git a/jRandomSkills - Server Files/plugins/!jRandomSkills/languages/fr.json b/jRandomSkills - Server Files/plugins/jRandomSkills/languages/fr.json
similarity index 95%
rename from jRandomSkills - Server Files/plugins/!jRandomSkills/languages/fr.json
rename to jRandomSkills - Server Files/plugins/jRandomSkills/languages/fr.json
index 56e1401..91cfcd7 100644
--- a/jRandomSkills - Server Files/plugins/!jRandomSkills/languages/fr.json
+++ b/jRandomSkills - Server Files/plugins/jRandomSkills/languages/fr.json
@@ -55,6 +55,12 @@
"c4camouflage": "Camouflage C4",
"c4camouflage_desc": "Vous êtes invisible en tenant la bombe",
+ "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_player_info": "« {0} » doit désormais être plus prudent.",
+ "carefulbullets_select_info": "L'inexactitude nuit au joueur :",
+
"catapult": "Catapulte",
"catapult_desc": "Vous avez une chance aléatoire de projeter un ennemi en l’air",
"catapult_desc2": "Votre chance de projeter un ennemi à l’impact est : {0}%",
@@ -68,6 +74,10 @@
"cutter": "Trancheur",
"cutter_desc": "Coup de couteau = mort instantanée",
+ "cypher": "Caméra",
+ "cypher_desc": "Cliquez sur [css_useSkill] pour créer/passer à une caméra.",
+ "cypher_nospace": "La caméra doit être positionnée à angle droit par rapport au mur",
+
"darkness": "Obscurité",
"darkness_desc": "Applique un effet d’obscurité à un ennemi choisi",
"darkness_enemy_info": "Que la lumière s’éteigne.",
@@ -142,6 +152,7 @@
"gambler_desc": "Sélectionnez une compétence dans la liste proposée.",
"gambler_select_info": "Sélectionnez votre compétence :",
"gambler_more": "#00FF00|Rafraîchir pour ${0}",
+ "gambler_no_money": "Pas assez d'argent.",
"ghost": "Fantôme",
"ghost_desc": "Vous êtes complètement invisible",
@@ -175,6 +186,9 @@
"holyhandgrenade": "Grenade Sacrée",
"holyhandgrenade_desc": "Vos grenades HE infligent le double de dégâts et ont une portée doublée",
+ "iana": "Hologramme",
+ "iana_desc": "Cliquez sur [css_useSkill] pour contrôler votre hologramme pendant quelques secondes",
+
"impostor": "Imposteur",
"impostor_desc": "Vous commencez le round avec un modèle de joueur ennemi",
@@ -356,6 +370,7 @@
"silent_desc": "Vos pas et vos sauts sont silencieux pour les AUTRES joueurs",
"sniperelite": "Sniper d’Élite",
+ "sniperelite_customname": "Compétence Sniper d’Élite",
"sniperelite_desc": "Appuyez sur [css_useSkill] pour échanger votre arme actuelle contre un AWP",
"soldier": "Soldat",
@@ -451,12 +466,12 @@
"bombsite_a": "Site de bombe A",
"bombsite_b": "Site de bombe B",
+ "bombplanted": "La bombe a été posée\n{0} secondes avant l'explosion",
"teammate_skills": "Compétences de vos coéquipiers",
- "summary_start": "======RÉSUMÉ=DU=DERNIER=ROUND======",
- "summary_end": "===================================",
+ "summary": "Résumé du dernier round",
"menu_controlls_scroll": "W/S - Défilement",
"menu_controlls_padding": " | ",
"menu_controlls_select": "E - Sélectionner"
-}
+}
\ No newline at end of file
diff --git a/jRandomSkills - Server Files/plugins/!jRandomSkills/languages/pl.json b/jRandomSkills - Server Files/plugins/jRandomSkills/languages/pl.json
similarity index 95%
rename from jRandomSkills - Server Files/plugins/!jRandomSkills/languages/pl.json
rename to jRandomSkills - Server Files/plugins/jRandomSkills/languages/pl.json
index 2897792..0a2f4f9 100644
--- a/jRandomSkills - Server Files/plugins/!jRandomSkills/languages/pl.json
+++ b/jRandomSkills - Server Files/plugins/jRandomSkills/languages/pl.json
@@ -55,6 +55,12 @@
"c4camouflage": "C4 Kamuflaż",
"c4camouflage_desc": "Kiedy trzymasz bombę, jesteś niewidzialny",
+ "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_player_info": "'{0}' musi teraz być bardziej ostrożny.",
+ "carefulbullets_select_info": "Niedokładność szkodzi graczowi:",
+
"catapult": "Katapulta",
"catapult_desc": "Masz losową szanse na podrzucenie wroga",
"catapult_desc2": "Twoje szanse na podrzucenie wroga po trafieniu to: {0}%",
@@ -68,6 +74,10 @@
"cutter": "Scyzoryk",
"cutter_desc": "Natychmiastowe zabójstwo nożem",
+ "cypher": "Kamera",
+ "cypher_desc": "Kliknij [css_useSkill], aby utworzyć/przełączyć się na kamerę",
+ "cypher_nospace": "Kamera musi być ustawiona pod kątem prostym do ściany",
+
"darkness": "Mrok",
"darkness_desc": "Nadaje efekt ciemności wybranemu przeciwnikowi",
"darkness_enemy_info": "Niech zgasną światła.",
@@ -142,6 +152,7 @@
"gambler_desc": "Wybierz umiejętność z podanej listy.",
"gambler_select_info": "Wybierz umiejętność:",
"gambler_more": "#00FF00|Odśwież za ${0}",
+ "gambler_no_money": "Niewystarczająca ilość pieniędzy.",
"ghost": "Duszek",
"ghost_desc": "Jesteś całkowicie niewidzialny",
@@ -175,6 +186,9 @@
"holyhandgrenade": "Święty Granat Ręczny",
"holyhandgrenade_desc": "Twoje granaty uderzeniowe zadają podwójne obrażenia i mają podwójny zasięg",
+ "iana": "Hologram",
+ "iana_desc": "Kliknij [css_useSkill], aby sterować hologramem przez kilka sekund",
+
"impostor": "Szpieg",
"impostor_desc": "Na początku rundy otrzymujesz model postaci przeciwnika",
@@ -356,6 +370,7 @@
"silent_desc": "Twoje kroki i skoki są niesłyszalne dla INNYCH graczy",
"sniperelite": "SzeliS",
+ "sniperelite_customname": "Mityczna AWP",
"sniperelite_desc": "Kliknij [css_useSkill], aby zamienić aktualną broń na AWP",
"soldier": "Żołnierz",
@@ -451,10 +466,10 @@
"bombsite_a": "Strefa detonacji A",
"bombsite_b": "Strefa detonacji B",
+ "bombplanted": "Bomba została podłożona\n{0} sekund do detonacji",
"teammate_skills": "Supermoce twoich sojuszników",
- "summary_start": "======PODSUMOWANIE=Z=OSTATNIEJ=RUNDY======",
- "summary_end": "============================================",
+ "summary": "Podsumowanie z ostatniej rundy",
"menu_controlls_scroll": "W/S – Przewijanie",
"menu_controlls_padding": " | ",
diff --git a/jRandomSkills - Server Files/plugins/!jRandomSkills/languages/pt-br.json b/jRandomSkills - Server Files/plugins/jRandomSkills/languages/pt-br.json
similarity index 57%
rename from jRandomSkills - Server Files/plugins/!jRandomSkills/languages/pt-br.json
rename to jRandomSkills - Server Files/plugins/jRandomSkills/languages/pt-br.json
index 22a9ece..8884abb 100644
--- a/jRandomSkills - Server Files/plugins/!jRandomSkills/languages/pt-br.json
+++ b/jRandomSkills - Server Files/plugins/jRandomSkills/languages/pt-br.json
@@ -1,426 +1,442 @@
{
- "none": "Nenhuma",
+ "none": "Nenhum",
"none_desc": "Você não tem nenhuma habilidade",
"aimbot": "Aimbot",
- "aimbot_desc": "Toda bala que você acertar conta como um hs",
+ "aimbot_desc": "Cada bala que você acertar conta como um tiro na cabeça",
- "anomaly": "Máquina do Tempo",
- "anomaly_desc": "Você volta alguns segundos no tempo",
+ "anomaly": "Anomalia",
+ "anomaly_desc": "Você retrocede alguns segundos no tempo",
"antyflash": "Anti-Flash",
- "antyflash_desc": "Você é imune a flashes, e flashbangs duram 7 segundos",
+ "antyflash_desc": "Você é imune a granadas de flash, e suas granadas de flash duram 7 segundos",
"antyhead": "Cabeça de Ferro",
- "antyhead_desc": "Você não recebe dano de headshots",
+ "antyhead_desc": "Você não recebe dano de tiros na cabeça",
- "areareaper": "Ceifador de Bombsite",
- "areareaper_desc": "Você pode escolher um bombsite para desativar",
- "areareaper_incorrect_site": "Nenhum bombsite encontrado.",
- "areareaper_no_site": "Nenhum bombsite encontrado.",
- "areareaper_select_info": "Escolha o bomb p/ desativar:",
- "areareaper_site_disabled": "Bombsite {0} foi desativado - nenhuma bomba pode ser plantada lá!",
+ "areareaper": "Ceifador de Zonas",
+ "areareaper_desc": "Você pode escolher um local de bomba para desativar",
+ "areareaper_incorrect_site": "Nenhum local de bomba encontrado.",
+ "areareaper_no_site": "Nenhum local de bomba encontrado.",
+ "areareaper_select_info": "Escolha área p/ desativar:",
+ "areareaper_site_disabled": "Local de bomba {0} foi desativado - nenhuma bomba pode ser plantada lá!",
"areareaper_used_info": "Seu poder já foi usado.",
- "armored": "Super Tiro",
- "armored_desc": "Seu dano é multiplicado por um valor aleatório",
- "armored_desc2": "Seu multiplicador de dano é: {0}x",
+ "armored": "Blindado",
+ "armored_desc": "Você tem um multiplicador de dano recebido aleatório",
+ "armored_desc2": "Seu multiplicador de dano recebido é: {0}x",
"assassin": "Assassino",
- "assassin_desc": "Você causa mais dano aos inimigos de costas",
+ "assassin_desc": "Você causa mais dano aos inimigos por trás",
"astronaut": "Astronauta",
- "astronaut_desc": "Sua gravidade é multiplicada por um valor aleatório",
+ "astronaut_desc": "Você recebe um valor de gravidade aleatório no início da rodada",
"astronaut_desc2": "Sua gravidade aleatória é: {0}x",
- "bankrupt": "Ladrão",
+ "bankrupt": "Falido",
"bankrupt_desc": "Escolha o jogador que perderá todo o dinheiro",
- "bankrupt_enemy_info": "Você ficou pobre",
- "bankrupt_player_info": "O jogador '{0}' ficou pobre.",
- "bankrupt_select_info": "Escolha jogador p/ ficar pobre:",
+ "bankrupt_enemy_info": "Você faliu.",
+ "bankrupt_player_info": "O jogador '{0}' faliu.",
+ "bankrupt_select_info": "Escolha jogador p/ falir:",
- "baseball": "Decoy Aleluia",
- "baseball_desc": "Sua decoy ricocheteia nas paredes e mata instantaneamente um inimigo ao acertá-lo",
+ "baseball": "Jogador de Beisebol",
+ "baseball_desc": "Seu chamariz ricocheteia nas paredes e mata instantaneamente um inimigo ao acertar",
- "behind": "Pião do Baú",
+ "behind": "Giro do Inimigo",
"behind_desc": "Você tem uma chance aleatória de girar um inimigo 180 graus ao acertá-lo",
- "behind_desc2": "Sua chance de girar um inimigo ao acertá-lo é: {0}%",
+ "behind_desc2": "Sua chance de girar um inimigo ao acertar é: {0}%",
"blademaster": "Mestre das Lâminas",
- "blademaster_desc": "Enquanto segura a faca, você tem chance de desviar de um tiro",
-
+ "blademaster_desc": "Enquanto segura uma faca, você tem uma alta chance de desviar de um tiro",
+
"bunnyhop": "Coelho",
"bunnyhop_desc": "Você ganha \"BunnyHop\" automático",
-
+
"c4camouflage": "Camuflagem C4",
"c4camouflage_desc": "Você fica invisível enquanto segura a bomba",
-
+
+ "carefulbullets": "Balas cuidadosas",
+ "carefulbullets_desc": "Selecione um jogador que sofra dano por cada tiro errado",
+ "carefulbullets_enemy_info": "A partir de agora, a imprecisão vai literalmente doer.",
+ "carefulbullets_player_info": "Agora, '{0}' precisa ter mais cuidado.",
+ "carefulbullets_select_info": "A imprecisão prejudica o jogador:",
+
"catapult": "Catapulta",
"catapult_desc": "Você tem uma chance aleatória de lançar um inimigo para cima",
- "catapult_desc2": "Sua chance de lançar um inimigo ao acertá-lo é: {0}%",
-
+ "catapult_desc2": "Sua chance de lançar um inimigo ao acertar é: {0}%",
+
"chicken": "Galinha",
- "chicken_desc": "Você é uma galinha com +10% de movimento mais rápido e -50 HP",
-
- "chillout": "Esqueci a Senha",
+ "chicken_desc": "Você ganha um modelo de galinha + 10% de movimento mais rápido - 50 HP",
+
+ "chillout": "Descontraído",
"chillout_desc": "Plantar a bomba leva significativamente mais tempo",
-
- "cutter": "Corte Rápido",
- "cutter_desc": "Você mata instantaneamente com a faca",
-
+
+ "cutter": "Cortador",
+ "cutter_desc": "Mata instantaneamente com uma faca",
+
+ "cypher": "Câmera",
+ "cypher_desc": "Clique em [css_useSkill] para criar/mudar para uma câmera",
+ "cypher_nospace": "A câmera deve ser posicionada em ângulo reto com a parede",
+
"darkness": "Escuridão",
"darkness_desc": "Aplica um efeito de escuridão a um inimigo escolhido",
"darkness_enemy_info": "Que as luzes se apaguem.",
"darkness_player_info": "A escuridão tomou conta do jogador '{0}'.",
"darkness_select_info": "Escolha jogador: escuridão:",
-
+
"deactivator": "Desativador",
- "deactivator_desc": "Escolha um jogador para desativar a habilidade",
+ "deactivator_desc": "Escolha um jogador cuja habilidade você deseja desativar",
"deactivator_enemy_info": "Sua habilidade foi desativada.",
"deactivator_player_info": "A habilidade do jogador '{0}' foi desativada.",
"deactivator_select_info": "Desativar skill do jogador:",
-
+
"deaf": "Surdo",
- "deaf_desc": "Escolha um jogador para desativar todos os sons",
+ "deaf_desc": "Escolha um jogador para silenciar todos os sons",
"deaf_enemy_info": "Seus fones de ouvido saíram do jogo.",
"deaf_player_info": "O som foi desativado para o jogador '{0}'.",
"deaf_select_info": "Silenciar jogador:",
-
+
"disarmament": "Desarmamento",
- "disarmament_desc": "Você tem uma chance aleatória de fazer um inimigo dropar a arma ao acertá-lo",
+ "disarmament_desc": "Você tem uma chance aleatória de fazer um inimigo largar sua arma ao acertá-lo",
"disarmament_desc2": "Sua chance de desarmar um inimigo é: {0}%",
+
"distancer": "Medidor de Distância",
"distancer_desc": "Você pode ver a distância até o inimigo mais próximo",
-
- "dash": "Impulso",
- "dash_desc": "Pule novamente para receber um impulso",
-
+
+ "dash": "Dash",
+ "dash_desc": "Execute um segundo salto para dar um dash",
+
"dracula": "Drácula",
- "dracula_desc": "Acertar um inimigo restaura sua vida igual a ao dano causado",
-
- "duplicator": "ctrl+c ctrl+v",
- "duplicator_desc": "Escolha um jogador para copiar a habilidade",
+ "dracula_desc": "Acertar um inimigo restaura saúde igual a uma porcentagem do dano causado",
+
+ "duplicator": "Duplicador",
+ "duplicator_desc": "Escolha um jogador para copiar sua habilidade",
"duplicator_player_info": "A habilidade do jogador '{0}' foi copiada.",
"duplicator_select_info": "Copiar skill do jogador:",
-
+
"dwarf": "Anão",
- "dwarf_desc": "Sua altura agora é aleatória",
- "dwarf_desc2": "Seu multiplicador de altura é: {0}x",
-
+ "dwarf_desc": "Tamanho de personagem aleatório no início da rodada",
+ "dwarf_desc2": "Seu multiplicador de tamanho é: {0}x",
+
"enemyspawn": "Spawn Inimigo",
- "enemyspawn_desc": "Clique em [css_useSkill] para se teletransportar para a base inimiga",
-
+ "enemyspawn_desc": "Clique em [css_useSkill] para se teletransportar para o spawn inimigo",
+
"explosiveshot": "Tiro Explosivo",
"explosiveshot_desc": "Chance aleatória de disparar uma bala explosiva enquanto atira",
"explosiveshot_desc2": "Sua chance de disparar uma bala explosiva: {0}%",
-
- "falconeye": "Olho de Águia",
- "falconeye_desc": "Clique em [css_useSkill] para ativar uma câmera 360 com visão aérea",
-
+
+ "falconeye": "Olho de Falcão",
+ "falconeye_desc": "Clique em [css_useSkill] para ativar uma câmera com visão aérea",
+
"fastreload": "Recarga Rápida",
"fastreload_desc": "Clique em [css_useSkill] para recarregar a arma que você está segurando",
-
- "flash": "Ligeirinho",
- "flash_desc": "Velocidade de movimentação aleatória no início da rodada",
+
+ "flash": "Flash",
+ "flash_desc": "Velocidade de jogador aleatória no início da rodada",
"flash_desc2": "Seu multiplicador de velocidade é: {0}x",
-
+
"fortnite": "Fortnite",
- "fortnite_desc": "Clique em [css_useSkill] para criar uma barreira destrutível",
-
+ "fortnite_desc": "Clique em [css_useSkill] para criar uma barricada destrutível",
+
"fragilebomb": "Bomba Frágil",
"fragilebomb_desc": "Atirar na bomba a danifica",
"fragilebomb_bomb_health": "Vida da bomba",
-
+
"friendlyfire": "Fogo Amigo",
"friendlyfire_desc": "Atirar em companheiros de equipe os cura",
-
- "frozendecoy": "Decoy Congelante",
- "frozendecoy_desc": "Sua decoy congela os players próximos",
-
- "gambler": "Tigrinho",
+
+ "frozendecoy": "Chamariz Congelante",
+ "frozendecoy_desc": "Seu chamariz congela todos os jogadores próximos",
+
+ "gambler": "Apostador",
"gambler_desc": "Selecione uma habilidade da lista.",
"gambler_select_info": "Escolha sua habilidade:",
"gambler_more": "#00FF00|Atualizar por ${0}",
-
+ "gambler_no_money": "Não há dinheiro suficiente.",
+
"ghost": "Fantasma",
"ghost_desc": "Você é completamente invisível",
-
- "glaz": "Smoke Transparente",
- "glaz_desc": "Smokes tornam-se transparentes para você",
-
- "glitch": "Sem Mapa",
+
+ "glaz": "Glaz",
+ "glaz_desc": "Você não pode ver granadas de fumaça",
+
+ "glitch": "Glitch",
"glitch_desc": "Desativa o radar de um inimigo escolhido",
"glitch_enemy_info": "Seu radar foi desativado.",
"glitch_player_info": "O radar do jogador '{0}' foi desativado.",
"glitch_select_info": "Desativar radar do jogador:",
-
- "glue": "Semtex",
+
+ "glue": "Cola",
"glue_desc": "Suas granadas grudam nas paredes",
-
+
"godmode": "Modo Deus",
- "godmode_desc": "Clique em [css_useSkill] para se tornar imortal por alguns segundos",
+ "godmode_desc": "Clique em [css_useSkill] para se tornar imortal por um curto período",
"godmode_off": "Imortalidade desativada",
"godmode_on": "Imortalidade ativada",
-
- "grenadier": "Bomberman",
- "grenadier_desc": "Você tem HEs infinitas",
-
- "healingsmoke": "Smoke Amiga",
- "healingsmoke_desc": "Suas smokes curam",
-
- "hermit": "Sanguessuga",
- "hermit_desc": "Matar restaura munição e uma parte da sua vida",
-
- "holyhandgrenade": "Granada Obesa",
- "holyhandgrenade_desc": "HEs causam dano dobrado e têm alcance dobrado",
-
+
+ "grenadier": "Grenadier",
+ "grenadier_desc": "Você tem granadas HE infinitas",
+
+ "healingsmoke": "Fumaça Curativa",
+ "healingsmoke_desc": "Suas granadas de fumaça curam",
+
+ "hermit": "Eremita",
+ "hermit_desc": "Matar restaura munição e uma porção de saúde",
+
+ "holyhandgrenade": "Granada Sagrada",
+ "holyhandgrenade_desc": "Suas granadas explosivas causam dano dobrado e têm alcance dobrado",
+
+ "iana": "Holograma",
+ "iana_desc": "Clique em [css_useSkill] para controlar seu holograma por alguns segundos",
+
"impostor": "Impostor",
- "impostor_desc": "Você começa a rodada vestido do time inimigo",
-
+ "impostor_desc": "Você começa a rodada com um modelo de jogador inimigo",
+
"infiniteammo": "Munição Infinita",
"infiniteammo_desc": "Você recebe munição infinita para todas as suas armas",
-
- "jackal": "Lesma",
+
+ "jackal": "Rastreador",
"jackal_desc": "Cada adversário deixa um rastro atrás de si",
-
- "jammer": "No Scope",
- "jammer_desc": "Escolha um jogador para desativar a mira",
+
+ "jammer": "Jammer",
+ "jammer_desc": "Escolha um jogador para desativar sua mira",
"jammer_enemy_info": "Sua mira foi desativada.",
"jammer_player_info": "A mira do jogador '{0}' foi desativada.",
"jammer_select_info": "Desativar mira do jogador:",
-
- "jester": "Palhaço",
+
+ "jester": "Bobo",
"jester_desc": "No modo bobo você não pode causar nem receber dano. Esse modo muda a cada poucos segundos.",
- "jester_mode": "Modo Palhaço",
+ "jester_mode": "Modo Bobo",
"jester_on": "LIG.",
"jester_off": "DESL.",
-
- "jumpban": "Perneta",
+
+ "jumpban": "Sem Pernas",
"jumpban_desc": "Escolha um jogador que não poderá pular",
- "jumpban_enemy_info": "Cortaram as suas pernas.",
+ "jumpban_enemy_info": "Alguém cortou suas pernas.",
"jumpban_player_info": "O jogador '{0}' não pode mais pular.",
"jumpban_select_info": "Banir pulo do jogador:",
-
+
"jumpingjack": "Pula-Pula",
- "jumpingjack_desc": "Pular restaura vida",
-
+ "jumpingjack_desc": "Pular restaura saúde",
+
"killerflash": "Flash Mortal",
- "killerflash_desc": "Qualquer pessoa cega pela sua flash morre (incluindo você)",
-
+ "killerflash_desc": "Qualquer um completamente cego pela sua granada de flash morre (incluindo você)",
+
"lifeswap": "Troca de Vida",
- "lifeswap_desc": "Escolha um jogador para trocar de vida",
- "lifeswap_enemy_info": "Alguém pegou sua vida emprestada.",
- "lifeswap_player_info": "Você trocou vida com o jogador '{0}'.",
- "lifeswap_select_info": "Trocar de vida com jogador:",
-
- "longknife": "Espada",
+ "lifeswap_desc": "Escolha um jogador para trocar saúde com ele",
+ "lifeswap_enemy_info": "Alguém pegou sua saúde emprestada.",
+ "lifeswap_player_info": "Você trocou saúde com o jogador '{0}'.",
+ "lifeswap_select_info": "Trocar vida com jogador:",
+
+ "longknife": "Faca Longa",
"longknife_desc": "Um ataque com faca causa danos independentemente da distância",
-
+
"longzeus": "Zeus Longo",
"longzeus_desc": "Zeus causa dano independentemente da distância",
-
+
"magnifier": "Lupa",
- "magnifier_desc": "Força a tela do inimigo a dar um zoom, reduzindo seu campo de visão",
+ "magnifier_desc": "Força a tela do inimigo a ampliar, reduzindo seu campo de visão",
"magnifier_enemy_info": "Seu campo de visão foi distorcido!",
- "magnifier_player_info": "O jogador ‘{0}’ foi forçado a entrar no modo zoom.",
+ "magnifier_player_info": "O jogador ‘{0}’ foi forçado a entrar no modo de zoom.",
"magnifier_select_info": "Ampliar tela do jogador:",
-
+
"medic": "Médico",
- "medic_desc": "Clique em [css_useSkill] para usar uma injeção que restaura 50 de vida",
-
- "moneyswap": "Troca de Grana",
- "moneyswap_desc": "Escolha um jogador para trocar de dinheiro com ele",
- "moneyswap_enemy_info": "Você provavelmente virou classe B",
+ "medic_desc": "Clique em [css_useSkill] para usar uma carga de cura que restaura 50 de saúde",
+
+ "moneyswap": "Cobrador de Impostos",
+ "moneyswap_desc": "Escolha um jogador para trocar dinheiro com ele",
+ "moneyswap_enemy_info": "A receita federal te pegou.",
"moneyswap_player_info": "Você trocou dinheiro com o jogador '{0}'.",
"moneyswap_select_info": "Trocar dinheiro c/ jogador:",
-
+
"muhammed": "Muhammed",
- "muhammed_desc": "Você explode ao morrer, matando os jogadores próximos",
+ "muhammed_desc": "Você explode ao morrer, matando jogadores próximos",
"muhammed_explosion": "ALLAHU AKBAR!!!",
-
+
"ninja": "Ninja",
"ninja_desc": "Ficar parado aumenta sua invisibilidade em 33%, agachar em 33%, e segurar uma faca em 33%",
-
- "nonades": "Imune a Granadas",
+
+ "nonades": "Sem Granadas",
"nonades_desc": "Granadas não causam dano a você",
-
- "norecoil": "Sem Recoil",
- "norecoil_desc": "Sem recoil ao atirar",
-
+
+ "norecoil": "Foco",
+ "norecoil_desc": "Sem recuo ao atirar",
+
"noclip": "NoClip",
- "noclip_desc": "Clique em [css_useSkill] para ativar noclip por poucos segundos",
-
- "oneshot": "Ignorante",
+ "noclip_desc": "Clique em [css_useSkill] para ativar noclip por um curto período",
+
+ "oneshot": "Tiro Único",
"oneshot_desc": "Acertar um inimigo o mata instantaneamente",
-
- "onlyhead": "Só na Cabeçinha",
- "onlyhead_desc": "Você só recebe headshot",
-
- "paweljumper": "Parkourista",
- "paweljumper_desc": "Você recebe um número aleatório de pulos extras",
- "paweljumper_desc2": "Você ganha {0} pulos extras",
-
+
+ "onlyhead": "Apenas Cabeça",
+ "onlyhead_desc": "Você só recebe dano na cabeça",
+
+ "paweljumper": "Pawel Jumper",
+ "paweljumper_desc": "Você recebe um número aleatório de saltos extras",
+ "paweljumper_desc2": "Você ganha {0} saltos extras",
+
"phoenix": "Fênix",
"phoenix_desc": "Você tem uma chance aleatória de renascer após a morte",
"phoenix_desc2": "Sua chance de renascer após a morte: {0}%",
"phoenix_respawn": "Você foi ressuscitado das cinzas graças ao poder de: CHATCOLORS.REDPhoenix",
-
+
"psychicdefusing": "Desarme Psíquico",
- "psychicdefusing_desc": "Quando você está proximo da bomba, começa a desarmá-la automaticamente",
+ "psychicdefusing_desc": "Quando você está perto da bomba, começa a desarmá-la",
"psychicdefusing_hud_info": "{0} segundos restantes para desarmar",
-
- "pilot": "Jetpack",
+
+ "pilot": "Piloto",
"pilot_desc": "Voe por um tempo limitado. Segure [USE - E] para voar",
"pilot_hud_info": "Combustível",
-
- "planter": "Meu Bombsite Minha Vida",
+
+ "planter": "Plantador Livre",
"planter_desc": "Você pode plantar a bomba em qualquer lugar, com um tempo de detonação de 60 segundos.",
-
+
"poison": "Veneno",
"poison_desc": "Escolha um jogador que receberá dano a cada poucos segundos",
"poison_enemy_info": "Você foi envenenado.",
"poison_player_info": "O jogador '{0}' foi envenenado.",
"poison_select_info": "Envenenar jogador:",
-
- "primaryban": "Sem Rifle",
+
+ "primaryban": "Sem Rifles",
"primaryban_desc": "Escolha um jogador que não poderá usar rifles",
"primaryban_enemy_info": "Você não pode mais usar rifles.",
"primaryban_player_info": "O jogador '{0}' não pode mais usar rifles.",
"primaryban_select_info": "Banir rifles do jogador:",
-
+
"prosthesis": "Prótese",
"prosthesis_desc": "Braços e pernas são à prova de balas",
-
- "push": "Empurrão",
- "push_desc": "Você tem uma chance aleatória de empurrar um inimigo ao acertá-lo",
- "push_desc2": "Suas chances de empurrar o inimigo são: {0}%",
-
- "pyro": "Pirotecnia",
- "pyro_desc": "Molotov recupera vida",
-
+
+ "push": "Empurrador",
+ "push_desc": "Você tem uma chance aleatória de empurrar um inimigo para trás ao acertá-lo",
+ "push_desc2": "Suas chances de repelir o inimigo são: {0}%",
+
+ "pyro": "Piro",
+ "pyro_desc": "Molotov restaura saúde",
+
"quickshot": "Tiro Rápido",
- "quickshot_desc": "Todas as balas são disparadas extremamente rapidas",
-
- "radarhack": "Hack de Mapa",
- "radarhack_desc": "Inimigos são visíveis no mapa",
-
+ "quickshot_desc": "Todas as balas são disparadas muito rapidamente",
+
+ "radarhack": "Hack de Radar",
+ "radarhack_desc": "Inimigos são visíveis no radar",
+
"rambo": "Rambo",
- "rambo_desc": "Você recebe uma quantidade aleatória de vida no início da rodada",
-
+ "rambo_desc": "Você recebe uma quantidade aleatória de saúde no início da rodada",
+
"randomweapon": "Arma Aleatória",
"randomweapon_desc": "Clique em [css_useSkill] para receber uma arma aleatória",
-
- "rezombie": "Walking Dead",
- "rezombie_desc": "Após morrer, você renasce como um zumbi com mais vida porém sem armas",
-
+
+ "rezombie": "Re-Zumbi",
+ "rezombie_desc": "Após a morte, você renasce como um zumbi com mais saúde e sem armas",
+
"reactivearmor": "Armadura Reativa",
"reactivearmor_desc": "A armadura absorve o primeiro dano recebido",
-
+
"regeneration": "Regeneração",
- "regeneration_desc": "Você restaura vida a cada poucos segundos",
-
- "replicator": "Clone",
- "replicator_desc": "Clique em [css_useSkill] para criar um clone que causa dano ao ser atingido",
-
- "retreat": "De Volta as Origens",
+ "regeneration_desc": "Você restaura saúde a cada poucos segundos",
+
+ "replicator": "Replicador",
+ "replicator_desc": "Clique em [css_useSkill] para criar uma réplica que causa dano ao acertar",
+
+ "retreat": "Recuo",
"retreat_desc": "Clique em [css_useSkill] para retornar ao spawn",
-
+
"returntosender": "Devolução ao Remetente",
- "returntosender_desc": "O primeiro tiro em um inimigo o envia de volta a sua base",
-
- "richboy": "Filhinho de Papai",
+ "returntosender_desc": "O primeiro acerto em um inimigo o envia de volta ao seu spawn",
+
+ "richboy": "Garoto Rico",
"richboy_desc": "Você recebe uma quantidade aleatória de dinheiro no início da rodada",
-
+
"robinhood": "Robin Hood",
- "robinhood_desc": "Atirar em um inimigo rouba seu dinheiro",
-
+ "robinhood_desc": "Causar dano a um inimigo rouba seu dinheiro",
+
"rubber": "Balas de Borracha",
- "rubber_desc": "Seus tiros deixam os jogadores lentos ao serem atingidos",
-
- "saper": "Especialista",
+ "rubber_desc": "Suas balas retardam significativamente os jogadores",
+
+ "saper": "Sapeador",
"saper_desc": "Você pode plantar e desarmar bombas mais rápido",
-
+
"secondlife": "Segunda Chance",
- "secondlife_desc": "Após morrer, você renasce com a mesma quantidade de vida",
-
+ "secondlife_desc": "Após a morte, você renasce com a mesma quantidade de saúde",
+
"shade": "Sombra",
- "shade_desc": "Você tem uma chance aleatória de teletransportar para trás de um inimigo ao atingi-lo",
+ "shade_desc": "Você tem uma chance aleatória de se teletransportar para trás de um inimigo atingido",
"shade_desc2": "Suas chances de se teletransportar para trás de um inimigo atingido são: {0}%",
"shade_nospace": "Sem espaço disponível",
-
- "shortbomb": "Pavio Longo",
- "shortbomb_desc": "A bomba demora muito mais para explodir",
-
- "silent": "Shhhiu!",
+
+ "shortbomb": "Fusível Curto",
+ "shortbomb_desc": "A bomba explode muito mais rápido",
+
+ "silent": "Silencioso",
"silent_desc": "Seus passos e pulos são silenciosos para OUTROS jogadores",
-
- "sniperelite": "Sniper do BOPE",
+
+ "sniperelite": "Atirador de Elite",
+ "sniperelite_customname": "Habilidade de Atirador de Elite",
"sniperelite_desc": "Clique em [css_useSkill] para trocar sua arma atual por uma AWP",
-
+
"soldier": "Soldado",
- "soldier_desc": "Seus tiros causam mais dano",
+ "soldier_desc": "Você tem um multiplicador de dano aleatório",
"soldier_desc2": "Seu multiplicador de dano é: {0}x",
-
+
"soundmaker": "Criador de Som",
- "soundmaker_desc": "Clique em [css_useSkill] para tocar um som para cada inimigo",
-
+ "soundmaker_desc": "Clique em [css_useSkill] para acionar um som para cada inimigo",
+
"spectator": "Espectador",
- "spectator_desc": "Clique em [css_useSkill] para ver a tela de um inimigo aleatório",
-
+ "spectator_desc": "Clique em [css_useSkill] para observar um inimigo aleatório",
+
"swapposition": "Troca de Posição",
"swapposition_desc": "Clique em [css_useSkill] para trocar de lugar com um inimigo aleatório",
-
+
"teleporter": "Teletransportador",
- "teleporter_desc": "Você troca de lugar com o inimigo que acertar",
-
- "thief": "Lula",
+ "teleporter_desc": "Você troca de lugar com o inimigo acertado",
+
+ "thief": "Ladrão",
"thief_desc": "Você pode roubar uma habilidade de um jogador escolhido",
"thief_enemy_info": "Sua habilidade foi roubada.",
"thief_player_info": "A habilidade do jogador '{0}' foi roubada.",
"thief_select_info": "Roubar skill do jogador:",
"thief_incorrect_skill": "Esta habilidade não pode ser selecionada!",
-
+
"thirdeye": "Terceiro Olho",
- "thirdeye_desc": "Clique em [css_useSkill] para ativar a terceira pessoa",
-
- "thorns": "Porco Espinho",
+ "thirdeye_desc": "Clique em [css_useSkill] para ativar a visão em terceira pessoa",
+
+ "thorns": "Espinhos",
"thorns_desc": "Seu oponente receberá uma parte do dano que causou a você",
-
- "toxicsmoke": "Smoke Tóxica",
- "toxicsmoke_desc": "Suas smokes causam dano",
-
+
+ "toxicsmoke": "Fumaça Tóxica",
+ "toxicsmoke_desc": "Suas granadas de fumaça causam dano",
+
"wallhack": "Wallhack",
"wallhack_desc": "Você pode ver inimigos através das paredes",
-
+
"watchmaker": "Relojoeiro",
"watchmaker_desc": "Cada arremesso de granada altera o tempo da rodada",
"watchmaker_ct": "Tempo da rodada reduzido em {0} segundos.",
"watchmaker_tt": "Tempo da rodada estendido em {0} segundos.",
-
+
"weaponsswap": "Troca de Armas",
"weaponsswap_desc": "Clique em [css_useSkill] para trocar armas com um inimigo aleatório",
"weaponsswap_hud_info2": "Você não tem arma para trocar",
-
+
"zeus": "Zeus",
"zeus_desc": "Zeus x27 recarrega instantaneamente",
-
- "your_skill": "Sua habilidade atual",
+
+ "your_skill": "Seu poder atual",
"enemy_skill": "Habilidade do inimigo",
- "observer_skill": "Habilidade do jogador",
+ "observer_skill": "Poder do jogador",
"welcome_message": "Bem-vindo {PLAYER} ao {SERVER_NAME}!\nVersão atual do jRandomSkills: {VERSION} ({SKILLS_COUNT} habilidades).\n\nCriado originalmente por:\n{AUTHOR1}\nModificado e aprimorado por:\n{AUTHOR2}\nDiscord oficial: https://discord.gg/9H8EZYBpPF",
"drawing_skill": "Sorteando uma habilidade",
"disabled_weapon": "Você não pode usar esta arma",
-
+
"hud_info": "Espere mais {0} segundos",
"hud_info_no_enemy": "Nenhum inimigo encontrado",
"active_hud_info": "Ativo por mais {0} milissegundos",
-
+
"skills_menu": "Lista de Habilidades",
"no_player": "Nenhum jogador correspondente encontrado.",
"duplicate_player": "Mais de um jogador encontrado com o mesmo nome.",
"selectplayerskill_command": "Digite /t",
"selectplayerskill_incorrect_enemy_index": "Não foram encontrados jogadores para selecionar.",
-
+
"skill_not_found_setskill": "Nenhuma habilidade CHATCOLORS.RED encontrada",
"player_not_found_setskill": "Nenhum jogador CHATCOLORS.RED encontrado",
"correct_form_setskill": "Uso correto: CHATCOLORS.RED!setskill ",
@@ -428,10 +444,10 @@
"done_setskill": "Habilidade definida",
"error_setskill": "Falha ao definir a habilidade CHATCOLORS.RED",
"for_setskill": "para",
-
- "invalid_map": "Nome do mapa inválido!",
+
+ "invalid_map": "Nome do mapa inserido incorretamente!",
"loading_map": "Carregando um novo mapa",
-
+
"pause": "Partida pausada.",
"unpause": "Partida retomada.",
"healed": "Você foi curado.",
@@ -439,7 +455,7 @@
"reload": "Os idiomas e as configurações foram recarregados.",
"hud_on": "O HUD foi ativado.",
"hud_off": "O HUD foi desativado.",
-
+
"vote_started": "Votação iniciada: '{0}'",
"vote_timeout": "Votação '{0}' expirou!",
"vote_wait": "Você precisa esperar antes de iniciar outra votação!",
@@ -447,14 +463,14 @@
"vote_not_enough_players": "Não há jogadores suficientes para iniciar uma votação!",
"vote_alredy_voted": "Você já votou!",
"vote_vote": "Votar",
-
- "bombsite_a": "Bombsite A",
- "bombsite_b": "Bombsite B",
-
+
+ "bombsite_a": "Zona de detonação A",
+ "bombsite_b": "Zona de detonação B",
+ "bombplanted": "A bomba foi colocada\n{0} segundos até a detonação",
+
"teammate_skills": "Habilidades dos seus companheiros de equipe",
- "summary_start": "=======RESUMO=DA=ÚLTIMA=RODADA=======",
- "summary_end": "=======================================",
-
+ "summary": "Resumo da última rodada",
+
"menu_controlls_scroll": "W/S - Rolar",
"menu_controlls_padding": " | ",
"menu_controlls_select": "E - Selecionar"
diff --git a/jRandomSkills - Server Files/plugins/!jRandomSkills/languages/zh.json b/jRandomSkills - Server Files/plugins/jRandomSkills/languages/zh.json
similarity index 95%
rename from jRandomSkills - Server Files/plugins/!jRandomSkills/languages/zh.json
rename to jRandomSkills - Server Files/plugins/jRandomSkills/languages/zh.json
index 99d6be0..245438e 100644
--- a/jRandomSkills - Server Files/plugins/!jRandomSkills/languages/zh.json
+++ b/jRandomSkills - Server Files/plugins/jRandomSkills/languages/zh.json
@@ -55,6 +55,12 @@
"c4camouflage": "C4伪装",
"c4camouflage_desc": "你持有炸弹时隐形",
+ "carefulbullets": "谨慎的子弹",
+ "carefulbullets_desc": "选择一名球员,每当他投篮未中时就会受到伤害",
+ "carefulbullets_enemy_info": "从现在起,不准确将带来切实的伤害。",
+ "carefulbullets_player_info": "'{0}' 现在必须更加谨慎。",
+ "carefulbullets_select_info": "不准确会伤害玩家:",
+
"catapult": "弹射",
"catapult_desc": "你有随机几率将敌人向上弹射",
"catapult_desc2": "你击中敌人将其弹射的几率是:{0}%",
@@ -68,6 +74,10 @@
"cutter": "切割者",
"cutter_desc": "用刀可立即杀死敌人",
+ "cypher": "相机",
+ "cypher_desc": "点击 [css_useSkill] 创建/切换摄像机",
+ "cypher_nospace": "相机必须与墙壁呈直角放置",
+
"darkness": "黑暗",
"darkness_desc": "对选定的敌人施加黑暗效果",
"darkness_enemy_info": "让灯光熄灭。",
@@ -142,6 +152,7 @@
"gambler_desc": "从提供的列表中选择一个技能。",
"gambler_select_info": "选择你的技能:",
"gambler_more": "#00FF00|刷新 ${0}",
+ "gambler_no_money": "钱不够。",
"ghost": "幽灵",
"ghost_desc": "你完全隐形",
@@ -175,6 +186,9 @@
"holyhandgrenade": "神圣手榴弹",
"holyhandgrenade_desc": "你的高爆手榴弹造成双倍伤害并拥有双倍范围",
+ "iana": "全息图",
+ "iana_desc": "点击 [css_useSkill] 可控制你的全息影像数秒",
+
"impostor": "冒名顶替者",
"impostor_desc": "回合开始时你获得敌方玩家模型",
@@ -356,6 +370,7 @@
"silent_desc": "你的脚步和跳跃对其他玩家无声",
"sniperelite": "狙击精英",
+ "sniperelite_customname": "狙击精英技能",
"sniperelite_desc": "点击 [css_useSkill] 将当前武器替换为AWP",
"soldier": "士兵",
@@ -451,10 +466,10 @@
"bombsite_a": "爆轰区A",
"bombsite_b": "爆轰区B",
+ "bombplanted": "炸弹已安装完毕{0}秒后引爆",
"teammate_skills": "你队友的技能",
- "summary_start": "=============上一回合总结==============",
- "summary_end": "=======================================",
+ "summary": "上一回合总结",
"menu_controlls_scroll": "W/S - 滚动",
"menu_controlls_padding": " | ",
diff --git a/jRandomSkills - Server Files/plugins/!jRandomSkills/packages/GeoLite2-Country.mmdb b/jRandomSkills - Server Files/plugins/jRandomSkills/packages/GeoLite2-Country.mmdb
similarity index 54%
rename from jRandomSkills - Server Files/plugins/!jRandomSkills/packages/GeoLite2-Country.mmdb
rename to jRandomSkills - Server Files/plugins/jRandomSkills/packages/GeoLite2-Country.mmdb
index bc47f24..f3c9a52 100644
Binary files a/jRandomSkills - Server Files/plugins/!jRandomSkills/packages/GeoLite2-Country.mmdb and b/jRandomSkills - Server Files/plugins/jRandomSkills/packages/GeoLite2-Country.mmdb differ
diff --git a/readme.md b/readme.md
index e274e46..0d7dc05 100644
--- a/readme.md
+++ b/readme.md
@@ -28,6 +28,7 @@ jRandomSkills is a plugin for CounterStrike 2 that brings chaos and fun to gamep
- **Polish**
- **French** [by: [@felyjyn](https://github.com/felyjyn)]
- **Portuguese (Brazilian)** [by: [@vinicius-trev](https://github.com/vinicius-trev)]
+- **German** [by: [@Enrory](https://github.com/Enrory)]
- **Simplified Chinese** [GrokAI / ChatGPT]
## 🖼️ Preview
@@ -45,7 +46,7 @@ Join the 3v3 test server and try out the jRandomSkills plugin:
Buying a server on pukawka? Use my [referral code](https://pukawka.pl/pp,juzlus.html).
-## ✨ Current Skills (109)
+## ✨ Current Skills (111)
The table below lists all available skills in the game, along with their descriptions.
@@ -197,22 +198,22 @@ Buying a server on pukawka? Use my [referral code](https://pukawka.pl/pp,juzlus.
| Command | Example | Description | Permissions |
| - | - | - | - |
-| `!setskill ` | `!setskill Juzlus Aimbot` | Giving skill to a player | `@jRandmosSkills/admin` |
+| `!setskill ` | `!setskill Juzlus Aimbot` | Giving skill to a player | `@jRandomSkills/admin` |
| `!lang ` | `!lang en` | Change the language | - |
| `!skills` | `!skills` | List of skills | - |
-| `!map ` | `!map de_nuke` | Change map | `@jRandmosSkills/admin` |
-| `!map ` | `!map 3332005394` | Change map from workshop | `@jRandmosSkills/admin` |
-| `!start` | `!start` | Start game with conditions: `mp_forcecamera 0, mp_freezetime 15, mp_overtime_enable 1, sv_cheats 0` | `@jRandmosSkills/admin` |
-| `!start sv` | `!start sv` | Start the game with conditions: `mp_forcecamera 0, mp_freezetime 0, mp_overtime_enable 1, sv_cheats 1` | `@jRandmosSkills/admin` |
-| `!console ` | `!console sv_cheats 1` | Run a command on the server | `@jRandmosSkills/owner` |
-| `!swap` | `!swap` | Switch sides | `@jRandmosSkills/admin` |
-| `!shuffle` | `!shuffle` | Randomly assign players to teams | `@jRandmosSkills/admin` |
-| `!pause` | `!pause` | Pause the game | `@jRandmosSkills/admin` |
-| `!heal` | `!heal` | Restore 100 health points | `@jRandmosSkills/admin` |
+| `!map ` | `!map de_nuke` | Change map | `@jRandomSkills/admin` |
+| `!map ` | `!map 3332005394` | Change map from workshop | `@jRandomSkills/admin` |
+| `!start` | `!start` | Start game with conditions: `mp_forcecamera 0, mp_freezetime 15, mp_overtime_enable 1, sv_cheats 0` | `@jRandomSkills/admin` |
+| `!start sv` | `!start sv` | Start the game with conditions: `mp_forcecamera 0, mp_freezetime 0, mp_overtime_enable 1, sv_cheats 1` | `@jRandomSkills/admin` |
+| `!console ` | `!console sv_cheats 1` | Run a command on the server | `@jRandomSkills/owner` |
+| `!swap` | `!swap` | Switch sides | `@jRandomSkills/admin` |
+| `!shuffle` | `!shuffle` | Randomly assign players to teams | `@jRandomSkills/admin` |
+| `!pause` | `!pause` | Pause the game | `@jRandomSkills/admin` |
+| `!heal` | `!heal` | Restore 100 health points | `@jRandomSkills/admin` |
| `!hud` | `!hud` | Enable/Disable hud | - |
-| `!setscore ` | `!setscore 10 7` | Set the game score | `@jRandmosSkills/owner` |
-| `!setstaticskill ` | `!setstaticskill Juzlus Aimbot` | Giving a player a permanent skill | `@jRandmosSkills/admin` |
-| `!setstaticskill None` | `!setstaticskill Juzlus None` | Back to normal | `@jRandmosSkills/admin` |
+| `!setscore ` | `!setscore 10 7` | Set the game score | `@jRandomSkills/owner` |
+| `!setstaticskill ` | `!setstaticskill Juzlus Aimbot` | Giving a player a permanent skill | `@jRandomSkills/admin` |
+| `!setstaticskill None` | `!setstaticskill Juzlus None` | Back to normal | `@jRandomSkills/admin` |
| `!reload` | `!reload` | Reload translations | - |
_Most commands require permissions, which must be set in the file: `game/csgo/addons/counterstrikesharp/configs/admins.json`_
@@ -226,7 +227,7 @@ To grant administrative permissions in CounterStrikeSharp:
{
"Juzlus": {
"identity": "STEAM_0:0:94913632",
- "flags": ["@jRandmosSkills/admin", "@jRandmosSkills/owner"]
+ "flags": ["@jRandomSkills/admin", "@jRandomSkills/owner"]
}
}
```
@@ -245,11 +246,13 @@ All skills can be customized in the **`config.cfg`** / **`skillsInfo.json`** fil
// 1 - Same skills for the whole team
// 2 - Same skills for all players
// 3 - Random skills for each player (It can't be the same until the map changes)
- // 4 - Debug: Skills are assigned in turn
+ // 4 - Full Random: Random skills for each player
+ // 5 - Debug: Skills are assigned in turn
+ "YourSkillChatInfo": true, // Show your skill in chat
"KillerSkillInfo": true, // Show killer's skill in chat
"TeamMateSkillInfo": true, // Show allies' skills in chat
"SummaryAfterTheRound": true, // Show summary of the last round
- "DebugMode": true, // Write activity to the ‘Debug’ folder
+ "DebugMode": false, // Write activity to the ‘Debug’ folder
"AlternativeSkillButton": null, // Possible buttons:
// null, "Attack", "Jump", "Duck", "Forward", "Back",
// "Use", "Cancel", "Left", "Right", "Moveleft",
@@ -259,18 +262,21 @@ All skills can be customized in the **`config.cfg`** / **`skillsInfo.json`** fil
// "Attack3", "Scoreboard", "Inspect"
"SkillTimeBeforeStart": 7.0, // How many seconds before freeze time ends should skills
// drawing be completed? (freezetime - SkillTimeBeforeStart)
- "SkillDescriptionDuration": 7.0, // How long should the skill description be visible for?
+ "SkillHudDuration": 999.0, // How long should the HUD be visible for?
+ "SkillDescriptionDuration": 999, // How long should the skill description be visible for?
"DisplayAlwaysDescription":false,// Always display skill description (SkillDescriptionDuration = 9999)
"DisableSpectateHUD": false, // Disable HTML HUD when spectating
"FlashingHtmlHudFix": true, // Enable FlashingHtmlHudFix
"CS2TraceRayDebug": false, // Enable trail visibility for 'Long Knife', 'Long Zeus'
- "DisableHUDOnDeathPermission": "@jRandmosSkills/death", // Disable the HUD after death for players with this permission
+ "DisableHUDOnDeathPermission": "@jRandomSkills/death", // Disable the HUD after death for players with this permission
"DisableSkillsOnRoundEnd": false,// Disable all skills at the end of the round (when the summary is visible)
+
"LanguageSystem": {
"DefaultLangCode": "en", // Default language: en, pl, fr, pt-br, zh
"DisableGeoLite": false, // Disable player language search by geolocation GeoLite2 (MaxMind)
"LanguageInfos": [...] // Setting to change ISO languages to translations
},
+
"HtmlHudCustomisation": { // Settings for changing colours and font sizes
... // xxxl: 64px, xxl: 40px, xl: 32px
} // l: 24px, ml: 20px, m: 18px
@@ -304,7 +310,7 @@ All skills can be customized in the **`config.cfg`** / **`skillsInfo.json`** fil
}
```
-## 🔗 Dependency Includes
+## 🔗 Credits
This plugin uses content from the following projects:
- [dRandomSkills](https://github.com/jakubbartosik/dRandomSkills) by [Jakub Bartosik (D3X)](https://github.com/jakubbartosik) - random skills system
- [CS2TraceRay](https://github.com/schwarper/CS2TraceRay) by [schwarper](https://github.com/schwarper) - Trace Ray system
@@ -316,8 +322,165 @@ This plugin uses content from the following projects:
## 📋 Changelog
+v1.10.0
+
+- #### General:
+
+
-v1.1.9 BETA
+v1.1.9f
+
+- #### General:
+ - ###### Updated dependencies to the latest version (CSS v1.0.361).
+ - ###### Updated WSADMenu compatibility to the latest CSS version.
+
+- #### Skill improvements:
+ - ###### Earthquake:
+ - ###### Temporarily disabled.
+
+ - ###### Cypher:
+ - ###### Temporarily disabled.
+ - ###### Improved camera setup.
+
+ - ###### Iana:
+ - ###### Temporarily disabled.
+ - ###### Replica can now receive headshot damage.
+
+ - ###### Toxic Smoke:
+ - ###### Changed distance calculation for triggers.
+
+
+
+v1.1.9e
+
+- #### General:
+ - ###### Improved display of text frame / content.
+ - ###### Added customisation options for chat message appearance.
+
+
+
+v1.1.9d
+
+- #### General:
+ - ###### Updated the appearance of chat messages.
+
+- #### Skill improvements:
+ - ###### C4Camouflage:
+ - ###### Ghost:
+ - ###### Ninja:
+ - ###### Now the entire model is hidden instead of just the weapon and setting the model's transparency.
+
+ - ###### ReZombie:
+ - ###### Increased zombie health from 200 HP to 250 HP.
+
+ - ###### Replicator:
+ - ###### ncreased damage dealt by replicas: Your team: 10 HP; Enemy team: 20 HP
+ - ###### Added the option to customize replica damage in `skillsInfo.json`.
+
+ - ###### ToxicSmoke:
+ - ###### Skill temporarily disabled to test trigger logic.
+
+ - ###### Watchmaker:
+ - ###### Reduced time change from 10 seconds to 7 seconds.
+
+- #### New skills:
+ - ###### Cypher:
+ - ###### Click [css_useSkill] to place a camera where you are aiming.
+
+ - ###### Iana:
+ - ###### Click [css_useSkill] to control a clone for 10 seconds (the clone cannot shoot).
+
+
+
+v1.1.9c
+
+- #### General:
+ - ###### Updated dependency to the latest version.
+ - ###### Added a new game mode, ‘FullRandom,’ which randomly assigns skills each round (skills may be repeated).
+ - ###### Added the `requiredPermission` option to every skill config, defining the permission required for a player to receive that skill.
+
+- #### Skill improvements:
+ - ###### Gambler:
+ - ###### Added text notification when the player has no money.
+
+ - ###### Darkness:
+ - ###### Removed the old post-processing logic (did not work on every map).
+ - ###### Added UTIL_ScreenFade for a more reliable and consistent darkness effect.
+
+ - ###### Distancer:
+ - ###### Limited the maximum display distance to 3000 units.
+
+ - ###### Fortnite:
+ - ###### mproved the placement angle of barricades.
+
+ - ###### Jackal:
+ - ###### Reworked the bean trail logic to a particle system for better performance.
+
+ - ###### Poison:
+ - ###### Slightly increased the poison tick speed.
+ - ###### Added a minimum health threshold (30 HP) below which poison no longer works (configurable).
+
+ - ###### Spectator:
+ - ###### Fixed an issue with the camera after death.
+
+
+
+v1.1.9b
+
+- #### General:
+ - ###### Updated dependency to the latest version.
+ - ###### Fixed an issue with empty permissions for commands.
+ - ###### Added `SkillHudExpired` option to the config file that controls how long (in seconds) the central HUD is visible.
+ - ###### Added logic for trigger enter / exit handling.
+ - ###### Automatic case adjustment for the `AlternativeSkillButton` option in the config.
+ - ###### Fixed an issue with automatic language detection.
+ - ###### Attempt to fix model resizing issue.
+
+- #### Skill improvements:
+ - ###### Bankrupt:
+ - ###### Darkness:
+ - ###### Deactivator:
+ - ###### Deaf:
+ - ###### Glitch:
+ - ###### Jammer:
+ - ###### JumpBan:
+ - ###### LifeSwap:
+ - ###### Magnifier:
+ - ###### MoneySwap:
+ - ###### Poison:
+ - ###### PrimaryBan:
+ - ###### Thief:
+ - ###### Fixed message being shown in the other player's language.
+
+ - ###### C4Camouflage:
+ - ###### Ghost:
+ - ###### Glaz:
+ - ###### Jackal:
+ - ###### Ninja:
+ - ###### Wallhack:
+ - ###### Possible fix for missing entity when showing the entity again.
+
+ - ###### AreaReaper:
+ - ###### Fixed incorrect bomb placement order.
+
+ - ###### C4Camouflage:
+ - ###### Possible fix for missing entity when showing the entity again.
+
+ - ###### Gambler:
+ - ###### Fixed issue where players could reroll their skill even without money.
+
+ - ###### SoundMaker:
+ - ###### Added separate sounds for both teams (configurable).
+
+ - ###### ToxicSmoke:
+ - ###### Updated logic to use triggers (offset not found for Windows system).
+
+ - ###### Watchmaker:
+ - ###### Added a sound when the time updates (configurable).
+
+
+
+v1.1.9a
- #### General:
- ###### Update the dependency to the latest version.
@@ -345,7 +508,7 @@ This plugin uses content from the following projects:
- #### General:
- ###### Added `DisableHUDOnDeathPermission` options to the config, to disable the HUD after death for players with this specific permission.
- ###### Added `DisableSkillsOnRoundEnd` option to the config, to disable all skills at the end of the round (when the summary is visible).
- - ###### The permission `@jRandmosSkills/root` has been changed to `@jRandmosSkills/owner` to prevent domain issues.
+ - ###### The permission `@jRandomSkills/root` has been changed to `@jRandomSkills/owner` to prevent domain issues.
- ###### Added `!hud` command to toggle the HUD on/off (When the HUD is off, the WSAD Menu will not appear).
- ###### Disabling first skill if two skills are drawn during the first round.
- ###### The `!reload` command also refreshes the skill activity status.