v1.10.0
This commit is contained in:
parent
ae13d6a15c
commit
53917a8b4b
62 changed files with 2643 additions and 935 deletions
|
|
@ -1,9 +0,0 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<Project ToolsVersion="Current" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
|
||||||
<PropertyGroup />
|
|
||||||
<ItemGroup>
|
|
||||||
<EmbeddedResource Update="Properties\Resources.resx">
|
|
||||||
<SubType>Designer</SubType>
|
|
||||||
</EmbeddedResource>
|
|
||||||
</ItemGroup>
|
|
||||||
</Project>
|
|
||||||
|
|
@ -8,7 +8,7 @@
|
||||||
// </auto-generated>
|
// </auto-generated>
|
||||||
//------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------
|
||||||
|
|
||||||
namespace src.player.skills.Properties {
|
namespace jRandomSkills.Properties {
|
||||||
using System;
|
using System;
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -14,14 +14,14 @@
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="CounterStrikeSharp.API" Version="1.0.361" />
|
<PackageReference Include="CounterStrikeSharp.API" Version="1.0.362" />
|
||||||
<PackageReference Include="CS2TraceRay" Version="1.0.9" />
|
<PackageReference Include="CS2TraceRay" Version="1.0.9" />
|
||||||
<PackageReference Include="MaxMind.Db" Version="4.3.4" />
|
<PackageReference Include="MaxMind.Db" Version="4.3.4" />
|
||||||
<PackageReference Include="Newtonsoft.Json" Version="13.0.4" />
|
<PackageReference Include="Newtonsoft.Json" Version="13.0.4" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ProjectReference Include="..\WASDMenuAPI - SRC Files\WASDMenuAPI.csproj" />
|
<ProjectReference Include="..\..\..\source\repos\WASDMenuAPI-master\WASDMenuAPI\WASDMenuAPI.csproj" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
|
@ -3,7 +3,9 @@ Microsoft Visual Studio Solution File, Format Version 12.00
|
||||||
# Visual Studio Version 17
|
# Visual Studio Version 17
|
||||||
VisualStudioVersion = 17.9.34728.123
|
VisualStudioVersion = 17.9.34728.123
|
||||||
MinimumVisualStudioVersion = 10.0.40219.1
|
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
|
EndProject
|
||||||
Global
|
Global
|
||||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
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}.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.ActiveCfg = Release|Any CPU
|
||||||
{1412DD25-558C-425A-A7F6-347C970136E5}.Release|Any CPU.Build.0 = 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
|
EndGlobalSection
|
||||||
GlobalSection(SolutionProperties) = preSolution
|
GlobalSection(SolutionProperties) = preSolution
|
||||||
HideSolutionNode = FALSE
|
HideSolutionNode = FALSE
|
||||||
|
|
|
||||||
|
|
@ -78,6 +78,9 @@ namespace src.command
|
||||||
if (playerPawn?.CBodyComponent == null) return;
|
if (playerPawn?.CBodyComponent == null) return;
|
||||||
if (!player.IsValid || !player.PawnIsAlive) return;
|
if (!player.IsValid || !player.PawnIsAlive) return;
|
||||||
|
|
||||||
|
if (SkillsInfo.GetValue<bool>(playerInfo.Skill, "disableOnFreezeTime") && SkillUtils.IsFreezeTime())
|
||||||
|
return;
|
||||||
|
|
||||||
string[] commands = _.ArgString.Trim().Split(" ", StringSplitOptions.RemoveEmptyEntries);
|
string[] commands = _.ArgString.Trim().Split(" ", StringSplitOptions.RemoveEmptyEntries);
|
||||||
Debug.WriteToDebug($"Player {player.PlayerName} used the skill: {playerInfo.Skill}");
|
Debug.WriteToDebug($"Player {player.PlayerName} used the skill: {playerInfo.Skill}");
|
||||||
if (commands == null || commands.Length == 0)
|
if (commands == null || commands.Length == 0)
|
||||||
|
|
@ -464,14 +467,12 @@ namespace src.command
|
||||||
if (player == null || !player.IsValid) return;
|
if (player == null || !player.IsValid) return;
|
||||||
if (!string.IsNullOrEmpty(config.NormalCommands.ChangeLanguageCommand.Permissions) && !AdminManager.PlayerHasPermissions(player, config.NormalCommands.ChangeLanguageCommand.Permissions)) 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();
|
string newLangCode = command.GetArg(1).ToUpper();
|
||||||
foreach (var langInfo in Config.LoadedConfig.LanguageSystem.LanguageInfos)
|
foreach (var langInfo in Config.LoadedConfig.LanguageSystem.LanguageInfos)
|
||||||
if (langInfo.IsoCodes.Contains(newLangCode))
|
if (langInfo.IsoCodes.Contains(newLangCode))
|
||||||
fileName = langInfo.FileName;
|
fileName = langInfo.FileName;
|
||||||
if (!Localization.HasTranslation(newLangCode))
|
if (Localization.HasTranslation(newLangCode))
|
||||||
fileName = Config.LoadedConfig.LanguageSystem.DefaultLangCode;
|
|
||||||
else
|
|
||||||
fileName = newLangCode.ToLower();
|
fileName = newLangCode.ToLower();
|
||||||
Localization.ChangePlayerLanguage(player, fileName);
|
Localization.ChangePlayerLanguage(player, fileName);
|
||||||
}
|
}
|
||||||
|
|
@ -508,17 +509,5 @@ namespace src.command
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -27,7 +27,7 @@ namespace src
|
||||||
public override string ModuleName => "[CS2] [ jRandomSkills ]";
|
public override string ModuleName => "[CS2] [ jRandomSkills ]";
|
||||||
public override string ModuleAuthor => "D3X, Juzlus";
|
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 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)
|
public override void Load(bool hotReload)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
477
jRandomSkills - SRC Files/src/lang/de.json
Normal file
477
jRandomSkills - SRC Files/src/lang/de.json
Normal file
|
|
@ -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 <Fähigkeit>",
|
||||||
|
"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"
|
||||||
|
}
|
||||||
|
|
@ -55,6 +55,12 @@
|
||||||
"c4camouflage": "C4 Camouflage",
|
"c4camouflage": "C4 Camouflage",
|
||||||
"c4camouflage_desc": "You are invisible while holding the bomb",
|
"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": "Catapult",
|
||||||
"catapult_desc": "You have a random chance to launch an enemy upwards",
|
"catapult_desc": "You have a random chance to launch an enemy upwards",
|
||||||
"catapult_desc2": "Your chance to launch an enemy on hit is: {0}%",
|
"catapult_desc2": "Your chance to launch an enemy on hit is: {0}%",
|
||||||
|
|
@ -68,6 +74,10 @@
|
||||||
"cutter": "Cutter",
|
"cutter": "Cutter",
|
||||||
"cutter_desc": "Instant kill with a knife",
|
"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": "Darkness",
|
||||||
"darkness_desc": "Applies a darkness effect to a chosen enemy",
|
"darkness_desc": "Applies a darkness effect to a chosen enemy",
|
||||||
"darkness_enemy_info": "Let the lights go out.",
|
"darkness_enemy_info": "Let the lights go out.",
|
||||||
|
|
@ -176,6 +186,9 @@
|
||||||
"holyhandgrenade": "Holy Hand Grenade",
|
"holyhandgrenade": "Holy Hand Grenade",
|
||||||
"holyhandgrenade_desc": "Your HE grenades deal double damage and have double range",
|
"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": "Impostor",
|
||||||
"impostor_desc": "You start the round with an enemy player model",
|
"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",
|
"silent_desc": "Your footsteps and jumps are silent to OTHER players",
|
||||||
|
|
||||||
"sniperelite": "Sniper Elite",
|
"sniperelite": "Sniper Elite",
|
||||||
|
"sniperelite_customname": "Sniper Elite Skill",
|
||||||
"sniperelite_desc": "Click [css_useSkill] to swap your current weapon for an AWP",
|
"sniperelite_desc": "Click [css_useSkill] to swap your current weapon for an AWP",
|
||||||
|
|
||||||
"soldier": "Soldier",
|
"soldier": "Soldier",
|
||||||
|
|
@ -452,6 +466,7 @@
|
||||||
|
|
||||||
"bombsite_a": "Bombsite A",
|
"bombsite_a": "Bombsite A",
|
||||||
"bombsite_b": "Bombsite B",
|
"bombsite_b": "Bombsite B",
|
||||||
|
"bombplanted": "The bomb has been planted\n{0} seconds till detonation",
|
||||||
|
|
||||||
"teammate_skills": "Your teammates' skills",
|
"teammate_skills": "Your teammates' skills",
|
||||||
"summary": "Summary of the last round",
|
"summary": "Summary of the last round",
|
||||||
|
|
|
||||||
|
|
@ -55,6 +55,12 @@
|
||||||
"c4camouflage": "Camouflage C4",
|
"c4camouflage": "Camouflage C4",
|
||||||
"c4camouflage_desc": "Vous êtes invisible en tenant la bombe",
|
"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": "Catapulte",
|
||||||
"catapult_desc": "Vous avez une chance aléatoire de projeter un ennemi en l’air",
|
"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}%",
|
"catapult_desc2": "Votre chance de projeter un ennemi à l’impact est : {0}%",
|
||||||
|
|
@ -68,6 +74,10 @@
|
||||||
"cutter": "Trancheur",
|
"cutter": "Trancheur",
|
||||||
"cutter_desc": "Coup de couteau = mort instantanée",
|
"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": "Obscurité",
|
||||||
"darkness_desc": "Applique un effet d’obscurité à un ennemi choisi",
|
"darkness_desc": "Applique un effet d’obscurité à un ennemi choisi",
|
||||||
"darkness_enemy_info": "Que la lumière s’éteigne.",
|
"darkness_enemy_info": "Que la lumière s’éteigne.",
|
||||||
|
|
@ -176,6 +186,9 @@
|
||||||
"holyhandgrenade": "Grenade Sacrée",
|
"holyhandgrenade": "Grenade Sacrée",
|
||||||
"holyhandgrenade_desc": "Vos grenades HE infligent le double de dégâts et ont une portée doublé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": "Imposteur",
|
||||||
"impostor_desc": "Vous commencez le round avec un modèle de joueur ennemi",
|
"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",
|
"silent_desc": "Vos pas et vos sauts sont silencieux pour les AUTRES joueurs",
|
||||||
|
|
||||||
"sniperelite": "Sniper d’Élite",
|
"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",
|
"sniperelite_desc": "Appuyez sur [css_useSkill] pour échanger votre arme actuelle contre un AWP",
|
||||||
|
|
||||||
"soldier": "Soldat",
|
"soldier": "Soldat",
|
||||||
|
|
@ -452,10 +466,10 @@
|
||||||
|
|
||||||
"bombsite_a": "Site de bombe A",
|
"bombsite_a": "Site de bombe A",
|
||||||
"bombsite_b": "Site de bombe B",
|
"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",
|
"teammate_skills": "Compétences de vos coéquipiers",
|
||||||
"summary_start": "Résumé du dernier round",
|
"summary": "Résumé du dernier round",
|
||||||
"summary_end": "===================================",
|
|
||||||
|
|
||||||
"menu_controlls_scroll": "W/S - Défilement",
|
"menu_controlls_scroll": "W/S - Défilement",
|
||||||
"menu_controlls_padding": " | ",
|
"menu_controlls_padding": " | ",
|
||||||
|
|
|
||||||
|
|
@ -55,6 +55,12 @@
|
||||||
"c4camouflage": "C4 Kamuflaż",
|
"c4camouflage": "C4 Kamuflaż",
|
||||||
"c4camouflage_desc": "Kiedy trzymasz bombę, jesteś niewidzialny",
|
"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": "Katapulta",
|
||||||
"catapult_desc": "Masz losową szanse na podrzucenie wroga",
|
"catapult_desc": "Masz losową szanse na podrzucenie wroga",
|
||||||
"catapult_desc2": "Twoje szanse na podrzucenie wroga po trafieniu to: {0}%",
|
"catapult_desc2": "Twoje szanse na podrzucenie wroga po trafieniu to: {0}%",
|
||||||
|
|
@ -68,6 +74,10 @@
|
||||||
"cutter": "Scyzoryk",
|
"cutter": "Scyzoryk",
|
||||||
"cutter_desc": "Natychmiastowe zabójstwo nożem",
|
"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": "Mrok",
|
||||||
"darkness_desc": "Nadaje efekt ciemności wybranemu przeciwnikowi",
|
"darkness_desc": "Nadaje efekt ciemności wybranemu przeciwnikowi",
|
||||||
"darkness_enemy_info": "Niech zgasną światła.",
|
"darkness_enemy_info": "Niech zgasną światła.",
|
||||||
|
|
@ -176,6 +186,9 @@
|
||||||
"holyhandgrenade": "Święty Granat Ręczny",
|
"holyhandgrenade": "Święty Granat Ręczny",
|
||||||
"holyhandgrenade_desc": "Twoje granaty uderzeniowe zadają podwójne obrażenia i mają podwójny zasięg",
|
"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": "Szpieg",
|
||||||
"impostor_desc": "Na początku rundy otrzymujesz model postaci przeciwnika",
|
"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",
|
"silent_desc": "Twoje kroki i skoki są niesłyszalne dla INNYCH graczy",
|
||||||
|
|
||||||
"sniperelite": "SzeliS",
|
"sniperelite": "SzeliS",
|
||||||
|
"sniperelite_customname": "Mityczna AWP",
|
||||||
"sniperelite_desc": "Kliknij [css_useSkill], aby zamienić aktualną broń na AWP",
|
"sniperelite_desc": "Kliknij [css_useSkill], aby zamienić aktualną broń na AWP",
|
||||||
|
|
||||||
"soldier": "Żołnierz",
|
"soldier": "Żołnierz",
|
||||||
|
|
@ -452,10 +466,10 @@
|
||||||
|
|
||||||
"bombsite_a": "Strefa detonacji A",
|
"bombsite_a": "Strefa detonacji A",
|
||||||
"bombsite_b": "Strefa detonacji B",
|
"bombsite_b": "Strefa detonacji B",
|
||||||
|
"bombplanted": "Bomba została podłożona\n{0} sekund do detonacji",
|
||||||
|
|
||||||
"teammate_skills": "Supermoce twoich sojuszników",
|
"teammate_skills": "Supermoce twoich sojuszników",
|
||||||
"summary_start": "Podsumowanie z ostatniej rundy",
|
"summary": "Podsumowanie z ostatniej rundy",
|
||||||
"summary_end": "============================================",
|
|
||||||
|
|
||||||
"menu_controlls_scroll": "W/S – Przewijanie",
|
"menu_controlls_scroll": "W/S – Przewijanie",
|
||||||
"menu_controlls_padding": " | ",
|
"menu_controlls_padding": " | ",
|
||||||
|
|
|
||||||
|
|
@ -55,6 +55,12 @@
|
||||||
"c4camouflage": "Camuflagem C4",
|
"c4camouflage": "Camuflagem C4",
|
||||||
"c4camouflage_desc": "Você fica invisível enquanto segura a bomba",
|
"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": "Catapulta",
|
||||||
"catapult_desc": "Você tem uma chance aleatória de lançar um inimigo para cima",
|
"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}%",
|
"catapult_desc2": "Sua chance de lançar um inimigo ao acertar é: {0}%",
|
||||||
|
|
@ -68,6 +74,10 @@
|
||||||
"cutter": "Cortador",
|
"cutter": "Cortador",
|
||||||
"cutter_desc": "Mata instantaneamente com uma faca",
|
"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": "Escuridão",
|
||||||
"darkness_desc": "Aplica um efeito de escuridão a um inimigo escolhido",
|
"darkness_desc": "Aplica um efeito de escuridão a um inimigo escolhido",
|
||||||
"darkness_enemy_info": "Que as luzes se apaguem.",
|
"darkness_enemy_info": "Que as luzes se apaguem.",
|
||||||
|
|
@ -176,6 +186,9 @@
|
||||||
"holyhandgrenade": "Granada Sagrada",
|
"holyhandgrenade": "Granada Sagrada",
|
||||||
"holyhandgrenade_desc": "Suas granadas explosivas causam dano dobrado e têm alcance dobrado",
|
"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": "Impostor",
|
||||||
"impostor_desc": "Você começa a rodada com um modelo de jogador inimigo",
|
"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",
|
"silent_desc": "Seus passos e pulos são silenciosos para OUTROS jogadores",
|
||||||
|
|
||||||
"sniperelite": "Atirador de Elite",
|
"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",
|
"sniperelite_desc": "Clique em [css_useSkill] para trocar sua arma atual por uma AWP",
|
||||||
|
|
||||||
"soldier": "Soldado",
|
"soldier": "Soldado",
|
||||||
|
|
@ -452,10 +466,10 @@
|
||||||
|
|
||||||
"bombsite_a": "Zona de detonação A",
|
"bombsite_a": "Zona de detonação A",
|
||||||
"bombsite_b": "Zona de detonação B",
|
"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",
|
"teammate_skills": "Habilidades dos seus companheiros de equipe",
|
||||||
"summary_start": "Resumo da última rodada",
|
"summary": "Resumo da última rodada",
|
||||||
"summary_end": "=======================================",
|
|
||||||
|
|
||||||
"menu_controlls_scroll": "W/S - Rolar",
|
"menu_controlls_scroll": "W/S - Rolar",
|
||||||
"menu_controlls_padding": " | ",
|
"menu_controlls_padding": " | ",
|
||||||
|
|
|
||||||
|
|
@ -55,6 +55,12 @@
|
||||||
"c4camouflage": "C4伪装",
|
"c4camouflage": "C4伪装",
|
||||||
"c4camouflage_desc": "你持有炸弹时隐形",
|
"c4camouflage_desc": "你持有炸弹时隐形",
|
||||||
|
|
||||||
|
"carefulbullets": "谨慎的子弹",
|
||||||
|
"carefulbullets_desc": "选择一名球员,每当他投篮未中时就会受到伤害",
|
||||||
|
"carefulbullets_enemy_info": "从现在起,不准确将带来切实的伤害。",
|
||||||
|
"carefulbullets_player_info": "'{0}' 现在必须更加谨慎。",
|
||||||
|
"carefulbullets_select_info": "不准确会伤害玩家:",
|
||||||
|
|
||||||
"catapult": "弹射",
|
"catapult": "弹射",
|
||||||
"catapult_desc": "你有随机几率将敌人向上弹射",
|
"catapult_desc": "你有随机几率将敌人向上弹射",
|
||||||
"catapult_desc2": "你击中敌人将其弹射的几率是:{0}%",
|
"catapult_desc2": "你击中敌人将其弹射的几率是:{0}%",
|
||||||
|
|
@ -68,6 +74,10 @@
|
||||||
"cutter": "切割者",
|
"cutter": "切割者",
|
||||||
"cutter_desc": "用刀可立即杀死敌人",
|
"cutter_desc": "用刀可立即杀死敌人",
|
||||||
|
|
||||||
|
"cypher": "相机",
|
||||||
|
"cypher_desc": "点击 [css_useSkill] 创建/切换摄像机",
|
||||||
|
"cypher_nospace": "相机必须与墙壁呈直角放置",
|
||||||
|
|
||||||
"darkness": "黑暗",
|
"darkness": "黑暗",
|
||||||
"darkness_desc": "对选定的敌人施加黑暗效果",
|
"darkness_desc": "对选定的敌人施加黑暗效果",
|
||||||
"darkness_enemy_info": "让灯光熄灭。",
|
"darkness_enemy_info": "让灯光熄灭。",
|
||||||
|
|
@ -176,6 +186,9 @@
|
||||||
"holyhandgrenade": "神圣手榴弹",
|
"holyhandgrenade": "神圣手榴弹",
|
||||||
"holyhandgrenade_desc": "你的高爆手榴弹造成双倍伤害并拥有双倍范围",
|
"holyhandgrenade_desc": "你的高爆手榴弹造成双倍伤害并拥有双倍范围",
|
||||||
|
|
||||||
|
"iana": "全息图",
|
||||||
|
"iana_desc": "点击 [css_useSkill] 可控制你的全息影像数秒",
|
||||||
|
|
||||||
"impostor": "冒名顶替者",
|
"impostor": "冒名顶替者",
|
||||||
"impostor_desc": "回合开始时你获得敌方玩家模型",
|
"impostor_desc": "回合开始时你获得敌方玩家模型",
|
||||||
|
|
||||||
|
|
@ -357,6 +370,7 @@
|
||||||
"silent_desc": "你的脚步和跳跃对其他玩家无声",
|
"silent_desc": "你的脚步和跳跃对其他玩家无声",
|
||||||
|
|
||||||
"sniperelite": "狙击精英",
|
"sniperelite": "狙击精英",
|
||||||
|
"sniperelite_customname": "狙击精英技能",
|
||||||
"sniperelite_desc": "点击 [css_useSkill] 将当前武器替换为AWP",
|
"sniperelite_desc": "点击 [css_useSkill] 将当前武器替换为AWP",
|
||||||
|
|
||||||
"soldier": "士兵",
|
"soldier": "士兵",
|
||||||
|
|
@ -452,10 +466,10 @@
|
||||||
|
|
||||||
"bombsite_a": "爆轰区A",
|
"bombsite_a": "爆轰区A",
|
||||||
"bombsite_b": "爆轰区B",
|
"bombsite_b": "爆轰区B",
|
||||||
|
"bombplanted": "炸弹已安装完毕{0}秒后引爆",
|
||||||
|
|
||||||
"teammate_skills": "你队友的技能",
|
"teammate_skills": "你队友的技能",
|
||||||
"summary_start": "上一回合总结",
|
"summary": "上一回合总结",
|
||||||
"summary_end": "=======================================",
|
|
||||||
|
|
||||||
"menu_controlls_scroll": "W/S - 滚动",
|
"menu_controlls_scroll": "W/S - 滚动",
|
||||||
"menu_controlls_padding": " | ",
|
"menu_controlls_padding": " | ",
|
||||||
|
|
|
||||||
|
|
@ -64,6 +64,7 @@ public enum Skills
|
||||||
BladeMaster,
|
BladeMaster,
|
||||||
BunnyHop,
|
BunnyHop,
|
||||||
C4Camouflage,
|
C4Camouflage,
|
||||||
|
CarefulBullets,
|
||||||
Catapult,
|
Catapult,
|
||||||
Chicken,
|
Chicken,
|
||||||
ChillOut,
|
ChillOut,
|
||||||
|
|
|
||||||
|
|
@ -3,6 +3,7 @@ using CounterStrikeSharp.API.Core;
|
||||||
using CounterStrikeSharp.API.Core.Attributes;
|
using CounterStrikeSharp.API.Core.Attributes;
|
||||||
using CounterStrikeSharp.API.Modules.Admin;
|
using CounterStrikeSharp.API.Modules.Admin;
|
||||||
using CounterStrikeSharp.API.Modules.Cvars;
|
using CounterStrikeSharp.API.Modules.Cvars;
|
||||||
|
using CounterStrikeSharp.API.Modules.Events;
|
||||||
using CounterStrikeSharp.API.Modules.Memory;
|
using CounterStrikeSharp.API.Modules.Memory;
|
||||||
using CounterStrikeSharp.API.Modules.Memory.DynamicFunctions;
|
using CounterStrikeSharp.API.Modules.Memory.DynamicFunctions;
|
||||||
using CounterStrikeSharp.API.Modules.UserMessages;
|
using CounterStrikeSharp.API.Modules.UserMessages;
|
||||||
|
|
@ -11,7 +12,6 @@ using src.utils;
|
||||||
using System.Collections.Concurrent;
|
using System.Collections.Concurrent;
|
||||||
using static CounterStrikeSharp.API.Core.Listeners;
|
using static CounterStrikeSharp.API.Core.Listeners;
|
||||||
using static src.jRandomSkills;
|
using static src.jRandomSkills;
|
||||||
using static System.Net.Mime.MediaTypeNames;
|
|
||||||
|
|
||||||
namespace src.player
|
namespace src.player
|
||||||
{
|
{
|
||||||
|
|
@ -38,6 +38,7 @@ namespace src.player
|
||||||
{
|
{
|
||||||
Instance.RegisterEventHandler<EventPlayerConnectFull>(PlayerConnectFull);
|
Instance.RegisterEventHandler<EventPlayerConnectFull>(PlayerConnectFull);
|
||||||
Instance.RegisterEventHandler<EventPlayerDisconnect>(PlayerDisconnect);
|
Instance.RegisterEventHandler<EventPlayerDisconnect>(PlayerDisconnect);
|
||||||
|
// Instance.RegisterEventHandler<EventPlayerChat>(PlayerChat);
|
||||||
Instance.RegisterEventHandler<EventRoundStart>(RoundStart);
|
Instance.RegisterEventHandler<EventRoundStart>(RoundStart);
|
||||||
Instance.RegisterEventHandler<EventRoundEnd>(RoundEnd);
|
Instance.RegisterEventHandler<EventRoundEnd>(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)
|
private static HookResult RoundStart(EventRoundStart @event, GameEventInfo info)
|
||||||
{
|
{
|
||||||
lock (setLock)
|
lock (setLock)
|
||||||
|
|
@ -398,7 +432,10 @@ namespace src.player
|
||||||
lock (setLock)
|
lock (setLock)
|
||||||
{
|
{
|
||||||
isTransmitRegistered = false;
|
isTransmitRegistered = false;
|
||||||
Instance.AddTimer(.1f, () => DisableAll());
|
Instance.AddTimer(.1f, () => {
|
||||||
|
DisableAll();
|
||||||
|
ConVar.Find("sv_legacy_jump")?.SetValue("1");
|
||||||
|
});
|
||||||
Instance.RemoveListener<CheckTransmit>(CheckTransmit);
|
Instance.RemoveListener<CheckTransmit>(CheckTransmit);
|
||||||
playersSkills.Clear();
|
playersSkills.Clear();
|
||||||
staticSkills.Clear();
|
staticSkills.Clear();
|
||||||
|
|
|
||||||
|
|
@ -23,19 +23,7 @@ namespace src.player.skills
|
||||||
if (!Instance.IsPlayerValid(attacker) || !Instance.IsPlayerValid(victim) || attacker == victim) return;
|
if (!Instance.IsPlayerValid(attacker) || !Instance.IsPlayerValid(victim) || attacker == victim) return;
|
||||||
var playerInfo = Instance.SkillPlayer.FirstOrDefault(p => p.SteamID == victim?.SteamID);
|
var playerInfo = Instance.SkillPlayer.FirstOrDefault(p => p.SteamID == victim?.SteamID);
|
||||||
if (playerInfo?.Skill == skillName && hitgroup == (int)HitGroup_t.HITGROUP_HEAD)
|
if (playerInfo?.Skill == skillName && hitgroup == (int)HitGroup_t.HITGROUP_HEAD)
|
||||||
ApplyIronHeadEffect(victim!, @event.DmgHealth);
|
SkillUtils.RestoreHealth(victim);
|
||||||
}
|
|
||||||
|
|
||||||
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;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
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)
|
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)
|
||||||
|
|
|
||||||
|
|
@ -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")
|
if (weaponServices.ActiveWeapon == null || !weaponServices.ActiveWeapon.IsValid || weaponServices.ActiveWeapon.Value == null || !weaponServices.ActiveWeapon.Value.IsValid || weaponServices.ActiveWeapon.Value.DesignerName != "weapon_knife")
|
||||||
return;
|
return;
|
||||||
|
|
||||||
RestoreHealth(victim, damage);
|
SkillUtils.RestoreHealth(victim);
|
||||||
}
|
|
||||||
|
|
||||||
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");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
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)
|
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)
|
||||||
|
|
|
||||||
|
|
@ -2,6 +2,7 @@ using CounterStrikeSharp.API;
|
||||||
using CounterStrikeSharp.API.Core;
|
using CounterStrikeSharp.API.Core;
|
||||||
using CounterStrikeSharp.API.Modules.Utils;
|
using CounterStrikeSharp.API.Modules.Utils;
|
||||||
using src.utils;
|
using src.utils;
|
||||||
|
using System.Collections.Concurrent;
|
||||||
using static src.jRandomSkills;
|
using static src.jRandomSkills;
|
||||||
|
|
||||||
namespace src.player.skills
|
namespace src.player.skills
|
||||||
|
|
@ -9,6 +10,7 @@ namespace src.player.skills
|
||||||
public class BunnyHop : ISkill
|
public class BunnyHop : ISkill
|
||||||
{
|
{
|
||||||
private const Skills skillName = Skills.BunnyHop;
|
private const Skills skillName = Skills.BunnyHop;
|
||||||
|
private static readonly ConcurrentDictionary<ulong, int> playersLastJump = [];
|
||||||
|
|
||||||
public static void LoadSkill()
|
public static void LoadSkill()
|
||||||
{
|
{
|
||||||
|
|
@ -34,7 +36,13 @@ namespace src.player.skills
|
||||||
var flags = (PlayerFlags)playerPawn.Flags;
|
var flags = (PlayerFlags)playerPawn.Flags;
|
||||||
var buttons = player.Buttons;
|
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<float>(skillName, "jumpVelocity");
|
playerPawn.AbsVelocity.Z = SkillsInfo.GetValue<float>(skillName, "jumpVelocity");
|
||||||
var maxSpeed = SkillsInfo.GetValue<float>(skillName, "maxSpeed");
|
var maxSpeed = SkillsInfo.GetValue<float>(skillName, "maxSpeed");
|
||||||
|
|
|
||||||
|
|
@ -61,7 +61,7 @@ namespace src.player.skills
|
||||||
{
|
{
|
||||||
foreach (var (info, player) in infoList)
|
foreach (var (info, player) in infoList)
|
||||||
{
|
{
|
||||||
if (player == null) continue;
|
if (player == null || !player.IsValid) continue;
|
||||||
foreach (var _player in invisiblePlayers.Keys)
|
foreach (var _player in invisiblePlayers.Keys)
|
||||||
if (player.SteamID != _player.SteamID)
|
if (player.SteamID != _player.SteamID)
|
||||||
{
|
{
|
||||||
|
|
@ -72,8 +72,9 @@ namespace src.player.skills
|
||||||
if (entity == null || !entity.IsValid) continue;
|
if (entity == null || !entity.IsValid) continue;
|
||||||
info.TransmitEntities.Remove(entity.Index);
|
info.TransmitEntities.Remove(entity.Index);
|
||||||
|
|
||||||
var bombIndex = HideBomb(_player);
|
var bombIndex = GetBombIndex();
|
||||||
if (bombIndex == null) continue;
|
if (bombIndex == null) continue;
|
||||||
|
|
||||||
var bombEntity = Utilities.GetEntityFromIndex<CBaseEntity>((int)bombIndex);
|
var bombEntity = Utilities.GetEntityFromIndex<CBaseEntity>((int)bombIndex);
|
||||||
if (bombEntity == null || !bombEntity.IsValid) continue;
|
if (bombEntity == null || !bombEntity.IsValid) continue;
|
||||||
info.TransmitEntities.Remove(bombEntity.Index);
|
info.TransmitEntities.Remove(bombEntity.Index);
|
||||||
|
|
@ -124,7 +125,7 @@ namespace src.player.skills
|
||||||
particle.AcceptInput("Start");
|
particle.AcceptInput("Start");
|
||||||
}
|
}
|
||||||
|
|
||||||
private static uint? HideBomb(CCSPlayerController player)
|
private static uint? GetBombIndex()
|
||||||
{
|
{
|
||||||
var bombEntities = Utilities.FindAllEntitiesByDesignerName<CC4>("weapon_c4").ToList();
|
var bombEntities = Utilities.FindAllEntitiesByDesignerName<CC4>("weapon_c4").ToList();
|
||||||
if (bombEntities.Count == 0) return null;
|
if (bombEntities.Count == 0) return null;
|
||||||
|
|
@ -132,15 +133,6 @@ namespace src.player.skills
|
||||||
var bomb = bombEntities.FirstOrDefault();
|
var bomb = bombEntities.FirstOrDefault();
|
||||||
if (bomb == null) return null;
|
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;
|
return bomb.Index;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
153
jRandomSkills - SRC Files/src/player/skills/CarefulBullets.cs
Normal file
153
jRandomSkills - SRC Files/src/player/skills/CarefulBullets.cs
Normal file
|
|
@ -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<ulong, byte> targetPlayers = [];
|
||||||
|
private static readonly ConcurrentDictionary<ulong, bool> lastShot = [];
|
||||||
|
private static readonly object setLock = new();
|
||||||
|
|
||||||
|
public static void LoadSkill()
|
||||||
|
{
|
||||||
|
SkillUtils.RegisterSkill(skillName, SkillsInfo.GetValue<string>(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<CEntityInstance>(0);
|
||||||
|
CTakeDamageInfo param2 = h.GetParam<CTakeDamageInfo>(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<CCSPlayerController>();
|
||||||
|
|
||||||
|
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<int>(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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -1,8 +1,7 @@
|
||||||
using CounterStrikeSharp.API;
|
using CounterStrikeSharp.API;
|
||||||
using CounterStrikeSharp.API.Core;
|
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.Memory.DynamicFunctions;
|
||||||
|
using CounterStrikeSharp.API.Modules.Timers;
|
||||||
using CounterStrikeSharp.API.Modules.Utils;
|
using CounterStrikeSharp.API.Modules.Utils;
|
||||||
using CS2TraceRay.Class;
|
using CS2TraceRay.Class;
|
||||||
using CS2TraceRay.Struct;
|
using CS2TraceRay.Struct;
|
||||||
|
|
@ -10,6 +9,7 @@ using src.utils;
|
||||||
using System.Collections.Concurrent;
|
using System.Collections.Concurrent;
|
||||||
using System.Drawing;
|
using System.Drawing;
|
||||||
using System.Numerics;
|
using System.Numerics;
|
||||||
|
using Timer = CounterStrikeSharp.API.Modules.Timers.Timer;
|
||||||
using Vector = CounterStrikeSharp.API.Modules.Utils.Vector;
|
using Vector = CounterStrikeSharp.API.Modules.Utils.Vector;
|
||||||
|
|
||||||
namespace src.player.skills
|
namespace src.player.skills
|
||||||
|
|
@ -25,7 +25,7 @@ namespace src.player.skills
|
||||||
|
|
||||||
public static void LoadSkill()
|
public static void LoadSkill()
|
||||||
{
|
{
|
||||||
// SkillUtils.RegisterSkill(skillName, SkillsInfo.GetValue<string>(skillName, "color"));
|
SkillUtils.RegisterSkill(skillName, SkillsInfo.GetValue<string>(skillName, "color"));
|
||||||
jRandomSkills.Instance.AddToManifest(cameraPropModel);
|
jRandomSkills.Instance.AddToManifest(cameraPropModel);
|
||||||
jRandomSkills.Instance.AddToManifest(cameraViewModel);
|
jRandomSkills.Instance.AddToManifest(cameraViewModel);
|
||||||
}
|
}
|
||||||
|
|
@ -56,7 +56,9 @@ namespace src.player.skills
|
||||||
CameraView = null,
|
CameraView = null,
|
||||||
CameraActive = false,
|
CameraActive = false,
|
||||||
NextCamera = 0,
|
NextCamera = 0,
|
||||||
|
NoSpace = 0,
|
||||||
PlayerCameraRaw = player.PlayerPawn.Value.CameraServices.ViewEntity.Raw,
|
PlayerCameraRaw = player.PlayerPawn.Value.CameraServices.ViewEntity.Raw,
|
||||||
|
LastAngle = QAngle.Zero
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -85,6 +87,7 @@ namespace src.player.skills
|
||||||
playerSkill.CameraProp.AcceptInput("Kill");
|
playerSkill.CameraProp.AcceptInput("Kill");
|
||||||
playerSkill.CameraProp = null;
|
playerSkill.CameraProp = null;
|
||||||
}
|
}
|
||||||
|
playerSkill.NextCamera = Server.TickCount + SkillsInfo.GetValue<float>(skillName, "Cooldown") * 64;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void OnTick()
|
public static void OnTick()
|
||||||
|
|
@ -114,8 +117,13 @@ namespace src.player.skills
|
||||||
{
|
{
|
||||||
if (player.NextCamera > Server.TickCount) return;
|
if (player.NextCamera > Server.TickCount) return;
|
||||||
player.CameraProp = CreateCameraProp(player.Player);
|
player.CameraProp = CreateCameraProp(player.Player);
|
||||||
|
if (player.CameraProp == null)
|
||||||
|
{
|
||||||
|
player.NoSpace = Server.TickCount + (64 * 2);
|
||||||
|
return;
|
||||||
|
}
|
||||||
player.CameraView = CreateCameraView(player.Player);
|
player.CameraView = CreateCameraView(player.Player);
|
||||||
player.NextCamera = Server.TickCount + SkillsInfo.GetValue<float>(skillName, "Cooldown") * 64;
|
if (player.CameraView == null) return;
|
||||||
}
|
}
|
||||||
|
|
||||||
var pawn = player.Player.PlayerPawn.Value;
|
var pawn = player.Player.PlayerPawn.Value;
|
||||||
|
|
@ -123,13 +131,52 @@ namespace src.player.skills
|
||||||
return;
|
return;
|
||||||
|
|
||||||
BlockWeapon(player.Player, player.CameraActive);
|
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)
|
private static CDynamicProp? CreateCameraProp(CCSPlayerController player)
|
||||||
|
|
@ -140,7 +187,6 @@ namespace src.player.skills
|
||||||
camera.Collision.SolidType = SolidType_t.SOLID_VPHYSICS;
|
camera.Collision.SolidType = SolidType_t.SOLID_VPHYSICS;
|
||||||
camera.CBodyComponent!.SceneNode!.Owner!.Entity!.Flags = (uint)(camera.CBodyComponent!.SceneNode!.Owner!.Entity!.Flags & ~(1 << 2));
|
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.Entity!.Name = camera.Globalname = $"CypherCamera_{Server.TickCount}_{player.SteamID}";
|
||||||
camera.DispatchSpawn();
|
|
||||||
|
|
||||||
var playerPawn = player.PlayerPawn.Value;
|
var playerPawn = player.PlayerPawn.Value;
|
||||||
if (playerPawn == null || !playerPawn.IsValid) return null;
|
if (playerPawn == null || !playerPawn.IsValid) return null;
|
||||||
|
|
@ -150,10 +196,14 @@ namespace src.player.skills
|
||||||
if (cameraVector == null) return null;
|
if (cameraVector == null) return null;
|
||||||
cameraVector = new Vector(cameraVector.X + diffVector.X, cameraVector.Y + diffVector.Y, cameraVector.Z);
|
cameraVector = new Vector(cameraVector.X + diffVector.X, cameraVector.Y + diffVector.Y, cameraVector.Z);
|
||||||
|
|
||||||
|
if (!CheckCameraPosition(cameraVector, player))
|
||||||
|
return null;
|
||||||
|
|
||||||
Server.NextFrame(() =>
|
Server.NextFrame(() =>
|
||||||
{
|
{
|
||||||
camera.SetModel(cameraPropModel);
|
camera.SetModel(cameraPropModel);
|
||||||
camera.Teleport(cameraVector, new QAngle(0, playerPawn.V_angle.Y + 180, 0));
|
camera.Teleport(cameraVector, new QAngle(0, playerPawn.V_angle.Y + 180, 0));
|
||||||
|
camera.DispatchSpawn();
|
||||||
});
|
});
|
||||||
|
|
||||||
return camera;
|
return camera;
|
||||||
|
|
@ -163,7 +213,6 @@ namespace src.player.skills
|
||||||
{
|
{
|
||||||
var camera = Utilities.CreateEntityByName<CDynamicProp>("prop_dynamic");
|
var camera = Utilities.CreateEntityByName<CDynamicProp>("prop_dynamic");
|
||||||
if (camera == null || !camera.IsValid) return null;
|
if (camera == null || !camera.IsValid) return null;
|
||||||
camera.DispatchSpawn();
|
|
||||||
|
|
||||||
var playerPawn = player.PlayerPawn.Value;
|
var playerPawn = player.PlayerPawn.Value;
|
||||||
if (playerPawn == null || !playerPawn.IsValid) return null;
|
if (playerPawn == null || !playerPawn.IsValid) return null;
|
||||||
|
|
@ -172,14 +221,15 @@ namespace src.player.skills
|
||||||
Vector diffVector = SkillUtils.GetForwardVector(playerPawn.V_angle) * 25;
|
Vector diffVector = SkillUtils.GetForwardVector(playerPawn.V_angle) * 25;
|
||||||
if (cameraVector == null) return null;
|
if (cameraVector == null) return null;
|
||||||
|
|
||||||
|
|
||||||
cameraVector = new Vector(cameraVector.X - diffVector.X, cameraVector.Y - diffVector.Y, cameraVector.Z);
|
cameraVector = new Vector(cameraVector.X - diffVector.X, cameraVector.Y - diffVector.Y, cameraVector.Z);
|
||||||
if (cameraVector == null) return null;
|
if (cameraVector == null) return null;
|
||||||
|
|
||||||
Server.NextFrame(() =>
|
Server.NextFrame(() =>
|
||||||
{
|
{
|
||||||
camera.SetModel(cameraViewModel);
|
camera.SetModel(cameraViewModel);
|
||||||
camera.Render = Color.FromArgb(0, 255, 255, 255);
|
camera.Render = Color.FromArgb(0, 255, 255, 255);
|
||||||
camera.Teleport(cameraVector, playerPawn.EyeAngles);
|
camera.Teleport(cameraVector, playerPawn.EyeAngles);
|
||||||
|
camera.DispatchSpawn();
|
||||||
});
|
});
|
||||||
|
|
||||||
return camera;
|
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;
|
var playerPawn = player.PlayerPawn.Value;
|
||||||
if (playerPawn == null || !playerPawn.IsValid || playerPawn.AbsOrigin == null) return null;
|
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 eyePos = new(playerPawn.AbsOrigin.X, playerPawn.AbsOrigin.Y, playerPawn.AbsOrigin.Z + playerPawn.ViewOffset.Z);
|
||||||
Vector endPos = eyePos + SkillUtils.GetForwardVector(playerPawn.V_angle) * 4096f;
|
Vector endPos = eyePos + SkillUtils.GetForwardVector(playerPawn.V_angle) * 4096f;
|
||||||
|
|
||||||
Ray ray = new(Vector3.Zero);
|
ulong solid = 0x1;
|
||||||
CTraceFilter filter = new(playerPawn.Index, playerPawn.Index)
|
ulong window = 0x1000;
|
||||||
{
|
ulong passBullets = 0x2000;
|
||||||
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
|
|
||||||
};
|
|
||||||
|
|
||||||
filter.m_nHierarchyIds[0] = playerPawn.GetHierarchyId();
|
ulong mask = solid | window | passBullets;
|
||||||
filter.m_nHierarchyIds[1] = 0;
|
ulong contents = playerPawn.Collision.CollisionGroup;
|
||||||
CGameTrace trace = TraceRay.TraceHull(eyePos, endPos, filter, ray);
|
CGameTrace trace = TraceRay.TraceShape(eyePos, endPos, mask, contents, player);
|
||||||
|
|
||||||
if (trace.HitWorld(out _))
|
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;
|
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)
|
private static void UpdateHUD(PlayerSkill playerSkill)
|
||||||
{
|
{
|
||||||
if (playerSkill == null || playerSkill.Player == null) return;
|
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);
|
var playerInfo = jRandomSkills.Instance.SkillPlayer.FirstOrDefault(s => s.SteamID == playerSkill?.Player?.SteamID);
|
||||||
if (playerInfo == null) return;
|
if (playerInfo == null) return;
|
||||||
|
|
||||||
if (cooldown == 0)
|
if (playerSkill.NoSpace >= Server.TickCount)
|
||||||
|
playerInfo.PrintHTML = $"<font color='#FF0000'>{playerSkill.Player.GetTranslation("cypher_nospace")}</font>";
|
||||||
|
else if (cooldown == 0)
|
||||||
playerInfo.PrintHTML = null;
|
playerInfo.PrintHTML = null;
|
||||||
else if (playerSkill?.CameraProp == null)
|
else if (playerSkill?.CameraProp == null)
|
||||||
playerInfo.PrintHTML = $"{playerSkill?.Player.GetTranslation("hud_info", $"<font color='#FF0000'>{cooldown}</font>")}";
|
playerInfo.PrintHTML = $"{playerSkill?.Player.GetTranslation("hud_info", $"<font color='#FF0000'>{cooldown}</font>")}";
|
||||||
|
|
@ -284,6 +360,8 @@ namespace src.player.skills
|
||||||
public uint PlayerCameraRaw { get; set; }
|
public uint PlayerCameraRaw { get; set; }
|
||||||
public bool CameraActive { get; set; }
|
public bool CameraActive { get; set; }
|
||||||
public float NextCamera { 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)
|
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)
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,7 @@ using CounterStrikeSharp.API.Modules.Utils;
|
||||||
using src.utils;
|
using src.utils;
|
||||||
using System.Collections.Concurrent;
|
using System.Collections.Concurrent;
|
||||||
using static src.jRandomSkills;
|
using static src.jRandomSkills;
|
||||||
|
using Timer = CounterStrikeSharp.API.Modules.Timers.Timer;
|
||||||
|
|
||||||
namespace src.player.skills
|
namespace src.player.skills
|
||||||
{
|
{
|
||||||
|
|
@ -111,34 +112,32 @@ namespace src.player.skills
|
||||||
private static void SetUpPostProcessing(CCSPlayerController player, bool turnOff = false)
|
private static void SetUpPostProcessing(CCSPlayerController player, bool turnOff = false)
|
||||||
{
|
{
|
||||||
if (player == null || !player.IsValid) return;
|
if (player == null || !player.IsValid) return;
|
||||||
var pawn = player.PlayerPawn.Value;
|
ulong playerSteamID = player.SteamID;
|
||||||
if (pawn == null || !pawn.IsValid || pawn.CameraServices == null) return;
|
|
||||||
|
|
||||||
lock (setLock)
|
lock (setLock)
|
||||||
{
|
{
|
||||||
if (!turnOff)
|
if (!turnOff)
|
||||||
{
|
{
|
||||||
playersInDark.TryAdd(player.SteamID, 0);
|
playersInDark.TryAdd(playerSteamID, 0);
|
||||||
SkillUtils.ApplyScreenColor(player,
|
ApplyColor(player);
|
||||||
r: SkillsInfo.GetValue<int>(skillName, "R"),
|
|
||||||
g: SkillsInfo.GetValue<int>(skillName, "G"),
|
|
||||||
b: SkillsInfo.GetValue<int>(skillName, "B"),
|
|
||||||
a: SkillsInfo.GetValue<int>(skillName, "A"),
|
|
||||||
duration: 100,
|
|
||||||
holdTime: 3000);
|
|
||||||
|
|
||||||
Instance.AddTimer(2.5f, () => {
|
Timer? darkTimer = null;
|
||||||
if (!playersInDark.ContainsKey(player.SteamID))
|
darkTimer = Instance.AddTimer(5f, () => {
|
||||||
|
if (!playersInDark.ContainsKey(playerSteamID))
|
||||||
|
{
|
||||||
|
darkTimer?.Kill();
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (player.IsValid && player.PawnIsAlive)
|
var target = Utilities.GetPlayerFromSteamId(playerSteamID);
|
||||||
SkillUtils.ApplyScreenColor(player,
|
if (target == null || !target.IsValid)
|
||||||
r: SkillsInfo.GetValue<int>(skillName, "R"),
|
{
|
||||||
g: SkillsInfo.GetValue<int>(skillName, "G"),
|
darkTimer?.Kill();
|
||||||
b: SkillsInfo.GetValue<int>(skillName, "B"),
|
return;
|
||||||
a: SkillsInfo.GetValue<int>(skillName, "A"),
|
}
|
||||||
duration: 100,
|
|
||||||
holdTime: 3000);
|
if (target.PawnIsAlive)
|
||||||
|
ApplyColor(player);
|
||||||
}, TimerFlags.STOP_ON_MAPCHANGE | TimerFlags.REPEAT);
|
}, TimerFlags.STOP_ON_MAPCHANGE | TimerFlags.REPEAT);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|
@ -149,6 +148,17 @@ namespace src.player.skills
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static void ApplyColor(CCSPlayerController player)
|
||||||
|
{
|
||||||
|
SkillUtils.ApplyScreenColor(player,
|
||||||
|
r: SkillsInfo.GetValue<int>(skillName, "R"),
|
||||||
|
g: SkillsInfo.GetValue<int>(skillName, "G"),
|
||||||
|
b: SkillsInfo.GetValue<int>(skillName, "B"),
|
||||||
|
a: SkillsInfo.GetValue<int>(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 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;
|
public int R { get; set; } = r;
|
||||||
|
|
|
||||||
|
|
@ -2,6 +2,7 @@
|
||||||
using CounterStrikeSharp.API.Core;
|
using CounterStrikeSharp.API.Core;
|
||||||
using CounterStrikeSharp.API.Modules.Utils;
|
using CounterStrikeSharp.API.Modules.Utils;
|
||||||
using src.utils;
|
using src.utils;
|
||||||
|
using System.Collections.Concurrent;
|
||||||
using static src.jRandomSkills;
|
using static src.jRandomSkills;
|
||||||
|
|
||||||
namespace src.player.skills
|
namespace src.player.skills
|
||||||
|
|
@ -9,15 +10,22 @@ namespace src.player.skills
|
||||||
public class Dash : ISkill
|
public class Dash : ISkill
|
||||||
{
|
{
|
||||||
private const Skills skillName = Skills.Dash;
|
private const Skills skillName = Skills.Dash;
|
||||||
private static readonly PlayerFlags[] LF = new PlayerFlags[64];
|
private static readonly ConcurrentDictionary<ulong, PlayerSkillInfo> SkillPlayerInfo = [];
|
||||||
private static readonly int?[] J = new int?[64];
|
private static readonly object setLock = new();
|
||||||
private static readonly PlayerButtons[] LB = new PlayerButtons[64];
|
|
||||||
|
|
||||||
public static void LoadSkill()
|
public static void LoadSkill()
|
||||||
{
|
{
|
||||||
SkillUtils.RegisterSkill(skillName, SkillsInfo.GetValue<string>(skillName, "color"));
|
SkillUtils.RegisterSkill(skillName, SkillsInfo.GetValue<string>(skillName, "color"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void NewRound()
|
||||||
|
{
|
||||||
|
lock (setLock)
|
||||||
|
{
|
||||||
|
SkillPlayerInfo.Clear();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public static void OnTick()
|
public static void OnTick()
|
||||||
{
|
{
|
||||||
foreach (var player in Utilities.GetPlayers())
|
foreach (var player in Utilities.GetPlayers())
|
||||||
|
|
@ -25,11 +33,55 @@ namespace src.player.skills
|
||||||
if (!Instance.IsPlayerValid(player)) return;
|
if (!Instance.IsPlayerValid(player)) return;
|
||||||
var playerInfo = Instance.SkillPlayer.FirstOrDefault(p => p.SteamID == player.SteamID);
|
var playerInfo = Instance.SkillPlayer.FirstOrDefault(p => p.SteamID == player.SteamID);
|
||||||
if (playerInfo?.Skill == skillName)
|
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<float>(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", $"<font color='#FF0000'>{cooldown}</font>")}";
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void HandleDash(CCSPlayerController player, PlayerSkillInfo skillInfo)
|
||||||
{
|
{
|
||||||
var playerPawn = player.PlayerPawn.Value;
|
var playerPawn = player.PlayerPawn.Value;
|
||||||
if (playerPawn == null || !playerPawn.IsValid) return;
|
if (playerPawn == null || !playerPawn.IsValid) return;
|
||||||
|
|
@ -37,55 +89,81 @@ namespace src.player.skills
|
||||||
var flags = (PlayerFlags)playerPawn.Flags;
|
var flags = (PlayerFlags)playerPawn.Flags;
|
||||||
var buttons = player.Buttons;
|
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);
|
var playerInfo = Instance.SkillPlayer.FirstOrDefault(p => p.SteamID == player.SteamID);
|
||||||
if (playerPawn == null || playerInfo == null) return;
|
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)
|
||||||
{
|
{
|
||||||
}
|
bool lastJumpPressed = (skillInfo.LastButtons & PlayerButtons.Jump) != 0;
|
||||||
else if ((flags & PlayerFlags.FL_ONGROUND) != 0)
|
if (!lastJumpPressed && skillInfo.CanUse)
|
||||||
{
|
{
|
||||||
J[player.Slot] = 0;
|
skillInfo.Jumps++;
|
||||||
}
|
skillInfo.CanUse = false;
|
||||||
else if ((LB[player.Slot] & PlayerButtons.Jump) == 0 && (buttons & PlayerButtons.Jump) != 0 && J[player.Slot] < 1)
|
skillInfo.Cooldown = DateTime.Now;
|
||||||
{
|
|
||||||
J[player.Slot]++;
|
|
||||||
|
|
||||||
float moveX = 0;
|
float moveX = 0;
|
||||||
float moveY = 0;
|
float moveY = 0;
|
||||||
|
|
||||||
PlayerButtons playerButtons = player.Buttons;
|
PlayerButtons playerButtons = player.Buttons;
|
||||||
if (playerButtons.HasFlag(PlayerButtons.Forward))
|
if (SkillsInfo.GetValue<bool>(skillName, "anyDirection"))
|
||||||
moveY += 1;
|
{
|
||||||
if (playerButtons.HasFlag(PlayerButtons.Back))
|
if (playerButtons.HasFlag(PlayerButtons.Forward))
|
||||||
moveY -= 1;
|
moveY += 1;
|
||||||
if (playerButtons.HasFlag(PlayerButtons.Moveleft))
|
if (playerButtons.HasFlag(PlayerButtons.Back))
|
||||||
moveX += 1;
|
moveY -= 1;
|
||||||
if (playerButtons.HasFlag(PlayerButtons.Moveright))
|
if (playerButtons.HasFlag(PlayerButtons.Moveleft))
|
||||||
moveX -= 1;
|
moveX += 1;
|
||||||
|
if (playerButtons.HasFlag(PlayerButtons.Moveright))
|
||||||
|
moveX -= 1;
|
||||||
|
|
||||||
if (moveX == 0 && moveY == 0)
|
if (moveX == 0 && moveY == 0)
|
||||||
moveY = 1;
|
moveY = 1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
moveY = 1;
|
||||||
|
|
||||||
float moveAngle = MathF.Atan2(moveX, moveY) * (180f / MathF.PI);
|
float moveAngle = MathF.Atan2(moveX, moveY) * (180f / MathF.PI);
|
||||||
QAngle dashAngles = new(0, playerPawn.EyeAngles.Y + moveAngle, 0);
|
QAngle dashAngles = new(0, playerPawn.EyeAngles.Y + moveAngle, 0);
|
||||||
|
|
||||||
Vector newVelocity = SkillUtils.GetForwardVector(dashAngles) * SkillsInfo.GetValue<float>(skillName, "pushVelocity");
|
Vector newVelocity = SkillUtils.GetForwardVector(dashAngles) * SkillsInfo.GetValue<float>(skillName, "pushVelocity");
|
||||||
newVelocity.Z = playerPawn.AbsVelocity.Z + SkillsInfo.GetValue<float>(skillName, "jumpVelocity");
|
newVelocity.Z = playerPawn.AbsVelocity.Z + SkillsInfo.GetValue<float>(skillName, "jumpVelocity");
|
||||||
|
|
||||||
playerPawn.AbsVelocity.X = newVelocity.X;
|
playerPawn.AbsVelocity.X = newVelocity.X;
|
||||||
playerPawn.AbsVelocity.Y = newVelocity.Y;
|
playerPawn.AbsVelocity.Y = newVelocity.Y;
|
||||||
playerPawn.AbsVelocity.Z = newVelocity.Z;
|
playerPawn.AbsVelocity.Z = newVelocity.Z;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
LF[player.Slot] = flags;
|
skillInfo.LastFlags = flags;
|
||||||
LB[player.Slot] = buttons;
|
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 JumpVelocity { get; set; } = jumpVelocity;
|
||||||
public float PushVelocity { get; set; } = pushVelocity;
|
public float PushVelocity { get; set; } = pushVelocity;
|
||||||
|
public bool AnyDirection { get; set; } = anyDirection;
|
||||||
|
public float Cooldown { get; set; } = cooldown;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -76,7 +76,7 @@ namespace src.player.skills
|
||||||
if (entity == null || !entity.IsValid) continue;
|
if (entity == null || !entity.IsValid) continue;
|
||||||
info.TransmitEntities.Remove(entity.Index);
|
info.TransmitEntities.Remove(entity.Index);
|
||||||
|
|
||||||
var bombIndex = HideBomb(_player);
|
var bombIndex = GetBombIndex(_player);
|
||||||
if (bombIndex == null) continue;
|
if (bombIndex == null) continue;
|
||||||
var bombEntity = Utilities.GetEntityFromIndex<CBaseEntity>((int)bombIndex);
|
var bombEntity = Utilities.GetEntityFromIndex<CBaseEntity>((int)bombIndex);
|
||||||
if (bombEntity == null || !bombEntity.IsValid) continue;
|
if (bombEntity == null || !bombEntity.IsValid) continue;
|
||||||
|
|
@ -170,7 +170,7 @@ namespace src.player.skills
|
||||||
playerInfo.PrintHTML = $"<font color='#FF0000'>{player.GetTranslation("disabled_weapon")}</font>";
|
playerInfo.PrintHTML = $"<font color='#FF0000'>{player.GetTranslation("disabled_weapon")}</font>";
|
||||||
}
|
}
|
||||||
|
|
||||||
private static uint? HideBomb(CCSPlayerController player)
|
private static uint? GetBombIndex(CCSPlayerController player)
|
||||||
{
|
{
|
||||||
var bombEntities = Utilities.FindAllEntitiesByDesignerName<CC4>("weapon_c4").ToList();
|
var bombEntities = Utilities.FindAllEntitiesByDesignerName<CC4>("weapon_c4").ToList();
|
||||||
if (bombEntities.Count == 0) return null;
|
if (bombEntities.Count == 0) return null;
|
||||||
|
|
@ -179,14 +179,6 @@ namespace src.player.skills
|
||||||
if (bomb == null) return null;
|
if (bomb == null) return null;
|
||||||
|
|
||||||
if (bomb.OwnerEntity.Index != player.Index) 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;
|
return bomb.Index;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -72,7 +72,7 @@ namespace src.player.skills
|
||||||
{
|
{
|
||||||
foreach (Vector smokePos in smokes.Keys)
|
foreach (Vector smokePos in smokes.Keys)
|
||||||
foreach (var player in Utilities.GetPlayers())
|
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 (player.PlayerPawn.Value != null && player.PlayerPawn.Value.IsValid && player.PlayerPawn.Value.AbsOrigin != null)
|
||||||
if (SkillUtils.GetDistance(smokePos, player.PlayerPawn.Value.AbsOrigin) <= SkillsInfo.GetValue<float>(skillName, "smokeRadius"))
|
if (SkillUtils.GetDistance(smokePos, player.PlayerPawn.Value.AbsOrigin) <= SkillsInfo.GetValue<float>(skillName, "smokeRadius"))
|
||||||
AddHealth(player.PlayerPawn.Value, SkillsInfo.GetValue<int>(skillName, "smokeHeal"));
|
AddHealth(player.PlayerPawn.Value, SkillsInfo.GetValue<int>(skillName, "smokeHeal"));
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,5 @@
|
||||||
using CounterStrikeSharp.API;
|
using CounterStrikeSharp.API;
|
||||||
using CounterStrikeSharp.API.Core;
|
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.Memory.DynamicFunctions;
|
||||||
using CounterStrikeSharp.API.Modules.Timers;
|
using CounterStrikeSharp.API.Modules.Timers;
|
||||||
using CounterStrikeSharp.API.Modules.Utils;
|
using CounterStrikeSharp.API.Modules.Utils;
|
||||||
|
|
@ -9,7 +7,7 @@ using CS2TraceRay.Class;
|
||||||
using CS2TraceRay.Struct;
|
using CS2TraceRay.Struct;
|
||||||
using src.utils;
|
using src.utils;
|
||||||
using System.Collections.Concurrent;
|
using System.Collections.Concurrent;
|
||||||
using System.Numerics;
|
using Timer = CounterStrikeSharp.API.Modules.Timers.Timer;
|
||||||
using Vector = CounterStrikeSharp.API.Modules.Utils.Vector;
|
using Vector = CounterStrikeSharp.API.Modules.Utils.Vector;
|
||||||
|
|
||||||
namespace src.player.skills
|
namespace src.player.skills
|
||||||
|
|
@ -22,7 +20,7 @@ namespace src.player.skills
|
||||||
|
|
||||||
public static void LoadSkill()
|
public static void LoadSkill()
|
||||||
{
|
{
|
||||||
// SkillUtils.RegisterSkill(skillName, SkillsInfo.GetValue<string>(skillName, "color"));
|
SkillUtils.RegisterSkill(skillName, SkillsInfo.GetValue<string>(skillName, "color"));
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void NewRound()
|
public static void NewRound()
|
||||||
|
|
@ -143,8 +141,9 @@ namespace src.player.skills
|
||||||
clone.Teleport(playerPawn.AbsOrigin, new QAngle(0, playerPawn.V_angle.Y, 0));
|
clone.Teleport(playerPawn.AbsOrigin, new QAngle(0, playerPawn.V_angle.Y, 0));
|
||||||
|
|
||||||
playerPawn.Teleport(pos);
|
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);
|
BlockWeapon(playerSkill.Player, true);
|
||||||
|
|
||||||
playerSkill.UseTime = Server.TickCount;
|
playerSkill.UseTime = Server.TickCount;
|
||||||
playerSkill.NextUse = Server.TickCount + 64000;
|
playerSkill.NextUse = Server.TickCount + 64000;
|
||||||
playerSkill.CloneProp = clone;
|
playerSkill.CloneProp = clone;
|
||||||
|
|
@ -155,18 +154,25 @@ namespace src.player.skills
|
||||||
KillClone(playerSkill);
|
KillClone(playerSkill);
|
||||||
});
|
});
|
||||||
|
|
||||||
jRandomSkills.Instance.AddTimer(2f, () => {
|
Timer? cloneTimer = null;
|
||||||
if (playerSkill.CloneProp == null)
|
ulong playerSteamID = player.SteamID;
|
||||||
return;
|
|
||||||
|
|
||||||
if (player.IsValid && player.PawnIsAlive)
|
cloneTimer = jRandomSkills.Instance.AddTimer(2f, () =>
|
||||||
SkillUtils.ApplyScreenColor(player,
|
{
|
||||||
r: 255,
|
var target = Utilities.GetPlayerFromSteamId(playerSteamID);
|
||||||
g: 255,
|
if (target == null || !target.IsValid || !target.PawnIsAlive)
|
||||||
b: 0,
|
{
|
||||||
a: 20,
|
cloneTimer?.Kill();
|
||||||
duration: 100,
|
return;
|
||||||
holdTime: 1020);
|
}
|
||||||
|
|
||||||
|
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);
|
}, 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);
|
Vector eyePos = new(playerPawn.AbsOrigin.X, playerPawn.AbsOrigin.Y, playerPawn.AbsOrigin.Z + 25);
|
||||||
endPos.Z += 25;
|
endPos.Z += 25;
|
||||||
|
|
||||||
Ray ray = new(Vector3.Zero);
|
ulong mask = playerPawn.Collision.CollisionAttribute.InteractsWith;
|
||||||
CTraceFilter filter = new(playerPawn.Index, playerPawn.Index)
|
ulong contents = playerPawn.Collision.CollisionGroup;
|
||||||
{
|
CGameTrace trace = TraceRay.TraceShape(eyePos, endPos, mask, contents, player);
|
||||||
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);
|
|
||||||
|
|
||||||
return !trace.DidHit();
|
return !trace.DidHit();
|
||||||
}
|
}
|
||||||
|
|
@ -282,9 +275,7 @@ namespace src.player.skills
|
||||||
if (playersInfo.TryGetValue(victim, out var playerSkill) && playerSkill.CloneProp != null)
|
if (playersInfo.TryGetValue(victim, out var playerSkill) && playerSkill.CloneProp != null)
|
||||||
{
|
{
|
||||||
KillClone(playerSkill);
|
KillClone(playerSkill);
|
||||||
var victimPawn = victim.PlayerPawn.Value;
|
SkillUtils.RestoreHealth(victim);
|
||||||
if (victimPawn == null) return;
|
|
||||||
SkillUtils.AddHealth(victimPawn, @event.DmgHealth);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -34,23 +34,31 @@ namespace src.player.skills
|
||||||
{
|
{
|
||||||
foreach( var (info, player) in infoList)
|
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)
|
foreach (var param in playersStep)
|
||||||
{
|
{
|
||||||
var enemy = param.Key;
|
var enemy = param.Key;
|
||||||
var step = param.Value;
|
var step = param.Value;
|
||||||
if (step == null || step.IsValid) continue;
|
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);
|
|
||||||
|
|
||||||
var entity = Utilities.GetEntityFromIndex<CBaseEntity>((int)step.Index);
|
var entity = Utilities.GetEntityFromIndex<CBaseEntity>((int)step.Index);
|
||||||
if (entity == null || !entity.IsValid) continue;
|
if (entity == null || !entity.IsValid) continue;
|
||||||
|
|
||||||
if (playerInfo?.Skill != skillName && observerInfo?.Skill != skillName)
|
if (!hasSkill || enemy.Team == player.Team)
|
||||||
info.TransmitEntities.Remove(entity.Index);
|
|
||||||
else if (enemy.Team == player.Team)
|
|
||||||
info.TransmitEntities.Remove(entity.Index);
|
info.TransmitEntities.Remove(entity.Index);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -50,25 +50,13 @@ namespace src.player.skills
|
||||||
if (!Instance.IsPlayerValid(attacker))
|
if (!Instance.IsPlayerValid(attacker))
|
||||||
{
|
{
|
||||||
if (victimInfo?.Skill == skillName)
|
if (victimInfo?.Skill == skillName)
|
||||||
RestoreHealth(victim!, @event.DmgHealth);
|
SkillUtils.RestoreHealth(victim);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
var attackerInfo = Instance.SkillPlayer.FirstOrDefault(p => p.SteamID == attacker?.SteamID);
|
var attackerInfo = Instance.SkillPlayer.FirstOrDefault(p => p.SteamID == attacker?.SteamID);
|
||||||
if (attackerInfo?.Skill == skillName || victimInfo?.Skill == skillName)
|
if (attackerInfo?.Skill == skillName || victimInfo?.Skill == skillName)
|
||||||
RestoreHealth(victim!, @event.DmgHealth);
|
SkillUtils.RestoreHealth(victim);
|
||||||
}
|
|
||||||
|
|
||||||
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;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void EnableSkill(CCSPlayerController _)
|
public static void EnableSkill(CCSPlayerController _)
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,5 @@
|
||||||
using CounterStrikeSharp.API.Core;
|
using CounterStrikeSharp.API;
|
||||||
|
using CounterStrikeSharp.API.Core;
|
||||||
using CounterStrikeSharp.API.Modules.Utils;
|
using CounterStrikeSharp.API.Modules.Utils;
|
||||||
using src.utils;
|
using src.utils;
|
||||||
using static src.jRandomSkills;
|
using static src.jRandomSkills;
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,5 @@
|
||||||
using CounterStrikeSharp.API;
|
using CounterStrikeSharp.API;
|
||||||
using CounterStrikeSharp.API.Core;
|
using CounterStrikeSharp.API.Core;
|
||||||
using CounterStrikeSharp.API.Modules.Entities.Constants;
|
|
||||||
using CounterStrikeSharp.API.Modules.Memory.DynamicFunctions;
|
using CounterStrikeSharp.API.Modules.Memory.DynamicFunctions;
|
||||||
using CounterStrikeSharp.API.Modules.Utils;
|
using CounterStrikeSharp.API.Modules.Utils;
|
||||||
using CS2TraceRay.Class;
|
using CS2TraceRay.Class;
|
||||||
|
|
@ -9,7 +8,6 @@ using CS2TraceRay.Struct;
|
||||||
using src.utils;
|
using src.utils;
|
||||||
using System.Collections.Concurrent;
|
using System.Collections.Concurrent;
|
||||||
using System.Drawing;
|
using System.Drawing;
|
||||||
using System.Numerics;
|
|
||||||
using static src.jRandomSkills;
|
using static src.jRandomSkills;
|
||||||
using Vector = CounterStrikeSharp.API.Modules.Utils.Vector;
|
using Vector = CounterStrikeSharp.API.Modules.Utils.Vector;
|
||||||
|
|
||||||
|
|
@ -24,6 +22,8 @@ namespace src.player.skills
|
||||||
private static readonly ConcurrentDictionary<ulong, byte> playersInAction = [];
|
private static readonly ConcurrentDictionary<ulong, byte> playersInAction = [];
|
||||||
private static readonly MemoryFunctionVoid<IntPtr, short> Shoot_Secondary = new(GameData.GetSignature("Shoot_Secondary"));
|
private static readonly MemoryFunctionVoid<IntPtr, short> Shoot_Secondary = new(GameData.GetSignature("Shoot_Secondary"));
|
||||||
|
|
||||||
|
private static int i = 0;
|
||||||
|
|
||||||
public static void LoadSkill()
|
public static void LoadSkill()
|
||||||
{
|
{
|
||||||
SkillUtils.RegisterSkill(skillName, SkillsInfo.GetValue<string>(skillName, "color"));
|
SkillUtils.RegisterSkill(skillName, SkillsInfo.GetValue<string>(skillName, "color"));
|
||||||
|
|
@ -100,22 +100,10 @@ namespace src.player.skills
|
||||||
Vector eyePos = new(pawn.AbsOrigin.X, pawn.AbsOrigin.Y, pawn.AbsOrigin.Z + pawn.ViewOffset.Z);
|
Vector eyePos = new(pawn.AbsOrigin.X, pawn.AbsOrigin.Y, pawn.AbsOrigin.Z + pawn.ViewOffset.Z);
|
||||||
Vector endPos = eyePos + SkillUtils.GetForwardVector(pawn.EyeAngles) * SkillsInfo.GetValue<float>(skillName, "maxDistance");
|
Vector endPos = eyePos + SkillUtils.GetForwardVector(pawn.EyeAngles) * SkillsInfo.GetValue<float>(skillName, "maxDistance");
|
||||||
|
|
||||||
Ray ray = new(Vector3.Zero);
|
ulong hitboxes = 0x2;
|
||||||
CTraceFilter filter = new(pawn.Index, pawn.Index)
|
ulong mask = pawn.Collision.CollisionAttribute.InteractsWith | hitboxes;
|
||||||
{
|
ulong contents = pawn.Collision.CollisionGroup;
|
||||||
m_nObjectSetMask = 0xf,
|
CGameTrace trace = TraceRay.TraceShape(eyePos, endPos, mask, contents, player);
|
||||||
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);
|
|
||||||
|
|
||||||
if (Config.LoadedConfig.CS2TraceRayDebug)
|
if (Config.LoadedConfig.CS2TraceRayDebug)
|
||||||
{
|
{
|
||||||
|
|
@ -126,12 +114,17 @@ namespace src.player.skills
|
||||||
if (trace.DidHit())
|
if (trace.DidHit())
|
||||||
{
|
{
|
||||||
var val = Activator.CreateInstance(typeof(CBaseEntity), trace.HitEntity) as CBaseEntity;
|
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
|
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<CBaseEntity>();
|
||||||
if (!trace.HitPlayer(out CCSPlayerController? target) || target == null)
|
if (!trace.HitPlayer(out CCSPlayerController? target) || target == null)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,6 @@ using CS2TraceRay.Enum;
|
||||||
using CS2TraceRay.Struct;
|
using CS2TraceRay.Struct;
|
||||||
using src.utils;
|
using src.utils;
|
||||||
using System.Drawing;
|
using System.Drawing;
|
||||||
using System.Numerics;
|
|
||||||
using static src.jRandomSkills;
|
using static src.jRandomSkills;
|
||||||
using Vector = CounterStrikeSharp.API.Modules.Utils.Vector;
|
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 eyePos = new(pawn.AbsOrigin.X, pawn.AbsOrigin.Y, pawn.AbsOrigin.Z + pawn.ViewOffset.Z);
|
||||||
Vector endPos = eyePos + SkillUtils.GetForwardVector(pawn.EyeAngles) * SkillsInfo.GetValue<float>(skillName, "maxDistance");
|
Vector endPos = eyePos + SkillUtils.GetForwardVector(pawn.EyeAngles) * SkillsInfo.GetValue<float>(skillName, "maxDistance");
|
||||||
|
|
||||||
Ray ray = new(Vector3.Zero);
|
ulong hitboxes = 0x2;
|
||||||
CTraceFilter filter = new(pawn.Index, pawn.Index)
|
ulong mask = pawn.Collision.CollisionAttribute.InteractsWith | hitboxes;
|
||||||
{
|
ulong contents = pawn.Collision.CollisionGroup;
|
||||||
m_nObjectSetMask = 0xf,
|
CGameTrace trace = TraceRay.TraceShape(eyePos, endPos, mask, contents, player);
|
||||||
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);
|
|
||||||
|
|
||||||
if (Config.LoadedConfig.CS2TraceRayDebug)
|
if (Config.LoadedConfig.CS2TraceRayDebug)
|
||||||
{
|
{
|
||||||
|
|
@ -65,10 +52,10 @@ namespace src.player.skills
|
||||||
if (trace.DidHit())
|
if (trace.DidHit())
|
||||||
{
|
{
|
||||||
var val = Activator.CreateInstance(typeof(CBaseEntity), trace.HitEntity) as CBaseEntity;
|
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
|
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)
|
if (!trace.HitPlayer(out CCSPlayerController? target) || target == null)
|
||||||
|
|
|
||||||
|
|
@ -68,7 +68,7 @@ namespace src.player.skills
|
||||||
if (entity == null || !entity.IsValid) continue;
|
if (entity == null || !entity.IsValid) continue;
|
||||||
info.TransmitEntities.Remove(entity.Index);
|
info.TransmitEntities.Remove(entity.Index);
|
||||||
|
|
||||||
var bombIndex = HideBomb(_player);
|
var bombIndex = GetBombIndex(_player);
|
||||||
if (bombIndex == null) continue;
|
if (bombIndex == null) continue;
|
||||||
var bombEntity = Utilities.GetEntityFromIndex<CBaseEntity>((int)bombIndex);
|
var bombEntity = Utilities.GetEntityFromIndex<CBaseEntity>((int)bombIndex);
|
||||||
if (bombEntity == null || !bombEntity.IsValid) continue;
|
if (bombEntity == null || !bombEntity.IsValid) continue;
|
||||||
|
|
@ -170,7 +170,7 @@ namespace src.player.skills
|
||||||
particle.AcceptInput("Start");
|
particle.AcceptInput("Start");
|
||||||
}
|
}
|
||||||
|
|
||||||
private static uint? HideBomb(CCSPlayerController player)
|
private static uint? GetBombIndex(CCSPlayerController player)
|
||||||
{
|
{
|
||||||
var bombEntities = Utilities.FindAllEntitiesByDesignerName<CC4>("weapon_c4").ToList();
|
var bombEntities = Utilities.FindAllEntitiesByDesignerName<CC4>("weapon_c4").ToList();
|
||||||
if (bombEntities.Count == 0) return null;
|
if (bombEntities.Count == 0) return null;
|
||||||
|
|
@ -179,14 +179,6 @@ namespace src.player.skills
|
||||||
if (bomb == null) return null;
|
if (bomb == null) return null;
|
||||||
|
|
||||||
if (bomb.OwnerEntity.Index != player.Index) 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;
|
return bomb.Index;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,5 @@
|
||||||
using CounterStrikeSharp.API.Core;
|
using CounterStrikeSharp.API;
|
||||||
|
using CounterStrikeSharp.API.Core;
|
||||||
using CounterStrikeSharp.API.Modules.Utils;
|
using CounterStrikeSharp.API.Modules.Utils;
|
||||||
using src.utils;
|
using src.utils;
|
||||||
using static src.jRandomSkills;
|
using static src.jRandomSkills;
|
||||||
|
|
@ -24,8 +25,8 @@ namespace src.player.skills
|
||||||
var playerInfo = Instance.SkillPlayer.FirstOrDefault(p => p.SteamID == player?.SteamID);
|
var playerInfo = Instance.SkillPlayer.FirstOrDefault(p => p.SteamID == player?.SteamID);
|
||||||
if (playerInfo?.Skill != skillName) return;
|
if (playerInfo?.Skill != skillName) return;
|
||||||
|
|
||||||
if (weapon == "hegrenade" || weapon == "inferno")
|
if (weapon == "hegrenade" || weapon == "inferno" || weapon == "decoy" || weapon == "flashbang" || weapon == "smokegrenade" || weapon == "molotov")
|
||||||
SkillUtils.AddHealth(player!.PlayerPawn.Value, damage);
|
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)
|
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)
|
||||||
|
|
|
||||||
|
|
@ -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];
|
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)
|
if (hitgroup != HitGroup_t.HITGROUP_HEAD)
|
||||||
RestoreHealth(victim!, damage);
|
SkillUtils.RestoreHealth(victim);
|
||||||
}
|
|
||||||
|
|
||||||
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 = "") : SkillsInfo.DefaultSkillInfo(skill, active, color, onlyTeam, disableOnFreezeTime, needsTeammates, requiredPermission)
|
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)
|
||||||
|
|
|
||||||
|
|
@ -52,18 +52,20 @@ namespace src.player.skills
|
||||||
var flags = (PlayerFlags)playerPawn.Flags;
|
var flags = (PlayerFlags)playerPawn.Flags;
|
||||||
var buttons = player.Buttons;
|
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);
|
var playerInfo = Instance.SkillPlayer.FirstOrDefault(p => p.SteamID == player.SteamID);
|
||||||
if (playerPawn == null || playerInfo == null) return;
|
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 isOnGround = (flags & PlayerFlags.FL_ONGROUND) != 0;
|
||||||
{
|
|
||||||
//J[player.Slot] ++;
|
if (isOnGround)
|
||||||
}
|
|
||||||
else if ((flags & PlayerFlags.FL_ONGROUND) != 0)
|
|
||||||
{
|
|
||||||
J[player.Slot] = 0;
|
J[player.Slot] = 0;
|
||||||
}
|
else if (jumpPressed && J[player.Slot] < playerInfo.SkillChance + 1)
|
||||||
else if ((LB[player.Slot] & PlayerButtons.Jump) == 0 && (buttons & PlayerButtons.Jump) != 0 && J[player.Slot] < playerInfo.SkillChance)
|
|
||||||
{
|
{
|
||||||
J[player.Slot]++;
|
J[player.Slot]++;
|
||||||
playerPawn.AbsVelocity.Z = 300;
|
playerPawn.AbsVelocity.Z = 300;
|
||||||
|
|
|
||||||
|
|
@ -27,6 +27,8 @@ namespace src.player.skills
|
||||||
var plantedBomb = Utilities.FindAllEntitiesByDesignerName<CPlantedC4>("planted_c4").FirstOrDefault();
|
var plantedBomb = Utilities.FindAllEntitiesByDesignerName<CPlantedC4>("planted_c4").FirstOrDefault();
|
||||||
if (plantedBomb != null)
|
if (plantedBomb != null)
|
||||||
Server.NextFrame(() => plantedBomb.C4Blow = (float)Server.EngineTime + SkillsInfo.GetValue<int>(skillName, "extraC4BlowTime"));
|
Server.NextFrame(() => plantedBomb.C4Blow = (float)Server.EngineTime + SkillsInfo.GetValue<int>(skillName, "extraC4BlowTime"));
|
||||||
|
|
||||||
|
player!.PrintToCenterAlert(player.GetTranslation("bombplanted", SkillsInfo.GetValue<int>(skillName, "extraC4BlowTime")));
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void DisableSkill(CCSPlayerController player)
|
public static void DisableSkill(CCSPlayerController player)
|
||||||
|
|
|
||||||
|
|
@ -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];
|
HitGroup_t[] disabledHitbox = [HitGroup_t.HITGROUP_LEFTARM, HitGroup_t.HITGROUP_RIGHTARM, HitGroup_t.HITGROUP_LEFTLEG, HitGroup_t.HITGROUP_RIGHTLEG];
|
||||||
if (disabledHitbox.Contains(hitgroup))
|
if (disabledHitbox.Contains(hitgroup))
|
||||||
RestoreHealth(victim!, damage);
|
SkillUtils.RestoreHealth(victim);
|
||||||
}
|
|
||||||
|
|
||||||
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 = "#9c9c9c", CsTeam onlyTeam = CsTeam.None, bool disableOnFreezeTime = false, bool needsTeammates = false, string requiredPermission = "") : SkillsInfo.DefaultSkillInfo(skill, active, color, onlyTeam, disableOnFreezeTime, needsTeammates, requiredPermission)
|
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)
|
||||||
|
|
|
||||||
|
|
@ -26,7 +26,8 @@ namespace src.player.skills
|
||||||
var victimInfo = Instance.SkillPlayer.FirstOrDefault(p => p.SteamID == victim?.SteamID);
|
var victimInfo = Instance.SkillPlayer.FirstOrDefault(p => p.SteamID == victim?.SteamID);
|
||||||
if (victimInfo == null || victimInfo.Skill != skillName) return ;
|
if (victimInfo == null || victimInfo.Skill != skillName) return ;
|
||||||
|
|
||||||
RestoreHealth(victim!, damage * SkillsInfo.GetValue<float>(skillName, "regenerationMultiplier"));
|
var pawn = victim!.PlayerPawn.Value;
|
||||||
|
SkillUtils.AddHealth(pawn, (int)(damage * SkillsInfo.GetValue<float>(skillName, "regenerationMultiplier")));
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void EnableSkill(CCSPlayerController player)
|
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);
|
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 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;
|
public float RegenerationMultiplier { get; set; } = regenerationMultiplier;
|
||||||
|
|
|
||||||
|
|
@ -1,14 +1,11 @@
|
||||||
using CounterStrikeSharp.API;
|
using CounterStrikeSharp.API;
|
||||||
using CounterStrikeSharp.API.Core;
|
using CounterStrikeSharp.API.Core;
|
||||||
using CounterStrikeSharp.API.Modules.Entities.Constants;
|
|
||||||
using CounterStrikeSharp.API.Modules.Memory.DynamicFunctions;
|
using CounterStrikeSharp.API.Modules.Memory.DynamicFunctions;
|
||||||
using CounterStrikeSharp.API.Modules.Timers;
|
|
||||||
using CounterStrikeSharp.API.Modules.Utils;
|
using CounterStrikeSharp.API.Modules.Utils;
|
||||||
using CS2TraceRay.Class;
|
using CS2TraceRay.Class;
|
||||||
using CS2TraceRay.Struct;
|
using CS2TraceRay.Struct;
|
||||||
using src.utils;
|
using src.utils;
|
||||||
using System.Collections.Concurrent;
|
using System.Collections.Concurrent;
|
||||||
using System.Numerics;
|
|
||||||
using Vector = CounterStrikeSharp.API.Modules.Utils.Vector;
|
using Vector = CounterStrikeSharp.API.Modules.Utils.Vector;
|
||||||
using static src.jRandomSkills;
|
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);
|
Vector eyePos = new(playerPawn.AbsOrigin.X, playerPawn.AbsOrigin.Y, playerPawn.AbsOrigin.Z + 25);
|
||||||
endPos.Z += 25;
|
endPos.Z += 25;
|
||||||
|
|
||||||
Ray ray = new(Vector3.Zero);
|
ulong mask = playerPawn.Collision.CollisionAttribute.InteractsWith;
|
||||||
CTraceFilter filter = new(playerPawn.Index, playerPawn.Index)
|
ulong contents = playerPawn.Collision.CollisionGroup;
|
||||||
{
|
CGameTrace trace = TraceRay.TraceShape(eyePos, endPos, mask, contents, player);
|
||||||
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);
|
|
||||||
|
|
||||||
return !trace.DidHit();
|
return !trace.DidHit();
|
||||||
}
|
}
|
||||||
|
|
@ -225,9 +209,7 @@ namespace src.player.skills
|
||||||
if (playersInfo.TryGetValue(victim, out var playerSkill) && playerSkill.CloneProp != null)
|
if (playersInfo.TryGetValue(victim, out var playerSkill) && playerSkill.CloneProp != null)
|
||||||
{
|
{
|
||||||
KillClone(playerSkill);
|
KillClone(playerSkill);
|
||||||
var victimPawn = victim.PlayerPawn.Value;
|
SkillUtils.RestoreHealth(victim);
|
||||||
if (victimPawn == null) return;
|
|
||||||
SkillUtils.AddHealth(victimPawn, @event.DmgHealth);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -47,7 +47,7 @@ namespace src.player.skills
|
||||||
if (!victim.IsValid || !victim.PawnIsAlive || !skillInfo.CanUse) return;
|
if (!victim.IsValid || !victim.PawnIsAlive || !skillInfo.CanUse) return;
|
||||||
skillInfo.CanUse = false;
|
skillInfo.CanUse = false;
|
||||||
skillInfo.Cooldown = DateTime.Now;
|
skillInfo.Cooldown = DateTime.Now;
|
||||||
RestoreHealth(victim, damage);
|
SkillUtils.RestoreHealth(victim);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -88,19 +88,6 @@ namespace src.player.skills
|
||||||
playerInfo.PrintHTML = $"{player.GetTranslation("hud_info", $"<font color='#FF0000'>{cooldown}</font>")}";
|
playerInfo.PrintHTML = $"{player.GetTranslation("hud_info", $"<font color='#FF0000'>{cooldown}</font>")}";
|
||||||
}
|
}
|
||||||
|
|
||||||
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 class PlayerSkillInfo
|
||||||
{
|
{
|
||||||
public ulong SteamID { get; set; }
|
public ulong SteamID { get; set; }
|
||||||
|
|
|
||||||
|
|
@ -20,6 +20,12 @@ namespace src.player.skills
|
||||||
var playerInfo = Instance.SkillPlayer.FirstOrDefault(p => p.SteamID == player.SteamID);
|
var playerInfo = Instance.SkillPlayer.FirstOrDefault(p => p.SteamID == player.SteamID);
|
||||||
if (playerInfo == null) return;
|
if (playerInfo == null) return;
|
||||||
int moneyBonus = Instance.Random.Next(SkillsInfo.GetValue<int>(skillName, "minMoney"), SkillsInfo.GetValue<int>(skillName, "maxMoney"));
|
int moneyBonus = Instance.Random.Next(SkillsInfo.GetValue<int>(skillName, "minMoney"), SkillsInfo.GetValue<int>(skillName, "maxMoney"));
|
||||||
|
|
||||||
|
var moneyServices = player.InGameMoneyServices;
|
||||||
|
if (moneyServices == null) return;
|
||||||
|
|
||||||
|
moneyBonus = Math.Min(moneyBonus, 16000 - moneyServices.Account);
|
||||||
|
|
||||||
playerInfo.SkillChance = moneyBonus;
|
playerInfo.SkillChance = moneyBonus;
|
||||||
AddMoney(player, moneyBonus);
|
AddMoney(player, moneyBonus);
|
||||||
}
|
}
|
||||||
|
|
@ -28,16 +34,22 @@ namespace src.player.skills
|
||||||
{
|
{
|
||||||
var playerInfo = Instance.SkillPlayer.FirstOrDefault(p => p.SteamID == player.SteamID);
|
var playerInfo = Instance.SkillPlayer.FirstOrDefault(p => p.SteamID == player.SteamID);
|
||||||
if (playerInfo == null) return;
|
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;
|
if (player == null || !player.IsValid) return;
|
||||||
var moneyServices = player.InGameMoneyServices;
|
var moneyServices = player.InGameMoneyServices;
|
||||||
if (moneyServices == null) return;
|
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");
|
Utilities.SetStateChanged(player, "CCSPlayerController", "m_pInGameMoneyServices");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,10 +1,8 @@
|
||||||
using CounterStrikeSharp.API;
|
using CounterStrikeSharp.API;
|
||||||
using CounterStrikeSharp.API.Core;
|
using CounterStrikeSharp.API.Core;
|
||||||
using CounterStrikeSharp.API.Modules.Entities.Constants;
|
|
||||||
using CounterStrikeSharp.API.Modules.Utils;
|
using CounterStrikeSharp.API.Modules.Utils;
|
||||||
using CS2TraceRay.Class;
|
using CS2TraceRay.Class;
|
||||||
using CS2TraceRay.Struct;
|
using CS2TraceRay.Struct;
|
||||||
using System.Numerics;
|
|
||||||
using static src.jRandomSkills;
|
using static src.jRandomSkills;
|
||||||
using Vector = CounterStrikeSharp.API.Modules.Utils.Vector;
|
using Vector = CounterStrikeSharp.API.Modules.Utils.Vector;
|
||||||
using System.Collections.Concurrent;
|
using System.Collections.Concurrent;
|
||||||
|
|
@ -69,29 +67,18 @@ namespace src.player.skills
|
||||||
{
|
{
|
||||||
var playerInfo = Instance.SkillPlayer.FirstOrDefault(s => s.SteamID == player?.SteamID);
|
var playerInfo = Instance.SkillPlayer.FirstOrDefault(s => s.SteamID == player?.SteamID);
|
||||||
if (playerInfo == null) return;
|
if (playerInfo == null) return;
|
||||||
playerInfo.PrintHTML = $"{player.GetTranslation("shade_nospace")}";
|
playerInfo.PrintHTML = $"<font color='#FF0000'>{player.GetTranslation("shade_nospace")}</font>";
|
||||||
}
|
}
|
||||||
|
|
||||||
private unsafe static bool CheckTeleport(CCSPlayerController player, Vector startPos, Vector endPos)
|
private unsafe static bool CheckTeleport(CCSPlayerController player, Vector startPos, Vector endPos)
|
||||||
{
|
{
|
||||||
var pawn = player.PlayerPawn.Value;
|
var pawn = player.PlayerPawn.Value;
|
||||||
if (pawn == null || !pawn.IsValid) return false;
|
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();
|
ulong mask = pawn.Collision.CollisionAttribute.InteractsWith;
|
||||||
filter.m_nHierarchyIds[1] = 0;
|
ulong contents = pawn.Collision.CollisionGroup;
|
||||||
CGameTrace trace = TraceRay.TraceHull(startPos, endPos, filter, ray);
|
CGameTrace trace = TraceRay.TraceShape(startPos, endPos, mask, contents, player);
|
||||||
|
|
||||||
return !trace.HitWorld(out _);
|
return !trace.HitWorld(out _);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -26,6 +26,8 @@ namespace src.player.skills
|
||||||
var plantedBomb = Utilities.FindAllEntitiesByDesignerName<CPlantedC4>("planted_c4").FirstOrDefault();
|
var plantedBomb = Utilities.FindAllEntitiesByDesignerName<CPlantedC4>("planted_c4").FirstOrDefault();
|
||||||
if (plantedBomb != null)
|
if (plantedBomb != null)
|
||||||
Server.NextFrame(() => plantedBomb.C4Blow = (float)Server.EngineTime + SkillsInfo.GetValue<int>(skillName, "detonationTime"));
|
Server.NextFrame(() => plantedBomb.C4Blow = (float)Server.EngineTime + SkillsInfo.GetValue<int>(skillName, "detonationTime"));
|
||||||
|
|
||||||
|
player!.PrintToCenterAlert(player.GetTranslation("bombplanted", SkillsInfo.GetValue<int>(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)
|
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)
|
||||||
|
|
|
||||||
|
|
@ -1,19 +1,23 @@
|
||||||
using CounterStrikeSharp.API;
|
using CounterStrikeSharp.API;
|
||||||
using CounterStrikeSharp.API.Core;
|
using CounterStrikeSharp.API.Core;
|
||||||
|
using CounterStrikeSharp.API.Modules.Memory;
|
||||||
using CounterStrikeSharp.API.Modules.Utils;
|
using CounterStrikeSharp.API.Modules.Utils;
|
||||||
using static src.jRandomSkills;
|
|
||||||
using System.Collections.Concurrent;
|
|
||||||
using src.utils;
|
using src.utils;
|
||||||
|
using System.Collections.Concurrent;
|
||||||
|
using System.Drawing;
|
||||||
|
using static src.jRandomSkills;
|
||||||
|
|
||||||
namespace src.player.skills
|
namespace src.player.skills
|
||||||
{
|
{
|
||||||
public class SniperElite : ISkill
|
public class SniperElite : ISkill
|
||||||
{
|
{
|
||||||
private const Skills skillName = Skills.SniperElite;
|
private const Skills skillName = Skills.SniperElite;
|
||||||
private static readonly ConcurrentDictionary<ulong, List<CEntityInstance>> playerAWPs = [];
|
private static readonly ConcurrentDictionary<ulong, List<uint>> playerAWPIndexes = [];
|
||||||
private static readonly ConcurrentDictionary<ulong, string> sniperElites = [];
|
private static readonly ConcurrentDictionary<ulong, string> savedWeapons = [];
|
||||||
|
private static readonly ConcurrentDictionary<ulong, byte> isProcessing = [];
|
||||||
private static readonly object setLock = new();
|
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",
|
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_mp5sd", "weapon_famas", "weapon_galilar", "weapon_m4a1", "weapon_m4a1_silencer", "weapon_ak47",
|
||||||
"weapon_aug", "weapon_sg553", "weapon_ssg08", "weapon_awp", "weapon_scar20", "weapon_g3sg1",
|
"weapon_aug", "weapon_sg553", "weapon_ssg08", "weapon_awp", "weapon_scar20", "weapon_g3sg1",
|
||||||
|
|
@ -29,8 +33,9 @@ namespace src.player.skills
|
||||||
|
|
||||||
lock (setLock)
|
lock (setLock)
|
||||||
{
|
{
|
||||||
sniperElites.Clear();
|
savedWeapons.Clear();
|
||||||
playerAWPs.Clear();
|
playerAWPIndexes.Clear();
|
||||||
|
isProcessing.Clear();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -38,6 +43,7 @@ namespace src.player.skills
|
||||||
{
|
{
|
||||||
var player = @event.Userid;
|
var player = @event.Userid;
|
||||||
if (player == null || !player.IsValid) return;
|
if (player == null || !player.IsValid) return;
|
||||||
|
|
||||||
var playerInfo = Instance.SkillPlayer.FirstOrDefault(p => p.SteamID == player.SteamID);
|
var playerInfo = Instance.SkillPlayer.FirstOrDefault(p => p.SteamID == player.SteamID);
|
||||||
if (playerInfo?.Skill == skillName)
|
if (playerInfo?.Skill == skillName)
|
||||||
DisableSkill(player);
|
DisableSkill(player);
|
||||||
|
|
@ -47,118 +53,169 @@ namespace src.player.skills
|
||||||
{
|
{
|
||||||
var player = @event.Userid;
|
var player = @event.Userid;
|
||||||
if (player == null || !player.IsValid) return;
|
if (player == null || !player.IsValid) return;
|
||||||
|
|
||||||
var playerInfo = Instance.SkillPlayer.FirstOrDefault(p => p.SteamID == player.SteamID);
|
var playerInfo = Instance.SkillPlayer.FirstOrDefault(p => p.SteamID == player.SteamID);
|
||||||
if (playerInfo?.Skill == skillName)
|
if (playerInfo?.Skill == skillName)
|
||||||
|
{
|
||||||
|
if (rifles.Contains(@event.Item) && @event.Item != weapon_awp)
|
||||||
|
savedWeapons.AddOrUpdate(player.SteamID, string.Empty, (_, _) => string.Empty);
|
||||||
DeleteDroppedAWP(player);
|
DeleteDroppedAWP(player);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void EnableSkill(CCSPlayerController 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)
|
public static void DisableSkill(CCSPlayerController player)
|
||||||
{
|
{
|
||||||
sniperElites.TryRemove(player.SteamID, out _);
|
player.ExecuteClientCommand("slot3");
|
||||||
playerAWPs.TryRemove(player.SteamID, out _);
|
|
||||||
|
if (playerAWPIndexes.TryGetValue(player.SteamID, out var AWPs))
|
||||||
|
foreach (var index in AWPs.ToList())
|
||||||
|
{
|
||||||
|
var ent = Utilities.GetEntityFromIndex<CBaseEntity>((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<CCSPlayer_ItemServices>().GiveNamedItem<CEntityInstance>(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)
|
public static void UseSkill(CCSPlayerController player)
|
||||||
{
|
{
|
||||||
var playerPawn = player.PlayerPawn.Value;
|
if (player.PlayerPawn.Value == null || !player.PlayerPawn.Value.IsValid || isProcessing.ContainsKey(player.SteamID)) return;
|
||||||
if (playerPawn?.CBodyComponent == null) return;
|
if (savedWeapons.ContainsKey(player.SteamID))
|
||||||
|
|
||||||
if (sniperElites.ContainsKey(player.SteamID))
|
|
||||||
RemoveAndGiveWeapon(player);
|
RemoveAndGiveWeapon(player);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void RemoveAndGiveWeapon(CCSPlayerController player)
|
private static void RemoveAndGiveWeapon(CCSPlayerController player)
|
||||||
{
|
{
|
||||||
string holdedWeapon = "weapon_awp";
|
ulong steamID = player.SteamID;
|
||||||
if (sniperElites.TryGetValue(player.SteamID, out string? weapon))
|
|
||||||
if (!string.IsNullOrEmpty(weapon))
|
|
||||||
holdedWeapon = weapon;
|
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
if (!isProcessing.TryAdd(steamID, 0)) return;
|
||||||
|
|
||||||
CBasePlayerWeapon? activeRifle = GetActiveRifle(player);
|
CBasePlayerWeapon? activeRifle = GetActiveRifle(player);
|
||||||
|
string weaponToGive = weapon_awp;
|
||||||
|
|
||||||
if (activeRifle != null && activeRifle.IsValid)
|
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");
|
lock (setLock)
|
||||||
Server.NextFrame(() => {
|
isScriptAWP = playerAWPIndexes.TryGetValue(steamID, out var indexes) && indexes.Contains(activeRifle.Index);
|
||||||
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<CCSPlayer_ItemServices>().GiveNamedItem<CEntityInstance>(weapon);
|
|
||||||
|
|
||||||
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))
|
weaponToGive = savedWeapon;
|
||||||
list.Add(createdWeapon);
|
savedWeapons.AddOrUpdate(steamID, string.Empty, (_, _) => string.Empty);
|
||||||
else
|
}
|
||||||
playerAWPs.TryAdd(player.SteamID, [createdWeapon]);
|
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<CCSPlayer_ItemServices>().GiveNamedItem<CEntityInstance>(weaponToGive.Replace("_script", ""));
|
||||||
|
|
||||||
|
if (createdWeapon != null && createdWeapon.IsValid && weaponToGive.EndsWith("_script"))
|
||||||
|
{
|
||||||
|
CBasePlayerWeapon weapon = createdWeapon.As<CBasePlayerWeapon>();
|
||||||
|
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);
|
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 (player == null || !player.IsValid) return;
|
||||||
if (pawn == null || !pawn.IsValid) return;
|
|
||||||
var weaponServices = pawn.WeaponServices;
|
|
||||||
if (weaponServices == null) return;
|
|
||||||
|
|
||||||
ConcurrentBag<uint> playerWeapons = [.. weaponServices.MyWeapons.Where(w => w != null && w.IsValid && w.Value != null && w.Value.IsValid)
|
var pawn = player.PlayerPawn.Value;
|
||||||
.Select(w => w.Value!.Index)];
|
if (pawn == null || !pawn.IsValid || pawn.WeaponServices == null) return;
|
||||||
|
|
||||||
|
var myWeapons = pawn.WeaponServices.MyWeapons;
|
||||||
|
ConcurrentBag<uint> myWeaponsIndexes = [.. myWeapons
|
||||||
|
.Where(w => w != null && w.IsValid && w.Value != null && w.Value.IsValid)
|
||||||
|
.Select(w => w.Value!.Index)];
|
||||||
|
|
||||||
lock (setLock)
|
lock (setLock)
|
||||||
{
|
{
|
||||||
if (playerAWPs.TryGetValue(player.SteamID, out var AWPs))
|
if (playerAWPIndexes.TryGetValue(player.SteamID, out var AWPs))
|
||||||
foreach (var awp in AWPs.ToList())
|
foreach (var index in AWPs.ToList())
|
||||||
{
|
if (!myWeaponsIndexes.Contains(index))
|
||||||
if (awp != null && awp.IsValid)
|
|
||||||
{
|
{
|
||||||
if (!playerWeapons.Contains(awp.Index))
|
var ent = Utilities.GetEntityFromIndex<CBaseEntity>((int)index);
|
||||||
{
|
if (ent != null && ent.IsValid)
|
||||||
awp.AcceptInput("Kill");
|
ent.AcceptInput("Kill");
|
||||||
AWPs.Remove(awp);
|
|
||||||
}
|
AWPs.Remove(index);
|
||||||
}
|
}
|
||||||
else
|
|
||||||
AWPs.Remove(awp!);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static CBasePlayerWeapon? GetActiveRifle(CCSPlayerController player)
|
private static CBasePlayerWeapon? GetActiveRifle(CCSPlayerController player)
|
||||||
{
|
{
|
||||||
CBasePlayerWeapon? rifle = null;
|
|
||||||
var pawn = player.PlayerPawn.Value;
|
var pawn = player.PlayerPawn.Value;
|
||||||
if (pawn == null || !pawn.IsValid) return rifle;
|
if (pawn == null || !pawn.IsValid || pawn.WeaponServices == null) return null;
|
||||||
var weaponServices = pawn.WeaponServices;
|
|
||||||
if (weaponServices == null) return rifle;
|
|
||||||
|
|
||||||
foreach (var weapon in weaponServices.MyWeapons)
|
var activeWeapon = pawn.WeaponServices?.ActiveWeapon.Value;
|
||||||
if (weapon != null && weapon.IsValid && weapon.Value != null && weapon.Value.IsValid)
|
if (activeWeapon != null && activeWeapon.IsValid && rifles.Contains(activeWeapon.DesignerName))
|
||||||
if (rifles.Contains(weapon.Value.DesignerName))
|
return activeWeapon;
|
||||||
rifle = weapon.Value;
|
return null;
|
||||||
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");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
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)
|
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)
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,7 @@ using CounterStrikeSharp.API.Modules.Memory;
|
||||||
using CounterStrikeSharp.API.Modules.Utils;
|
using CounterStrikeSharp.API.Modules.Utils;
|
||||||
using src.utils;
|
using src.utils;
|
||||||
using System.Collections.Concurrent;
|
using System.Collections.Concurrent;
|
||||||
|
using System.Runtime.InteropServices;
|
||||||
using static src.jRandomSkills;
|
using static src.jRandomSkills;
|
||||||
|
|
||||||
namespace src.player.skills
|
namespace src.player.skills
|
||||||
|
|
@ -19,7 +20,8 @@ namespace src.player.skills
|
||||||
|
|
||||||
public static void LoadSkill()
|
public static void LoadSkill()
|
||||||
{
|
{
|
||||||
SkillUtils.RegisterSkill(skillName, SkillsInfo.GetValue<string>(skillName, "color"));
|
if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux))
|
||||||
|
SkillUtils.RegisterSkill(skillName, SkillsInfo.GetValue<string>(skillName, "color"));
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void NewRound()
|
public static void NewRound()
|
||||||
|
|
|
||||||
|
|
@ -21,11 +21,6 @@ namespace src.player.skills
|
||||||
bombPlanted = false;
|
bombPlanted = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void DisableSkill(CCSPlayerController player)
|
|
||||||
{
|
|
||||||
SkillUtils.ResetPrintHTML(player);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void BombPlanted(EventBombPlanted _)
|
public static void BombPlanted(EventBombPlanted _)
|
||||||
{
|
{
|
||||||
bombPlanted = true;
|
bombPlanted = true;
|
||||||
|
|
@ -56,30 +51,10 @@ namespace src.player.skills
|
||||||
else
|
else
|
||||||
Localization.PrintTranslationToChatAll($" {ChatColors.LightBlue}{{0}}", ["watchmaker_ct"], [roundTime]);
|
Localization.PrintTranslationToChatAll($" {ChatColors.LightBlue}{{0}}", ["watchmaker_ct"], [roundTime]);
|
||||||
player.EmitSound(SkillsInfo.GetValue<string>(skillName, "SoundEvent"));
|
player.EmitSound(SkillsInfo.GetValue<string>(skillName, "SoundEvent"));
|
||||||
}
|
|
||||||
|
|
||||||
public static void OnTick()
|
var proxy = Utilities.FindAllEntitiesByDesignerName<CCSGameRulesProxy>("cs_gamerules").FirstOrDefault();
|
||||||
{
|
if (proxy == null) return;
|
||||||
if (bombPlanted) return;
|
Utilities.SetStateChanged(proxy, "CCSGameRulesProxy", "m_pGameRules");
|
||||||
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);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
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)
|
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)
|
||||||
|
|
|
||||||
|
|
@ -98,7 +98,7 @@ namespace src.utils
|
||||||
KillerSkillChatInfo = true;
|
KillerSkillChatInfo = true;
|
||||||
TeamMateSkillChatInfo = true;
|
TeamMateSkillChatInfo = true;
|
||||||
SummaryAfterTheRound = true;
|
SummaryAfterTheRound = true;
|
||||||
DebugMode = true;
|
DebugMode = false;
|
||||||
AlternativeSkillButton = null;
|
AlternativeSkillButton = null;
|
||||||
SkillTimeBeforeStart = 7;
|
SkillTimeBeforeStart = 7;
|
||||||
SkillHudDuration = 999;
|
SkillHudDuration = 999;
|
||||||
|
|
@ -107,7 +107,7 @@ namespace src.utils
|
||||||
FlashingHtmlHudFix = true;
|
FlashingHtmlHudFix = true;
|
||||||
CS2TraceRayDebug = false;
|
CS2TraceRayDebug = false;
|
||||||
DisableSpectateHUD = false;
|
DisableSpectateHUD = false;
|
||||||
DisableHUDOnDeathPermission = "@jRandmosSkills/death";
|
DisableHUDOnDeathPermission = "@jRandomSkills/death";
|
||||||
DisableSkillsOnRoundEnd = false;
|
DisableSkillsOnRoundEnd = false;
|
||||||
|
|
||||||
LanguageSystem = new LanguageSystem
|
LanguageSystem = new LanguageSystem
|
||||||
|
|
@ -116,11 +116,12 @@ namespace src.utils
|
||||||
DisableGeoLite = false,
|
DisableGeoLite = false,
|
||||||
LanguageInfos =
|
LanguageInfos =
|
||||||
[
|
[
|
||||||
new LanguageInfo("CN, TW, HK, MO, SG", "pt-br"),
|
new LanguageInfo("ZH, CN, TW, HK, MO, SG", "zh"),
|
||||||
new LanguageInfo("PT, BR, AO, CV, GW, MZ, ST, TL", "zh"),
|
new LanguageInfo("PT-BR, PT, BR, AO, CV, GW, MZ, ST, TL", "pt-br"),
|
||||||
new LanguageInfo("FR, MC, HT", "fr"),
|
new LanguageInfo("FR, MC, HT", "fr"),
|
||||||
|
new LanguageInfo("DE, AT, CH, LI, LU, BE", "de"),
|
||||||
new LanguageInfo("PL", "pl"),
|
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
|
NormalCommands = new NormalCommands
|
||||||
{
|
{
|
||||||
SetSkillCommand = new NormalCommand("ustawskill, ustaw_skill, setskill, set_skill, definirhabilidade, configurarhabilidade, 设置技能, 配置技能", "@jRandmosSkills/admin"),
|
SetSkillCommand = new NormalCommand("ustawskill, ustaw_skill, setskill, set_skill, definirhabilidade, configurarhabilidade, 设置技能, 配置技能", "@jRandomSkills/admin"),
|
||||||
SkillsListCommand = new NormalCommand("supermoc, skille, listamocy, supermoce, skills, listaHabilidades, habilidades, 技能列表, 超能力列表", "@jRandmosSkills/admin"),
|
SkillsListCommand = new NormalCommand("supermoc, skille, listamocy, supermoce, skills, listaHabilidades, habilidades, 技能列表, 超能力列表", "@jRandomSkills/admin"),
|
||||||
UseSkillCommand = new NormalCommand("t, useSkill, usarHabilidade, 技能使用, 使用技能", "@jRandmosSkills/admin"),
|
UseSkillCommand = new NormalCommand("t, useSkill, usarHabilidade, 技能使用, 使用技能", "@jRandomSkills/admin"),
|
||||||
HealCommand = new NormalCommand("heal, ulecz, curar, tratar, 治疗, 治愈", "@jRandmosSkills/admin"),
|
HealCommand = new NormalCommand("heal, ulecz, curar, tratar, 治疗, 治愈", "@jRandomSkills/admin"),
|
||||||
ConsoleCommand = new NormalCommand("console, sv, 控制台, 服务器", "@jRandmosSkills/owner"),
|
ConsoleCommand = new NormalCommand("console, sv, 控制台, 服务器", "@jRandomSkills/owner"),
|
||||||
HudCommand = new NormalCommand("hud, hood", ""),
|
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", ""),
|
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
|
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),
|
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, 更换地图, 更改地图", "@jRandmosSkills/admin", 25, 90, 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, 交换, 切换", "@jRandmosSkills/admin", 15, 90, 15, 20, 2),
|
SwapCommand = new VotingCommand(true, "swap, zmiana, trocar, 交换, 切换", "@jRandomSkills/admin", 15, 90, 15, 20, 2),
|
||||||
ShuffleCommand = new VotingCommand(true, "shuffle, embaralhar, 随机排序, 洗牌", "@jRandmosSkills/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, 暂停, 恢复", "@jRandmosSkills/admin", 15, 60, 15, 2, 2),
|
PauseCommand = new VotingCommand(true, "pause, unpause, pausar, despausar, 暂停, 恢复", "@jRandomSkills/admin", 15, 60, 15, 2, 2),
|
||||||
SetScoreCommand = new VotingCommand(true, "setscore, wynik, definirPontuacao, configurarPontos, 设置分数, 调整分数", "@jRandmosSkills/owner", 15, 90, 15, 90, 2),
|
SetScoreCommand = new VotingCommand(true, "setscore, wynik, definirPontuacao, configurarPontos, 设置分数, 调整分数", "@jRandomSkills/owner", 15, 90, 15, 90, 2),
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -9,6 +9,7 @@ using CounterStrikeSharp.API.Modules.Utils;
|
||||||
using src.player;
|
using src.player;
|
||||||
using src.player.skills;
|
using src.player.skills;
|
||||||
using System.Collections.Concurrent;
|
using System.Collections.Concurrent;
|
||||||
|
using System.Globalization;
|
||||||
using System.Runtime.InteropServices;
|
using System.Runtime.InteropServices;
|
||||||
using WASDMenuAPI.Classes;
|
using WASDMenuAPI.Classes;
|
||||||
using WASDSharedAPI;
|
using WASDSharedAPI;
|
||||||
|
|
@ -110,14 +111,23 @@ namespace src.utils
|
||||||
if (scale <= 0 || skeleton == null) return;
|
if (scale <= 0 || skeleton == null) return;
|
||||||
|
|
||||||
skeleton.Scale = scale;
|
skeleton.Scale = scale;
|
||||||
playerPawn.AcceptInput("SetScale", null, null, scale.ToString());
|
playerPawn.AcceptInput("SetScale", null, null, scale.ToString(CultureInfo.InvariantCulture));
|
||||||
Server.NextFrame(() => Utilities.SetStateChanged(playerPawn, "CBaseEntity", "m_CBodyComponent"));
|
Server.NextWorldUpdate(() => Utilities.SetStateChanged(player.PlayerPawn.Value!, "CBaseEntity", "m_CBodyComponent"));
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Vector? GetSpawnPointVector(CCSPlayerController player, bool enemySpawn = false)
|
public static Vector? GetSpawnPointVector(CCSPlayerController player, bool enemySpawn = false)
|
||||||
{
|
{
|
||||||
var spawns = Utilities.FindAllEntitiesByDesignerName<SpawnPoint>(player.Team == CsTeam.Terrorist && !enemySpawn
|
if (player == null || player.Team is CsTeam.None or CsTeam.Spectator) return null;
|
||||||
? "info_player_terrorist" : "info_player_counterterrorist").ToList();
|
|
||||||
|
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<SpawnPoint>(spawnPointName).ToList();
|
||||||
if (spawns.Count != 0)
|
if (spawns.Count != 0)
|
||||||
{
|
{
|
||||||
var randomSpawn = spawns[jRandomSkills.Instance.Random.Next(spawns.Count)];
|
var randomSpawn = spawns[jRandomSkills.Instance.Random.Next(spawns.Count)];
|
||||||
|
|
@ -208,6 +218,19 @@ namespace src.utils
|
||||||
Utilities.SetStateChanged(pawn, "CBaseEntity", "m_iMaxHealth");
|
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)
|
public static string GetDesignerName(CBasePlayerWeapon? weapon)
|
||||||
{
|
{
|
||||||
if (weapon == null || !weapon.IsValid) return string.Empty;
|
if (weapon == null || !weapon.IsValid) return string.Empty;
|
||||||
|
|
|
||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
|
@ -7,35 +7,40 @@
|
||||||
"DebugMode": false,
|
"DebugMode": false,
|
||||||
"AlternativeSkillButton": null,
|
"AlternativeSkillButton": null,
|
||||||
"SkillTimeBeforeStart": 7.0,
|
"SkillTimeBeforeStart": 7.0,
|
||||||
"SkillDescriptionDuration": 7.0,
|
"SkillHudDuration": 999.0,
|
||||||
|
"SkillDescriptionDuration": 999.0,
|
||||||
"DisplayAlwaysDescription": false,
|
"DisplayAlwaysDescription": false,
|
||||||
"DisableSpectateHUD": false,
|
"DisableSpectateHUD": false,
|
||||||
"FlashingHtmlHudFix": true,
|
"FlashingHtmlHudFix": true,
|
||||||
"CS2TraceRayDebug": false,
|
"CS2TraceRayDebug": false,
|
||||||
"DisableHUDOnDeathPermission": "@jRandmosSkills/death",
|
"DisableHUDOnDeathPermission": "@jRandomSkills/death",
|
||||||
"DisableSkillsOnRoundEnd": false,
|
"DisableSkillsOnRoundEnd": false,
|
||||||
"LanguageSystem": {
|
"LanguageSystem": {
|
||||||
"DefaultLangCode": "en",
|
"DefaultLangCode": "en",
|
||||||
"DisableGeoLite": false,
|
"DisableGeoLite": false,
|
||||||
"LanguageInfos": [
|
"LanguageInfos": [
|
||||||
{
|
{
|
||||||
"IsoCodes": "CN, TW, HK, MO, SG",
|
"IsoCodes": "ZH, CN, TW, HK, MO, SG",
|
||||||
"FileName": "pt-br"
|
"FileName": "zh"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"IsoCodes": "PT, BR, AO, CV, GW, MZ, ST, TL",
|
"IsoCodes": "PT-BR, PT, BR, AO, CV, GW, MZ, ST, TL",
|
||||||
"FileName": "zh"
|
"FileName": "pt-br"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"IsoCodes": "FR, MC, HT",
|
"IsoCodes": "FR, MC, HT",
|
||||||
"FileName": "fr"
|
"FileName": "fr"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"IsoCodes": "DE, AT, CH, LI, LU, BE",
|
||||||
|
"FileName": "de"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"IsoCodes": "PL",
|
"IsoCodes": "PL",
|
||||||
"FileName": "pl"
|
"FileName": "pl"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"IsoCodes": "GB, US",
|
"IsoCodes": "EN, GB, US",
|
||||||
"FileName": "en"
|
"FileName": "en"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|
@ -58,26 +63,36 @@
|
||||||
"WSADMenuControllsLineColor2": "white",
|
"WSADMenuControllsLineColor2": "white",
|
||||||
"WSADMenuControllsLineColor3": "green"
|
"WSADMenuControllsLineColor3": "green"
|
||||||
},
|
},
|
||||||
|
"ChatMessage": {
|
||||||
|
"MaxWidth": 1280.0,
|
||||||
|
"LineSymbol": "―",
|
||||||
|
"LineColor": "\u0004",
|
||||||
|
"LineShow": true,
|
||||||
|
"InfoPlayerNameColor": "\u0002",
|
||||||
|
"InfoSkillColor": "\u0006",
|
||||||
|
"InfoMessageShow": true,
|
||||||
|
"TagFormat": "\u0002◢◆◤ {TAG} ◥◆◣"
|
||||||
|
},
|
||||||
"NormalCommands": {
|
"NormalCommands": {
|
||||||
"SetSkillCommand": {
|
"SetSkillCommand": {
|
||||||
"Alias": "ustawskill, ustaw_skill, setskill, set_skill, definirhabilidade, configurarhabilidade, 设置技能, 配置技能",
|
"Alias": "ustawskill, ustaw_skill, setskill, set_skill, definirhabilidade, configurarhabilidade, 设置技能, 配置技能",
|
||||||
"Permissions": "@jRandmosSkills/admin"
|
"Permissions": "@jRandomSkills/admin"
|
||||||
},
|
},
|
||||||
"SkillsListCommand": {
|
"SkillsListCommand": {
|
||||||
"Alias": "supermoc, skille, listamocy, supermoce, skills, listaHabilidades, habilidades, 技能列表, 超能力列表",
|
"Alias": "supermoc, skille, listamocy, supermoce, skills, listaHabilidades, habilidades, 技能列表, 超能力列表",
|
||||||
"Permissions": "@jRandmosSkills/admin"
|
"Permissions": "@jRandomSkills/admin"
|
||||||
},
|
},
|
||||||
"UseSkillCommand": {
|
"UseSkillCommand": {
|
||||||
"Alias": "t, useSkill, usarHabilidade, 技能使用, 使用技能",
|
"Alias": "t, useSkill, usarHabilidade, 技能使用, 使用技能",
|
||||||
"Permissions": "@jRandmosSkills/admin"
|
"Permissions": "@jRandomSkills/admin"
|
||||||
},
|
},
|
||||||
"HealCommand": {
|
"HealCommand": {
|
||||||
"Alias": "heal, ulecz, curar, tratar, 治疗, 治愈",
|
"Alias": "heal, ulecz, curar, tratar, 治疗, 治愈",
|
||||||
"Permissions": "@jRandmosSkills/admin"
|
"Permissions": "@jRandomSkills/admin"
|
||||||
},
|
},
|
||||||
"ConsoleCommand": {
|
"ConsoleCommand": {
|
||||||
"Alias": "console, sv, 控制台, 服务器",
|
"Alias": "console, sv, 控制台, 服务器",
|
||||||
"Permissions": "@jRandmosSkills/owner"
|
"Permissions": "@jRandomSkills/owner"
|
||||||
},
|
},
|
||||||
"HudCommand": {
|
"HudCommand": {
|
||||||
"Alias": "hud, hood",
|
"Alias": "hud, hood",
|
||||||
|
|
@ -85,7 +100,7 @@
|
||||||
},
|
},
|
||||||
"SetStaticSkillCommand": {
|
"SetStaticSkillCommand": {
|
||||||
"Alias": "ustawstatycznyskill, ustaw_statyczny_skill, setstaticskill, set_static_skill",
|
"Alias": "ustawstatycznyskill, ustaw_statyczny_skill, setstaticskill, set_static_skill",
|
||||||
"Permissions": "@jRandmosSkills/admin"
|
"Permissions": "@jRandomSkills/admin"
|
||||||
},
|
},
|
||||||
"ChangeLanguageCommand": {
|
"ChangeLanguageCommand": {
|
||||||
"Alias": "lang, language, changelang, change_lang, jezyk, język",
|
"Alias": "lang, language, changelang, change_lang, jezyk, język",
|
||||||
|
|
@ -93,14 +108,14 @@
|
||||||
},
|
},
|
||||||
"ReloadCommand": {
|
"ReloadCommand": {
|
||||||
"Alias": "reload, refresh",
|
"Alias": "reload, refresh",
|
||||||
"Permissions": "@jRandmosSkills/admin"
|
"Permissions": "@jRandomSkills/admin"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"VotingCommands": {
|
"VotingCommands": {
|
||||||
"StartGameCommand": {
|
"StartGameCommand": {
|
||||||
"EnableVoting": true,
|
"EnableVoting": true,
|
||||||
"Alias": "start, go, começar, iniciar, 开始, 启动",
|
"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",
|
"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",
|
"SVStartParams": "mp_freezetime 0; mp_forcecamera 0; mp_overtime_enable 1; sv_cheats 1",
|
||||||
"TimeToVote": 15.0,
|
"TimeToVote": 15.0,
|
||||||
|
|
@ -117,7 +132,7 @@
|
||||||
"TimeToNextSameVoting": 500.0,
|
"TimeToNextSameVoting": 500.0,
|
||||||
"MinimumPlayersToStartVoting": 2,
|
"MinimumPlayersToStartVoting": 2,
|
||||||
"Alias": "map, mapa, changemap, zmienmape, zmienmape, mudarMapa, trocarMapa, 更换地图, 更改地图",
|
"Alias": "map, mapa, changemap, zmienmape, zmienmape, mudarMapa, trocarMapa, 更换地图, 更改地图",
|
||||||
"Permissions": "@jRandmosSkills/admin"
|
"Permissions": "@jRandomSkills/admin"
|
||||||
},
|
},
|
||||||
"SwapCommand": {
|
"SwapCommand": {
|
||||||
"EnableVoting": true,
|
"EnableVoting": true,
|
||||||
|
|
@ -127,7 +142,7 @@
|
||||||
"TimeToNextSameVoting": 20.0,
|
"TimeToNextSameVoting": 20.0,
|
||||||
"MinimumPlayersToStartVoting": 2,
|
"MinimumPlayersToStartVoting": 2,
|
||||||
"Alias": "swap, zmiana, trocar, 交换, 切换",
|
"Alias": "swap, zmiana, trocar, 交换, 切换",
|
||||||
"Permissions": "@jRandmosSkills/admin"
|
"Permissions": "@jRandomSkills/admin"
|
||||||
},
|
},
|
||||||
"ShuffleCommand": {
|
"ShuffleCommand": {
|
||||||
"EnableVoting": true,
|
"EnableVoting": true,
|
||||||
|
|
@ -137,7 +152,7 @@
|
||||||
"TimeToNextSameVoting": 20.0,
|
"TimeToNextSameVoting": 20.0,
|
||||||
"MinimumPlayersToStartVoting": 2,
|
"MinimumPlayersToStartVoting": 2,
|
||||||
"Alias": "shuffle, embaralhar, 随机排序, 洗牌",
|
"Alias": "shuffle, embaralhar, 随机排序, 洗牌",
|
||||||
"Permissions": "@jRandmosSkills/admin"
|
"Permissions": "@jRandomSkills/admin"
|
||||||
},
|
},
|
||||||
"PauseCommand": {
|
"PauseCommand": {
|
||||||
"EnableVoting": true,
|
"EnableVoting": true,
|
||||||
|
|
@ -147,7 +162,7 @@
|
||||||
"TimeToNextSameVoting": 2.0,
|
"TimeToNextSameVoting": 2.0,
|
||||||
"MinimumPlayersToStartVoting": 2,
|
"MinimumPlayersToStartVoting": 2,
|
||||||
"Alias": "pause, unpause, pausar, despausar, 暂停, 恢复",
|
"Alias": "pause, unpause, pausar, despausar, 暂停, 恢复",
|
||||||
"Permissions": "@jRandmosSkills/admin"
|
"Permissions": "@jRandomSkills/admin"
|
||||||
},
|
},
|
||||||
"SetScoreCommand": {
|
"SetScoreCommand": {
|
||||||
"EnableVoting": true,
|
"EnableVoting": true,
|
||||||
|
|
@ -157,7 +172,7 @@
|
||||||
"TimeToNextSameVoting": 90.0,
|
"TimeToNextSameVoting": 90.0,
|
||||||
"MinimumPlayersToStartVoting": 2,
|
"MinimumPlayersToStartVoting": 2,
|
||||||
"Alias": "setscore, wynik, definirPontuacao, configurarPontos, 设置分数, 调整分数",
|
"Alias": "setscore, wynik, definirPontuacao, configurarPontos, 设置分数, 调整分数",
|
||||||
"Permissions": "@jRandmosSkills/owner"
|
"Permissions": "@jRandomSkills/owner"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
{"0":"en","76561199562070178":"en","76561198150092992":"pt-br"}
|
||||||
File diff suppressed because it is too large
Load diff
|
|
@ -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 <Fähigkeit>",
|
||||||
|
"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"
|
||||||
|
}
|
||||||
|
|
@ -55,6 +55,12 @@
|
||||||
"c4camouflage": "C4 Camouflage",
|
"c4camouflage": "C4 Camouflage",
|
||||||
"c4camouflage_desc": "You are invisible while holding the bomb",
|
"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": "Catapult",
|
||||||
"catapult_desc": "You have a random chance to launch an enemy upwards",
|
"catapult_desc": "You have a random chance to launch an enemy upwards",
|
||||||
"catapult_desc2": "Your chance to launch an enemy on hit is: {0}%",
|
"catapult_desc2": "Your chance to launch an enemy on hit is: {0}%",
|
||||||
|
|
@ -68,6 +74,10 @@
|
||||||
"cutter": "Cutter",
|
"cutter": "Cutter",
|
||||||
"cutter_desc": "Instant kill with a knife",
|
"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": "Darkness",
|
||||||
"darkness_desc": "Applies a darkness effect to a chosen enemy",
|
"darkness_desc": "Applies a darkness effect to a chosen enemy",
|
||||||
"darkness_enemy_info": "Let the lights go out.",
|
"darkness_enemy_info": "Let the lights go out.",
|
||||||
|
|
@ -142,6 +152,7 @@
|
||||||
"gambler_desc": "Select a skill from the list provided.",
|
"gambler_desc": "Select a skill from the list provided.",
|
||||||
"gambler_select_info": "Select your skill:",
|
"gambler_select_info": "Select your skill:",
|
||||||
"gambler_more": "#00FF00|Refresh for ${0}",
|
"gambler_more": "#00FF00|Refresh for ${0}",
|
||||||
|
"gambler_no_money": "Not enough money.",
|
||||||
|
|
||||||
"ghost": "Ghost",
|
"ghost": "Ghost",
|
||||||
"ghost_desc": "You are completely invisible",
|
"ghost_desc": "You are completely invisible",
|
||||||
|
|
@ -175,6 +186,9 @@
|
||||||
"holyhandgrenade": "Holy Hand Grenade",
|
"holyhandgrenade": "Holy Hand Grenade",
|
||||||
"holyhandgrenade_desc": "Your HE grenades deal double damage and have double range",
|
"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": "Impostor",
|
||||||
"impostor_desc": "You start the round with an enemy player model",
|
"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",
|
"silent_desc": "Your footsteps and jumps are silent to OTHER players",
|
||||||
|
|
||||||
"sniperelite": "Sniper Elite",
|
"sniperelite": "Sniper Elite",
|
||||||
|
"sniperelite_customname": "Sniper Elite Skill",
|
||||||
"sniperelite_desc": "Click [css_useSkill] to swap your current weapon for an AWP",
|
"sniperelite_desc": "Click [css_useSkill] to swap your current weapon for an AWP",
|
||||||
|
|
||||||
"soldier": "Soldier",
|
"soldier": "Soldier",
|
||||||
|
|
@ -451,10 +466,10 @@
|
||||||
|
|
||||||
"bombsite_a": "Bombsite A",
|
"bombsite_a": "Bombsite A",
|
||||||
"bombsite_b": "Bombsite B",
|
"bombsite_b": "Bombsite B",
|
||||||
|
"bombplanted": "The bomb has been planted\n{0} seconds till detonation",
|
||||||
|
|
||||||
"teammate_skills": "Your teammates' skills",
|
"teammate_skills": "Your teammates' skills",
|
||||||
"summary_start": "======SUMMARY=OF=THE=LAST=ROUND======",
|
"summary": "Summary of the last round",
|
||||||
"summary_end": "=======================================",
|
|
||||||
|
|
||||||
"menu_controlls_scroll": "W/S - Scroll",
|
"menu_controlls_scroll": "W/S - Scroll",
|
||||||
"menu_controlls_padding": " | ",
|
"menu_controlls_padding": " | ",
|
||||||
|
|
@ -55,6 +55,12 @@
|
||||||
"c4camouflage": "Camouflage C4",
|
"c4camouflage": "Camouflage C4",
|
||||||
"c4camouflage_desc": "Vous êtes invisible en tenant la bombe",
|
"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": "Catapulte",
|
||||||
"catapult_desc": "Vous avez une chance aléatoire de projeter un ennemi en l’air",
|
"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}%",
|
"catapult_desc2": "Votre chance de projeter un ennemi à l’impact est : {0}%",
|
||||||
|
|
@ -68,6 +74,10 @@
|
||||||
"cutter": "Trancheur",
|
"cutter": "Trancheur",
|
||||||
"cutter_desc": "Coup de couteau = mort instantanée",
|
"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": "Obscurité",
|
||||||
"darkness_desc": "Applique un effet d’obscurité à un ennemi choisi",
|
"darkness_desc": "Applique un effet d’obscurité à un ennemi choisi",
|
||||||
"darkness_enemy_info": "Que la lumière s’éteigne.",
|
"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_desc": "Sélectionnez une compétence dans la liste proposée.",
|
||||||
"gambler_select_info": "Sélectionnez votre compétence :",
|
"gambler_select_info": "Sélectionnez votre compétence :",
|
||||||
"gambler_more": "#00FF00|Rafraîchir pour ${0}",
|
"gambler_more": "#00FF00|Rafraîchir pour ${0}",
|
||||||
|
"gambler_no_money": "Pas assez d'argent.",
|
||||||
|
|
||||||
"ghost": "Fantôme",
|
"ghost": "Fantôme",
|
||||||
"ghost_desc": "Vous êtes complètement invisible",
|
"ghost_desc": "Vous êtes complètement invisible",
|
||||||
|
|
@ -175,6 +186,9 @@
|
||||||
"holyhandgrenade": "Grenade Sacrée",
|
"holyhandgrenade": "Grenade Sacrée",
|
||||||
"holyhandgrenade_desc": "Vos grenades HE infligent le double de dégâts et ont une portée doublé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": "Imposteur",
|
||||||
"impostor_desc": "Vous commencez le round avec un modèle de joueur ennemi",
|
"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",
|
"silent_desc": "Vos pas et vos sauts sont silencieux pour les AUTRES joueurs",
|
||||||
|
|
||||||
"sniperelite": "Sniper d’Élite",
|
"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",
|
"sniperelite_desc": "Appuyez sur [css_useSkill] pour échanger votre arme actuelle contre un AWP",
|
||||||
|
|
||||||
"soldier": "Soldat",
|
"soldier": "Soldat",
|
||||||
|
|
@ -451,10 +466,10 @@
|
||||||
|
|
||||||
"bombsite_a": "Site de bombe A",
|
"bombsite_a": "Site de bombe A",
|
||||||
"bombsite_b": "Site de bombe B",
|
"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",
|
"teammate_skills": "Compétences de vos coéquipiers",
|
||||||
"summary_start": "======RÉSUMÉ=DU=DERNIER=ROUND======",
|
"summary": "Résumé du dernier round",
|
||||||
"summary_end": "===================================",
|
|
||||||
|
|
||||||
"menu_controlls_scroll": "W/S - Défilement",
|
"menu_controlls_scroll": "W/S - Défilement",
|
||||||
"menu_controlls_padding": " | ",
|
"menu_controlls_padding": " | ",
|
||||||
|
|
@ -55,6 +55,12 @@
|
||||||
"c4camouflage": "C4 Kamuflaż",
|
"c4camouflage": "C4 Kamuflaż",
|
||||||
"c4camouflage_desc": "Kiedy trzymasz bombę, jesteś niewidzialny",
|
"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": "Katapulta",
|
||||||
"catapult_desc": "Masz losową szanse na podrzucenie wroga",
|
"catapult_desc": "Masz losową szanse na podrzucenie wroga",
|
||||||
"catapult_desc2": "Twoje szanse na podrzucenie wroga po trafieniu to: {0}%",
|
"catapult_desc2": "Twoje szanse na podrzucenie wroga po trafieniu to: {0}%",
|
||||||
|
|
@ -68,6 +74,10 @@
|
||||||
"cutter": "Scyzoryk",
|
"cutter": "Scyzoryk",
|
||||||
"cutter_desc": "Natychmiastowe zabójstwo nożem",
|
"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": "Mrok",
|
||||||
"darkness_desc": "Nadaje efekt ciemności wybranemu przeciwnikowi",
|
"darkness_desc": "Nadaje efekt ciemności wybranemu przeciwnikowi",
|
||||||
"darkness_enemy_info": "Niech zgasną światła.",
|
"darkness_enemy_info": "Niech zgasną światła.",
|
||||||
|
|
@ -142,6 +152,7 @@
|
||||||
"gambler_desc": "Wybierz umiejętność z podanej listy.",
|
"gambler_desc": "Wybierz umiejętność z podanej listy.",
|
||||||
"gambler_select_info": "Wybierz umiejętność:",
|
"gambler_select_info": "Wybierz umiejętność:",
|
||||||
"gambler_more": "#00FF00|Odśwież za ${0}",
|
"gambler_more": "#00FF00|Odśwież za ${0}",
|
||||||
|
"gambler_no_money": "Niewystarczająca ilość pieniędzy.",
|
||||||
|
|
||||||
"ghost": "Duszek",
|
"ghost": "Duszek",
|
||||||
"ghost_desc": "Jesteś całkowicie niewidzialny",
|
"ghost_desc": "Jesteś całkowicie niewidzialny",
|
||||||
|
|
@ -175,6 +186,9 @@
|
||||||
"holyhandgrenade": "Święty Granat Ręczny",
|
"holyhandgrenade": "Święty Granat Ręczny",
|
||||||
"holyhandgrenade_desc": "Twoje granaty uderzeniowe zadają podwójne obrażenia i mają podwójny zasięg",
|
"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": "Szpieg",
|
||||||
"impostor_desc": "Na początku rundy otrzymujesz model postaci przeciwnika",
|
"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",
|
"silent_desc": "Twoje kroki i skoki są niesłyszalne dla INNYCH graczy",
|
||||||
|
|
||||||
"sniperelite": "SzeliS",
|
"sniperelite": "SzeliS",
|
||||||
|
"sniperelite_customname": "Mityczna AWP",
|
||||||
"sniperelite_desc": "Kliknij [css_useSkill], aby zamienić aktualną broń na AWP",
|
"sniperelite_desc": "Kliknij [css_useSkill], aby zamienić aktualną broń na AWP",
|
||||||
|
|
||||||
"soldier": "Żołnierz",
|
"soldier": "Żołnierz",
|
||||||
|
|
@ -451,10 +466,10 @@
|
||||||
|
|
||||||
"bombsite_a": "Strefa detonacji A",
|
"bombsite_a": "Strefa detonacji A",
|
||||||
"bombsite_b": "Strefa detonacji B",
|
"bombsite_b": "Strefa detonacji B",
|
||||||
|
"bombplanted": "Bomba została podłożona\n{0} sekund do detonacji",
|
||||||
|
|
||||||
"teammate_skills": "Supermoce twoich sojuszników",
|
"teammate_skills": "Supermoce twoich sojuszników",
|
||||||
"summary_start": "======PODSUMOWANIE=Z=OSTATNIEJ=RUNDY======",
|
"summary": "Podsumowanie z ostatniej rundy",
|
||||||
"summary_end": "============================================",
|
|
||||||
|
|
||||||
"menu_controlls_scroll": "W/S – Przewijanie",
|
"menu_controlls_scroll": "W/S – Przewijanie",
|
||||||
"menu_controlls_padding": " | ",
|
"menu_controlls_padding": " | ",
|
||||||
|
|
@ -1,53 +1,53 @@
|
||||||
{
|
{
|
||||||
"none": "Nenhuma",
|
"none": "Nenhum",
|
||||||
"none_desc": "Você não tem nenhuma habilidade",
|
"none_desc": "Você não tem nenhuma habilidade",
|
||||||
|
|
||||||
"aimbot": "Aimbot",
|
"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": "Anomalia",
|
||||||
"anomaly_desc": "Você volta alguns segundos no tempo",
|
"anomaly_desc": "Você retrocede alguns segundos no tempo",
|
||||||
|
|
||||||
"antyflash": "Anti-Flash",
|
"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": "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": "Ceifador de Zonas",
|
||||||
"areareaper_desc": "Você pode escolher um bombsite para desativar",
|
"areareaper_desc": "Você pode escolher um local de bomba para desativar",
|
||||||
"areareaper_incorrect_site": "Nenhum bombsite encontrado.",
|
"areareaper_incorrect_site": "Nenhum local de bomba encontrado.",
|
||||||
"areareaper_no_site": "Nenhum bombsite encontrado.",
|
"areareaper_no_site": "Nenhum local de bomba encontrado.",
|
||||||
"areareaper_select_info": "Escolha o bomb p/ desativar:",
|
"areareaper_select_info": "Escolha área p/ desativar:",
|
||||||
"areareaper_site_disabled": "Bombsite {0} foi desativado - nenhuma bomba pode ser plantada lá!",
|
"areareaper_site_disabled": "Local de bomba {0} foi desativado - nenhuma bomba pode ser plantada lá!",
|
||||||
"areareaper_used_info": "Seu poder já foi usado.",
|
"areareaper_used_info": "Seu poder já foi usado.",
|
||||||
|
|
||||||
"armored": "Super Tiro",
|
"armored": "Blindado",
|
||||||
"armored_desc": "Seu dano é multiplicado por um valor aleatório",
|
"armored_desc": "Você tem um multiplicador de dano recebido aleatório",
|
||||||
"armored_desc2": "Seu multiplicador de dano é: {0}x",
|
"armored_desc2": "Seu multiplicador de dano recebido é: {0}x",
|
||||||
|
|
||||||
"assassin": "Assassino",
|
"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": "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",
|
"astronaut_desc2": "Sua gravidade aleatória é: {0}x",
|
||||||
|
|
||||||
"bankrupt": "Ladrão",
|
"bankrupt": "Falido",
|
||||||
"bankrupt_desc": "Escolha o jogador que perderá todo o dinheiro",
|
"bankrupt_desc": "Escolha o jogador que perderá todo o dinheiro",
|
||||||
"bankrupt_enemy_info": "Você ficou pobre",
|
"bankrupt_enemy_info": "Você faliu.",
|
||||||
"bankrupt_player_info": "O jogador '{0}' ficou pobre.",
|
"bankrupt_player_info": "O jogador '{0}' faliu.",
|
||||||
"bankrupt_select_info": "Escolha jogador p/ ficar pobre:",
|
"bankrupt_select_info": "Escolha jogador p/ falir:",
|
||||||
|
|
||||||
"baseball": "Decoy Aleluia",
|
"baseball": "Jogador de Beisebol",
|
||||||
"baseball_desc": "Sua decoy ricocheteia nas paredes e mata instantaneamente um inimigo ao acertá-lo",
|
"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_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": "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": "Coelho",
|
||||||
"bunnyhop_desc": "Você ganha \"BunnyHop\" automático",
|
"bunnyhop_desc": "Você ganha \"BunnyHop\" automático",
|
||||||
|
|
@ -55,18 +55,28 @@
|
||||||
"c4camouflage": "Camuflagem C4",
|
"c4camouflage": "Camuflagem C4",
|
||||||
"c4camouflage_desc": "Você fica invisível enquanto segura a bomba",
|
"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": "Catapulta",
|
||||||
"catapult_desc": "Você tem uma chance aleatória de lançar um inimigo para cima",
|
"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": "Galinha",
|
||||||
"chicken_desc": "Você é uma galinha com +10% de movimento mais rápido e -50 HP",
|
"chicken_desc": "Você ganha um modelo de galinha + 10% de movimento mais rápido - 50 HP",
|
||||||
|
|
||||||
"chillout": "Esqueci a Senha",
|
"chillout": "Descontraído",
|
||||||
"chillout_desc": "Plantar a bomba leva significativamente mais tempo",
|
"chillout_desc": "Plantar a bomba leva significativamente mais tempo",
|
||||||
|
|
||||||
"cutter": "Corte Rápido",
|
"cutter": "Cortador",
|
||||||
"cutter_desc": "Você mata instantaneamente com a faca",
|
"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": "Escuridão",
|
||||||
"darkness_desc": "Aplica um efeito de escuridão a um inimigo escolhido",
|
"darkness_desc": "Aplica um efeito de escuridão a um inimigo escolhido",
|
||||||
|
|
@ -75,57 +85,58 @@
|
||||||
"darkness_select_info": "Escolha jogador: escuridão:",
|
"darkness_select_info": "Escolha jogador: escuridão:",
|
||||||
|
|
||||||
"deactivator": "Desativador",
|
"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_enemy_info": "Sua habilidade foi desativada.",
|
||||||
"deactivator_player_info": "A habilidade do jogador '{0}' foi desativada.",
|
"deactivator_player_info": "A habilidade do jogador '{0}' foi desativada.",
|
||||||
"deactivator_select_info": "Desativar skill do jogador:",
|
"deactivator_select_info": "Desativar skill do jogador:",
|
||||||
|
|
||||||
"deaf": "Surdo",
|
"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_enemy_info": "Seus fones de ouvido saíram do jogo.",
|
||||||
"deaf_player_info": "O som foi desativado para o jogador '{0}'.",
|
"deaf_player_info": "O som foi desativado para o jogador '{0}'.",
|
||||||
"deaf_select_info": "Silenciar jogador:",
|
"deaf_select_info": "Silenciar jogador:",
|
||||||
|
|
||||||
"disarmament": "Desarmamento",
|
"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}%",
|
"disarmament_desc2": "Sua chance de desarmar um inimigo é: {0}%",
|
||||||
|
|
||||||
"distancer": "Medidor de Distância",
|
"distancer": "Medidor de Distância",
|
||||||
"distancer_desc": "Você pode ver a distância até o inimigo mais próximo",
|
"distancer_desc": "Você pode ver a distância até o inimigo mais próximo",
|
||||||
|
|
||||||
"dash": "Impulso",
|
"dash": "Dash",
|
||||||
"dash_desc": "Pule novamente para receber um impulso",
|
"dash_desc": "Execute um segundo salto para dar um dash",
|
||||||
|
|
||||||
"dracula": "Drácula",
|
"dracula": "Drácula",
|
||||||
"dracula_desc": "Acertar um inimigo restaura sua vida igual a ao dano causado",
|
"dracula_desc": "Acertar um inimigo restaura saúde igual a uma porcentagem do dano causado",
|
||||||
|
|
||||||
"duplicator": "ctrl+c ctrl+v",
|
"duplicator": "Duplicador",
|
||||||
"duplicator_desc": "Escolha um jogador para copiar a habilidade",
|
"duplicator_desc": "Escolha um jogador para copiar sua habilidade",
|
||||||
"duplicator_player_info": "A habilidade do jogador '{0}' foi copiada.",
|
"duplicator_player_info": "A habilidade do jogador '{0}' foi copiada.",
|
||||||
"duplicator_select_info": "Copiar skill do jogador:",
|
"duplicator_select_info": "Copiar skill do jogador:",
|
||||||
|
|
||||||
"dwarf": "Anão",
|
"dwarf": "Anão",
|
||||||
"dwarf_desc": "Sua altura agora é aleatória",
|
"dwarf_desc": "Tamanho de personagem aleatório no início da rodada",
|
||||||
"dwarf_desc2": "Seu multiplicador de altura é: {0}x",
|
"dwarf_desc2": "Seu multiplicador de tamanho é: {0}x",
|
||||||
|
|
||||||
"enemyspawn": "Spawn Inimigo",
|
"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": "Tiro Explosivo",
|
||||||
"explosiveshot_desc": "Chance aleatória de disparar uma bala explosiva enquanto atira",
|
"explosiveshot_desc": "Chance aleatória de disparar uma bala explosiva enquanto atira",
|
||||||
"explosiveshot_desc2": "Sua chance de disparar uma bala explosiva: {0}%",
|
"explosiveshot_desc2": "Sua chance de disparar uma bala explosiva: {0}%",
|
||||||
|
|
||||||
"falconeye": "Olho de Águia",
|
"falconeye": "Olho de Falcão",
|
||||||
"falconeye_desc": "Clique em [css_useSkill] para ativar uma câmera 360 com visão aérea",
|
"falconeye_desc": "Clique em [css_useSkill] para ativar uma câmera com visão aérea",
|
||||||
|
|
||||||
"fastreload": "Recarga Rápida",
|
"fastreload": "Recarga Rápida",
|
||||||
"fastreload_desc": "Clique em [css_useSkill] para recarregar a arma que você está segurando",
|
"fastreload_desc": "Clique em [css_useSkill] para recarregar a arma que você está segurando",
|
||||||
|
|
||||||
"flash": "Ligeirinho",
|
"flash": "Flash",
|
||||||
"flash_desc": "Velocidade de movimentação aleatória no início da rodada",
|
"flash_desc": "Velocidade de jogador aleatória no início da rodada",
|
||||||
"flash_desc2": "Seu multiplicador de velocidade é: {0}x",
|
"flash_desc2": "Seu multiplicador de velocidade é: {0}x",
|
||||||
|
|
||||||
"fortnite": "Fortnite",
|
"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": "Bomba Frágil",
|
||||||
"fragilebomb_desc": "Atirar na bomba a danifica",
|
"fragilebomb_desc": "Atirar na bomba a danifica",
|
||||||
|
|
@ -134,131 +145,135 @@
|
||||||
"friendlyfire": "Fogo Amigo",
|
"friendlyfire": "Fogo Amigo",
|
||||||
"friendlyfire_desc": "Atirar em companheiros de equipe os cura",
|
"friendlyfire_desc": "Atirar em companheiros de equipe os cura",
|
||||||
|
|
||||||
"frozendecoy": "Decoy Congelante",
|
"frozendecoy": "Chamariz Congelante",
|
||||||
"frozendecoy_desc": "Sua decoy congela os players próximos",
|
"frozendecoy_desc": "Seu chamariz congela todos os jogadores próximos",
|
||||||
|
|
||||||
"gambler": "Tigrinho",
|
"gambler": "Apostador",
|
||||||
"gambler_desc": "Selecione uma habilidade da lista.",
|
"gambler_desc": "Selecione uma habilidade da lista.",
|
||||||
"gambler_select_info": "Escolha sua habilidade:",
|
"gambler_select_info": "Escolha sua habilidade:",
|
||||||
"gambler_more": "#00FF00|Atualizar por ${0}",
|
"gambler_more": "#00FF00|Atualizar por ${0}",
|
||||||
|
"gambler_no_money": "Não há dinheiro suficiente.",
|
||||||
|
|
||||||
"ghost": "Fantasma",
|
"ghost": "Fantasma",
|
||||||
"ghost_desc": "Você é completamente invisível",
|
"ghost_desc": "Você é completamente invisível",
|
||||||
|
|
||||||
"glaz": "Smoke Transparente",
|
"glaz": "Glaz",
|
||||||
"glaz_desc": "Smokes tornam-se transparentes para você",
|
"glaz_desc": "Você não pode ver granadas de fumaça",
|
||||||
|
|
||||||
"glitch": "Sem Mapa",
|
"glitch": "Glitch",
|
||||||
"glitch_desc": "Desativa o radar de um inimigo escolhido",
|
"glitch_desc": "Desativa o radar de um inimigo escolhido",
|
||||||
"glitch_enemy_info": "Seu radar foi desativado.",
|
"glitch_enemy_info": "Seu radar foi desativado.",
|
||||||
"glitch_player_info": "O radar do jogador '{0}' foi desativado.",
|
"glitch_player_info": "O radar do jogador '{0}' foi desativado.",
|
||||||
"glitch_select_info": "Desativar radar do jogador:",
|
"glitch_select_info": "Desativar radar do jogador:",
|
||||||
|
|
||||||
"glue": "Semtex",
|
"glue": "Cola",
|
||||||
"glue_desc": "Suas granadas grudam nas paredes",
|
"glue_desc": "Suas granadas grudam nas paredes",
|
||||||
|
|
||||||
"godmode": "Modo Deus",
|
"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_off": "Imortalidade desativada",
|
||||||
"godmode_on": "Imortalidade ativada",
|
"godmode_on": "Imortalidade ativada",
|
||||||
|
|
||||||
"grenadier": "Bomberman",
|
"grenadier": "Grenadier",
|
||||||
"grenadier_desc": "Você tem HEs infinitas",
|
"grenadier_desc": "Você tem granadas HE infinitas",
|
||||||
|
|
||||||
"healingsmoke": "Smoke Amiga",
|
"healingsmoke": "Fumaça Curativa",
|
||||||
"healingsmoke_desc": "Suas smokes curam",
|
"healingsmoke_desc": "Suas granadas de fumaça curam",
|
||||||
|
|
||||||
"hermit": "Sanguessuga",
|
"hermit": "Eremita",
|
||||||
"hermit_desc": "Matar restaura munição e uma parte da sua vida",
|
"hermit_desc": "Matar restaura munição e uma porção de saúde",
|
||||||
|
|
||||||
"holyhandgrenade": "Granada Obesa",
|
"holyhandgrenade": "Granada Sagrada",
|
||||||
"holyhandgrenade_desc": "HEs causam dano dobrado e têm alcance dobrado",
|
"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": "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": "Munição Infinita",
|
||||||
"infiniteammo_desc": "Você recebe munição infinita para todas as suas armas",
|
"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",
|
"jackal_desc": "Cada adversário deixa um rastro atrás de si",
|
||||||
|
|
||||||
"jammer": "No Scope",
|
"jammer": "Jammer",
|
||||||
"jammer_desc": "Escolha um jogador para desativar a mira",
|
"jammer_desc": "Escolha um jogador para desativar sua mira",
|
||||||
"jammer_enemy_info": "Sua mira foi desativada.",
|
"jammer_enemy_info": "Sua mira foi desativada.",
|
||||||
"jammer_player_info": "A mira do jogador '{0}' foi desativada.",
|
"jammer_player_info": "A mira do jogador '{0}' foi desativada.",
|
||||||
"jammer_select_info": "Desativar mira do jogador:",
|
"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_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_on": "LIG.",
|
||||||
"jester_off": "DESL.",
|
"jester_off": "DESL.",
|
||||||
|
|
||||||
"jumpban": "Perneta",
|
"jumpban": "Sem Pernas",
|
||||||
"jumpban_desc": "Escolha um jogador que não poderá pular",
|
"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_player_info": "O jogador '{0}' não pode mais pular.",
|
||||||
"jumpban_select_info": "Banir pulo do jogador:",
|
"jumpban_select_info": "Banir pulo do jogador:",
|
||||||
|
|
||||||
"jumpingjack": "Pula-Pula",
|
"jumpingjack": "Pula-Pula",
|
||||||
"jumpingjack_desc": "Pular restaura vida",
|
"jumpingjack_desc": "Pular restaura saúde",
|
||||||
|
|
||||||
"killerflash": "Flash Mortal",
|
"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": "Troca de Vida",
|
||||||
"lifeswap_desc": "Escolha um jogador para trocar de vida",
|
"lifeswap_desc": "Escolha um jogador para trocar saúde com ele",
|
||||||
"lifeswap_enemy_info": "Alguém pegou sua vida emprestada.",
|
"lifeswap_enemy_info": "Alguém pegou sua saúde emprestada.",
|
||||||
"lifeswap_player_info": "Você trocou vida com o jogador '{0}'.",
|
"lifeswap_player_info": "Você trocou saúde com o jogador '{0}'.",
|
||||||
"lifeswap_select_info": "Trocar de vida com jogador:",
|
"lifeswap_select_info": "Trocar vida com jogador:",
|
||||||
|
|
||||||
"longknife": "Espada",
|
"longknife": "Faca Longa",
|
||||||
"longknife_desc": "Um ataque com faca causa danos independentemente da distância",
|
"longknife_desc": "Um ataque com faca causa danos independentemente da distância",
|
||||||
|
|
||||||
"longzeus": "Zeus Longo",
|
"longzeus": "Zeus Longo",
|
||||||
"longzeus_desc": "Zeus causa dano independentemente da distância",
|
"longzeus_desc": "Zeus causa dano independentemente da distância",
|
||||||
|
|
||||||
"magnifier": "Lupa",
|
"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_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:",
|
"magnifier_select_info": "Ampliar tela do jogador:",
|
||||||
|
|
||||||
"medic": "Médico",
|
"medic": "Médico",
|
||||||
"medic_desc": "Clique em [css_useSkill] para usar uma injeção que restaura 50 de vida",
|
"medic_desc": "Clique em [css_useSkill] para usar uma carga de cura que restaura 50 de saúde",
|
||||||
|
|
||||||
"moneyswap": "Troca de Grana",
|
"moneyswap": "Cobrador de Impostos",
|
||||||
"moneyswap_desc": "Escolha um jogador para trocar de dinheiro com ele",
|
"moneyswap_desc": "Escolha um jogador para trocar dinheiro com ele",
|
||||||
"moneyswap_enemy_info": "Você provavelmente virou classe B",
|
"moneyswap_enemy_info": "A receita federal te pegou.",
|
||||||
"moneyswap_player_info": "Você trocou dinheiro com o jogador '{0}'.",
|
"moneyswap_player_info": "Você trocou dinheiro com o jogador '{0}'.",
|
||||||
"moneyswap_select_info": "Trocar dinheiro c/ jogador:",
|
"moneyswap_select_info": "Trocar dinheiro c/ jogador:",
|
||||||
|
|
||||||
"muhammed": "Muhammed",
|
"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!!!",
|
"muhammed_explosion": "ALLAHU AKBAR!!!",
|
||||||
|
|
||||||
"ninja": "Ninja",
|
"ninja": "Ninja",
|
||||||
"ninja_desc": "Ficar parado aumenta sua invisibilidade em 33%, agachar em 33%, e segurar uma faca em 33%",
|
"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ê",
|
"nonades_desc": "Granadas não causam dano a você",
|
||||||
|
|
||||||
"norecoil": "Sem Recoil",
|
"norecoil": "Foco",
|
||||||
"norecoil_desc": "Sem recoil ao atirar",
|
"norecoil_desc": "Sem recuo ao atirar",
|
||||||
|
|
||||||
"noclip": "NoClip",
|
"noclip": "NoClip",
|
||||||
"noclip_desc": "Clique em [css_useSkill] para ativar noclip por poucos segundos",
|
"noclip_desc": "Clique em [css_useSkill] para ativar noclip por um curto período",
|
||||||
|
|
||||||
"oneshot": "Ignorante",
|
"oneshot": "Tiro Único",
|
||||||
"oneshot_desc": "Acertar um inimigo o mata instantaneamente",
|
"oneshot_desc": "Acertar um inimigo o mata instantaneamente",
|
||||||
|
|
||||||
"onlyhead": "Só na Cabeçinha",
|
"onlyhead": "Apenas Cabeça",
|
||||||
"onlyhead_desc": "Você só recebe headshot",
|
"onlyhead_desc": "Você só recebe dano na cabeça",
|
||||||
|
|
||||||
"paweljumper": "Parkourista",
|
"paweljumper": "Pawel Jumper",
|
||||||
"paweljumper_desc": "Você recebe um número aleatório de pulos extras",
|
"paweljumper_desc": "Você recebe um número aleatório de saltos extras",
|
||||||
"paweljumper_desc2": "Você ganha {0} pulos extras",
|
"paweljumper_desc2": "Você ganha {0} saltos extras",
|
||||||
|
|
||||||
"phoenix": "Fênix",
|
"phoenix": "Fênix",
|
||||||
"phoenix_desc": "Você tem uma chance aleatória de renascer após a morte",
|
"phoenix_desc": "Você tem uma chance aleatória de renascer após a morte",
|
||||||
|
|
@ -266,14 +281,14 @@
|
||||||
"phoenix_respawn": "Você foi ressuscitado das cinzas graças ao poder de: CHATCOLORS.REDPhoenix",
|
"phoenix_respawn": "Você foi ressuscitado das cinzas graças ao poder de: CHATCOLORS.REDPhoenix",
|
||||||
|
|
||||||
"psychicdefusing": "Desarme Psíquico",
|
"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",
|
"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_desc": "Voe por um tempo limitado. Segure [USE - E] para voar",
|
||||||
"pilot_hud_info": "Combustível",
|
"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.",
|
"planter_desc": "Você pode plantar a bomba em qualquer lugar, com um tempo de detonação de 60 segundos.",
|
||||||
|
|
||||||
"poison": "Veneno",
|
"poison": "Veneno",
|
||||||
|
|
@ -282,7 +297,7 @@
|
||||||
"poison_player_info": "O jogador '{0}' foi envenenado.",
|
"poison_player_info": "O jogador '{0}' foi envenenado.",
|
||||||
"poison_select_info": "Envenenar jogador:",
|
"poison_select_info": "Envenenar jogador:",
|
||||||
|
|
||||||
"primaryban": "Sem Rifle",
|
"primaryban": "Sem Rifles",
|
||||||
"primaryban_desc": "Escolha um jogador que não poderá usar rifles",
|
"primaryban_desc": "Escolha um jogador que não poderá usar rifles",
|
||||||
"primaryban_enemy_info": "Você não pode mais 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_player_info": "O jogador '{0}' não pode mais usar rifles.",
|
||||||
|
|
@ -291,89 +306,90 @@
|
||||||
"prosthesis": "Prótese",
|
"prosthesis": "Prótese",
|
||||||
"prosthesis_desc": "Braços e pernas são à prova de balas",
|
"prosthesis_desc": "Braços e pernas são à prova de balas",
|
||||||
|
|
||||||
"push": "Empurrão",
|
"push": "Empurrador",
|
||||||
"push_desc": "Você tem uma chance aleatória de empurrar um inimigo ao acertá-lo",
|
"push_desc": "Você tem uma chance aleatória de empurrar um inimigo para trás ao acertá-lo",
|
||||||
"push_desc2": "Suas chances de empurrar o inimigo são: {0}%",
|
"push_desc2": "Suas chances de repelir o inimigo são: {0}%",
|
||||||
|
|
||||||
"pyro": "Pirotecnia",
|
"pyro": "Piro",
|
||||||
"pyro_desc": "Molotov recupera vida",
|
"pyro_desc": "Molotov restaura saúde",
|
||||||
|
|
||||||
"quickshot": "Tiro Rápido",
|
"quickshot": "Tiro Rápido",
|
||||||
"quickshot_desc": "Todas as balas são disparadas extremamente rapidas",
|
"quickshot_desc": "Todas as balas são disparadas muito rapidamente",
|
||||||
|
|
||||||
"radarhack": "Hack de Mapa",
|
"radarhack": "Hack de Radar",
|
||||||
"radarhack_desc": "Inimigos são visíveis no mapa",
|
"radarhack_desc": "Inimigos são visíveis no radar",
|
||||||
|
|
||||||
"rambo": "Rambo",
|
"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": "Arma Aleatória",
|
||||||
"randomweapon_desc": "Clique em [css_useSkill] para receber uma arma aleatória",
|
"randomweapon_desc": "Clique em [css_useSkill] para receber uma arma aleatória",
|
||||||
|
|
||||||
"rezombie": "Walking Dead",
|
"rezombie": "Re-Zumbi",
|
||||||
"rezombie_desc": "Após morrer, você renasce como um zumbi com mais vida porém sem armas",
|
"rezombie_desc": "Após a morte, você renasce como um zumbi com mais saúde e sem armas",
|
||||||
|
|
||||||
"reactivearmor": "Armadura Reativa",
|
"reactivearmor": "Armadura Reativa",
|
||||||
"reactivearmor_desc": "A armadura absorve o primeiro dano recebido",
|
"reactivearmor_desc": "A armadura absorve o primeiro dano recebido",
|
||||||
|
|
||||||
"regeneration": "Regeneração",
|
"regeneration": "Regeneração",
|
||||||
"regeneration_desc": "Você restaura vida a cada poucos segundos",
|
"regeneration_desc": "Você restaura saúde a cada poucos segundos",
|
||||||
|
|
||||||
"replicator": "Clone",
|
"replicator": "Replicador",
|
||||||
"replicator_desc": "Clique em [css_useSkill] para criar um clone que causa dano ao ser atingido",
|
"replicator_desc": "Clique em [css_useSkill] para criar uma réplica que causa dano ao acertar",
|
||||||
|
|
||||||
"retreat": "De Volta as Origens",
|
"retreat": "Recuo",
|
||||||
"retreat_desc": "Clique em [css_useSkill] para retornar ao spawn",
|
"retreat_desc": "Clique em [css_useSkill] para retornar ao spawn",
|
||||||
|
|
||||||
"returntosender": "Devolução ao Remetente",
|
"returntosender": "Devolução ao Remetente",
|
||||||
"returntosender_desc": "O primeiro tiro em um inimigo o envia de volta a sua base",
|
"returntosender_desc": "O primeiro acerto em um inimigo o envia de volta ao seu spawn",
|
||||||
|
|
||||||
"richboy": "Filhinho de Papai",
|
"richboy": "Garoto Rico",
|
||||||
"richboy_desc": "Você recebe uma quantidade aleatória de dinheiro no início da rodada",
|
"richboy_desc": "Você recebe uma quantidade aleatória de dinheiro no início da rodada",
|
||||||
|
|
||||||
"robinhood": "Robin Hood",
|
"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": "Balas de Borracha",
|
||||||
"rubber_desc": "Seus tiros deixam os jogadores lentos ao serem atingidos",
|
"rubber_desc": "Suas balas retardam significativamente os jogadores",
|
||||||
|
|
||||||
"saper": "Especialista",
|
"saper": "Sapeador",
|
||||||
"saper_desc": "Você pode plantar e desarmar bombas mais rápido",
|
"saper_desc": "Você pode plantar e desarmar bombas mais rápido",
|
||||||
|
|
||||||
"secondlife": "Segunda Chance",
|
"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": "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_desc2": "Suas chances de se teletransportar para trás de um inimigo atingido são: {0}%",
|
||||||
"shade_nospace": "Sem espaço disponível",
|
"shade_nospace": "Sem espaço disponível",
|
||||||
|
|
||||||
"shortbomb": "Pavio Longo",
|
"shortbomb": "Fusível Curto",
|
||||||
"shortbomb_desc": "A bomba demora muito mais para explodir",
|
"shortbomb_desc": "A bomba explode muito mais rápido",
|
||||||
|
|
||||||
"silent": "Shhhiu!",
|
"silent": "Silencioso",
|
||||||
"silent_desc": "Seus passos e pulos são silenciosos para OUTROS jogadores",
|
"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",
|
"sniperelite_desc": "Clique em [css_useSkill] para trocar sua arma atual por uma AWP",
|
||||||
|
|
||||||
"soldier": "Soldado",
|
"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",
|
"soldier_desc2": "Seu multiplicador de dano é: {0}x",
|
||||||
|
|
||||||
"soundmaker": "Criador de Som",
|
"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": "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": "Troca de Posição",
|
||||||
"swapposition_desc": "Clique em [css_useSkill] para trocar de lugar com um inimigo aleatório",
|
"swapposition_desc": "Clique em [css_useSkill] para trocar de lugar com um inimigo aleatório",
|
||||||
|
|
||||||
"teleporter": "Teletransportador",
|
"teleporter": "Teletransportador",
|
||||||
"teleporter_desc": "Você troca de lugar com o inimigo que acertar",
|
"teleporter_desc": "Você troca de lugar com o inimigo acertado",
|
||||||
|
|
||||||
"thief": "Lula",
|
"thief": "Ladrão",
|
||||||
"thief_desc": "Você pode roubar uma habilidade de um jogador escolhido",
|
"thief_desc": "Você pode roubar uma habilidade de um jogador escolhido",
|
||||||
"thief_enemy_info": "Sua habilidade foi roubada.",
|
"thief_enemy_info": "Sua habilidade foi roubada.",
|
||||||
"thief_player_info": "A habilidade do jogador '{0}' foi roubada.",
|
"thief_player_info": "A habilidade do jogador '{0}' foi roubada.",
|
||||||
|
|
@ -381,13 +397,13 @@
|
||||||
"thief_incorrect_skill": "Esta habilidade não pode ser selecionada!",
|
"thief_incorrect_skill": "Esta habilidade não pode ser selecionada!",
|
||||||
|
|
||||||
"thirdeye": "Terceiro Olho",
|
"thirdeye": "Terceiro Olho",
|
||||||
"thirdeye_desc": "Clique em [css_useSkill] para ativar a terceira pessoa",
|
"thirdeye_desc": "Clique em [css_useSkill] para ativar a visão em terceira pessoa",
|
||||||
|
|
||||||
"thorns": "Porco Espinho",
|
"thorns": "Espinhos",
|
||||||
"thorns_desc": "Seu oponente receberá uma parte do dano que causou a você",
|
"thorns_desc": "Seu oponente receberá uma parte do dano que causou a você",
|
||||||
|
|
||||||
"toxicsmoke": "Smoke Tóxica",
|
"toxicsmoke": "Fumaça Tóxica",
|
||||||
"toxicsmoke_desc": "Suas smokes causam dano",
|
"toxicsmoke_desc": "Suas granadas de fumaça causam dano",
|
||||||
|
|
||||||
"wallhack": "Wallhack",
|
"wallhack": "Wallhack",
|
||||||
"wallhack_desc": "Você pode ver inimigos através das paredes",
|
"wallhack_desc": "Você pode ver inimigos através das paredes",
|
||||||
|
|
@ -404,9 +420,9 @@
|
||||||
"zeus": "Zeus",
|
"zeus": "Zeus",
|
||||||
"zeus_desc": "Zeus x27 recarrega instantaneamente",
|
"zeus_desc": "Zeus x27 recarrega instantaneamente",
|
||||||
|
|
||||||
"your_skill": "Sua habilidade atual",
|
"your_skill": "Seu poder atual",
|
||||||
"enemy_skill": "Habilidade do inimigo",
|
"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",
|
"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",
|
"drawing_skill": "Sorteando uma habilidade",
|
||||||
"disabled_weapon": "Você não pode usar esta arma",
|
"disabled_weapon": "Você não pode usar esta arma",
|
||||||
|
|
@ -429,7 +445,7 @@
|
||||||
"error_setskill": "Falha ao definir a habilidade CHATCOLORS.RED",
|
"error_setskill": "Falha ao definir a habilidade CHATCOLORS.RED",
|
||||||
"for_setskill": "para",
|
"for_setskill": "para",
|
||||||
|
|
||||||
"invalid_map": "Nome do mapa inválido!",
|
"invalid_map": "Nome do mapa inserido incorretamente!",
|
||||||
"loading_map": "Carregando um novo mapa",
|
"loading_map": "Carregando um novo mapa",
|
||||||
|
|
||||||
"pause": "Partida pausada.",
|
"pause": "Partida pausada.",
|
||||||
|
|
@ -448,12 +464,12 @@
|
||||||
"vote_alredy_voted": "Você já votou!",
|
"vote_alredy_voted": "Você já votou!",
|
||||||
"vote_vote": "Votar",
|
"vote_vote": "Votar",
|
||||||
|
|
||||||
"bombsite_a": "Bombsite A",
|
"bombsite_a": "Zona de detonação A",
|
||||||
"bombsite_b": "Bombsite B",
|
"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",
|
"teammate_skills": "Habilidades dos seus companheiros de equipe",
|
||||||
"summary_start": "=======RESUMO=DA=ÚLTIMA=RODADA=======",
|
"summary": "Resumo da última rodada",
|
||||||
"summary_end": "=======================================",
|
|
||||||
|
|
||||||
"menu_controlls_scroll": "W/S - Rolar",
|
"menu_controlls_scroll": "W/S - Rolar",
|
||||||
"menu_controlls_padding": " | ",
|
"menu_controlls_padding": " | ",
|
||||||
|
|
@ -55,6 +55,12 @@
|
||||||
"c4camouflage": "C4伪装",
|
"c4camouflage": "C4伪装",
|
||||||
"c4camouflage_desc": "你持有炸弹时隐形",
|
"c4camouflage_desc": "你持有炸弹时隐形",
|
||||||
|
|
||||||
|
"carefulbullets": "谨慎的子弹",
|
||||||
|
"carefulbullets_desc": "选择一名球员,每当他投篮未中时就会受到伤害",
|
||||||
|
"carefulbullets_enemy_info": "从现在起,不准确将带来切实的伤害。",
|
||||||
|
"carefulbullets_player_info": "'{0}' 现在必须更加谨慎。",
|
||||||
|
"carefulbullets_select_info": "不准确会伤害玩家:",
|
||||||
|
|
||||||
"catapult": "弹射",
|
"catapult": "弹射",
|
||||||
"catapult_desc": "你有随机几率将敌人向上弹射",
|
"catapult_desc": "你有随机几率将敌人向上弹射",
|
||||||
"catapult_desc2": "你击中敌人将其弹射的几率是:{0}%",
|
"catapult_desc2": "你击中敌人将其弹射的几率是:{0}%",
|
||||||
|
|
@ -68,6 +74,10 @@
|
||||||
"cutter": "切割者",
|
"cutter": "切割者",
|
||||||
"cutter_desc": "用刀可立即杀死敌人",
|
"cutter_desc": "用刀可立即杀死敌人",
|
||||||
|
|
||||||
|
"cypher": "相机",
|
||||||
|
"cypher_desc": "点击 [css_useSkill] 创建/切换摄像机",
|
||||||
|
"cypher_nospace": "相机必须与墙壁呈直角放置",
|
||||||
|
|
||||||
"darkness": "黑暗",
|
"darkness": "黑暗",
|
||||||
"darkness_desc": "对选定的敌人施加黑暗效果",
|
"darkness_desc": "对选定的敌人施加黑暗效果",
|
||||||
"darkness_enemy_info": "让灯光熄灭。",
|
"darkness_enemy_info": "让灯光熄灭。",
|
||||||
|
|
@ -142,6 +152,7 @@
|
||||||
"gambler_desc": "从提供的列表中选择一个技能。",
|
"gambler_desc": "从提供的列表中选择一个技能。",
|
||||||
"gambler_select_info": "选择你的技能:",
|
"gambler_select_info": "选择你的技能:",
|
||||||
"gambler_more": "#00FF00|刷新 ${0}",
|
"gambler_more": "#00FF00|刷新 ${0}",
|
||||||
|
"gambler_no_money": "钱不够。",
|
||||||
|
|
||||||
"ghost": "幽灵",
|
"ghost": "幽灵",
|
||||||
"ghost_desc": "你完全隐形",
|
"ghost_desc": "你完全隐形",
|
||||||
|
|
@ -175,6 +186,9 @@
|
||||||
"holyhandgrenade": "神圣手榴弹",
|
"holyhandgrenade": "神圣手榴弹",
|
||||||
"holyhandgrenade_desc": "你的高爆手榴弹造成双倍伤害并拥有双倍范围",
|
"holyhandgrenade_desc": "你的高爆手榴弹造成双倍伤害并拥有双倍范围",
|
||||||
|
|
||||||
|
"iana": "全息图",
|
||||||
|
"iana_desc": "点击 [css_useSkill] 可控制你的全息影像数秒",
|
||||||
|
|
||||||
"impostor": "冒名顶替者",
|
"impostor": "冒名顶替者",
|
||||||
"impostor_desc": "回合开始时你获得敌方玩家模型",
|
"impostor_desc": "回合开始时你获得敌方玩家模型",
|
||||||
|
|
||||||
|
|
@ -356,6 +370,7 @@
|
||||||
"silent_desc": "你的脚步和跳跃对其他玩家无声",
|
"silent_desc": "你的脚步和跳跃对其他玩家无声",
|
||||||
|
|
||||||
"sniperelite": "狙击精英",
|
"sniperelite": "狙击精英",
|
||||||
|
"sniperelite_customname": "狙击精英技能",
|
||||||
"sniperelite_desc": "点击 [css_useSkill] 将当前武器替换为AWP",
|
"sniperelite_desc": "点击 [css_useSkill] 将当前武器替换为AWP",
|
||||||
|
|
||||||
"soldier": "士兵",
|
"soldier": "士兵",
|
||||||
|
|
@ -451,10 +466,10 @@
|
||||||
|
|
||||||
"bombsite_a": "爆轰区A",
|
"bombsite_a": "爆轰区A",
|
||||||
"bombsite_b": "爆轰区B",
|
"bombsite_b": "爆轰区B",
|
||||||
|
"bombplanted": "炸弹已安装完毕{0}秒后引爆",
|
||||||
|
|
||||||
"teammate_skills": "你队友的技能",
|
"teammate_skills": "你队友的技能",
|
||||||
"summary_start": "=============上一回合总结==============",
|
"summary": "上一回合总结",
|
||||||
"summary_end": "=======================================",
|
|
||||||
|
|
||||||
"menu_controlls_scroll": "W/S - 滚动",
|
"menu_controlls_scroll": "W/S - 滚动",
|
||||||
"menu_controlls_padding": " | ",
|
"menu_controlls_padding": " | ",
|
||||||
Binary file not shown.
207
readme.md
207
readme.md
|
|
@ -28,6 +28,7 @@ jRandomSkills is a plugin for CounterStrike 2 that brings chaos and fun to gamep
|
||||||
- **Polish**
|
- **Polish**
|
||||||
- **French** [by: [@felyjyn](https://github.com/felyjyn)]
|
- **French** [by: [@felyjyn](https://github.com/felyjyn)]
|
||||||
- **Portuguese (Brazilian)** [by: [@vinicius-trev](https://github.com/vinicius-trev)]
|
- **Portuguese (Brazilian)** [by: [@vinicius-trev](https://github.com/vinicius-trev)]
|
||||||
|
- **German** [by: [@Enrory](https://github.com/Enrory)]
|
||||||
- **Simplified Chinese** [GrokAI / ChatGPT]
|
- **Simplified Chinese** [GrokAI / ChatGPT]
|
||||||
|
|
||||||
## 🖼️ Preview
|
## 🖼️ 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).
|
Buying a server on pukawka? Use my [referral code](https://pukawka.pl/pp,juzlus.html).
|
||||||
|
|
||||||
|
|
||||||
## ✨ Current Skills (109)
|
## ✨ Current Skills (111)
|
||||||
<details>
|
<details>
|
||||||
<summary>The table below lists all available skills in the game, along with their descriptions.</summary>
|
<summary>The table below lists all available skills in the game, along with their descriptions.</summary>
|
||||||
|
|
||||||
|
|
@ -197,22 +198,22 @@ Buying a server on pukawka? Use my [referral code](https://pukawka.pl/pp,juzlus.
|
||||||
|
|
||||||
| Command | Example | Description | Permissions |
|
| Command | Example | Description | Permissions |
|
||||||
| - | - | - | - |
|
| - | - | - | - |
|
||||||
| `!setskill <playerName/steamID> <skill>` | `!setskill Juzlus Aimbot` | Giving skill to a player | `@jRandmosSkills/admin` |
|
| `!setskill <playerName/steamID> <skill>` | `!setskill Juzlus Aimbot` | Giving skill to a player | `@jRandomSkills/admin` |
|
||||||
| `!lang <IsoCode>` | `!lang en` | Change the language | - |
|
| `!lang <IsoCode>` | `!lang en` | Change the language | - |
|
||||||
| `!skills` | `!skills` | List of skills | - |
|
| `!skills` | `!skills` | List of skills | - |
|
||||||
| `!map <mapName>` | `!map de_nuke` | Change map | `@jRandmosSkills/admin` |
|
| `!map <mapName>` | `!map de_nuke` | Change map | `@jRandomSkills/admin` |
|
||||||
| `!map <mapWorkshopId>` | `!map 3332005394` | Change map from workshop | `@jRandmosSkills/admin` |
|
| `!map <mapWorkshopId>` | `!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` | `@jRandmosSkills/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` | `@jRandmosSkills/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 <command>` | `!console sv_cheats 1` | Run a command on the server | `@jRandmosSkills/owner` |
|
| `!console <command>` | `!console sv_cheats 1` | Run a command on the server | `@jRandomSkills/owner` |
|
||||||
| `!swap` | `!swap` | Switch sides | `@jRandmosSkills/admin` |
|
| `!swap` | `!swap` | Switch sides | `@jRandomSkills/admin` |
|
||||||
| `!shuffle` | `!shuffle` | Randomly assign players to teams | `@jRandmosSkills/admin` |
|
| `!shuffle` | `!shuffle` | Randomly assign players to teams | `@jRandomSkills/admin` |
|
||||||
| `!pause` | `!pause` | Pause the game | `@jRandmosSkills/admin` |
|
| `!pause` | `!pause` | Pause the game | `@jRandomSkills/admin` |
|
||||||
| `!heal` | `!heal` | Restore 100 health points | `@jRandmosSkills/admin` |
|
| `!heal` | `!heal` | Restore 100 health points | `@jRandomSkills/admin` |
|
||||||
| `!hud` | `!hud` | Enable/Disable hud | - |
|
| `!hud` | `!hud` | Enable/Disable hud | - |
|
||||||
| `!setscore <CT> <TT>` | `!setscore 10 7` | Set the game score | `@jRandmosSkills/owner` |
|
| `!setscore <CT> <TT>` | `!setscore 10 7` | Set the game score | `@jRandomSkills/owner` |
|
||||||
| `!setstaticskill <playerName/steamID> <skill>` | `!setstaticskill Juzlus Aimbot` | Giving a player a permanent skill | `@jRandmosSkills/admin` |
|
| `!setstaticskill <playerName/steamID> <skill>` | `!setstaticskill Juzlus Aimbot` | Giving a player a permanent skill | `@jRandomSkills/admin` |
|
||||||
| `!setstaticskill <playerName/steamID> None` | `!setstaticskill Juzlus None` | Back to normal | `@jRandmosSkills/admin` |
|
| `!setstaticskill <playerName/steamID> None` | `!setstaticskill Juzlus None` | Back to normal | `@jRandomSkills/admin` |
|
||||||
| `!reload` | `!reload` | Reload translations | - |
|
| `!reload` | `!reload` | Reload translations | - |
|
||||||
|
|
||||||
_Most commands require permissions, which must be set in the file: `game/csgo/addons/counterstrikesharp/configs/admins.json`_
|
_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": {
|
"Juzlus": {
|
||||||
"identity": "STEAM_0:0:94913632",
|
"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
|
// 1 - Same skills for the whole team
|
||||||
// 2 - Same skills for all players
|
// 2 - Same skills for all players
|
||||||
// 3 - Random skills for each player (It can't be the same until the map changes)
|
// 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
|
"KillerSkillInfo": true, // Show killer's skill in chat
|
||||||
"TeamMateSkillInfo": true, // Show allies' skills in chat
|
"TeamMateSkillInfo": true, // Show allies' skills in chat
|
||||||
"SummaryAfterTheRound": true, // Show summary of the last round
|
"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:
|
"AlternativeSkillButton": null, // Possible buttons:
|
||||||
// null, "Attack", "Jump", "Duck", "Forward", "Back",
|
// null, "Attack", "Jump", "Duck", "Forward", "Back",
|
||||||
// "Use", "Cancel", "Left", "Right", "Moveleft",
|
// "Use", "Cancel", "Left", "Right", "Moveleft",
|
||||||
|
|
@ -259,18 +262,21 @@ All skills can be customized in the **`config.cfg`** / **`skillsInfo.json`** fil
|
||||||
// "Attack3", "Scoreboard", "Inspect"
|
// "Attack3", "Scoreboard", "Inspect"
|
||||||
"SkillTimeBeforeStart": 7.0, // How many seconds before freeze time ends should skills
|
"SkillTimeBeforeStart": 7.0, // How many seconds before freeze time ends should skills
|
||||||
// drawing be completed? (freezetime - SkillTimeBeforeStart)
|
// 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)
|
"DisplayAlwaysDescription":false,// Always display skill description (SkillDescriptionDuration = 9999)
|
||||||
"DisableSpectateHUD": false, // Disable HTML HUD when spectating
|
"DisableSpectateHUD": false, // Disable HTML HUD when spectating
|
||||||
"FlashingHtmlHudFix": true, // Enable FlashingHtmlHudFix
|
"FlashingHtmlHudFix": true, // Enable FlashingHtmlHudFix
|
||||||
"CS2TraceRayDebug": false, // Enable trail visibility for 'Long Knife', 'Long Zeus'
|
"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)
|
"DisableSkillsOnRoundEnd": false,// Disable all skills at the end of the round (when the summary is visible)
|
||||||
|
|
||||||
"LanguageSystem": {
|
"LanguageSystem": {
|
||||||
"DefaultLangCode": "en", // Default language: en, pl, fr, pt-br, zh
|
"DefaultLangCode": "en", // Default language: en, pl, fr, pt-br, zh
|
||||||
"DisableGeoLite": false, // Disable player language search by geolocation GeoLite2 (MaxMind)
|
"DisableGeoLite": false, // Disable player language search by geolocation GeoLite2 (MaxMind)
|
||||||
"LanguageInfos": [...] // Setting to change ISO languages to translations
|
"LanguageInfos": [...] // Setting to change ISO languages to translations
|
||||||
},
|
},
|
||||||
|
|
||||||
"HtmlHudCustomisation": { // Settings for changing colours and font sizes
|
"HtmlHudCustomisation": { // Settings for changing colours and font sizes
|
||||||
... // xxxl: 64px, xxl: 40px, xl: 32px
|
... // xxxl: 64px, xxl: 40px, xl: 32px
|
||||||
} // l: 24px, ml: 20px, m: 18px
|
} // 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:
|
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
|
- [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
|
- [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
|
## 📋 Changelog
|
||||||
|
|
||||||
|
<summary><b>v1.10.0</b></summary>
|
||||||
|
|
||||||
|
- #### General:
|
||||||
|
</details>
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary><b>v1.1.9 BETA</b></summary>
|
<summary><b>v1.1.9f</b></summary>
|
||||||
|
|
||||||
|
- #### 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.
|
||||||
|
</details>
|
||||||
|
|
||||||
|
<details>
|
||||||
|
<summary><b>v1.1.9e</b></summary>
|
||||||
|
|
||||||
|
- #### General:
|
||||||
|
- ###### Improved display of text frame / content.
|
||||||
|
- ###### Added customisation options for chat message appearance.
|
||||||
|
</details>
|
||||||
|
|
||||||
|
<details>
|
||||||
|
<summary><b>v1.1.9d</b></summary>
|
||||||
|
|
||||||
|
- #### 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).
|
||||||
|
</details>
|
||||||
|
|
||||||
|
<details>
|
||||||
|
<summary><b>v1.1.9c</b></summary>
|
||||||
|
|
||||||
|
- #### 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.
|
||||||
|
</details>
|
||||||
|
|
||||||
|
<details>
|
||||||
|
<summary><b>v1.1.9b</b></summary>
|
||||||
|
|
||||||
|
- #### 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).
|
||||||
|
</details>
|
||||||
|
|
||||||
|
<details>
|
||||||
|
<summary><b>v1.1.9a</b></summary>
|
||||||
|
|
||||||
- #### General:
|
- #### General:
|
||||||
- ###### Update the dependency to the latest version.
|
- ###### Update the dependency to the latest version.
|
||||||
|
|
@ -345,7 +508,7 @@ This plugin uses content from the following projects:
|
||||||
- #### General:
|
- #### General:
|
||||||
- ###### Added `DisableHUDOnDeathPermission` options to the config, to disable the HUD after death for players with this specific permission.
|
- ###### 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).
|
- ###### 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).
|
- ###### 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.
|
- ###### Disabling first skill if two skills are drawn during the first round.
|
||||||
- ###### The `!reload` command also refreshes the skill activity status.
|
- ###### The `!reload` command also refreshes the skill activity status.
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue