diff --git a/jRandomSkills - SRC Files/jRandomSkills.csproj b/jRandomSkills - SRC Files/jRandomSkills.csproj index e853387..1a56194 100644 --- a/jRandomSkills - SRC Files/jRandomSkills.csproj +++ b/jRandomSkills - SRC Files/jRandomSkills.csproj @@ -19,10 +19,16 @@ - + + + + @@ -31,10 +37,6 @@ - - - - @@ -76,10 +78,11 @@ - - + + diff --git a/jRandomSkills - SRC Files/panorama/layout/custom_game/jrs_menu.xml b/jRandomSkills - SRC Files/panorama/layout/custom_game/jrs_menu.xml new file mode 100644 index 0000000..dd4aafd --- /dev/null +++ b/jRandomSkills - SRC Files/panorama/layout/custom_game/jrs_menu.xml @@ -0,0 +1,42 @@ + + + + + + + + + + diff --git a/jRandomSkills - SRC Files/panorama/layout/custom_game/skill_hud.xml b/jRandomSkills - SRC Files/panorama/layout/custom_game/skill_hud.xml new file mode 100644 index 0000000..264f93b --- /dev/null +++ b/jRandomSkills - SRC Files/panorama/layout/custom_game/skill_hud.xml @@ -0,0 +1,31 @@ + + + + + + + + + + + diff --git a/jRandomSkills - SRC Files/panorama/styles/custom_game/jrs_menu.css b/jRandomSkills - SRC Files/panorama/styles/custom_game/jrs_menu.css new file mode 100644 index 0000000..b6cf1fd --- /dev/null +++ b/jRandomSkills - SRC Files/panorama/styles/custom_game/jrs_menu.css @@ -0,0 +1,109 @@ +/* + jRandomSkills - styling for jrs_menu.xml. Same geometry as PanoramaHudDemo's skill_menu.css + (already tuned in-game), plus rarity colors for the skill name and a "special" row style for + the colored extra option some skills append (WASDMenuAPI's "#rrggbb|text" prefix). +*/ + +.jrsmenu-viewport { + width: 100%; + height: 100%; +} + +.jrsmenu-root { + width: 100%; + height: 100%; + flow-children: down; + horizontal-align: center; + vertical-align: center; +} + +.hidden { + visibility: collapse; +} + +.jrsmenu-scrim { + width: 100%; + height: 100%; + background-color: #00000000; + z-index: -1; + /* First child of a flow-children container - without this it eats the whole flow. */ + ignore-parent-flow: true; +} + +.jrsmenu-card { + width: 300px; + flow-children: down; + horizontal-align: center; + vertical-align: center; + margin-top: 595px; + background-color: #14161bf0; + border: 2px solid #3a3a3aff; + border-radius: 6px; + padding: 14px; +} + +.jrsmenu-skill { + width: 100%; + font-size: 20px; + font-weight: bold; + color: #c9a0ffff; + horizontal-align: center; + text-align: center; + margin-bottom: 6px; +} + +.jrsmenu-skill.rarity-common { color: #9aa2acff; } +.jrsmenu-skill.rarity-uncommon { color: #4caf6dff; } +.jrsmenu-skill.rarity-rare { color: #4a90d9ff; } +.jrsmenu-skill.rarity-epic { color: #9b6cd6ff; } +.jrsmenu-skill.rarity-legendary { color: #f0a531ff; } + +.jrsmenu-subtitle { + width: 100%; + font-size: 13px; + color: #9aa2acff; + white-space: normal; + horizontal-align: center; + text-align: center; + margin-bottom: 6px; +} + +.jrsmenu-subtitle.empty { + visibility: collapse; +} + +.jrsmenu-rows { + width: 100%; + flow-children: down; + margin-bottom: 6px; +} + +.jrsmenu-row { + width: 100%; + font-size: 14px; + color: #d0d3d8ff; + horizontal-align: center; + text-align: center; + padding: 0px; + white-space: nowrap; + text-overflow: shrink min( 11px ) ellipsis; +} + +.jrsmenu-row.special { + color: #f0a531ff; +} + +/* Listed after .special so the highlight wins on the selected row. */ +.jrsmenu-row.selected { + color: #45e0c8ff; + font-weight: bold; +} + +.jrsmenu-hint { + width: 100%; + font-size: 11px; + color: #6b7480ff; + text-transform: uppercase; + horizontal-align: center; + text-align: center; +} diff --git a/jRandomSkills - SRC Files/panorama/styles/custom_game/skill_hud.css b/jRandomSkills - SRC Files/panorama/styles/custom_game/skill_hud.css new file mode 100644 index 0000000..f81aa6f --- /dev/null +++ b/jRandomSkills - SRC Files/panorama/styles/custom_game/skill_hud.css @@ -0,0 +1,79 @@ +/* + jRandomSkills - styling for skill_hud.xml (stage 1 of the Panorama HUD replacement). + + Panorama CSS, not web CSS - see CustomHudDemo/PanoramaHudDemo's own panel_demo.css for the + general traps (visibility:collapse not display:none, #rrggbbaa colors, silent unknown-property + drops, horizontal-align/vertical-align needing to be set on both the flow parent AND the flowed + child - not just the parent). +*/ + +.skillhud-viewport { + width: 100%; + height: 100%; +} + +.skillhud-root { + width: 100%; + height: 100%; + flow-children: down; + horizontal-align: center; + vertical-align: bottom; +} + +.hidden { + visibility: collapse; +} + +.skillhud-card { + width: 320px; + flow-children: down; + horizontal-align: center; + /* Bottom-anchored on both the root and the card (align needs setting on both ends of a flow): + the bottom edge stays 125px up and extra lines grow the card upwards. */ + vertical-align: bottom; + margin-bottom: 125px; + background-color: #14161bd0; + border: 1px solid #3a3a3aff; + border-radius: 4px; + padding: 6px 16px 8px 16px; +} + +.skillhud-skill { + width: 100%; + font-size: 20px; + font-weight: bold; + horizontal-align: center; + text-align: center; +} + +/* Real per-skill hex colors (skillsInfo.json) can't be sent from the server - only a class toggle + can. These 5 stand in for them, picked by PlayerEvents.cs from the skill's own Rarity. Same + palette already used elsewhere in this repo's Panorama work (admin_hud.css's accent-* classes), + not invented fresh here. */ +.skillhud-skill.rarity-common { color: #9aa2acff; } +.skillhud-skill.rarity-uncommon { color: #4caf6dff; } +.skillhud-skill.rarity-rare { color: #4a90d9ff; } +.skillhud-skill.rarity-epic { color: #9b6cd6ff; } +.skillhud-skill.rarity-legendary { color: #f0a531ff; } + +.skillhud-extra { + width: 100%; + font-size: 13px; + color: #9aa2acff; + white-space: normal; + horizontal-align: center; + text-align: center; + margin-top: 4px; +} + +/* A skill's own status line (cooldown, fuel, countdown) rather than its description. */ +.skillhud-extra.info { + font-size: 13px; + color: #f0f2f5ff; +} + +/* Blank extra line collapses rather than leaving a gap - most skills without a description + visible right now (showDescriptionHUD false) would otherwise leave an empty row. */ +.skillhud-extra.empty { + visibility: collapse; +} diff --git a/jRandomSkills - SRC Files/src/command/Command.cs b/jRandomSkills - SRC Files/src/command/Command.cs index 65278fc..7f39b20 100644 --- a/jRandomSkills - SRC Files/src/command/Command.cs +++ b/jRandomSkills - SRC Files/src/command/Command.cs @@ -37,6 +37,7 @@ namespace src.command var commands = new Dictionary, (string description, CommandInfo.CommandCallback handler)> { { SplitCommands(config.NormalCommands.SetSkillCommand.Alias), ("Set skill", Command_SetSkill) }, + { SplitCommands(config.NormalCommands.SetOverrideCommand.Alias), ("Toggle cooldown bypass", Command_SetOverride) }, { SplitCommands(config.NormalCommands.SkillsListCommand.Alias), ("Delete all records", Command_SkillsListMenu) }, { SplitCommands(config.NormalCommands.UseSkillCommand.Alias), ("Use/Type skill", Command_UseTypeSkill) }, { SplitCommands(config.NormalCommands.ConsoleCommand.Alias), ("Console command", Command_CustomCommand) }, @@ -101,6 +102,38 @@ namespace src.command } [CommandHelper(minArgs: 0, whoCanExecute: CommandUsage.CLIENT_AND_SERVER)] + private static void Command_SetOverride(CCSPlayerController? player, CommandInfo command) + { + Debug.WriteToDebug($"Player {player?.PlayerName} used the css_setoverride {command.ArgString} command."); + if (!string.IsNullOrEmpty(config.NormalCommands.SetOverrideCommand.Permissions) && !AdminManager.PlayerHasPermissions(player, config.NormalCommands.SetOverrideCommand.Permissions)) return; + + void Reply(string message) + { + if (player == null) Server.PrintToConsole(message); + else SkillUtils.PrintToChat(player, message); + } + + if (command.ArgCount < 2) + { + Reply("Usage: css_setoverride "); + return; + } + + var targetPlayer = Utilities.GetPlayers().FirstOrDefault(p => p != null && p.IsValid + && (p.SteamID.ToString().Equals(command.GetArg(1), StringComparison.CurrentCultureIgnoreCase) + || p.PlayerName.Equals(command.GetArg(1), StringComparison.OrdinalIgnoreCase))); + if (targetPlayer == null) + { + Reply(player == null + ? Localization.GetTranslationWithoutIlliterate("player_not_found_setskill") + : player.GetTranslationWithoutIlliterate("player_not_found_setskill")); + return; + } + + bool enabled = CooldownOverride.Toggle(targetPlayer); + Reply($"Cooldown override {(enabled ? $"{ChatColors.Lime}ON" : $"{ChatColors.LightRed}OFF")}{ChatColors.Default} for {ChatColors.LightRed}\u202A{targetPlayer.PlayerName}\u202C"); + } + private static void Command_SetSkill(CCSPlayerController? player, CommandInfo command) { Debug.WriteToDebug($"Player {player?.PlayerName} used the css_setskill {command.ArgString} command."); diff --git a/jRandomSkills - SRC Files/src/jRandomSkills.cs b/jRandomSkills - SRC Files/src/jRandomSkills.cs index bc39f3a..3e21b2b 100644 --- a/jRandomSkills - SRC Files/src/jRandomSkills.cs +++ b/jRandomSkills - SRC Files/src/jRandomSkills.cs @@ -3,13 +3,13 @@ using CounterStrikeSharp.API.Core; using CounterStrikeSharp.API.Core.Commands; using CounterStrikeSharp.API.Modules.Commands; using CounterStrikeSharp.API.Modules.Utils; +using PanoramaManager; using src.command; using src.player; using src.utils; using System.Collections.Concurrent; using System.Reflection; using System.Text.Json; -using WASDSharedAPI; using static CounterStrikeSharp.API.Core.Listeners; namespace src @@ -22,8 +22,21 @@ namespace src public IEnumerable SkillPlayer => PlayerManager.GetAllPlayers(); public Random Random => Random.Shared; public CCSGameRules? GameRules { get; set; } + // The entity backing GameRules above. SetStateChanged needs the entity itself, + // not the GameRules subobject, so this is kept alongside it. + public CCSGameRulesProxy? GameRulesProxy { get; set; } private ConcurrentBag ManifestResources { get; set; } = ["models/sprays/spray_plane.vmdl"]; - public IWasdMenuManager? MenuManager; + // Stage 1 of the Panorama HUD replacement (see PlayerEvents.cs's UpdateSkillHUD and + // CLAUDE.md's "Panorama HUD" section) - drives skill_hud.xml for skills that don't set a + // custom PrintHTML override. Own LayoutContract, not LayoutContract.Default: PanoramaManager + // warns two layouts sharing a root id silently share dialog variables across plugins. + public static readonly LayoutContract SkillHudContract = new() + { + RootPanelId = "SkillHudRoot", + RowCount = 0, + CaptureInput = false, + }; + public PanelHandle? SkillHud; // Skills that were enabled at least once this round; used to reset only those on round change (not all 124). public static readonly ConcurrentDictionary ActiveSkillsThisRound = new(); public static readonly ConcurrentDictionary SkillsUsedThisMap = new(); @@ -44,10 +57,13 @@ namespace src PlayerOnTick.Load(); Event.Load(); Command.Load(); - WASDMenuAPI.WASDMenuAPI.LoadPlugin(Instance, hotReload); LoadAllSkills(); PlayerManager.SyncWithPlugin(Instance); + Panorama.Init(this); + SkillHud = Panorama.Spawn("panorama/layout/custom_game/skill_hud.vxml_c", SkillHudContract); + PanoramaMenu.Load(this); + Instance.RegisterListener(LoadManifest); Task.Run(async () => @@ -65,6 +81,10 @@ namespace src Event.Unload(); Debug.Unload(); + SkillHud?.Dispose(); + PanoramaMenu.Unload(); + Panorama.Shutdown(); + base.Unload(hotReload); } @@ -160,6 +180,10 @@ namespace src if (method == null) return null; + if (methodName == "UseSkill" && param?.Length > 0 && param[0] is CCSPlayerController user + && user.IsValid && CooldownOverride.Has(user)) + CooldownOverride.ResetBeforeUse(method.DeclaringType!, user); + if (!PerfLog.Enabled) return method.Invoke(null, param); @@ -277,7 +301,6 @@ namespace src Console.WriteLine($"\nDependences:"); var files = new Dictionary { { "Newtonsoft Json", "./Newtonsoft.Json.dll" }, - { "WASDMenuAPI", "./WASDMenuAPI.dll" }, { "MaxMind", "./MaxMind.Db.dll" }, { "GeoLite2", "./packages/GeoLite2-Country.mmdb" }, { "RayTraceApi", "./../../shared/RayTraceApi/RayTraceApi.dll" }, @@ -385,6 +408,23 @@ namespace src public string? Content; } + // Change-detection so SetVariableFor/SetClassFor are only called when something actually + // changed, same principle as HudCacheEntry above (its cache.Content re-send is the same idea, + // just at a coarser granularity since PrintToCenterHtml takes one blob, not per-field writes). + // TouchedThisTick is reset and checked once per HUD frame in PlayerOnTick.cs - it's what closes + // the panel for a player who stopped being updated (warmup started, menu opened, HUD + // suppressed, ...) instead of it silently showing stale content forever, which a Panorama panel + // would otherwise do - PrintToCenterHtml expires on its own after a few seconds; this doesn't. + public sealed class PanoramaHudCache + { + public bool Open; + public bool TouchedThisTick; + public string? Skill; + public string? Extra; + public string? RarityClass; + public bool? IsInfo; + } + public class jSkill_SkillInfo(Skills skill, string color, bool display) { public Skills Skill { get; } = skill; diff --git a/jRandomSkills - SRC Files/src/lang/de.json b/jRandomSkills - SRC Files/src/lang/de.json index d72dadf..242cf18 100644 --- a/jRandomSkills - SRC Files/src/lang/de.json +++ b/jRandomSkills - SRC Files/src/lang/de.json @@ -6,7 +6,7 @@ "aimbot_desc": "Jede Kugel, die du triffst, zählt als Kopfschuss", "aimlock": "Aim-Lock", - "aimlock_desc": "Klicke [css_useSkill], um dein Visier auf den nächsten Gegner zu fixieren", + "aimlock_desc": "Drücke [css_useSkill], um dein Visier auf den nächsten Gegner zu fixieren", "anomaly": "Anomalie", "anomaly_desc": "Drücke [css_useSkill], um einige Sekunden in der Zeit zurückzuspringen", @@ -99,7 +99,7 @@ "cutter_desc": "Sofortiger Tod mit einem Messer", "cypher": "Kamera", - "cypher_desc": "Klicken Sie auf [css_useSkill], um eine Kamera zu erstellen/zu wechseln", + "cypher_desc": "Drücken Sie [css_useSkill], um eine Kamera zu erstellen/zu wechseln", "cypher_nospace": "Die Kamera muss im rechten Winkel zur Wand positioniert werden", "darkness": "Dunkelheit", @@ -156,7 +156,7 @@ "empgrenade_enemy_info": "Eine EMP-Granate hat dein Radar und Fadenkreuz lahmgelegt.", "enemyspawn": "Feindes-Spawn", - "enemyspawn_desc": "Klicke auf [css_useSkill], um zum Feindes-Spawn zu teleportieren", + "enemyspawn_desc": "Drücke [css_useSkill], um zum Feindes-Spawn zu teleportieren", "expensiveammo": "Teure Munition", "expensiveammo_desc": "Ein ausgewählter Gegner muss für jeden Schuss bezahlen", @@ -166,17 +166,17 @@ "expensiveammo_select_info": "Wähle einen Spieler, dessen Munition teuer wird:", "explodingbarrel": "Explosives Fass", - "explodingbarrel_desc": "Klicke auf [css_useSkill], um ein Fass zu platzieren, das beim Beschuss explodiert", + "explodingbarrel_desc": "Drücke [css_useSkill], um ein Fass zu platzieren, das beim Beschuss explodiert", "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", + "falconeye_desc": "Drücke [css_useSkill], um eine Vogelperspektive zu aktivieren", "fastreload": "Schnellnachladen", - "fastreload_desc": "Klicke auf [css_useSkill], um die Waffe, die du gerade hältst, nachzuladen", + "fastreload_desc": "Drücke [css_useSkill], um die Waffe, die du gerade hältst, nachzuladen", "firerain": "Feuerregen", "firerain_desc": "Wirf einen Köder, um einen Regen aus Molotows auszulösen", @@ -186,10 +186,10 @@ "flash_desc2": "Dein Geschwindigkeitsmultiplikator beträgt: {0}x", "flashlight": "Taschenlampe", - "flashlight_desc": "Klicke auf [css_useSkill], um die Taschenlampe ein- oder auszuschalten. Ihr Licht kann Gegner blenden", + "flashlight_desc": "Drücke [css_useSkill], um die Taschenlampe ein- oder auszuschalten. Ihr Licht kann Gegner blenden", "fortnite": "Fortnite", - "fortnite_desc": "Klicke auf [css_useSkill], um eine zerstörbare Barrikade zu erstellen", + "fortnite_desc": "Drücke [css_useSkill], um eine zerstörbare Barrikade zu erstellen", "fragilebomb": "Fragile Bombe", "fragilebomb_desc": "Das Schießen auf die Bombe beschädigt sie", @@ -232,7 +232,7 @@ "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_desc": "Drücke [css_useSkill], um für kurze Zeit unsterblich zu werden", "godmode_off": "Unsterblichkeit deaktiviert", "godmode_on": "Unsterblichkeit aktiviert", @@ -271,14 +271,14 @@ "hotbomb_disable_info": "Die Bombe ist nicht mehr heiß.", "iana": "Hologramm", - "iana_desc": "Klicken Sie auf [css_useSkill], um Ihr Hologramm für einige Sekunden zu steuern", + "iana_desc": "Drücken Sie [css_useSkill], um Ihr Hologramm für einige Sekunden zu steuern", "illiterate": "Analphabet", "illiterate_desc": "Solange du am Leben bist, können deine Feinde nichts lesen", "illiterate_alert": "Analphabet ist aktiv! Du kannst keine Nachrichten lesen, bis der Besitzer dieser Fähigkeit eliminiert ist", "illusionist": "Illusionist", - "illusionist_desc": "Klicke [css_useSkill], um ein Abbild zu schicken, das geradeaus läuft", + "illusionist_desc": "Drücke [css_useSkill], um ein Abbild zu schicken, das geradeaus läuft", "impostor": "Betrüger", "impostor_desc": "Du beginnst die Runde mit einem feindlichen Spielermodell", @@ -366,7 +366,7 @@ "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", + "medic_desc": "Drücke [css_useSkill], um eine Heilungsladung zu verwenden, die 50 Gesundheitspunkte wiederherstellt", "miner": "Bomben-Miner", "miner_desc": "Deine HE-Granate explodiert nur, wenn ein Gegner in der Nähe ist", @@ -400,7 +400,7 @@ "norecoil_desc": "Kein Rückstoß beim Schießen", "noclip": "NoClip", - "noclip_desc": "Klicke auf [css_useSkill], um NoClip für kurze Zeit zu aktivieren", + "noclip_desc": "Drücke [css_useSkill], um NoClip für kurze Zeit zu aktivieren", "oneshot": "One-Shot", "oneshot_desc": "Ein Treffer tötet einen Gegner sofort", @@ -467,7 +467,7 @@ "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", + "randomweapon_desc": "Drücke [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", @@ -479,10 +479,10 @@ "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", + "replicator_desc": "Drücke [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", + "retreat_desc": "Drücke [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", @@ -525,7 +525,7 @@ "sniperelite": "Sniper Elite", "sniperelite_customname": "Sniper-Elite-Skill", - "sniperelite_desc": "Klicke auf [css_useSkill], um deine aktuelle Waffe gegen eine AWP auszutauschen", + "sniperelite_desc": "Drücke [css_useSkill], um deine aktuelle Waffe gegen eine AWP auszutauschen", "soldier": "Soldat", "soldier_desc": "Du hast einen zufälligen Schadensmultiplikator", @@ -535,13 +535,13 @@ "soundmaker_desc": "Von Zeit zu Zeit hörst du die Schreie von Spielern", "spectator": "Zuschauer", - "spectator_desc": "Klicke auf [css_useSkill], um einen zufälligen Gegner zu beobachten", + "spectator_desc": "Drücke [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", + "swapposition_desc": "Drücke [css_useSkill], um mit einem zufälligen Gegner die Plätze zu tauschen", "takeammo": "Munition nehmen", - "takeammo_desc": "Klicke auf [css_useSkill], um das Magazin der aktiven Waffe eines zufälligen Gegners zu nehmen", + "takeammo_desc": "Drücke [css_useSkill], um das Magazin der aktiven Waffe eines zufälligen Gegners zu nehmen", "takeammo_hud_info1": "Kein Spieler mit einem aktiven Magazin gefunden.", "takeammo_hud_info2": "Der Gegner hat keine Magazine.", "takeammo_enemy_info": "Du hast etwas Munition verloren.", @@ -563,19 +563,19 @@ "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", + "thirdeye_desc": "Drücke [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", "throwingknife": "Wurfmesser", - "throwingknife_desc": "Klicke [css_useSkill], um ein Messer zu werfen. Aber nimm dich vor anderen in Acht", + "throwingknife_desc": "Drücke [css_useSkill], um ein Messer zu werfen. Aber nimm dich vor anderen in Acht", "toxicsmoke": "Giftiger Rauch", "toxicsmoke_desc": "Deine Rauchgranaten verursachen Schaden", "tripwire": "Stolperdraht", - "tripwire_desc": "Klicke auf [css_useSkill], um einen Draht zwischen zwei Wänden zu spannen. Gegner, die ihn berühren, werden auf deinem Radar angezeigt", + "tripwire_desc": "Drücke [css_useSkill], um einen Draht zwischen zwei Wänden zu spannen. Gegner, die ihn berühren, werden auf deinem Radar angezeigt", "tripwire_no_wall_info": "Auf beiden Seiten sind keine Wände nah genug.", "tripwire_placed_info": "Stolperdraht platziert.", "tripwire_triggered_info": "'{0}' hat deinen Stolperdraht ausgelöst.", @@ -597,7 +597,7 @@ "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_desc": "Drücke [css_useSkill], um mit einem zufälligen Gegner die Waffen zu tauschen", "weaponsswap_hud_info2": "Du hast keine Waffe zum Tauschen", "weightless": "Schwerelosigkeit", diff --git a/jRandomSkills - SRC Files/src/lang/en.json b/jRandomSkills - SRC Files/src/lang/en.json index 4175258..7ab81f0 100644 --- a/jRandomSkills - SRC Files/src/lang/en.json +++ b/jRandomSkills - SRC Files/src/lang/en.json @@ -6,10 +6,10 @@ "aimbot_desc": "Every bullet you hit counts as a headshot", "aimlock": "Aim Lock", - "aimlock_desc": "Click [css_useSkill] to lock your aim on the nearest enemy", + "aimlock_desc": "Press [css_useSkill] key to lock your aim on the nearest enemy", "anomaly": "Anomaly", - "anomaly_desc": "Click [css_useSkill] to rewind a few seconds back in time", + "anomaly_desc": "Press [css_useSkill] key to rewind a few seconds back in time", "antyflash": "Anti-Flash", "antyflash_desc": "You are immune to flashbangs, and your flashbangs last 7 seconds", @@ -99,7 +99,7 @@ "cutter_desc": "Instant kill with a knife", "cypher": "Cypher", - "cypher_desc": "Click [css_useSkill] to create/switch to a camera", + "cypher_desc": "Press [css_useSkill] key to create/switch to a camera", "cypher_nospace": "The camera must be positioned at right angles to the wall", "darkness": "Darkness", @@ -149,7 +149,7 @@ "empgrenade_enemy_info": "An EMP grenade knocked out your radar and crosshair.", "enemyspawn": "Enemy Spawn", - "enemyspawn_desc": "Click [css_useSkill] to teleport to the enemy spawn", + "enemyspawn_desc": "Press [css_useSkill] key to teleport to the enemy spawn", "expensiveammo": "Expensive Ammo", "expensiveammo_desc": "A chosen enemy has to pay for every shot", @@ -159,17 +159,17 @@ "expensiveammo_select_info": "Select a player whose ammo will become expensive:", "explodingbarrel": "Exploding Barrel", - "explodingbarrel_desc": "Click [css_useSkill] to place a barrel that explodes when shot", + "explodingbarrel_desc": "Press [css_useSkill] key to place a barrel that explodes when shot", "explosiveshot": "Explosive Shot", "explosiveshot_desc": "Random chance to fire an explosive bullet while shooting", "explosiveshot_desc2": "Your chance to fire an explosive bullet: {0}%", "falconeye": "Falcon Eye", - "falconeye_desc": "Click [css_useSkill] to activate a bird's-eye view camera", + "falconeye_desc": "Press [css_useSkill] key to activate a bird's-eye view camera", "fastreload": "Fastreload", - "fastreload_desc": "Click [css_useSkill] to reload the weapon you are currently holding", + "fastreload_desc": "Press [css_useSkill] key to reload the weapon you are currently holding", "firerain": "Fire Rain", "firerain_desc": "Throw a decoy to call down a rain of Molotovs", @@ -179,10 +179,10 @@ "flash_desc2": "Your speed multiplier is: {0}x", "flashlight": "Flashlight", - "flashlight_desc": "Click [css_useSkill] to turn the flashlight on or off. Its light can blind enemies", + "flashlight_desc": "Press [css_useSkill] key to turn the flashlight on or off. Its light can blind enemies", "fortnite": "Fortnite", - "fortnite_desc": "Click [css_useSkill] to create a destructible barricade", + "fortnite_desc": "Press [css_useSkill] key to create a destructible barricade", "fragilebomb": "Fragile Bomb", "fragilebomb_desc": "Shooting the bomb damages it", @@ -225,12 +225,12 @@ "glue_desc": "Your grenades stick to walls", "godmode": "God Mode", - "godmode_desc": "Click [css_useSkill] to become immortal for a short time", + "godmode_desc": "Press [css_useSkill] key to become immortal for a short time", "godmode_off": "Immortality disabled", "godmode_on": "Immortality enabled", "grapple": "Grapple Hook", - "grapple_desc": "Press [css_useSkill] to fire a hook at the point you are aiming at and pull yourself there", + "grapple_desc": "Press [css_useSkill] key to fire a hook at the point you are aiming at and pull yourself there", "grapple_no_anchor_info": "No surface to hook onto.", "grapple_pulling_info": "PULLING", @@ -264,14 +264,14 @@ "hotbomb_disable_info": "The bomb is no longer hot.", "iana": "Hologram", - "iana_desc": "Click [css_useSkill] to control your hologram for a few seconds", + "iana_desc": "Press [css_useSkill] key to control your hologram for a few seconds", "illiterate": "Illiterate", "illiterate_desc": "As long as you are alive, your enemies cannot read", "illiterate_alert": "Illiterate is active! You cannot read messages until the owner of this skill is eliminated", "illusionist": "Illusionist", - "illusionist_desc": "Click [css_useSkill] to deploy a replica that walks straight ahead", + "illusionist_desc": "Press [css_useSkill] key to deploy a replica that walks straight ahead", "impostor": "Impostor", "impostor_desc": "You start the round with an enemy player model", @@ -359,7 +359,7 @@ "magnifier_select_info": "Magnify player's screen:", "medic": "Medic", - "medic_desc": "Click [css_useSkill] to use a healing charge that restores 50 health", + "medic_desc": "Press [css_useSkill] key to use a healing charge that restores 50 health", "miner": "Bomb Miner", "miner_desc": "Your HE grenade only explode when there is an enemy nearby", @@ -400,7 +400,7 @@ "norecoil_desc": "No recoil while shooting", "noclip": "NoClip", - "noclip_desc": "Click [css_useSkill] to enable noclip for a short time", + "noclip_desc": "Press [css_useSkill] key to enable noclip for a short time", "oneshot": "One-Shot", "oneshot_desc": "Hitting an enemy instantly kills them", @@ -467,7 +467,7 @@ "rambo_desc": "You receive a random amount of health at the start of the round", "randomweapon": "Random Weapon", - "randomweapon_desc": "Click [css_useSkill] to receive a random weapon", + "randomweapon_desc": "Press [css_useSkill] key to receive a random weapon", "rezombie": "Re-Zombie", "rezombie_desc": "After death, you respawn as a zombie with increased health and no weapons", @@ -479,16 +479,16 @@ "regeneration_desc": "You restore health every few seconds", "replicator": "Replicator", - "replicator_desc": "Click [css_useSkill] to create a replica that deals damage on hit", + "replicator_desc": "Press [css_useSkill] key to create a replica that deals damage on hit", "retreat": "Retreat", - "retreat_desc": "Click [css_useSkill] to return to spawn", + "retreat_desc": "Press [css_useSkill] key to return to spawn", "returntosender": "Return to Sender", "returntosender_desc": "The first hit on an enemy sends them back to their spawn", "rewind": "Rewind", - "rewind_desc": "Click [css_useSkill] to drop a marker where you stand and return to it shortly after", + "rewind_desc": "Press [css_useSkill] key to drop a marker where you stand and return to it shortly after", "rewind_pending_info": "RETURN: {0}", "richboy": "Rich Boy", @@ -525,7 +525,7 @@ "sniperelite": "Sniper Elite", "sniperelite_customname": "Sniper Elite Skill", - "sniperelite_desc": "Click [css_useSkill] to swap your current weapon for an AWP", + "sniperelite_desc": "Press [css_useSkill] key to swap your current weapon for an AWP", "soldier": "Soldier", "soldier_desc": "You have a random damage multiplier", @@ -535,19 +535,19 @@ "soundmaker_desc": "Every now and then, you hear player screams", "spectator": "Spectator", - "spectator_desc": "Click [css_useSkill] to spectate a random enemy", + "spectator_desc": "Press [css_useSkill] key to spectate a random enemy", "swapposition": "Position Swap", - "swapposition_desc": "Click [css_useSkill] to swap places with a random enemy", + "swapposition_desc": "Press [css_useSkill] key to swap places with a random enemy", "takeammo": "Take Ammo", - "takeammo_desc": "Click [css_useSkill] to take the active weapon's magazine from a random enemy", + "takeammo_desc": "Press [css_useSkill] key to take the active weapon's magazine from a random enemy", "takeammo_hud_info1": "No player with an active magazine was found.", "takeammo_hud_info2": "The enemy has no magazines.", "takeammo_enemy_info": "You lost some ammo.", "teamteleport": "Team Teleport", - "teamteleport_desc": "Press [css_useSkill] to teleport to the teammate you're looking at", + "teamteleport_desc": "Press [css_useSkill] key to teleport to the teammate you're looking at", "teamteleport_noenemy": "No teammate found", "teamteleport_hud_info": "Found: {0}", @@ -563,19 +563,19 @@ "thief_incorrect_skill": "This skill cannot be selected!", "thirdeye": "Third Eye", - "thirdeye_desc": "Click [css_useSkill] to activate third-person view", + "thirdeye_desc": "Press [css_useSkill] key to activate third-person view", "thorns": "Thorns", "thorns_desc": "Your opponent will receive a portion of the damage that they inflicted on you", "throwingknife": "Throwing Knife", - "throwingknife_desc": "Click [css_useSkill] to throw a knife. But watch out for others", + "throwingknife_desc": "Press [css_useSkill] key to throw a knife. But watch out for others", "toxicsmoke": "Toxic Smoke", "toxicsmoke_desc": "Your smoke grenades deal damage", "tripwire": "Tripwire", - "tripwire_desc": "Click [css_useSkill] to string a wire between two walls. Enemies who touch it appear on your radar", + "tripwire_desc": "Press [css_useSkill] key to string a wire between two walls. Enemies who touch it appear on your radar", "tripwire_no_wall_info": "There are no walls close enough on both sides.", "tripwire_placed_info": "Tripwire placed.", "tripwire_triggered_info": "'{0}' triggered your tripwire.", @@ -597,7 +597,7 @@ "watchmaker_tt": "Round time extended by {0} seconds.", "weaponsswap": "Weapon Swap", - "weaponsswap_desc": "Click [css_useSkill] to swap weapons with a random enemy", + "weaponsswap_desc": "Press [css_useSkill] key to swap weapons with a random enemy", "weaponsswap_hud_info2": "You have no weapon to swap", "weightless": "Weightlessness", @@ -616,7 +616,7 @@ "your_skill": "Your current skill", "enemy_skill": "Enemy's skill", "observer_skill": "Player's skill", - "welcome_message": "Welcome {PLAYER} to {SERVER_NAME}!\nCurrent jRandomSkills version: {VERSION} ({SKILLS_COUNT} skills).\n\nOriginally created by:\n{AUTHOR1}\nModified and improved by:\n{AUTHOR2}\nOfficial Discord: https://discord.gg/9H8EZYBpPF", + "welcome_message": "Welcome {PLAYER} to {SERVER_NAME}!", "drawing_skill": "Drawing a skill", "disabled_weapon": "You cannot use this weapon", diff --git a/jRandomSkills - SRC Files/src/lang/fr.json b/jRandomSkills - SRC Files/src/lang/fr.json index bb99783..4ed2042 100644 --- a/jRandomSkills - SRC Files/src/lang/fr.json +++ b/jRandomSkills - SRC Files/src/lang/fr.json @@ -6,7 +6,7 @@ "aimbot_desc": "Chaque balle que vous touchez compte comme un headshot", "aimlock": "Verrouillage de visée", - "aimlock_desc": "Cliquez sur [css_useSkill] pour verrouiller votre visée sur l'ennemi le plus proche", + "aimlock_desc": "Appuyez sur [css_useSkill] pour verrouiller votre visée sur l'ennemi le plus proche", "anomaly": "Anomalie", "anomaly_desc": "Appuyez sur [css_useSkill] pour remonter de quelques secondes dans le temps", @@ -99,7 +99,7 @@ "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_desc": "Appuyez 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é", @@ -166,7 +166,7 @@ "expensiveammo_select_info": "Sélectionnez un joueur dont les munitions deviendront coûteuses :", "explodingbarrel": "Baril explosif", - "explodingbarrel_desc": "Cliquez sur [css_useSkill] pour placer un baril qui explose lorsqu'il est touché", + "explodingbarrel_desc": "Appuyez sur [css_useSkill] pour placer un baril qui explose lorsqu'il est touché", "explosiveshot": "Tir Explosif", "explosiveshot_desc": "Chance aléatoire de tirer une balle explosive en tirant", @@ -186,7 +186,7 @@ "flash_desc2": "Votre multiplicateur de vitesse est : {0}x", "flashlight": "Lampe torche", - "flashlight_desc": "Cliquez sur [css_useSkill] pour allumer ou éteindre la lampe torche. Sa lumière peut aveugler les ennemis", + "flashlight_desc": "Appuyez sur [css_useSkill] pour allumer ou éteindre la lampe torche. Sa lumière peut aveugler les ennemis", "fortnite": "Fortnite", "fortnite_desc": "Appuyez sur [css_useSkill] pour créer une barricade destructible", @@ -271,14 +271,14 @@ "hotbomb_disable_info": "La bombe ne brûle plus.", "iana": "Hologramme", - "iana_desc": "Cliquez sur [css_useSkill] pour contrôler votre hologramme pendant quelques secondes", + "iana_desc": "Appuyez sur [css_useSkill] pour contrôler votre hologramme pendant quelques secondes", "illiterate": "Illettré", "illiterate_desc": "Tant que vous êtes en vie, vos ennemis ne peuvent pas lire", "illiterate_alert": "Illettré est actif ! Vous ne pouvez pas lire les messages tant que le propriétaire de cette compétence n'est pas éliminé", "illusionist": "Illusionniste", - "illusionist_desc": "Cliquez sur [css_useSkill] pour déployer une réplique qui marche droit devant", + "illusionist_desc": "Appuyez sur [css_useSkill] pour déployer une réplique qui marche droit devant", "impostor": "Imposteur", "impostor_desc": "Vous commencez le round avec un modèle de joueur ennemi", @@ -541,7 +541,7 @@ "swapposition_desc": "Appuyez sur [css_useSkill] pour échanger de place avec un ennemi aléatoire", "takeammo": "Prendre des munitions", - "takeammo_desc": "Cliquez sur [css_useSkill] pour prendre le chargeur de l'arme active d'un ennemi aléatoire", + "takeammo_desc": "Appuyez sur [css_useSkill] pour prendre le chargeur de l'arme active d'un ennemi aléatoire", "takeammo_hud_info1": "Aucun joueur avec un chargeur actif n'a été trouvé.", "takeammo_hud_info2": "L'ennemi n'a pas de chargeur.", "takeammo_enemy_info": "Vous avez perdu des munitions.", @@ -569,13 +569,13 @@ "thorns_desc": "Votre adversaire recevra une partie des dégâts qu’il vous a infligés", "throwingknife": "Couteau de lancer", - "throwingknife_desc": "Cliquez sur [css_useSkill] pour lancer un couteau. Mais attention aux autres", + "throwingknife_desc": "Appuyez sur [css_useSkill] pour lancer un couteau. Mais attention aux autres", "toxicsmoke": "Fumée Toxique", "toxicsmoke_desc": "Vos grenades fumigènes infligent des dégâts", "tripwire": "Fil-piège", - "tripwire_desc": "Cliquez sur [css_useSkill] pour tendre un fil entre deux murs. Les ennemis qui le touchent apparaissent sur votre radar", + "tripwire_desc": "Appuyez sur [css_useSkill] pour tendre un fil entre deux murs. Les ennemis qui le touchent apparaissent sur votre radar", "tripwire_no_wall_info": "Aucun mur n'est suffisamment proche des deux côtés.", "tripwire_placed_info": "Fil-piège placé.", "tripwire_triggered_info": "'{0}' a déclenché votre fil-piège.", @@ -616,7 +616,7 @@ "your_skill": "Votre compétence", "enemy_skill": "Compétence de l’ennemi", "observer_skill": "Compétence du joueur", - "welcome_message": "Bienvenue {PLAYER} sur {SERVER_NAME}!\nVersion actuelle de jRandomSkills : {VERSION} ({SKILLS_COUNT} compétences).\n\nCréé à l’origine par :\n{AUTHOR1}\nModifié et amélioré par :\n{AUTHOR2}\nDiscord officiel : https://discord.gg/9H8EZYBpPF", + "welcome_message": "Bienvenue {PLAYER} sur {SERVER_NAME}!", "drawing_skill": "Attribution d’une compétence", "disabled_weapon": "Vous ne pouvez pas utiliser cette arme", diff --git a/jRandomSkills - SRC Files/src/lang/pl.json b/jRandomSkills - SRC Files/src/lang/pl.json index 0bfd105..dd2f2c3 100644 --- a/jRandomSkills - SRC Files/src/lang/pl.json +++ b/jRandomSkills - SRC Files/src/lang/pl.json @@ -6,10 +6,10 @@ "aimbot_desc": "Każdy twój trafiony pocisk liczy się jako strzał w głowę", "aimlock": "Aim Lock", - "aimlock_desc": "Kliknij [css_useSkill], aby wycelować na najbliższego wroga", + "aimlock_desc": "Naciśnij [css_useSkill], aby wycelować na najbliższego wroga", "anomaly": "Anomalia", - "anomaly_desc": "Kliknij [css_useSkill], aby cofnąć się o kilka sekund w czasie", + "anomaly_desc": "Naciśnij [css_useSkill], aby cofnąć się o kilka sekund w czasie", "antyflash": "Anty Flash", "antyflash_desc": "Posiadasz odporność na flash'e, a twoje flash'e trwają 7 sekund", @@ -99,7 +99,7 @@ "cutter_desc": "Natychmiastowe zabójstwo nożem", "cypher": "Kamera", - "cypher_desc": "Kliknij [css_useSkill], aby utworzyć/przełączyć się na kamerę", + "cypher_desc": "Naciśnij [css_useSkill], aby utworzyć/przełączyć się na kamerę", "cypher_nospace": "Kamera musi być ustawiona pod kątem prostym do ściany", "darkness": "Mrok", @@ -156,7 +156,7 @@ "empgrenade_enemy_info": "Granat EMP wyłączył twój radar i celownik.", "enemyspawn": "Resp Wroga", - "enemyspawn_desc": "Kliknij [css_useSkill], aby teleportować się na resp wroga", + "enemyspawn_desc": "Naciśnij [css_useSkill], aby teleportować się na resp wroga", "expensiveammo": "Droga Amunicja", "expensiveammo_desc": "Wybrany przeciwnik musi płacić za każdy oddany strzał", @@ -166,17 +166,17 @@ "expensiveammo_select_info": "Wybierz gracza, którego amunicja stanie się droga:", "explodingbarrel": "Wybuchowa Beczka", - "explodingbarrel_desc": "Kliknij [css_useSkill], aby postawić beczkę, która wybucha po trafieniu", + "explodingbarrel_desc": "Naciśnij [css_useSkill], aby postawić beczkę, która wybucha po trafieniu", "explosiveshot": "Strzał Wybuchowy", "explosiveshot_desc": "Losowa szansa wystrzelenia pocisku wybuchowego podczas strzelania", "explosiveshot_desc2": "Twoja szansa na wystrzelenie pocisku wybuchowego: {0}%", "falconeye": "Oko Sokoła", - "falconeye_desc": "Kliknij [css_useSkill], aby aktywować kamerę z lotu ptaka", + "falconeye_desc": "Naciśnij [css_useSkill], aby aktywować kamerę z lotu ptaka", "fastreload": "Szybkie Rączki", - "fastreload_desc": "Kliknij [css_useSkill], aby przeładować broń, którą obecnie trzymasz", + "fastreload_desc": "Naciśnij [css_useSkill], aby przeładować broń, którą obecnie trzymasz", "firerain": "Deszcz Ognia", "firerain_desc": "Rzuć wabik, aby przywołać deszcz koktajli Mołotowa", @@ -186,10 +186,10 @@ "flash_desc2": "Twój mnożnik prędkości to {0}x", "flashlight": "Latarka", - "flashlight_desc": "Kliknij [css_useSkill], aby włączyć lub wyłączyć latarkę. Jej światło może oślepić przeciwników", + "flashlight_desc": "Naciśnij [css_useSkill], aby włączyć lub wyłączyć latarkę. Jej światło może oślepić przeciwników", "fortnite": "Fortnite", - "fortnite_desc": "Kliknij [css_useSkill], aby stworzyć barykadę, którą można zniszczyć", + "fortnite_desc": "Naciśnij [css_useSkill], aby stworzyć barykadę, którą można zniszczyć", "fragilebomb": "Krucha Bomba", "fragilebomb_desc": "Strzelanie do bomby powoduje jej uszkodzenie", @@ -232,7 +232,7 @@ "glue_desc": "Twoje granaty przyklejają się do ścian", "godmode": "Nieśmiertelność", - "godmode_desc": "Kliknij [css_useSkill], aby stać się nieśmiertelnym na krótką chwilę", + "godmode_desc": "Naciśnij [css_useSkill], aby stać się nieśmiertelnym na krótką chwilę", "godmode_off": "Nieśmiertelność wyłączona", "godmode_on": "Nieśmiertelność włączona", @@ -271,7 +271,7 @@ "hotbomb_disable_info": "Bomba już nie parzy.", "iana": "Hologram", - "iana_desc": "Kliknij [css_useSkill], aby sterować hologramem przez kilka sekund", + "iana_desc": "Naciśnij [css_useSkill], aby sterować hologramem przez kilka sekund", "illiterate": "Analfabeta", "illiterate_desc": "Dopóki żyjesz, Twoi wrogowie nie potrafią czytać", @@ -366,7 +366,7 @@ "magnifier_select_info": "Powiększ ekran gracza:", "medic": "Medyk", - "medic_desc": "Kliknij [css_useSkill], aby użyć ładunku leczniczego, który przywraca 50 punktów zdrowia", + "medic_desc": "Naciśnij [css_useSkill], aby użyć ładunku leczniczego, który przywraca 50 punktów zdrowia", "miner": "Bomberman", "miner_desc": "Twoje granaty HE wybuchają tylko wtedy, gdy w pobliżu jest wróg", @@ -400,7 +400,7 @@ "norecoil_desc": "Brak odrzutu podczas strzelania", "noclip": "NoClip", - "noclip_desc": "Kliknij [css_useSkill], aby włączyć noclip na krótki czas", + "noclip_desc": "Naciśnij [css_useSkill], aby włączyć noclip na krótki czas", "oneshot": "Jednostrzałowiec", "oneshot_desc": "Po trafieniu natychmiast zabijasz przeciwnika", @@ -467,7 +467,7 @@ "rambo_desc": "Na początku rundy otrzymujesz losową ilość zdrowia", "randomweapon": "Losowa Broń", - "randomweapon_desc": "Kliknij [css_useSkill], aby otrzymać losową broń", + "randomweapon_desc": "Naciśnij [css_useSkill], aby otrzymać losową broń", "rezombie": "Re-Zombie", "rezombie_desc": "Po śmierci odradzasz się jako zombie z większym zdrowiem i bez broni", @@ -479,10 +479,10 @@ "regeneration_desc": "Co kilka sekund odnawiasz zdrowie", "replicator": "Replikator", - "replicator_desc": "Kliknij [css_useSkill], aby stworzyć swoją replikę, która zadaje obrażenia po trafieniu", + "replicator_desc": "Naciśnij [css_useSkill], aby stworzyć swoją replikę, która zadaje obrażenia po trafieniu", "retreat": "Odwrót", - "retreat_desc": "Kliknij [css_useSkill], aby powrócić na resp", + "retreat_desc": "Naciśnij [css_useSkill], aby powrócić na resp", "returntosender": "Zwrot do Nadawcy", "returntosender_desc": "Pierwsze trafienie wroga powoduje, że wraca on na swój resp", @@ -525,7 +525,7 @@ "sniperelite": "Papito", "sniperelite_customname": "Mityczna AWP", - "sniperelite_desc": "Kliknij [css_useSkill], aby zamienić aktualną broń na AWP", + "sniperelite_desc": "Naciśnij [css_useSkill], aby zamienić aktualną broń na AWP", "soldier": "Żołnierz", "soldier_desc": "Masz losowy mnożnik obrażeń", @@ -535,13 +535,13 @@ "soundmaker_desc": "Co jakiś czas słyszysz krzyki graczy", "spectator": "Obserwator", - "spectator_desc": "Kliknij [css_useSkill], aby obserwować losowego przeciwnika", + "spectator_desc": "Naciśnij [css_useSkill], aby obserwować losowego przeciwnika", "swapposition": "Zamiana Miejsc", - "swapposition_desc": "Kliknij [css_useSkill], aby zamienić się miejscami z losowym przeciwnikiem", + "swapposition_desc": "Naciśnij [css_useSkill], aby zamienić się miejscami z losowym przeciwnikiem", "takeammo": "Zabierz Amunicję", - "takeammo_desc": "Kliknij [css_useSkill], aby zabrać magazynek aktywnej broni losowego przeciwnika", + "takeammo_desc": "Naciśnij [css_useSkill], aby zabrać magazynek aktywnej broni losowego przeciwnika", "takeammo_hud_info1": "Nie znaleziono gracza z aktywnym magazynkiem.", "takeammo_hud_info2": "Przeciwnik nie ma magazynków.", "takeammo_enemy_info": "Straciłeś trochę amunicji.", @@ -563,7 +563,7 @@ "thief_incorrect_skill": "Tej umiejętności nie można wybrać!", "thirdeye": "Trzecie Oko", - "thirdeye_desc": "Kliknij [css_useSkill], aby aktywować trzecią osobę", + "thirdeye_desc": "Naciśnij [css_useSkill], aby aktywować trzecią osobę", "thorns": "Ciernie", "thorns_desc": "Twój przeciwnik otrzymuje część obrażeń, które zadał ci", @@ -575,7 +575,7 @@ "toxicsmoke_desc": "Twoje granaty dymny zadają obrażenia", "tripwire": "Linka z Drutu", - "tripwire_desc": "Kliknij [css_useSkill], aby rozciągnąć drut między dwiema ścianami. Wrogowie, którzy go dotkną, pojawią się na Twoim radarze", + "tripwire_desc": "Naciśnij [css_useSkill], aby rozciągnąć drut między dwiema ścianami. Wrogowie, którzy go dotkną, pojawią się na Twoim radarze", "tripwire_no_wall_info": "Po obu stronach nie ma wystarczająco blisko położonych ścian.", "tripwire_placed_info": "Linka została rozstawiona.", "tripwire_triggered_info": "'{0}' uruchomił Twoją linkę.", @@ -597,7 +597,7 @@ "watchmaker_tt": "Czas rundy został wydłużony o {0} sekund", "weaponsswap": "Zamiana Broni", - "weaponsswap_desc": "Kliknij [css_useSkill], aby zamienić się bronią z losowym przeciwnikiem", + "weaponsswap_desc": "Naciśnij [css_useSkill], aby zamienić się bronią z losowym przeciwnikiem", "weaponsswap_hud_info2": "Nie posiadasz broni na zamiane", "weightless": "Nieważkość", @@ -616,7 +616,7 @@ "your_skill": "Twoja aktualna moc", "enemy_skill": "Supermoc przeciwnika", "observer_skill": "Moc gracza", - "welcome_message": "Witaj {PLAYER} na serwerze {SERVER_NAME}!\nAktualna wersja jRandomSkills: {VERSION} ({SKILLS_COUNT} supermocy).\n\nPierwotnie plugin stworzona przez:\n{AUTHOR1}\nZmodyfikowany i ulepszony przez:\n{AUTHOR2}\nOficjalny discord: https://discord.gg/9H8EZYBpPF", + "welcome_message": "Witaj {PLAYER} na serwerze {SERVER_NAME}!", "drawing_skill": "Losowanie mocy", "disabled_weapon": "Nie możesz używać tej broni", diff --git a/jRandomSkills - SRC Files/src/lang/pt-br.json b/jRandomSkills - SRC Files/src/lang/pt-br.json index c477c18..86f8549 100644 --- a/jRandomSkills - SRC Files/src/lang/pt-br.json +++ b/jRandomSkills - SRC Files/src/lang/pt-br.json @@ -6,7 +6,7 @@ "aimbot_desc": "Toda bala que você acertar conta como um hs", "aimlock": "Aim Lock", - "aimlock_desc": "Clique em [css_useSkill] para travar a mira no inimigo mais próximo", + "aimlock_desc": "Pressione [css_useSkill] para travar a mira no inimigo mais próximo", "anomaly": "Máquina do Tempo", "anomaly_desc": "Pressione [css_useSkill] para voltar alguns segundos no tempo", @@ -99,7 +99,7 @@ "cutter_desc": "Você mata instantaneamente com a faca", "cypher": "CFTV", - "cypher_desc": "Clique em [css_useSkill] para criar/mudar para uma câmera", + "cypher_desc": "Pressione [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", @@ -156,7 +156,7 @@ "empgrenade_enemy_info": "Uma granada EMP derrubou seu radar e sua mira.", "enemyspawn": "Spawn Inimigo", - "enemyspawn_desc": "Clique em [css_useSkill] para se teletransportar para a base inimiga", + "enemyspawn_desc": "Pressione [css_useSkill] para se teletransportar para a base inimiga", "expensiveammo": "Munição Cara", "expensiveammo_desc": "Um inimigo escolhido precisa pagar por cada disparo", @@ -166,17 +166,17 @@ "expensiveammo_select_info": "Selecione um jogador cuja munição ficará cara:", "explodingbarrel": "Barril Explosivo", - "explodingbarrel_desc": "Clique em [css_useSkill] para colocar um barril que explode quando atingido", + "explodingbarrel_desc": "Pressione [css_useSkill] para colocar um barril que explode quando atingido", "explosiveshot": "Tiro Explosivo", "explosiveshot_desc": "Chance aleatória de disparar uma bala explosiva enquanto atira", "explosiveshot_desc2": "Sua chance de disparar uma bala explosiva: {0}%", "falconeye": "Olho de Águia", - "falconeye_desc": "Clique em [css_useSkill] para ativar uma câmera 360 com visão aérea", + "falconeye_desc": "Pressione [css_useSkill] para ativar uma câmera 360 com visão aérea", "fastreload": "Recarga Rápida", - "fastreload_desc": "Clique em [css_useSkill] para recarregar a arma que você está segurando", + "fastreload_desc": "Pressione [css_useSkill] para recarregar a arma que você está segurando", "firerain": "Chuva de Fogo", "firerain_desc": "Jogue uma isca para chamar uma chuva de Molotovs", @@ -186,10 +186,10 @@ "flash_desc2": "Seu multiplicador de velocidade é: {0}x", "flashlight": "Lanterna", - "flashlight_desc": "Clique em [css_useSkill] para ligar ou desligar a lanterna. Sua luz pode cegar os inimigos", + "flashlight_desc": "Pressione [css_useSkill] para ligar ou desligar a lanterna. Sua luz pode cegar os inimigos", "fortnite": "Fortnite", - "fortnite_desc": "Clique em [css_useSkill] para criar uma barreira destrutível", + "fortnite_desc": "Pressione [css_useSkill] para criar uma barreira destrutível", "fragilebomb": "Bomba Frágil", "fragilebomb_desc": "Atirar na bomba a danifica", @@ -232,7 +232,7 @@ "glue_desc": "Suas granadas grudam nas paredes", "godmode": "Modo Deus", - "godmode_desc": "Clique em [css_useSkill] para se tornar imortal por alguns segundos", + "godmode_desc": "Pressione [css_useSkill] para se tornar imortal por alguns segundos", "godmode_off": "Imortalidade desativada", "godmode_on": "Imortalidade ativada", @@ -271,14 +271,14 @@ "hotbomb_disable_info": "A bomba não está mais queimando.", "iana": "Holograma", - "iana_desc": "Clique em [css_useSkill] para controlar seu holograma por alguns segundos", + "iana_desc": "Pressione [css_useSkill] para controlar seu holograma por alguns segundos", "illiterate": "Analfabeto", "illiterate_desc": "Enquanto você estiver vivo, seus inimigos não conseguem ler", "illiterate_alert": "Analfabeto está ativo! Você não pode ler mensagens até que o proprietário desta habilidade seja eliminado", "illusionist": "Ilusionista", - "illusionist_desc": "Clique em [css_useSkill] para enviar uma réplica que caminha em frente", + "illusionist_desc": "Pressione [css_useSkill] para enviar uma réplica que caminha em frente", "impostor": "Impostor", "impostor_desc": "Você começa a rodada vestido do time inimigo", @@ -366,7 +366,7 @@ "magnifier_select_info": "Ampliar tela do jogador:", "medic": "Médico", - "medic_desc": "Clique em [css_useSkill] para usar uma injeção que restaura 50 de vida", + "medic_desc": "Pressione [css_useSkill] para usar uma injeção que restaura 50 de vida", "miner": "Mineiro de Bombas", "miner_desc": "Sua granada HE só explode quando há um inimigo por perto", @@ -400,7 +400,7 @@ "norecoil_desc": "Sem recoil ao atirar", "noclip": "NoClip", - "noclip_desc": "Clique em [css_useSkill] para ativar noclip por poucos segundos", + "noclip_desc": "Pressione [css_useSkill] para ativar noclip por poucos segundos", "oneshot": "Ignorante", "oneshot_desc": "Acertar um inimigo o mata instantaneamente", @@ -467,7 +467,7 @@ "rambo_desc": "Você recebe uma quantidade aleatória de vida no início da rodada", "randomweapon": "Arma Aleatória", - "randomweapon_desc": "Clique em [css_useSkill] para receber uma arma aleatória", + "randomweapon_desc": "Pressione [css_useSkill] para receber uma arma aleatória", "rezombie": "Walking Dead", "rezombie_desc": "Após morrer, você renasce como um zumbi com mais vida porém sem armas", @@ -479,16 +479,16 @@ "regeneration_desc": "Você restaura vida a cada poucos segundos", "replicator": "Clone", - "replicator_desc": "Clique em [css_useSkill] para criar um clone que causa dano ao ser atingido", + "replicator_desc": "Pressione [css_useSkill] para criar um clone que causa dano ao ser atingido", "retreat": "De Volta as Origens", - "retreat_desc": "Clique em [css_useSkill] para retornar ao spawn", + "retreat_desc": "Pressione [css_useSkill] para retornar ao spawn", "returntosender": "Devolução ao Remetente", "returntosender_desc": "O primeiro tiro em um inimigo o envia de volta a sua base", "rewind": "Retroceder", - "rewind_desc": "Clique em [css_useSkill] para deixar uma marca aqui e voltar a ela logo depois", + "rewind_desc": "Pressione [css_useSkill] para deixar uma marca aqui e voltar a ela logo depois", "rewind_pending_info": "RETORNO: {0}", "richboy": "Filhinho de Papai", @@ -524,7 +524,7 @@ "smoker_desc": "Sis bombalarınız asla bitmez", "sniperelite": "Sniper do BOPE", - "sniperelite_desc": "Clique em [css_useSkill] para trocar sua arma atual por uma AWP", + "sniperelite_desc": "Pressione [css_useSkill] para trocar sua arma atual por uma AWP", "sniperelite_customname": "Keskin Nişancı Elit Yeteneği", "soldier": "Soldado", @@ -535,13 +535,13 @@ "soundmaker_desc": "De vez em quando, você ouve gritos de jogadores", "spectator": "Espectador", - "spectator_desc": "Clique em [css_useSkill] para ver a tela de um inimigo aleatório", + "spectator_desc": "Pressione [css_useSkill] para ver a tela de um inimigo aleatório", "swapposition": "Troca de Posição", - "swapposition_desc": "Clique em [css_useSkill] para trocar de lugar com um inimigo aleatório", + "swapposition_desc": "Pressione [css_useSkill] para trocar de lugar com um inimigo aleatório", "takeammo": "Pegar Munição", - "takeammo_desc": "Clique em [css_useSkill] para pegar o carregador da arma ativa de um inimigo aleatório", + "takeammo_desc": "Pressione [css_useSkill] para pegar o carregador da arma ativa de um inimigo aleatório", "takeammo_hud_info1": "Nenhum jogador com um carregador ativo foi encontrado.", "takeammo_hud_info2": "O inimigo não possui carregadores.", "takeammo_enemy_info": "Você perdeu um pouco de munição.", @@ -563,19 +563,19 @@ "thief_incorrect_skill": "Esta habilidade não pode ser selecionada!", "thirdeye": "Terceiro Olho", - "thirdeye_desc": "Clique em [css_useSkill] para ativar a terceira pessoa", + "thirdeye_desc": "Pressione [css_useSkill] para ativar a terceira pessoa", "thorns": "Porco Espinho", "thorns_desc": "Seu oponente receberá uma parte do dano que causou a você", "throwingknife": "Faca de Arremesso", - "throwingknife_desc": "Clique em [css_useSkill] para lançar uma faca. Mas cuidado com os outros", + "throwingknife_desc": "Pressione [css_useSkill] para lançar uma faca. Mas cuidado com os outros", "toxicsmoke": "Smoke Tóxica", "toxicsmoke_desc": "Suas smokes causam dano", "tripwire": "Fio de Armadilha", - "tripwire_desc": "Clique em [css_useSkill] para estender um fio entre duas paredes. Inimigos que tocarem nele aparecerão no seu radar", + "tripwire_desc": "Pressione [css_useSkill] para estender um fio entre duas paredes. Inimigos que tocarem nele aparecerão no seu radar", "tripwire_no_wall_info": "Não há paredes próximas o suficiente dos dois lados.", "tripwire_placed_info": "Fio de armadilha colocado.", "tripwire_triggered_info": "'{0}' acionou seu fio.", @@ -597,7 +597,7 @@ "watchmaker_tt": "Tempo da rodada estendido em {0} segundos.", "weaponsswap": "Troca de Armas", - "weaponsswap_desc": "Clique em [css_useSkill] para trocar armas com um inimigo aleatório", + "weaponsswap_desc": "Pressione [css_useSkill] para trocar armas com um inimigo aleatório", "weaponsswap_hud_info2": "Você não tem arma para trocar", "weightless": "Gravidade Zero", @@ -616,7 +616,7 @@ "your_skill": "Sua habilidade atual", "enemy_skill": "Habilidade do inimigo", "observer_skill": "Habilidade 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}!", "drawing_skill": "Sorteando uma habilidade", "disabled_weapon": "Você não pode usar esta arma", diff --git a/jRandomSkills - SRC Files/src/lang/ru.json b/jRandomSkills - SRC Files/src/lang/ru.json index 19f2012..91f6cd6 100644 --- a/jRandomSkills - SRC Files/src/lang/ru.json +++ b/jRandomSkills - SRC Files/src/lang/ru.json @@ -616,7 +616,7 @@ "your_skill": "Ваш текущий навык", "enemy_skill": "Навык врага", "observer_skill": "Навык игрока", - "welcome_message": "Добро пожаловать {PLAYER} на {SERVER_NAME}!\nТекущая версия jRandomSkills: {VERSION} ({SKILLS_COUNT} навыков).\n\nОригинал создан:\n{AUTHOR1}\nМодифицирован и улучшен:\n{AUTHOR2}\nОфициальный Discord: https://discord.gg/9H8EZYBpPF", + "welcome_message": "Добро пожаловать {PLAYER} на {SERVER_NAME}!", "drawing_skill": "Получение навыка", "disabled_weapon": "Вы не можете использовать это оружие", diff --git a/jRandomSkills - SRC Files/src/lang/tr.json b/jRandomSkills - SRC Files/src/lang/tr.json index 05d408f..2fea9a8 100644 --- a/jRandomSkills - SRC Files/src/lang/tr.json +++ b/jRandomSkills - SRC Files/src/lang/tr.json @@ -616,7 +616,7 @@ "your_skill": "Yeteneğin", "enemy_skill": "Düşmanın yeteneği", "observer_skill": "Yeteneği", - "welcome_message": "{PLAYER}, {SERVER_NAME} sunucusuna hoş geldin!\nGüncel jRandomSkills versiyonu: {VERSION} ({SKILLS_COUNT} yetenek).\n\nOrijinal yapımcı:\n{AUTHOR1}\nGeliştiren:\n{AUTHOR2}\nResmi Discord: https://discord.gg/9H8EZYBpPF", + "welcome_message": "{PLAYER}, {SERVER_NAME} sunucusuna hoş geldin!", "drawing_skill": "Yetenek çarkı dönüyor...", "disabled_weapon": "Bu silahı kullanamazsın", diff --git a/jRandomSkills - SRC Files/src/lang/zh.json b/jRandomSkills - SRC Files/src/lang/zh.json index 8726bc7..188e120 100644 --- a/jRandomSkills - SRC Files/src/lang/zh.json +++ b/jRandomSkills - SRC Files/src/lang/zh.json @@ -6,10 +6,10 @@ "aimbot_desc": "你击中的每颗子弹都算作爆头", "aimlock": "自", - "aimlock_desc": "点击 [css_useSkill] 瞄准距离最近的敌人", + "aimlock_desc": "按 [css_useSkill] 瞄准距离最近的敌人", "anomaly": "异常", - "anomaly_desc": "点击 [css_useSkill] 回到几秒钟前", + "anomaly_desc": "按 [css_useSkill] 回到几秒钟前", "antyflash": "防闪", "antyflash_desc": "你对闪光弹免疫,你的闪光弹持续7秒", @@ -93,7 +93,7 @@ "cutter_desc": "用刀刀人可立即杀死敌人", "cypher": "相机", - "cypher_desc": "点击 [css_useSkill] 创建/切换摄像机", + "cypher_desc": "按 [css_useSkill] 创建/切换摄像机", "cypher_nospace": "相机必须与墙壁呈直角放置", "darkness": "黑暗", @@ -143,7 +143,7 @@ "empgrenade_enemy_info": "电磁脉冲手雷让你的雷达和准星失效了。", "enemyspawn": "传送敌人出生点", - "enemyspawn_desc": "点击 [css_useSkill] 传送到敌人出生点", + "enemyspawn_desc": "按 [css_useSkill] 传送到敌人出生点", "expensiveammo": "expensiveammo", "expensiveammo_desc": "expensiveammo_desc", @@ -160,17 +160,17 @@ "explosiveshot_desc2": "你发射爆炸子弹的几率是:{0}%", "falconeye": "鹰眼", - "falconeye_desc": "点击 [css_useSkill] 激活俯视视角", + "falconeye_desc": "按 [css_useSkill] 激活俯视视角", "fastreload": "快速装弹", - "fastreload_desc": "点击 [css_useSkill] 重新装填你当前持有的武器", + "fastreload_desc": "按 [css_useSkill] 重新装填你当前持有的武器", "flash": "闪电", "flash_desc": "回合开始时获得随机玩家速度", "flash_desc2": "你的速度倍率是:{0}x", "fortnite": "堡垒之夜玩家", - "fortnite_desc": "点击[css_useSkill]创建可破坏路障", + "fortnite_desc": "按[css_useSkill]创建可破坏路障", "fragilebomb": "脆弱炸弹", "fragilebomb_desc": "射击炸弹会对其造成伤害", @@ -213,7 +213,7 @@ "glue_desc": "你的手榴弹会粘在墙上", "godmode": "我就是神", - "godmode_desc": "点击 [css_useSkill] 在短时间内变得无敌", + "godmode_desc": "按 [css_useSkill] 在短时间内变得无敌", "godmode_off": "无敌状态已禁用", "godmode_on": "无敌状态已启用", @@ -249,14 +249,14 @@ "hotbomb_disable_info": "炸弹不再烫手了。", "iana": "全息图", - "iana_desc": "点击 [css_useSkill] 可控制你的全息影像数秒", + "iana_desc": "按 [css_useSkill] 可控制你的全息影像数秒", "illiterate": "文盲", "illiterate_desc": "只要你还活着,你的敌人就无法阅读", "illiterate_alert": "文盲已激活!在该技能的拥有者被消灭之前,你无法阅读消息。", "illusionist": "幻术师", - "illusionist_desc": "点击 [css_useSkill] 部署一个直线行走的幻象", + "illusionist_desc": "按 [css_useSkill] 部署一个直线行走的幻象", "impostor": "间谍", "impostor_desc": "回合开始时你获得敌方玩家模型", @@ -332,7 +332,7 @@ "magnifier_select_info": "选择需要放大的玩家:", "medic": "医疗兵", - "medic_desc": "点击 [css_useSkill] 使用治疗装置恢复50点生命值", + "medic_desc": "按 [css_useSkill] 使用治疗装置恢复50点生命值", "miner": "炸弹矿工", "miner_desc": "你的高爆手雷仅在附近有敌人时才会爆炸", @@ -370,7 +370,7 @@ "norecoil_desc": "射击时无后坐力", "noclip": "无碰撞", - "noclip_desc": "点击 [css_useSkill] 在短时间内启用无碰撞模式", + "noclip_desc": "按 [css_useSkill] 在短时间内启用无碰撞模式", "oneshot": "一击必杀", "oneshot_desc": "击中敌人立即杀死他们", @@ -437,7 +437,7 @@ "rambo_desc": "回合开始时你获得随机数量的生命值", "randomweapon": "随机武器", - "randomweapon_desc": "点击 [css_useSkill] 获得随机武器", + "randomweapon_desc": "按 [css_useSkill] 获得随机武器", "rezombie": "重生僵尸", "rezombie_desc": "死亡后你将作为僵尸复活,拥有更多生命值但无武器", @@ -449,10 +449,10 @@ "regeneration_desc": "每隔几秒恢复生命值", "replicator": "复制者", - "replicator_desc": "点击 [css_useSkill] 创建一个造成伤害的复制体", + "replicator_desc": "按 [css_useSkill] 创建一个造成伤害的复制体", "retreat": "撤退", - "retreat_desc": "点击 [css_useSkill] 返回出生点", + "retreat_desc": "按 [css_useSkill] 返回出生点", "returntosender": "发送他们房子!!!", "returntosender_desc": "首次击中敌人会将其送回出生点", @@ -495,7 +495,7 @@ "sniperelite": "狙击精英", "sniperelite_customname": "狙击精英技能", - "sniperelite_desc": "点击 [css_useSkill] 将当前武器替换为AWP", + "sniperelite_desc": "按 [css_useSkill] 将当前武器替换为AWP", "soldier": "士兵", "soldier_desc": "你有随机伤害倍率", @@ -505,10 +505,10 @@ "soundmaker_desc": "你会不时听到玩家的惨叫声", "spectator": "观察者", - "spectator_desc": "点击 [css_useSkill] 旁观一个随机敌人", + "spectator_desc": "按 [css_useSkill] 旁观一个随机敌人", "swapposition": "位置交换", - "swapposition_desc": "点击 [css_useSkill] 与随机敌人交换位置", + "swapposition_desc": "按 [css_useSkill] 与随机敌人交换位置", "teleporter": "传送者", "teleporter_desc": "你与被击中的敌人交换位置", @@ -521,13 +521,13 @@ "thief_incorrect_skill": "此技能无法选择!", "thirdeye": "第三只眼", - "thirdeye_desc": "点击 [css_useSkill] 激活第三人称视角", + "thirdeye_desc": "按 [css_useSkill] 激活第三人称视角", "thorns": "荊棘", "thorns_desc": "你的对手将承受其对你造成伤害的一部分", "throwingknife": "投掷飞刀", - "throwingknife_desc": "点击 [css_useSkill] 扔出飞刀。但要小心其他人", + "throwingknife_desc": "按 [css_useSkill] 扔出飞刀。但要小心其他人", "toxicsmoke": "毒烟", "toxicsmoke_desc": "你的烟雾弹会造成伤害", @@ -555,7 +555,7 @@ "watchmaker_tt": "回合时间延长了 {0} 秒。", "weaponsswap": "武器交换", - "weaponsswap_desc": "点击 [css_useSkill] 与随机敌人交换武器", + "weaponsswap_desc": "按 [css_useSkill] 与随机敌人交换武器", "weaponsswap_hud_info2": "你没有可交换的武器", "weightless": "失重", @@ -574,7 +574,7 @@ "your_skill": "你当前的技能", "enemy_skill": "敌人的技能", "observer_skill": "玩家的技能", - "welcome_message": "欢迎 {PLAYER} 来到 {SERVER_NAME}!\n当前 jRandomSkills 版本:{VERSION}({SKILLS_COUNT} 个技能)。\n\n最初由以下人员创建:\n{AUTHOR1}\n由以下人员修改和改进:\n{AUTHOR2}\n官方Discord:https://discord.gg/9H8EZYBpPF", + "welcome_message": "欢迎 {PLAYER} 来到 {SERVER_NAME}!", "drawing_skill": "抽取技能", "disabled_weapon": "你无法使用这把武器", diff --git a/jRandomSkills - SRC Files/src/player/PlayerEvents.cs b/jRandomSkills - SRC Files/src/player/PlayerEvents.cs index 2d8b1b1..8214e42 100644 --- a/jRandomSkills - SRC Files/src/player/PlayerEvents.cs +++ b/jRandomSkills - SRC Files/src/player/PlayerEvents.cs @@ -863,7 +863,16 @@ namespace src.player private static readonly Dictionary nextRoundPicks = []; - public static void UpdateSkillHUD(CCSPlayerController? player, jSkill_PlayerInfo? skillPlayer, string? headerLine, string? centerLine, string? extraLine, bool isDescription) + // Matches any or - used only to strip the HTML jRandomSkills already builds + // into centerLine/extraLine () before handing plain text to Panorama, which + // can't render injected HTML and can only take a color via a CSS class instead. + private static readonly Dictionary panoramaHudCaches = []; + + private static readonly Regex HtmlTagPattern = new("<[^>]+>", RegexOptions.Compiled); + + public static void UpdateSkillHUD( + CCSPlayerController? player, jSkill_PlayerInfo? skillPlayer, string? headerLine, string? centerLine, + string? extraLine, bool isDescription, Skills skillForColor = Skills.None) { lock (setLock) { @@ -875,6 +884,15 @@ namespace src.player extraLine = Illiterate.GetRandomText(extraLine); } + // Every skill draws through the Panorama card now. A skill's PrintHTML (cooldowns, + // fuel, countdowns - isDescription false) replaces the description line; the + // PrintToCenterHtml path below is only a fallback if the panel failed to spawn. + if (Instance.SkillHud != null) + { + UpdatePanoramaSkillHud(player, skillPlayer, centerLine, extraLine, isDescription, skillForColor); + return; + } + var config = Config.LoadedConfig.HtmlHudCustomisation; var cache = skillPlayer?.HudCache; @@ -922,5 +940,99 @@ namespace src.player player.PrintToCenterHtml(hudContent); } } + + // The Panorama half of UpdateSkillHUD above. Change-detected per field via + // panoramaHudCaches, the same idea as HudCacheEntry but per-field rather than one content blob, since + // SetVariableFor/SetClassFor are separate native calls rather than one PrintToCenterHtml. + private static void UpdatePanoramaSkillHud( + CCSPlayerController player, jSkill_PlayerInfo? skillPlayer, string? centerLine, + string? extraLine, bool isDescription, Skills skillForColor) + { + var skillHud = Instance.SkillHud; + if (skillHud == null || skillPlayer == null) return; + + // centerLine/extraLine arrive pre-wrapped in for the PrintToCenterHtml + // path above - Panorama can't render injected HTML, and color comes from the + // rarity-* class below instead, so the markup is just stripped rather than parsed. + string skillText = ToPlainText(centerLine); + string extraText = ToPlainText(extraLine); + string rarityClass = "rarity-" + SkillsInfo.GetValue(skillForColor, "Rarity").ToLowerInvariant(); + + // Keyed by the viewer's slot, not skillPlayer: while controlling a bot (or spectating) + // skillPlayer is someone else's record, but the panel being drawn is this player's. + if (!panoramaHudCaches.TryGetValue(player.Slot, out var cache)) + panoramaHudCaches[player.Slot] = cache = new PanoramaHudCache(); + cache.TouchedThisTick = true; + + // Open() before any SetVariableFor/SetClassFor - both silently no-op without a session, + // and Open() is what creates it (same lesson as PanoramaHudDemo's own OpenSkillMenu). + if (!cache.Open) + { + skillHud.Open(player); + cache.Open = true; + } + + if (cache.Skill != skillText || cache.RarityClass != rarityClass) + { + skillHud.SetVariableFor(player, "hud_skill", skillText); + // Take the old rarity class off before adding the new one - Panorama has no + // mutually-exclusive class group, so both would otherwise stay on and whichever the + // stylesheet happens to list last would win, not whichever was set last. + if (cache.RarityClass != null) + skillHud.SetClassFor(player, "skillhud_skill", cache.RarityClass, false); + skillHud.SetClassFor(player, "skillhud_skill", rarityClass, true); + cache.Skill = skillText; + cache.RarityClass = rarityClass; + } + + if (cache.Extra != extraText) + { + skillHud.SetVariableFor(player, "hud_extra", extraText); + skillHud.SetClassFor(player, "skillhud_extra", "empty", string.IsNullOrWhiteSpace(extraText)); + cache.Extra = extraText; + } + + if (cache.IsInfo != !isDescription) + { + skillHud.SetClassFor(player, "skillhud_extra", "info", !isDescription); + cache.IsInfo = !isDescription; + } + } + + // Closes the Panorama skill HUD for anyone whose cache says it's open but who wasn't + // touched this HUD frame - warmup started, a menu opened, HUD got suppressed, or any of + // PlayerOnTick.cs's other early-return conditions before it ever reaches UpdateSkillHUD. + // Without this the panel would just keep showing stale content indefinitely, unlike + // PrintToCenterHtml which expires on its own after a few seconds. Called once per HUD frame + // from PlayerOnTick.cs, after the per-player loop, for exactly this reason. + private static string ToPlainText(string? html) + => System.Net.WebUtility.HtmlDecode( + HtmlTagPattern.Replace((html ?? "").Replace("
", "\n", StringComparison.OrdinalIgnoreCase), "")); + + public static void ClosePanoramaSkillHudForUntouched() + { + var skillHud = Instance.SkillHud; + if (skillHud == null) return; + + foreach (var (slot, cache) in panoramaHudCaches) + { + if (!cache.Open) continue; + + if (cache.TouchedThisTick) + { + cache.TouchedThisTick = false; + continue; + } + + var player = Utilities.GetPlayerFromSlot(slot); + if (player is { IsValid: true }) skillHud.Close(player); + + cache.Open = false; + cache.Skill = null; + cache.Extra = null; + cache.RarityClass = null; + cache.IsInfo = null; + } + } } } diff --git a/jRandomSkills - SRC Files/src/player/PlayerOnTick.cs b/jRandomSkills - SRC Files/src/player/PlayerOnTick.cs index d113a89..437dec4 100644 --- a/jRandomSkills - SRC Files/src/player/PlayerOnTick.cs +++ b/jRandomSkills - SRC Files/src/player/PlayerOnTick.cs @@ -1,4 +1,4 @@ -using CounterStrikeSharp.API; +using CounterStrikeSharp.API; using CounterStrikeSharp.API.Core; using CounterStrikeSharp.API.Modules.Admin; using CounterStrikeSharp.API.Modules.Utils; @@ -33,6 +33,9 @@ namespace src.player if (player != null && player.IsValid) UpdatePlayerHud(player, now); } + // Closes the Panorama skill HUD for anyone whose panel is open but who wasn't + // touched this frame - see its own doc comment for why that's needed at all. + Event.ClosePanoramaSkillHudForUntouched(); PerfLog.Sample("OnTick(hud)", perfStart); }); @@ -62,7 +65,10 @@ namespace src.player var gameRulesProxy = Utilities.FindAllEntitiesByDesignerName("cs_gamerules").FirstOrDefault(); if (gameRulesProxy != null) + { Instance.GameRules = gameRulesProxy.GameRules; + Instance.GameRulesProxy = gameRulesProxy; + } } private static void UpdateGameRules() @@ -70,7 +76,17 @@ namespace src.player if (Instance?.GameRules == null || Instance.GameRules.Handle == IntPtr.Zero) InitializeGameRules(); else if (Instance != null && Config.LoadedConfig.EnableFlashingHtmlHudFix && !Instance.GameRules.WarmupPeriod) - Instance.GameRules.GameRestart = Instance.GameRules.RestartRoundTime < Server.CurrentTime; + { + bool restart = Instance.GameRules.RestartRoundTime < Server.CurrentTime; + if (Instance.GameRules.GameRestart == restart) return; + Instance.GameRules.GameRestart = restart; + + // The schema write has no networking hook of its own. GameRules isn't embedded in the + // proxy entity, so a CCSGameRules field offset can't be resolved against it ("N not + // resolved" spam) - mark the proxy's m_pGameRules pointer changed instead. + if (Instance.GameRulesProxy != null && Instance.GameRulesProxy.Handle != IntPtr.Zero) + Utilities.SetStateChanged(Instance.GameRulesProxy, "CCSGameRulesProxy", "m_pGameRules"); + } } private static void UpdatePlayerHud(CCSPlayerController player, DateTime now) @@ -97,6 +113,10 @@ namespace src.player string infoLine = string.Empty; string skillLine = string.Empty; string remainingLine = string.Empty; + // Which skill's Rarity should color the Panorama HUD (see UpdatePanoramaSkillHud) - + // not always skillPlayer.Skill, since the observer branch below shows a DIFFERENT + // player's skill, and the drawing-flicker branch shows a random one each frame. + Skills skillForColor = Skills.None; bool showDescriptionHUD = skillPlayer.SkillDescriptionHudExpired >= now || Config.LoadedConfig.DisplayAlwaysDescription; bool isDescription = true; @@ -114,6 +134,7 @@ namespace src.player infoLine = player.GetTranslationWithoutIlliterate("drawing_skill"); skillLine = $"{player.GetSkillName(randomSkill.Skill)}"; + skillForColor = randomSkill.Skill; } else { @@ -123,8 +144,8 @@ namespace src.player if (skillInfo != null) { - infoLine = player.GetTranslationWithoutIlliterate("your_skill"); skillLine = $"{player.GetSkillName(skillInfo.Skill, skillPlayer.SkillChance)}"; + skillForColor = skillInfo.Skill; if (skillInfo.Skill != Skills.None) { @@ -175,11 +196,17 @@ namespace src.player infoLine = string.IsNullOrEmpty(observerSkill) ? pName : $"{observerSkill} {pName}"; if (observedSkill.SpecialSkill == Skills.None || observedSpecialInfo == null) + { skillLine = $"{primaryName}"; + skillForColor = observedSkill.Skill; + } else { string specialName = player.GetSkillName(observedSpecialInfo.Skill); skillLine = $"{specialName}({primaryName})"; + // The special skill's color is what wraps the WHOLE combined line above, + // not the primary skill's - matches that for the Panorama rarity class too. + skillForColor = observedSpecialInfo.Skill; } if (observedSkill.Skill != Skills.None && !string.IsNullOrEmpty(observedSkill.PrintHTML)) @@ -194,7 +221,7 @@ namespace src.player if (string.IsNullOrEmpty(skillLine)) return; - Event.UpdateSkillHUD(player, skillPlayer, infoLine, skillLine, remainingLine, isDescription); + Event.UpdateSkillHUD(player, skillPlayer, infoLine, skillLine, remainingLine, isDescription, skillForColor); } } } diff --git a/jRandomSkills - SRC Files/src/player/RoundEvents.cs b/jRandomSkills - SRC Files/src/player/RoundEvents.cs index 5021177..c5c7769 100644 --- a/jRandomSkills - SRC Files/src/player/RoundEvents.cs +++ b/jRandomSkills - SRC Files/src/player/RoundEvents.cs @@ -620,7 +620,7 @@ namespace src.player UpdateSkillHudExpired(skillPlayer, randomSkill.Skill); assigned++; - if (randomSkill.Display) + if (randomSkill.Display && Config.LoadedConfig.YourSkillChatInfo) Instance?.AddTimer(.6f, () => { var descTarget = Utilities.GetPlayerFromIndex((int)playerIndex); diff --git a/jRandomSkills - SRC Files/src/player/skills/Medic.cs b/jRandomSkills - SRC Files/src/player/skills/Medic.cs index fecc9be..27e0d3f 100644 --- a/jRandomSkills - SRC Files/src/player/skills/Medic.cs +++ b/jRandomSkills - SRC Files/src/player/skills/Medic.cs @@ -74,7 +74,7 @@ namespace src.player.skills string remainingLine = cooldown != 0 ? $"{player.GetTranslation("hud_info", $"{cooldown}")}" - : $"{(skillInfo == null ? 0 : skillInfo.Count)}/{SkillsInfo.GetValue(skillName, "healthShotLimit")}"; + : $"{player.GetSkillDescription(skillName)}
{(skillInfo == null ? 0 : skillInfo.Count)}/{SkillsInfo.GetValue(skillName, "healthShotLimit")}"; playerInfo.PrintHTML = remainingLine; } diff --git a/jRandomSkills - SRC Files/src/utils/Config.cs b/jRandomSkills - SRC Files/src/utils/Config.cs index a39b120..5d33e92 100644 --- a/jRandomSkills - SRC Files/src/utils/Config.cs +++ b/jRandomSkills - SRC Files/src/utils/Config.cs @@ -311,6 +311,7 @@ namespace src.utils NormalCommands = new NormalCommands { SetSkillCommand = new NormalCommand("ustawskill, ustaw_skill, setskill, set_skill, definirhabilidade, configurarhabilidade, 设置技能, 配置技能", "@jRandomSkills/admin"), + SetOverrideCommand = new NormalCommand("setoverride, set_override", "@jRandomSkills/admin"), SkillsListCommand = new NormalCommand("supermoc, skille, listamocy, supermoce, skills, listaHabilidades, habilidades, 技能列表, 超能力列表", "@jRandomSkills/admin"), UseSkillCommand = new NormalCommand("t, useSkill, usarHabilidade, 技能使用, 使用技能", "@jRandomSkills/admin"), HealCommand = new NormalCommand("heal, ulecz, curar, tratar, 治疗, 治愈", "@jRandomSkills/admin"), @@ -403,6 +404,7 @@ namespace src.utils public class NormalCommands { public required NormalCommand SetSkillCommand { get; set; } + public required NormalCommand SetOverrideCommand { get; set; } public required NormalCommand SkillsListCommand { get; set; } public required NormalCommand UseSkillCommand { get; set; } public required NormalCommand HealCommand { get; set; } diff --git a/jRandomSkills - SRC Files/src/utils/CooldownOverride.cs b/jRandomSkills - SRC Files/src/utils/CooldownOverride.cs new file mode 100644 index 0000000..2c86e24 --- /dev/null +++ b/jRandomSkills - SRC Files/src/utils/CooldownOverride.cs @@ -0,0 +1,67 @@ +using CounterStrikeSharp.API.Core; +using System.Collections; +using System.Collections.Concurrent; +using System.Reflection; + +namespace src.utils +{ + // Per-player cooldown bypass (css_setoverride). Skills keep their cooldown in their own static + // per-player state, so instead of touching every skill this clears that state just before the + // skill's UseSkill runs. Resetting only at use time (not every tick) matters: AimLock and Noclip + // reuse their Cooldown timestamp as the start of the active effect. + public static class CooldownOverride + { + private static readonly HashSet _players = []; + private static readonly ConcurrentDictionary _stateFields = new(); + + // Toggles the override and returns the new state. + public static bool Toggle(CCSPlayerController player) + { + if (_players.Remove(player.SteamID)) return false; + _players.Add(player.SteamID); + return true; + } + + public static bool Has(CCSPlayerController player) => _players.Contains(player.SteamID); + + public static void ResetBeforeUse(Type skillType, CCSPlayerController player) + { + foreach (var field in _stateFields.GetOrAdd(skillType, FindStateFields)) + { + if (field.GetValue(null) is not IDictionary state) continue; + + // Spectator keeps a plain index -> last-use time map. + if (field.FieldType.GetGenericArguments()[1] == typeof(DateTime)) + { + state.Remove(player.Index); + continue; + } + + var entry = state[player.Index]; + if (entry == null) continue; + + foreach (var prop in entry.GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance)) + { + if (!prop.CanWrite) continue; + + if (prop.Name == "Cooldown" && prop.PropertyType == typeof(DateTime)) + prop.SetValue(entry, DateTime.MinValue); + else if (prop.Name == "CanUse" && prop.PropertyType == typeof(bool)) + prop.SetValue(entry, true); + else if (prop.Name is "NextUse" or "NextCamera" && prop.PropertyType == typeof(float)) + prop.SetValue(entry, 0f); + } + } + } + + // Static ConcurrentDictionary fields keyed by player index - the per-player skill + // state every cooldown skill uses. DateTime-valued ones only when they are last-use maps. + private static FieldInfo[] FindStateFields(Type skillType) + => [.. skillType.GetFields(BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic) + .Where(f => f.FieldType.IsGenericType + && f.FieldType.GetGenericTypeDefinition() == typeof(ConcurrentDictionary<,>) + && f.FieldType.GetGenericArguments()[0] == typeof(uint) + && (f.FieldType.GetGenericArguments()[1] != typeof(DateTime) + || f.Name.Contains("use", StringComparison.OrdinalIgnoreCase)))]; + } +} diff --git a/jRandomSkills - SRC Files/src/utils/Localization.cs b/jRandomSkills - SRC Files/src/utils/Localization.cs index e2359d6..14b0fbe 100644 --- a/jRandomSkills - SRC Files/src/utils/Localization.cs +++ b/jRandomSkills - SRC Files/src/utils/Localization.cs @@ -87,7 +87,7 @@ namespace src.utils { var val = translations[tkey].Replace("CHATCOLORS.RED", redColor); if (!string.IsNullOrEmpty(altButton)) - val = val.Replace("css_useSkill", $"css_useSkill/{altButton}"); + val = val.Replace("css_useSkill", altButton); translations[tkey] = val; } _translations.AddOrUpdate(code, translations, (k, v) => translations); diff --git a/jRandomSkills - SRC Files/src/utils/PanoramaMenu.cs b/jRandomSkills - SRC Files/src/utils/PanoramaMenu.cs new file mode 100644 index 0000000..09de0fe --- /dev/null +++ b/jRandomSkills - SRC Files/src/utils/PanoramaMenu.cs @@ -0,0 +1,195 @@ +using CounterStrikeSharp.API; +using CounterStrikeSharp.API.Core; +using PanoramaManager; +using System.Text.RegularExpressions; +using static CounterStrikeSharp.API.Core.Listeners; + +namespace src.utils +{ + // W/S/E target picker on a real Panorama panel (jrs_menu.xml), replacing WASDMenuAPI's + // PrintToCenterHtml menu. Driven only through SkillUtils.CreateMenu/UpdateMenu/CloseMenu/HasMenu. + public static class PanoramaMenu + { + public sealed record Item(string Id, string Text, bool Special, Action OnChoose); + + private const int MaxRows = 10; + private static readonly string[] RarityClasses = + ["rarity-common", "rarity-uncommon", "rarity-rare", "rarity-epic", "rarity-legendary"]; + + private static readonly LayoutContract Contract = new() + { + RootPanelId = "JrsMenuRoot", + RowCount = 0, + CaptureInput = false, + }; + + private static readonly Regex HtmlTag = new("<[^>]+>", RegexOptions.Compiled); + + private sealed class MenuState(List items) + { + public List Items = items; + public int Selected; + public int WindowStart; + // Last value written per physical row; null forces a write. + public readonly string?[] Text = new string?[MaxRows]; + public readonly bool?[] Shown = new bool?[MaxRows]; + public readonly bool?[] IsSelected = new bool?[MaxRows]; + public readonly bool?[] IsSpecial = new bool?[MaxRows]; + } + + private static PanelHandle? _panel; + private static readonly Dictionary _menus = []; + + // Must run after Event.Load: listeners fire in registration order, and CheckUseSkill has to + // see the menu still open on the E press that selects from it, or the same press would also + // fire the player's skill. + public static void Load(BasePlugin plugin) + { + _panel = Panorama.Spawn("panorama/layout/custom_game/jrs_menu.vxml_c", Contract); + plugin.RegisterListener(OnButtons); + plugin.RegisterListener(slot => _menus.Remove(slot)); + } + + public static void Unload() + { + _panel?.Dispose(); + _panel = null; + _menus.Clear(); + } + + public static string StripHtml(string? text) => HtmlTag.Replace(text ?? "", ""); + + private static int VisibleRows() + { + int configured = Config.LoadedConfig.HtmlHudCustomisation.WSADMenuVisibleItems; + return configured < 1 ? 3 : Math.Min(configured, MaxRows); + } + + public static bool HasMenu(CCSPlayerController? player) + => player is { IsValid: true } && _menus.ContainsKey(player.Slot); + + public static void Open( + CCSPlayerController player, string skillName, string rarityClass, + string subtitle, string hint, List items) + { + if (_panel == null || items.Count == 0) return; + + var state = new MenuState(items); + bool alreadyOpen = _menus.ContainsKey(player.Slot); + _menus[player.Slot] = state; + + if (!alreadyOpen) + _panel.Open(player); + + _panel.SetVariableFor(player, "menu_skill", skillName); + _panel.SetVariableFor(player, "menu_subtitle", subtitle); + _panel.SetClassFor(player, "jrsmenu_subtitle", "empty", string.IsNullOrWhiteSpace(subtitle)); + _panel.SetVariableFor(player, "menu_hint", hint); + foreach (var rarity in RarityClasses) + _panel.SetClassFor(player, "jrsmenu_skill", rarity, rarity == rarityClass); + + Render(player, state); + } + + // Replaces the item list in place, keeping the selection on the same item id when it still + // exists (skills call this every tick with refreshed labels such as money or health). + public static void Update(CCSPlayerController player, List items) + { + if (!_menus.TryGetValue(player.Slot, out var state)) return; + + if (items.Count == 0) + { + Close(player); + return; + } + + string? selectedId = state.Selected < state.Items.Count ? state.Items[state.Selected].Id : null; + int selected = selectedId == null ? -1 : items.FindIndex(i => i.Id == selectedId); + + state.Items = items; + state.Selected = selected < 0 ? 0 : selected; + state.WindowStart = WindowFor(state.Selected, state.WindowStart, items.Count); + Render(player, state); + } + + public static void Close(CCSPlayerController? player) + { + if (player is not { IsValid: true }) return; + if (_menus.Remove(player.Slot)) + _panel?.Close(player); + } + + private static void OnButtons(CCSPlayerController player, PlayerButtons pressed, PlayerButtons released) + { + if (player is not { IsValid: true } || !_menus.TryGetValue(player.Slot, out var state)) return; + + if ((pressed & PlayerButtons.Back) != 0) + Move(player, state, +1); + else if ((pressed & PlayerButtons.Forward) != 0) + Move(player, state, -1); + else if ((pressed & PlayerButtons.Use) != 0 && state.Selected < state.Items.Count) + state.Items[state.Selected].OnChoose(player); + } + + private static void Move(CCSPlayerController player, MenuState state, int direction) + { + int count = state.Items.Count; + if (count == 0) return; + + state.Selected = (state.Selected + direction + count) % count; + state.WindowStart = WindowFor(state.Selected, state.WindowStart, count); + Render(player, state); + } + + private static int WindowFor(int selected, int windowStart, int count) + { + int rows = VisibleRows(); + if (selected < windowStart) + windowStart = selected; + else if (selected >= windowStart + rows) + windowStart = selected - rows + 1; + return Math.Clamp(windowStart, 0, Math.Max(0, count - rows)); + } + + // Writes only what changed per physical row - Update runs every tick for some skills. + private static void Render(CCSPlayerController player, MenuState state) + { + if (_panel == null) return; + int rows = VisibleRows(); + + for (int i = 0; i < MaxRows; i++) + { + string rowId = $"mrow{i}"; + int index = state.WindowStart + i; + bool shown = i < rows && index < state.Items.Count; + + if (state.Shown[i] != shown) + { + _panel.SetClassFor(player, rowId, "hidden", !shown); + state.Shown[i] = shown; + } + if (!shown) continue; + + var item = state.Items[index]; + if (state.Text[i] != item.Text) + { + _panel.SetVariableFor(player, $"mrow{i}_title", item.Text); + state.Text[i] = item.Text; + } + + bool isSelected = index == state.Selected; + if (state.IsSelected[i] != isSelected) + { + _panel.SetClassFor(player, rowId, "selected", isSelected); + state.IsSelected[i] = isSelected; + } + + if (state.IsSpecial[i] != item.Special) + { + _panel.SetClassFor(player, rowId, "special", item.Special); + state.IsSpecial[i] = item.Special; + } + } + } + } +} diff --git a/jRandomSkills - SRC Files/src/utils/SkillUtils.cs b/jRandomSkills - SRC Files/src/utils/SkillUtils.cs index bff7c21..18eebd5 100644 --- a/jRandomSkills - SRC Files/src/utils/SkillUtils.cs +++ b/jRandomSkills - SRC Files/src/utils/SkillUtils.cs @@ -1,4 +1,4 @@ -using CounterStrikeSharp.API; +using CounterStrikeSharp.API; using CounterStrikeSharp.API.Core; using CounterStrikeSharp.API.Modules.Cvars; using CounterStrikeSharp.API.Modules.Entities.Constants; @@ -14,8 +14,6 @@ using System.Collections.Concurrent; using System.Drawing; using System.Globalization; using System.Runtime.InteropServices; -using WASDMenuAPI.Classes; -using WASDSharedAPI; namespace src.utils { @@ -1060,83 +1058,36 @@ namespace src.utils return designerName; } - private static IWasdMenuManager? GetMenuManager() - { - if (jRandomSkills.Instance.MenuManager == null) - jRandomSkills.Instance.MenuManager = new WasdManager(); + public static void CloseMenu(CCSPlayerController? player) => PanoramaMenu.Close(player); - ApplyMenuVisibleItems(); - return jRandomSkills.Instance.MenuManager; - } + public static bool HasMenu(CCSPlayerController? player) => PanoramaMenu.HasMenu(player); - private static void ApplyMenuVisibleItems() - { - int visibleItems = Config.LoadedConfig.HtmlHudCustomisation.WSADMenuVisibleItems; - WASDMenuAPI.WasdMenuPlayer.DefaultVisibleOptions = visibleItems < 1 ? 3 : Math.Min(visibleItems, 10); - } + // WASDMenuAPI's pause flag was only ever cleared, never set, so this stays a no-op. + public static bool SetMenuPaused(CCSPlayerController? player, bool pause) => PanoramaMenu.HasMenu(player); - public static void CloseMenu(CCSPlayerController? player) - { - var manager = GetMenuManager(); - if (manager == null) return; - manager.CloseMenu(player); - } - - public static bool HasMenu(CCSPlayerController? player) - { - var manager = GetMenuManager(); - if (manager == null) return false; - return manager.HasMenu(player); - } - - public static bool SetMenuPaused(CCSPlayerController? player, bool pause) - { - var manager = GetMenuManager(); - if (manager == null) return false; - return manager.SetMenuPaused(player, pause); - } - - private static string GetInvisibleSignature(string id) - { - if (string.IsNullOrEmpty(id)) return ""; - var sb = new System.Text.StringBuilder(); - - foreach (char c in id) - for (int i = 0; i < 8; i++) - sb.Append(((c >> i) & 1) == 1 ? "\u200B" : "\u200C"); - - return sb.ToString(); - } + private static string MenuText(CCSPlayerController player, string text) + => Illiterate.CheckIlliterateSkill(player) ? Illiterate.GetRandomText(text) ?? text : text; public static void UpdateMenu(CCSPlayerController? player, ConcurrentBag<(string, string)> items) { - if (player == null) return; + if (player == null || !player.IsValid) return; - var manager = GetMenuManager(); - if (manager == null) return; - - var playerInfo = PlayerManager.GetPlayerByIndex(player!.Index); + var playerInfo = PlayerManager.GetPlayerByIndex(player.Index); if (playerInfo == null) return; - bool isIlliterate = Illiterate.CheckIlliterateSkill(player); - - Dictionary> list = []; + var list = new List(); foreach (var item in items) { - string encodedText = isIlliterate - ? System.Net.WebUtility.HtmlEncode(Illiterate.GetRandomText(item.Item1)!) - : System.Net.WebUtility.HtmlEncode(item.Item1); - - string uniqueKey = GetInvisibleSignature(item.Item2) + $"\u202A{encodedText}\u202C"; - - list.TryAdd(uniqueKey, (p, option) => + if (list.Any(i => i.Id == item.Item2)) continue; + var id = item.Item2; + list.Add(new PanoramaMenu.Item(id, MenuText(player, item.Item1), false, p => { - jRandomSkills.Instance.SkillAction(playerInfo.Skill.ToString(), "TypeSkill", [p, new[] { item.Item2 }]); - manager.CloseMenu(p); - }); + jRandomSkills.Instance.SkillAction(playerInfo.Skill.ToString(), "TypeSkill", [p, new[] { id }]); + PanoramaMenu.Close(p); + })); } - manager.UpdateActiveMenu(player, list); + PanoramaMenu.Update(player, list); } public static void CreateMenu(CCSPlayerController? player, ConcurrentBag<(string, string)> enemies, (string, string, bool)? lastElement = null) @@ -1169,78 +1120,48 @@ namespace src.utils var skillData = SkillData.Skills.FirstOrDefault(s => s.Skill == playerInfo.Skill); if (skillData == null) return; - var manager = GetMenuManager(); - if (manager == null) return; - - var config = Config.LoadedConfig.HtmlHudCustomisation; - var your_skill = player.GetTranslationWithoutIlliterate("your_skill"); - var emptySymbol = $" "; - - string infoLine = string.IsNullOrEmpty(your_skill) || string.IsNullOrEmpty(config.HeaderLineSize) - ? "" - : $"\u202A{your_skill}:\u202C
"; - - string skillLine = Illiterate.CheckIlliterateSkill(player) - ? $"\u202A{Illiterate.GetRandomText(player.GetSkillName(skillData.Skill))}\u202C
" - : $"\u202A{player.GetSkillName(skillData.Skill)}\u202C
"; - - var skill_select_info = player.GetTranslation($"{playerInfo.Skill.ToString().ToLowerInvariant()}_select_info"); - string remainingLine = string.IsNullOrWhiteSpace(skill_select_info) || string.IsNullOrEmpty(config.WSADMenuSelectInfoLineSize) - ? "" - : $"{skill_select_info}
"; - - var hudContent = infoLine + skillLine + remainingLine; - - string controllsLine = string.IsNullOrEmpty(config.WSADMenuControllsLineSize) ? "" : - $"{emptySymbol}{player.GetTranslationWithoutIlliterate($"menu_controlls_scroll")}" - + $"{player.GetTranslationWithoutIlliterate($"menu_controlls_padding")}" - + $"{player.GetTranslationWithoutIlliterate($"menu_controlls_select")}{emptySymbol}
"; - - string itemText = $"{{0}}
"; - string itemHoverText = $"[ {{0}} ]
"; - - bool isIlliterate = Illiterate.CheckIlliterateSkill(player); - - IWasdMenu menu = manager.CreateMenu(hudContent, itemText, itemHoverText, controllsLine); + var items = new List(); foreach (var enemy in enemies) { - string encodedEnemyName = isIlliterate - ? System.Net.WebUtility.HtmlEncode(Illiterate.GetRandomText(enemy.Item1)!) - : System.Net.WebUtility.HtmlEncode(enemy.Item1); - - string uniqueKey = GetInvisibleSignature(enemy.Item2) + $"\u202A{encodedEnemyName}\u202C"; - - menu.Add(uniqueKey, (p, option) => + if (items.Any(i => i.Id == enemy.Item2)) continue; + var id = enemy.Item2; + items.Add(new PanoramaMenu.Item(id, MenuText(player, enemy.Item1), false, p => { - jRandomSkills.Instance.SkillAction(playerInfo.Skill.ToString(), "TypeSkill", [p, new[] { enemy.Item2 }]); - manager.CloseMenu(p); - }); + jRandomSkills.Instance.SkillAction(playerInfo.Skill.ToString(), "TypeSkill", [p, new[] { id }]); + PanoramaMenu.Close(p); + })); } if (lastElement != null) { - string lastText = lastElement.Value.Item1; - string lastColor = string.Empty; + var last = lastElement.Value; + string lastText = last.Item1; + bool special = false; + // "#rrggbb|text" colored the entry under WASDMenuAPI; Panorama can only take a class. if (lastText.Length > 8 && lastText[0] == '#' && lastText[7] == '|') { - lastColor = lastText[..8]; lastText = lastText[8..]; + special = true; } - string encodedLastElement = isIlliterate - ? System.Net.WebUtility.HtmlEncode(Illiterate.GetRandomText(lastText)!) - : System.Net.WebUtility.HtmlEncode(lastText); - - menu.Add($"{lastColor}\u202A{encodedLastElement}\u202C", (p, option) => + items.Add(new PanoramaMenu.Item(last.Item2, MenuText(player, lastText), special, p => { - jRandomSkills.Instance.SkillAction(playerInfo.Skill.ToString(), "TypeSkill", [p, new[] { lastElement.Value.Item2 }]); - if (lastElement.Value.Item3) - manager.CloseMenu(p); - }); + jRandomSkills.Instance.SkillAction(playerInfo.Skill.ToString(), "TypeSkill", [p, new[] { last.Item2 }]); + if (last.Item3) + PanoramaMenu.Close(p); + })); } - manager.OpenMainMenu(player, menu); + string skillName = MenuText(player, player.GetSkillName(skillData.Skill)); + string rarityClass = "rarity-" + SkillsInfo.GetValue(skillData.Skill, "Rarity").ToLowerInvariant(); + string subtitle = PanoramaMenu.StripHtml(player.GetTranslation($"{playerInfo.Skill.ToString().ToLowerInvariant()}_select_info")); + string hint = PanoramaMenu.StripHtml( + player.GetTranslationWithoutIlliterate("menu_controlls_scroll") + + player.GetTranslationWithoutIlliterate("menu_controlls_padding") + + player.GetTranslationWithoutIlliterate("menu_controlls_select")); + + PanoramaMenu.Open(player, skillName, rarityClass, subtitle, hint, items); } public static void ToogleDoor(CBaseEntity entity, CBasePlayerPawn pawn) diff --git a/jRandomSkills - Server Files/plugins/jRandomSkills/MaxMind.Db.dll b/jRandomSkills - Server Files/plugins/jRandomSkills/MaxMind.Db.dll old mode 100644 new mode 100755 diff --git a/jRandomSkills - Server Files/plugins/jRandomSkills/Newtonsoft.Json.dll b/jRandomSkills - Server Files/plugins/jRandomSkills/Newtonsoft.Json.dll old mode 100644 new mode 100755 diff --git a/jRandomSkills - Server Files/plugins/jRandomSkills/PanoramaManager.dll b/jRandomSkills - Server Files/plugins/jRandomSkills/PanoramaManager.dll new file mode 100755 index 0000000..d648c1d Binary files /dev/null and b/jRandomSkills - Server Files/plugins/jRandomSkills/PanoramaManager.dll differ diff --git a/jRandomSkills - Server Files/plugins/jRandomSkills/WASDMenuAPI.dll b/jRandomSkills - Server Files/plugins/jRandomSkills/WASDMenuAPI.dll deleted file mode 100644 index ff1b24f..0000000 Binary files a/jRandomSkills - Server Files/plugins/jRandomSkills/WASDMenuAPI.dll and /dev/null differ diff --git a/jRandomSkills - Server Files/plugins/jRandomSkills/jRandomSkills.dll b/jRandomSkills - Server Files/plugins/jRandomSkills/jRandomSkills.dll index 4dc173f..9f0f2dc 100644 Binary files a/jRandomSkills - Server Files/plugins/jRandomSkills/jRandomSkills.dll and b/jRandomSkills - Server Files/plugins/jRandomSkills/jRandomSkills.dll differ diff --git a/jRandomSkills - Server Files/plugins/jRandomSkills/languages/de.json b/jRandomSkills - Server Files/plugins/jRandomSkills/languages/de.json index d72dadf..242cf18 100644 --- a/jRandomSkills - Server Files/plugins/jRandomSkills/languages/de.json +++ b/jRandomSkills - Server Files/plugins/jRandomSkills/languages/de.json @@ -6,7 +6,7 @@ "aimbot_desc": "Jede Kugel, die du triffst, zählt als Kopfschuss", "aimlock": "Aim-Lock", - "aimlock_desc": "Klicke [css_useSkill], um dein Visier auf den nächsten Gegner zu fixieren", + "aimlock_desc": "Drücke [css_useSkill], um dein Visier auf den nächsten Gegner zu fixieren", "anomaly": "Anomalie", "anomaly_desc": "Drücke [css_useSkill], um einige Sekunden in der Zeit zurückzuspringen", @@ -99,7 +99,7 @@ "cutter_desc": "Sofortiger Tod mit einem Messer", "cypher": "Kamera", - "cypher_desc": "Klicken Sie auf [css_useSkill], um eine Kamera zu erstellen/zu wechseln", + "cypher_desc": "Drücken Sie [css_useSkill], um eine Kamera zu erstellen/zu wechseln", "cypher_nospace": "Die Kamera muss im rechten Winkel zur Wand positioniert werden", "darkness": "Dunkelheit", @@ -156,7 +156,7 @@ "empgrenade_enemy_info": "Eine EMP-Granate hat dein Radar und Fadenkreuz lahmgelegt.", "enemyspawn": "Feindes-Spawn", - "enemyspawn_desc": "Klicke auf [css_useSkill], um zum Feindes-Spawn zu teleportieren", + "enemyspawn_desc": "Drücke [css_useSkill], um zum Feindes-Spawn zu teleportieren", "expensiveammo": "Teure Munition", "expensiveammo_desc": "Ein ausgewählter Gegner muss für jeden Schuss bezahlen", @@ -166,17 +166,17 @@ "expensiveammo_select_info": "Wähle einen Spieler, dessen Munition teuer wird:", "explodingbarrel": "Explosives Fass", - "explodingbarrel_desc": "Klicke auf [css_useSkill], um ein Fass zu platzieren, das beim Beschuss explodiert", + "explodingbarrel_desc": "Drücke [css_useSkill], um ein Fass zu platzieren, das beim Beschuss explodiert", "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", + "falconeye_desc": "Drücke [css_useSkill], um eine Vogelperspektive zu aktivieren", "fastreload": "Schnellnachladen", - "fastreload_desc": "Klicke auf [css_useSkill], um die Waffe, die du gerade hältst, nachzuladen", + "fastreload_desc": "Drücke [css_useSkill], um die Waffe, die du gerade hältst, nachzuladen", "firerain": "Feuerregen", "firerain_desc": "Wirf einen Köder, um einen Regen aus Molotows auszulösen", @@ -186,10 +186,10 @@ "flash_desc2": "Dein Geschwindigkeitsmultiplikator beträgt: {0}x", "flashlight": "Taschenlampe", - "flashlight_desc": "Klicke auf [css_useSkill], um die Taschenlampe ein- oder auszuschalten. Ihr Licht kann Gegner blenden", + "flashlight_desc": "Drücke [css_useSkill], um die Taschenlampe ein- oder auszuschalten. Ihr Licht kann Gegner blenden", "fortnite": "Fortnite", - "fortnite_desc": "Klicke auf [css_useSkill], um eine zerstörbare Barrikade zu erstellen", + "fortnite_desc": "Drücke [css_useSkill], um eine zerstörbare Barrikade zu erstellen", "fragilebomb": "Fragile Bombe", "fragilebomb_desc": "Das Schießen auf die Bombe beschädigt sie", @@ -232,7 +232,7 @@ "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_desc": "Drücke [css_useSkill], um für kurze Zeit unsterblich zu werden", "godmode_off": "Unsterblichkeit deaktiviert", "godmode_on": "Unsterblichkeit aktiviert", @@ -271,14 +271,14 @@ "hotbomb_disable_info": "Die Bombe ist nicht mehr heiß.", "iana": "Hologramm", - "iana_desc": "Klicken Sie auf [css_useSkill], um Ihr Hologramm für einige Sekunden zu steuern", + "iana_desc": "Drücken Sie [css_useSkill], um Ihr Hologramm für einige Sekunden zu steuern", "illiterate": "Analphabet", "illiterate_desc": "Solange du am Leben bist, können deine Feinde nichts lesen", "illiterate_alert": "Analphabet ist aktiv! Du kannst keine Nachrichten lesen, bis der Besitzer dieser Fähigkeit eliminiert ist", "illusionist": "Illusionist", - "illusionist_desc": "Klicke [css_useSkill], um ein Abbild zu schicken, das geradeaus läuft", + "illusionist_desc": "Drücke [css_useSkill], um ein Abbild zu schicken, das geradeaus läuft", "impostor": "Betrüger", "impostor_desc": "Du beginnst die Runde mit einem feindlichen Spielermodell", @@ -366,7 +366,7 @@ "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", + "medic_desc": "Drücke [css_useSkill], um eine Heilungsladung zu verwenden, die 50 Gesundheitspunkte wiederherstellt", "miner": "Bomben-Miner", "miner_desc": "Deine HE-Granate explodiert nur, wenn ein Gegner in der Nähe ist", @@ -400,7 +400,7 @@ "norecoil_desc": "Kein Rückstoß beim Schießen", "noclip": "NoClip", - "noclip_desc": "Klicke auf [css_useSkill], um NoClip für kurze Zeit zu aktivieren", + "noclip_desc": "Drücke [css_useSkill], um NoClip für kurze Zeit zu aktivieren", "oneshot": "One-Shot", "oneshot_desc": "Ein Treffer tötet einen Gegner sofort", @@ -467,7 +467,7 @@ "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", + "randomweapon_desc": "Drücke [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", @@ -479,10 +479,10 @@ "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", + "replicator_desc": "Drücke [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", + "retreat_desc": "Drücke [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", @@ -525,7 +525,7 @@ "sniperelite": "Sniper Elite", "sniperelite_customname": "Sniper-Elite-Skill", - "sniperelite_desc": "Klicke auf [css_useSkill], um deine aktuelle Waffe gegen eine AWP auszutauschen", + "sniperelite_desc": "Drücke [css_useSkill], um deine aktuelle Waffe gegen eine AWP auszutauschen", "soldier": "Soldat", "soldier_desc": "Du hast einen zufälligen Schadensmultiplikator", @@ -535,13 +535,13 @@ "soundmaker_desc": "Von Zeit zu Zeit hörst du die Schreie von Spielern", "spectator": "Zuschauer", - "spectator_desc": "Klicke auf [css_useSkill], um einen zufälligen Gegner zu beobachten", + "spectator_desc": "Drücke [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", + "swapposition_desc": "Drücke [css_useSkill], um mit einem zufälligen Gegner die Plätze zu tauschen", "takeammo": "Munition nehmen", - "takeammo_desc": "Klicke auf [css_useSkill], um das Magazin der aktiven Waffe eines zufälligen Gegners zu nehmen", + "takeammo_desc": "Drücke [css_useSkill], um das Magazin der aktiven Waffe eines zufälligen Gegners zu nehmen", "takeammo_hud_info1": "Kein Spieler mit einem aktiven Magazin gefunden.", "takeammo_hud_info2": "Der Gegner hat keine Magazine.", "takeammo_enemy_info": "Du hast etwas Munition verloren.", @@ -563,19 +563,19 @@ "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", + "thirdeye_desc": "Drücke [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", "throwingknife": "Wurfmesser", - "throwingknife_desc": "Klicke [css_useSkill], um ein Messer zu werfen. Aber nimm dich vor anderen in Acht", + "throwingknife_desc": "Drücke [css_useSkill], um ein Messer zu werfen. Aber nimm dich vor anderen in Acht", "toxicsmoke": "Giftiger Rauch", "toxicsmoke_desc": "Deine Rauchgranaten verursachen Schaden", "tripwire": "Stolperdraht", - "tripwire_desc": "Klicke auf [css_useSkill], um einen Draht zwischen zwei Wänden zu spannen. Gegner, die ihn berühren, werden auf deinem Radar angezeigt", + "tripwire_desc": "Drücke [css_useSkill], um einen Draht zwischen zwei Wänden zu spannen. Gegner, die ihn berühren, werden auf deinem Radar angezeigt", "tripwire_no_wall_info": "Auf beiden Seiten sind keine Wände nah genug.", "tripwire_placed_info": "Stolperdraht platziert.", "tripwire_triggered_info": "'{0}' hat deinen Stolperdraht ausgelöst.", @@ -597,7 +597,7 @@ "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_desc": "Drücke [css_useSkill], um mit einem zufälligen Gegner die Waffen zu tauschen", "weaponsswap_hud_info2": "Du hast keine Waffe zum Tauschen", "weightless": "Schwerelosigkeit", diff --git a/jRandomSkills - Server Files/plugins/jRandomSkills/languages/en.json b/jRandomSkills - Server Files/plugins/jRandomSkills/languages/en.json index 4175258..7ab81f0 100644 --- a/jRandomSkills - Server Files/plugins/jRandomSkills/languages/en.json +++ b/jRandomSkills - Server Files/plugins/jRandomSkills/languages/en.json @@ -6,10 +6,10 @@ "aimbot_desc": "Every bullet you hit counts as a headshot", "aimlock": "Aim Lock", - "aimlock_desc": "Click [css_useSkill] to lock your aim on the nearest enemy", + "aimlock_desc": "Press [css_useSkill] key to lock your aim on the nearest enemy", "anomaly": "Anomaly", - "anomaly_desc": "Click [css_useSkill] to rewind a few seconds back in time", + "anomaly_desc": "Press [css_useSkill] key to rewind a few seconds back in time", "antyflash": "Anti-Flash", "antyflash_desc": "You are immune to flashbangs, and your flashbangs last 7 seconds", @@ -99,7 +99,7 @@ "cutter_desc": "Instant kill with a knife", "cypher": "Cypher", - "cypher_desc": "Click [css_useSkill] to create/switch to a camera", + "cypher_desc": "Press [css_useSkill] key to create/switch to a camera", "cypher_nospace": "The camera must be positioned at right angles to the wall", "darkness": "Darkness", @@ -149,7 +149,7 @@ "empgrenade_enemy_info": "An EMP grenade knocked out your radar and crosshair.", "enemyspawn": "Enemy Spawn", - "enemyspawn_desc": "Click [css_useSkill] to teleport to the enemy spawn", + "enemyspawn_desc": "Press [css_useSkill] key to teleport to the enemy spawn", "expensiveammo": "Expensive Ammo", "expensiveammo_desc": "A chosen enemy has to pay for every shot", @@ -159,17 +159,17 @@ "expensiveammo_select_info": "Select a player whose ammo will become expensive:", "explodingbarrel": "Exploding Barrel", - "explodingbarrel_desc": "Click [css_useSkill] to place a barrel that explodes when shot", + "explodingbarrel_desc": "Press [css_useSkill] key to place a barrel that explodes when shot", "explosiveshot": "Explosive Shot", "explosiveshot_desc": "Random chance to fire an explosive bullet while shooting", "explosiveshot_desc2": "Your chance to fire an explosive bullet: {0}%", "falconeye": "Falcon Eye", - "falconeye_desc": "Click [css_useSkill] to activate a bird's-eye view camera", + "falconeye_desc": "Press [css_useSkill] key to activate a bird's-eye view camera", "fastreload": "Fastreload", - "fastreload_desc": "Click [css_useSkill] to reload the weapon you are currently holding", + "fastreload_desc": "Press [css_useSkill] key to reload the weapon you are currently holding", "firerain": "Fire Rain", "firerain_desc": "Throw a decoy to call down a rain of Molotovs", @@ -179,10 +179,10 @@ "flash_desc2": "Your speed multiplier is: {0}x", "flashlight": "Flashlight", - "flashlight_desc": "Click [css_useSkill] to turn the flashlight on or off. Its light can blind enemies", + "flashlight_desc": "Press [css_useSkill] key to turn the flashlight on or off. Its light can blind enemies", "fortnite": "Fortnite", - "fortnite_desc": "Click [css_useSkill] to create a destructible barricade", + "fortnite_desc": "Press [css_useSkill] key to create a destructible barricade", "fragilebomb": "Fragile Bomb", "fragilebomb_desc": "Shooting the bomb damages it", @@ -225,12 +225,12 @@ "glue_desc": "Your grenades stick to walls", "godmode": "God Mode", - "godmode_desc": "Click [css_useSkill] to become immortal for a short time", + "godmode_desc": "Press [css_useSkill] key to become immortal for a short time", "godmode_off": "Immortality disabled", "godmode_on": "Immortality enabled", "grapple": "Grapple Hook", - "grapple_desc": "Press [css_useSkill] to fire a hook at the point you are aiming at and pull yourself there", + "grapple_desc": "Press [css_useSkill] key to fire a hook at the point you are aiming at and pull yourself there", "grapple_no_anchor_info": "No surface to hook onto.", "grapple_pulling_info": "PULLING", @@ -264,14 +264,14 @@ "hotbomb_disable_info": "The bomb is no longer hot.", "iana": "Hologram", - "iana_desc": "Click [css_useSkill] to control your hologram for a few seconds", + "iana_desc": "Press [css_useSkill] key to control your hologram for a few seconds", "illiterate": "Illiterate", "illiterate_desc": "As long as you are alive, your enemies cannot read", "illiterate_alert": "Illiterate is active! You cannot read messages until the owner of this skill is eliminated", "illusionist": "Illusionist", - "illusionist_desc": "Click [css_useSkill] to deploy a replica that walks straight ahead", + "illusionist_desc": "Press [css_useSkill] key to deploy a replica that walks straight ahead", "impostor": "Impostor", "impostor_desc": "You start the round with an enemy player model", @@ -359,7 +359,7 @@ "magnifier_select_info": "Magnify player's screen:", "medic": "Medic", - "medic_desc": "Click [css_useSkill] to use a healing charge that restores 50 health", + "medic_desc": "Press [css_useSkill] key to use a healing charge that restores 50 health", "miner": "Bomb Miner", "miner_desc": "Your HE grenade only explode when there is an enemy nearby", @@ -400,7 +400,7 @@ "norecoil_desc": "No recoil while shooting", "noclip": "NoClip", - "noclip_desc": "Click [css_useSkill] to enable noclip for a short time", + "noclip_desc": "Press [css_useSkill] key to enable noclip for a short time", "oneshot": "One-Shot", "oneshot_desc": "Hitting an enemy instantly kills them", @@ -467,7 +467,7 @@ "rambo_desc": "You receive a random amount of health at the start of the round", "randomweapon": "Random Weapon", - "randomweapon_desc": "Click [css_useSkill] to receive a random weapon", + "randomweapon_desc": "Press [css_useSkill] key to receive a random weapon", "rezombie": "Re-Zombie", "rezombie_desc": "After death, you respawn as a zombie with increased health and no weapons", @@ -479,16 +479,16 @@ "regeneration_desc": "You restore health every few seconds", "replicator": "Replicator", - "replicator_desc": "Click [css_useSkill] to create a replica that deals damage on hit", + "replicator_desc": "Press [css_useSkill] key to create a replica that deals damage on hit", "retreat": "Retreat", - "retreat_desc": "Click [css_useSkill] to return to spawn", + "retreat_desc": "Press [css_useSkill] key to return to spawn", "returntosender": "Return to Sender", "returntosender_desc": "The first hit on an enemy sends them back to their spawn", "rewind": "Rewind", - "rewind_desc": "Click [css_useSkill] to drop a marker where you stand and return to it shortly after", + "rewind_desc": "Press [css_useSkill] key to drop a marker where you stand and return to it shortly after", "rewind_pending_info": "RETURN: {0}", "richboy": "Rich Boy", @@ -525,7 +525,7 @@ "sniperelite": "Sniper Elite", "sniperelite_customname": "Sniper Elite Skill", - "sniperelite_desc": "Click [css_useSkill] to swap your current weapon for an AWP", + "sniperelite_desc": "Press [css_useSkill] key to swap your current weapon for an AWP", "soldier": "Soldier", "soldier_desc": "You have a random damage multiplier", @@ -535,19 +535,19 @@ "soundmaker_desc": "Every now and then, you hear player screams", "spectator": "Spectator", - "spectator_desc": "Click [css_useSkill] to spectate a random enemy", + "spectator_desc": "Press [css_useSkill] key to spectate a random enemy", "swapposition": "Position Swap", - "swapposition_desc": "Click [css_useSkill] to swap places with a random enemy", + "swapposition_desc": "Press [css_useSkill] key to swap places with a random enemy", "takeammo": "Take Ammo", - "takeammo_desc": "Click [css_useSkill] to take the active weapon's magazine from a random enemy", + "takeammo_desc": "Press [css_useSkill] key to take the active weapon's magazine from a random enemy", "takeammo_hud_info1": "No player with an active magazine was found.", "takeammo_hud_info2": "The enemy has no magazines.", "takeammo_enemy_info": "You lost some ammo.", "teamteleport": "Team Teleport", - "teamteleport_desc": "Press [css_useSkill] to teleport to the teammate you're looking at", + "teamteleport_desc": "Press [css_useSkill] key to teleport to the teammate you're looking at", "teamteleport_noenemy": "No teammate found", "teamteleport_hud_info": "Found: {0}", @@ -563,19 +563,19 @@ "thief_incorrect_skill": "This skill cannot be selected!", "thirdeye": "Third Eye", - "thirdeye_desc": "Click [css_useSkill] to activate third-person view", + "thirdeye_desc": "Press [css_useSkill] key to activate third-person view", "thorns": "Thorns", "thorns_desc": "Your opponent will receive a portion of the damage that they inflicted on you", "throwingknife": "Throwing Knife", - "throwingknife_desc": "Click [css_useSkill] to throw a knife. But watch out for others", + "throwingknife_desc": "Press [css_useSkill] key to throw a knife. But watch out for others", "toxicsmoke": "Toxic Smoke", "toxicsmoke_desc": "Your smoke grenades deal damage", "tripwire": "Tripwire", - "tripwire_desc": "Click [css_useSkill] to string a wire between two walls. Enemies who touch it appear on your radar", + "tripwire_desc": "Press [css_useSkill] key to string a wire between two walls. Enemies who touch it appear on your radar", "tripwire_no_wall_info": "There are no walls close enough on both sides.", "tripwire_placed_info": "Tripwire placed.", "tripwire_triggered_info": "'{0}' triggered your tripwire.", @@ -597,7 +597,7 @@ "watchmaker_tt": "Round time extended by {0} seconds.", "weaponsswap": "Weapon Swap", - "weaponsswap_desc": "Click [css_useSkill] to swap weapons with a random enemy", + "weaponsswap_desc": "Press [css_useSkill] key to swap weapons with a random enemy", "weaponsswap_hud_info2": "You have no weapon to swap", "weightless": "Weightlessness", @@ -616,7 +616,7 @@ "your_skill": "Your current skill", "enemy_skill": "Enemy's skill", "observer_skill": "Player's skill", - "welcome_message": "Welcome {PLAYER} to {SERVER_NAME}!\nCurrent jRandomSkills version: {VERSION} ({SKILLS_COUNT} skills).\n\nOriginally created by:\n{AUTHOR1}\nModified and improved by:\n{AUTHOR2}\nOfficial Discord: https://discord.gg/9H8EZYBpPF", + "welcome_message": "Welcome {PLAYER} to {SERVER_NAME}!", "drawing_skill": "Drawing a skill", "disabled_weapon": "You cannot use this weapon", diff --git a/jRandomSkills - Server Files/plugins/jRandomSkills/languages/fr.json b/jRandomSkills - Server Files/plugins/jRandomSkills/languages/fr.json index bb99783..4ed2042 100644 --- a/jRandomSkills - Server Files/plugins/jRandomSkills/languages/fr.json +++ b/jRandomSkills - Server Files/plugins/jRandomSkills/languages/fr.json @@ -6,7 +6,7 @@ "aimbot_desc": "Chaque balle que vous touchez compte comme un headshot", "aimlock": "Verrouillage de visée", - "aimlock_desc": "Cliquez sur [css_useSkill] pour verrouiller votre visée sur l'ennemi le plus proche", + "aimlock_desc": "Appuyez sur [css_useSkill] pour verrouiller votre visée sur l'ennemi le plus proche", "anomaly": "Anomalie", "anomaly_desc": "Appuyez sur [css_useSkill] pour remonter de quelques secondes dans le temps", @@ -99,7 +99,7 @@ "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_desc": "Appuyez 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é", @@ -166,7 +166,7 @@ "expensiveammo_select_info": "Sélectionnez un joueur dont les munitions deviendront coûteuses :", "explodingbarrel": "Baril explosif", - "explodingbarrel_desc": "Cliquez sur [css_useSkill] pour placer un baril qui explose lorsqu'il est touché", + "explodingbarrel_desc": "Appuyez sur [css_useSkill] pour placer un baril qui explose lorsqu'il est touché", "explosiveshot": "Tir Explosif", "explosiveshot_desc": "Chance aléatoire de tirer une balle explosive en tirant", @@ -186,7 +186,7 @@ "flash_desc2": "Votre multiplicateur de vitesse est : {0}x", "flashlight": "Lampe torche", - "flashlight_desc": "Cliquez sur [css_useSkill] pour allumer ou éteindre la lampe torche. Sa lumière peut aveugler les ennemis", + "flashlight_desc": "Appuyez sur [css_useSkill] pour allumer ou éteindre la lampe torche. Sa lumière peut aveugler les ennemis", "fortnite": "Fortnite", "fortnite_desc": "Appuyez sur [css_useSkill] pour créer une barricade destructible", @@ -271,14 +271,14 @@ "hotbomb_disable_info": "La bombe ne brûle plus.", "iana": "Hologramme", - "iana_desc": "Cliquez sur [css_useSkill] pour contrôler votre hologramme pendant quelques secondes", + "iana_desc": "Appuyez sur [css_useSkill] pour contrôler votre hologramme pendant quelques secondes", "illiterate": "Illettré", "illiterate_desc": "Tant que vous êtes en vie, vos ennemis ne peuvent pas lire", "illiterate_alert": "Illettré est actif ! Vous ne pouvez pas lire les messages tant que le propriétaire de cette compétence n'est pas éliminé", "illusionist": "Illusionniste", - "illusionist_desc": "Cliquez sur [css_useSkill] pour déployer une réplique qui marche droit devant", + "illusionist_desc": "Appuyez sur [css_useSkill] pour déployer une réplique qui marche droit devant", "impostor": "Imposteur", "impostor_desc": "Vous commencez le round avec un modèle de joueur ennemi", @@ -541,7 +541,7 @@ "swapposition_desc": "Appuyez sur [css_useSkill] pour échanger de place avec un ennemi aléatoire", "takeammo": "Prendre des munitions", - "takeammo_desc": "Cliquez sur [css_useSkill] pour prendre le chargeur de l'arme active d'un ennemi aléatoire", + "takeammo_desc": "Appuyez sur [css_useSkill] pour prendre le chargeur de l'arme active d'un ennemi aléatoire", "takeammo_hud_info1": "Aucun joueur avec un chargeur actif n'a été trouvé.", "takeammo_hud_info2": "L'ennemi n'a pas de chargeur.", "takeammo_enemy_info": "Vous avez perdu des munitions.", @@ -569,13 +569,13 @@ "thorns_desc": "Votre adversaire recevra une partie des dégâts qu’il vous a infligés", "throwingknife": "Couteau de lancer", - "throwingknife_desc": "Cliquez sur [css_useSkill] pour lancer un couteau. Mais attention aux autres", + "throwingknife_desc": "Appuyez sur [css_useSkill] pour lancer un couteau. Mais attention aux autres", "toxicsmoke": "Fumée Toxique", "toxicsmoke_desc": "Vos grenades fumigènes infligent des dégâts", "tripwire": "Fil-piège", - "tripwire_desc": "Cliquez sur [css_useSkill] pour tendre un fil entre deux murs. Les ennemis qui le touchent apparaissent sur votre radar", + "tripwire_desc": "Appuyez sur [css_useSkill] pour tendre un fil entre deux murs. Les ennemis qui le touchent apparaissent sur votre radar", "tripwire_no_wall_info": "Aucun mur n'est suffisamment proche des deux côtés.", "tripwire_placed_info": "Fil-piège placé.", "tripwire_triggered_info": "'{0}' a déclenché votre fil-piège.", @@ -616,7 +616,7 @@ "your_skill": "Votre compétence", "enemy_skill": "Compétence de l’ennemi", "observer_skill": "Compétence du joueur", - "welcome_message": "Bienvenue {PLAYER} sur {SERVER_NAME}!\nVersion actuelle de jRandomSkills : {VERSION} ({SKILLS_COUNT} compétences).\n\nCréé à l’origine par :\n{AUTHOR1}\nModifié et amélioré par :\n{AUTHOR2}\nDiscord officiel : https://discord.gg/9H8EZYBpPF", + "welcome_message": "Bienvenue {PLAYER} sur {SERVER_NAME}!", "drawing_skill": "Attribution d’une compétence", "disabled_weapon": "Vous ne pouvez pas utiliser cette arme", diff --git a/jRandomSkills - Server Files/plugins/jRandomSkills/languages/pl.json b/jRandomSkills - Server Files/plugins/jRandomSkills/languages/pl.json index 0bfd105..dd2f2c3 100644 --- a/jRandomSkills - Server Files/plugins/jRandomSkills/languages/pl.json +++ b/jRandomSkills - Server Files/plugins/jRandomSkills/languages/pl.json @@ -6,10 +6,10 @@ "aimbot_desc": "Każdy twój trafiony pocisk liczy się jako strzał w głowę", "aimlock": "Aim Lock", - "aimlock_desc": "Kliknij [css_useSkill], aby wycelować na najbliższego wroga", + "aimlock_desc": "Naciśnij [css_useSkill], aby wycelować na najbliższego wroga", "anomaly": "Anomalia", - "anomaly_desc": "Kliknij [css_useSkill], aby cofnąć się o kilka sekund w czasie", + "anomaly_desc": "Naciśnij [css_useSkill], aby cofnąć się o kilka sekund w czasie", "antyflash": "Anty Flash", "antyflash_desc": "Posiadasz odporność na flash'e, a twoje flash'e trwają 7 sekund", @@ -99,7 +99,7 @@ "cutter_desc": "Natychmiastowe zabójstwo nożem", "cypher": "Kamera", - "cypher_desc": "Kliknij [css_useSkill], aby utworzyć/przełączyć się na kamerę", + "cypher_desc": "Naciśnij [css_useSkill], aby utworzyć/przełączyć się na kamerę", "cypher_nospace": "Kamera musi być ustawiona pod kątem prostym do ściany", "darkness": "Mrok", @@ -156,7 +156,7 @@ "empgrenade_enemy_info": "Granat EMP wyłączył twój radar i celownik.", "enemyspawn": "Resp Wroga", - "enemyspawn_desc": "Kliknij [css_useSkill], aby teleportować się na resp wroga", + "enemyspawn_desc": "Naciśnij [css_useSkill], aby teleportować się na resp wroga", "expensiveammo": "Droga Amunicja", "expensiveammo_desc": "Wybrany przeciwnik musi płacić za każdy oddany strzał", @@ -166,17 +166,17 @@ "expensiveammo_select_info": "Wybierz gracza, którego amunicja stanie się droga:", "explodingbarrel": "Wybuchowa Beczka", - "explodingbarrel_desc": "Kliknij [css_useSkill], aby postawić beczkę, która wybucha po trafieniu", + "explodingbarrel_desc": "Naciśnij [css_useSkill], aby postawić beczkę, która wybucha po trafieniu", "explosiveshot": "Strzał Wybuchowy", "explosiveshot_desc": "Losowa szansa wystrzelenia pocisku wybuchowego podczas strzelania", "explosiveshot_desc2": "Twoja szansa na wystrzelenie pocisku wybuchowego: {0}%", "falconeye": "Oko Sokoła", - "falconeye_desc": "Kliknij [css_useSkill], aby aktywować kamerę z lotu ptaka", + "falconeye_desc": "Naciśnij [css_useSkill], aby aktywować kamerę z lotu ptaka", "fastreload": "Szybkie Rączki", - "fastreload_desc": "Kliknij [css_useSkill], aby przeładować broń, którą obecnie trzymasz", + "fastreload_desc": "Naciśnij [css_useSkill], aby przeładować broń, którą obecnie trzymasz", "firerain": "Deszcz Ognia", "firerain_desc": "Rzuć wabik, aby przywołać deszcz koktajli Mołotowa", @@ -186,10 +186,10 @@ "flash_desc2": "Twój mnożnik prędkości to {0}x", "flashlight": "Latarka", - "flashlight_desc": "Kliknij [css_useSkill], aby włączyć lub wyłączyć latarkę. Jej światło może oślepić przeciwników", + "flashlight_desc": "Naciśnij [css_useSkill], aby włączyć lub wyłączyć latarkę. Jej światło może oślepić przeciwników", "fortnite": "Fortnite", - "fortnite_desc": "Kliknij [css_useSkill], aby stworzyć barykadę, którą można zniszczyć", + "fortnite_desc": "Naciśnij [css_useSkill], aby stworzyć barykadę, którą można zniszczyć", "fragilebomb": "Krucha Bomba", "fragilebomb_desc": "Strzelanie do bomby powoduje jej uszkodzenie", @@ -232,7 +232,7 @@ "glue_desc": "Twoje granaty przyklejają się do ścian", "godmode": "Nieśmiertelność", - "godmode_desc": "Kliknij [css_useSkill], aby stać się nieśmiertelnym na krótką chwilę", + "godmode_desc": "Naciśnij [css_useSkill], aby stać się nieśmiertelnym na krótką chwilę", "godmode_off": "Nieśmiertelność wyłączona", "godmode_on": "Nieśmiertelność włączona", @@ -271,7 +271,7 @@ "hotbomb_disable_info": "Bomba już nie parzy.", "iana": "Hologram", - "iana_desc": "Kliknij [css_useSkill], aby sterować hologramem przez kilka sekund", + "iana_desc": "Naciśnij [css_useSkill], aby sterować hologramem przez kilka sekund", "illiterate": "Analfabeta", "illiterate_desc": "Dopóki żyjesz, Twoi wrogowie nie potrafią czytać", @@ -366,7 +366,7 @@ "magnifier_select_info": "Powiększ ekran gracza:", "medic": "Medyk", - "medic_desc": "Kliknij [css_useSkill], aby użyć ładunku leczniczego, który przywraca 50 punktów zdrowia", + "medic_desc": "Naciśnij [css_useSkill], aby użyć ładunku leczniczego, który przywraca 50 punktów zdrowia", "miner": "Bomberman", "miner_desc": "Twoje granaty HE wybuchają tylko wtedy, gdy w pobliżu jest wróg", @@ -400,7 +400,7 @@ "norecoil_desc": "Brak odrzutu podczas strzelania", "noclip": "NoClip", - "noclip_desc": "Kliknij [css_useSkill], aby włączyć noclip na krótki czas", + "noclip_desc": "Naciśnij [css_useSkill], aby włączyć noclip na krótki czas", "oneshot": "Jednostrzałowiec", "oneshot_desc": "Po trafieniu natychmiast zabijasz przeciwnika", @@ -467,7 +467,7 @@ "rambo_desc": "Na początku rundy otrzymujesz losową ilość zdrowia", "randomweapon": "Losowa Broń", - "randomweapon_desc": "Kliknij [css_useSkill], aby otrzymać losową broń", + "randomweapon_desc": "Naciśnij [css_useSkill], aby otrzymać losową broń", "rezombie": "Re-Zombie", "rezombie_desc": "Po śmierci odradzasz się jako zombie z większym zdrowiem i bez broni", @@ -479,10 +479,10 @@ "regeneration_desc": "Co kilka sekund odnawiasz zdrowie", "replicator": "Replikator", - "replicator_desc": "Kliknij [css_useSkill], aby stworzyć swoją replikę, która zadaje obrażenia po trafieniu", + "replicator_desc": "Naciśnij [css_useSkill], aby stworzyć swoją replikę, która zadaje obrażenia po trafieniu", "retreat": "Odwrót", - "retreat_desc": "Kliknij [css_useSkill], aby powrócić na resp", + "retreat_desc": "Naciśnij [css_useSkill], aby powrócić na resp", "returntosender": "Zwrot do Nadawcy", "returntosender_desc": "Pierwsze trafienie wroga powoduje, że wraca on na swój resp", @@ -525,7 +525,7 @@ "sniperelite": "Papito", "sniperelite_customname": "Mityczna AWP", - "sniperelite_desc": "Kliknij [css_useSkill], aby zamienić aktualną broń na AWP", + "sniperelite_desc": "Naciśnij [css_useSkill], aby zamienić aktualną broń na AWP", "soldier": "Żołnierz", "soldier_desc": "Masz losowy mnożnik obrażeń", @@ -535,13 +535,13 @@ "soundmaker_desc": "Co jakiś czas słyszysz krzyki graczy", "spectator": "Obserwator", - "spectator_desc": "Kliknij [css_useSkill], aby obserwować losowego przeciwnika", + "spectator_desc": "Naciśnij [css_useSkill], aby obserwować losowego przeciwnika", "swapposition": "Zamiana Miejsc", - "swapposition_desc": "Kliknij [css_useSkill], aby zamienić się miejscami z losowym przeciwnikiem", + "swapposition_desc": "Naciśnij [css_useSkill], aby zamienić się miejscami z losowym przeciwnikiem", "takeammo": "Zabierz Amunicję", - "takeammo_desc": "Kliknij [css_useSkill], aby zabrać magazynek aktywnej broni losowego przeciwnika", + "takeammo_desc": "Naciśnij [css_useSkill], aby zabrać magazynek aktywnej broni losowego przeciwnika", "takeammo_hud_info1": "Nie znaleziono gracza z aktywnym magazynkiem.", "takeammo_hud_info2": "Przeciwnik nie ma magazynków.", "takeammo_enemy_info": "Straciłeś trochę amunicji.", @@ -563,7 +563,7 @@ "thief_incorrect_skill": "Tej umiejętności nie można wybrać!", "thirdeye": "Trzecie Oko", - "thirdeye_desc": "Kliknij [css_useSkill], aby aktywować trzecią osobę", + "thirdeye_desc": "Naciśnij [css_useSkill], aby aktywować trzecią osobę", "thorns": "Ciernie", "thorns_desc": "Twój przeciwnik otrzymuje część obrażeń, które zadał ci", @@ -575,7 +575,7 @@ "toxicsmoke_desc": "Twoje granaty dymny zadają obrażenia", "tripwire": "Linka z Drutu", - "tripwire_desc": "Kliknij [css_useSkill], aby rozciągnąć drut między dwiema ścianami. Wrogowie, którzy go dotkną, pojawią się na Twoim radarze", + "tripwire_desc": "Naciśnij [css_useSkill], aby rozciągnąć drut między dwiema ścianami. Wrogowie, którzy go dotkną, pojawią się na Twoim radarze", "tripwire_no_wall_info": "Po obu stronach nie ma wystarczająco blisko położonych ścian.", "tripwire_placed_info": "Linka została rozstawiona.", "tripwire_triggered_info": "'{0}' uruchomił Twoją linkę.", @@ -597,7 +597,7 @@ "watchmaker_tt": "Czas rundy został wydłużony o {0} sekund", "weaponsswap": "Zamiana Broni", - "weaponsswap_desc": "Kliknij [css_useSkill], aby zamienić się bronią z losowym przeciwnikiem", + "weaponsswap_desc": "Naciśnij [css_useSkill], aby zamienić się bronią z losowym przeciwnikiem", "weaponsswap_hud_info2": "Nie posiadasz broni na zamiane", "weightless": "Nieważkość", @@ -616,7 +616,7 @@ "your_skill": "Twoja aktualna moc", "enemy_skill": "Supermoc przeciwnika", "observer_skill": "Moc gracza", - "welcome_message": "Witaj {PLAYER} na serwerze {SERVER_NAME}!\nAktualna wersja jRandomSkills: {VERSION} ({SKILLS_COUNT} supermocy).\n\nPierwotnie plugin stworzona przez:\n{AUTHOR1}\nZmodyfikowany i ulepszony przez:\n{AUTHOR2}\nOficjalny discord: https://discord.gg/9H8EZYBpPF", + "welcome_message": "Witaj {PLAYER} na serwerze {SERVER_NAME}!", "drawing_skill": "Losowanie mocy", "disabled_weapon": "Nie możesz używać tej broni", diff --git a/jRandomSkills - Server Files/plugins/jRandomSkills/languages/pt-br.json b/jRandomSkills - Server Files/plugins/jRandomSkills/languages/pt-br.json index c477c18..86f8549 100644 --- a/jRandomSkills - Server Files/plugins/jRandomSkills/languages/pt-br.json +++ b/jRandomSkills - Server Files/plugins/jRandomSkills/languages/pt-br.json @@ -6,7 +6,7 @@ "aimbot_desc": "Toda bala que você acertar conta como um hs", "aimlock": "Aim Lock", - "aimlock_desc": "Clique em [css_useSkill] para travar a mira no inimigo mais próximo", + "aimlock_desc": "Pressione [css_useSkill] para travar a mira no inimigo mais próximo", "anomaly": "Máquina do Tempo", "anomaly_desc": "Pressione [css_useSkill] para voltar alguns segundos no tempo", @@ -99,7 +99,7 @@ "cutter_desc": "Você mata instantaneamente com a faca", "cypher": "CFTV", - "cypher_desc": "Clique em [css_useSkill] para criar/mudar para uma câmera", + "cypher_desc": "Pressione [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", @@ -156,7 +156,7 @@ "empgrenade_enemy_info": "Uma granada EMP derrubou seu radar e sua mira.", "enemyspawn": "Spawn Inimigo", - "enemyspawn_desc": "Clique em [css_useSkill] para se teletransportar para a base inimiga", + "enemyspawn_desc": "Pressione [css_useSkill] para se teletransportar para a base inimiga", "expensiveammo": "Munição Cara", "expensiveammo_desc": "Um inimigo escolhido precisa pagar por cada disparo", @@ -166,17 +166,17 @@ "expensiveammo_select_info": "Selecione um jogador cuja munição ficará cara:", "explodingbarrel": "Barril Explosivo", - "explodingbarrel_desc": "Clique em [css_useSkill] para colocar um barril que explode quando atingido", + "explodingbarrel_desc": "Pressione [css_useSkill] para colocar um barril que explode quando atingido", "explosiveshot": "Tiro Explosivo", "explosiveshot_desc": "Chance aleatória de disparar uma bala explosiva enquanto atira", "explosiveshot_desc2": "Sua chance de disparar uma bala explosiva: {0}%", "falconeye": "Olho de Águia", - "falconeye_desc": "Clique em [css_useSkill] para ativar uma câmera 360 com visão aérea", + "falconeye_desc": "Pressione [css_useSkill] para ativar uma câmera 360 com visão aérea", "fastreload": "Recarga Rápida", - "fastreload_desc": "Clique em [css_useSkill] para recarregar a arma que você está segurando", + "fastreload_desc": "Pressione [css_useSkill] para recarregar a arma que você está segurando", "firerain": "Chuva de Fogo", "firerain_desc": "Jogue uma isca para chamar uma chuva de Molotovs", @@ -186,10 +186,10 @@ "flash_desc2": "Seu multiplicador de velocidade é: {0}x", "flashlight": "Lanterna", - "flashlight_desc": "Clique em [css_useSkill] para ligar ou desligar a lanterna. Sua luz pode cegar os inimigos", + "flashlight_desc": "Pressione [css_useSkill] para ligar ou desligar a lanterna. Sua luz pode cegar os inimigos", "fortnite": "Fortnite", - "fortnite_desc": "Clique em [css_useSkill] para criar uma barreira destrutível", + "fortnite_desc": "Pressione [css_useSkill] para criar uma barreira destrutível", "fragilebomb": "Bomba Frágil", "fragilebomb_desc": "Atirar na bomba a danifica", @@ -232,7 +232,7 @@ "glue_desc": "Suas granadas grudam nas paredes", "godmode": "Modo Deus", - "godmode_desc": "Clique em [css_useSkill] para se tornar imortal por alguns segundos", + "godmode_desc": "Pressione [css_useSkill] para se tornar imortal por alguns segundos", "godmode_off": "Imortalidade desativada", "godmode_on": "Imortalidade ativada", @@ -271,14 +271,14 @@ "hotbomb_disable_info": "A bomba não está mais queimando.", "iana": "Holograma", - "iana_desc": "Clique em [css_useSkill] para controlar seu holograma por alguns segundos", + "iana_desc": "Pressione [css_useSkill] para controlar seu holograma por alguns segundos", "illiterate": "Analfabeto", "illiterate_desc": "Enquanto você estiver vivo, seus inimigos não conseguem ler", "illiterate_alert": "Analfabeto está ativo! Você não pode ler mensagens até que o proprietário desta habilidade seja eliminado", "illusionist": "Ilusionista", - "illusionist_desc": "Clique em [css_useSkill] para enviar uma réplica que caminha em frente", + "illusionist_desc": "Pressione [css_useSkill] para enviar uma réplica que caminha em frente", "impostor": "Impostor", "impostor_desc": "Você começa a rodada vestido do time inimigo", @@ -366,7 +366,7 @@ "magnifier_select_info": "Ampliar tela do jogador:", "medic": "Médico", - "medic_desc": "Clique em [css_useSkill] para usar uma injeção que restaura 50 de vida", + "medic_desc": "Pressione [css_useSkill] para usar uma injeção que restaura 50 de vida", "miner": "Mineiro de Bombas", "miner_desc": "Sua granada HE só explode quando há um inimigo por perto", @@ -400,7 +400,7 @@ "norecoil_desc": "Sem recoil ao atirar", "noclip": "NoClip", - "noclip_desc": "Clique em [css_useSkill] para ativar noclip por poucos segundos", + "noclip_desc": "Pressione [css_useSkill] para ativar noclip por poucos segundos", "oneshot": "Ignorante", "oneshot_desc": "Acertar um inimigo o mata instantaneamente", @@ -467,7 +467,7 @@ "rambo_desc": "Você recebe uma quantidade aleatória de vida no início da rodada", "randomweapon": "Arma Aleatória", - "randomweapon_desc": "Clique em [css_useSkill] para receber uma arma aleatória", + "randomweapon_desc": "Pressione [css_useSkill] para receber uma arma aleatória", "rezombie": "Walking Dead", "rezombie_desc": "Após morrer, você renasce como um zumbi com mais vida porém sem armas", @@ -479,16 +479,16 @@ "regeneration_desc": "Você restaura vida a cada poucos segundos", "replicator": "Clone", - "replicator_desc": "Clique em [css_useSkill] para criar um clone que causa dano ao ser atingido", + "replicator_desc": "Pressione [css_useSkill] para criar um clone que causa dano ao ser atingido", "retreat": "De Volta as Origens", - "retreat_desc": "Clique em [css_useSkill] para retornar ao spawn", + "retreat_desc": "Pressione [css_useSkill] para retornar ao spawn", "returntosender": "Devolução ao Remetente", "returntosender_desc": "O primeiro tiro em um inimigo o envia de volta a sua base", "rewind": "Retroceder", - "rewind_desc": "Clique em [css_useSkill] para deixar uma marca aqui e voltar a ela logo depois", + "rewind_desc": "Pressione [css_useSkill] para deixar uma marca aqui e voltar a ela logo depois", "rewind_pending_info": "RETORNO: {0}", "richboy": "Filhinho de Papai", @@ -524,7 +524,7 @@ "smoker_desc": "Sis bombalarınız asla bitmez", "sniperelite": "Sniper do BOPE", - "sniperelite_desc": "Clique em [css_useSkill] para trocar sua arma atual por uma AWP", + "sniperelite_desc": "Pressione [css_useSkill] para trocar sua arma atual por uma AWP", "sniperelite_customname": "Keskin Nişancı Elit Yeteneği", "soldier": "Soldado", @@ -535,13 +535,13 @@ "soundmaker_desc": "De vez em quando, você ouve gritos de jogadores", "spectator": "Espectador", - "spectator_desc": "Clique em [css_useSkill] para ver a tela de um inimigo aleatório", + "spectator_desc": "Pressione [css_useSkill] para ver a tela de um inimigo aleatório", "swapposition": "Troca de Posição", - "swapposition_desc": "Clique em [css_useSkill] para trocar de lugar com um inimigo aleatório", + "swapposition_desc": "Pressione [css_useSkill] para trocar de lugar com um inimigo aleatório", "takeammo": "Pegar Munição", - "takeammo_desc": "Clique em [css_useSkill] para pegar o carregador da arma ativa de um inimigo aleatório", + "takeammo_desc": "Pressione [css_useSkill] para pegar o carregador da arma ativa de um inimigo aleatório", "takeammo_hud_info1": "Nenhum jogador com um carregador ativo foi encontrado.", "takeammo_hud_info2": "O inimigo não possui carregadores.", "takeammo_enemy_info": "Você perdeu um pouco de munição.", @@ -563,19 +563,19 @@ "thief_incorrect_skill": "Esta habilidade não pode ser selecionada!", "thirdeye": "Terceiro Olho", - "thirdeye_desc": "Clique em [css_useSkill] para ativar a terceira pessoa", + "thirdeye_desc": "Pressione [css_useSkill] para ativar a terceira pessoa", "thorns": "Porco Espinho", "thorns_desc": "Seu oponente receberá uma parte do dano que causou a você", "throwingknife": "Faca de Arremesso", - "throwingknife_desc": "Clique em [css_useSkill] para lançar uma faca. Mas cuidado com os outros", + "throwingknife_desc": "Pressione [css_useSkill] para lançar uma faca. Mas cuidado com os outros", "toxicsmoke": "Smoke Tóxica", "toxicsmoke_desc": "Suas smokes causam dano", "tripwire": "Fio de Armadilha", - "tripwire_desc": "Clique em [css_useSkill] para estender um fio entre duas paredes. Inimigos que tocarem nele aparecerão no seu radar", + "tripwire_desc": "Pressione [css_useSkill] para estender um fio entre duas paredes. Inimigos que tocarem nele aparecerão no seu radar", "tripwire_no_wall_info": "Não há paredes próximas o suficiente dos dois lados.", "tripwire_placed_info": "Fio de armadilha colocado.", "tripwire_triggered_info": "'{0}' acionou seu fio.", @@ -597,7 +597,7 @@ "watchmaker_tt": "Tempo da rodada estendido em {0} segundos.", "weaponsswap": "Troca de Armas", - "weaponsswap_desc": "Clique em [css_useSkill] para trocar armas com um inimigo aleatório", + "weaponsswap_desc": "Pressione [css_useSkill] para trocar armas com um inimigo aleatório", "weaponsswap_hud_info2": "Você não tem arma para trocar", "weightless": "Gravidade Zero", @@ -616,7 +616,7 @@ "your_skill": "Sua habilidade atual", "enemy_skill": "Habilidade do inimigo", "observer_skill": "Habilidade 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}!", "drawing_skill": "Sorteando uma habilidade", "disabled_weapon": "Você não pode usar esta arma", diff --git a/jRandomSkills - Server Files/plugins/jRandomSkills/languages/ru.json b/jRandomSkills - Server Files/plugins/jRandomSkills/languages/ru.json index 19f2012..91f6cd6 100644 --- a/jRandomSkills - Server Files/plugins/jRandomSkills/languages/ru.json +++ b/jRandomSkills - Server Files/plugins/jRandomSkills/languages/ru.json @@ -616,7 +616,7 @@ "your_skill": "Ваш текущий навык", "enemy_skill": "Навык врага", "observer_skill": "Навык игрока", - "welcome_message": "Добро пожаловать {PLAYER} на {SERVER_NAME}!\nТекущая версия jRandomSkills: {VERSION} ({SKILLS_COUNT} навыков).\n\nОригинал создан:\n{AUTHOR1}\nМодифицирован и улучшен:\n{AUTHOR2}\nОфициальный Discord: https://discord.gg/9H8EZYBpPF", + "welcome_message": "Добро пожаловать {PLAYER} на {SERVER_NAME}!", "drawing_skill": "Получение навыка", "disabled_weapon": "Вы не можете использовать это оружие", diff --git a/jRandomSkills - Server Files/plugins/jRandomSkills/languages/tr.json b/jRandomSkills - Server Files/plugins/jRandomSkills/languages/tr.json index 05d408f..2fea9a8 100644 --- a/jRandomSkills - Server Files/plugins/jRandomSkills/languages/tr.json +++ b/jRandomSkills - Server Files/plugins/jRandomSkills/languages/tr.json @@ -616,7 +616,7 @@ "your_skill": "Yeteneğin", "enemy_skill": "Düşmanın yeteneği", "observer_skill": "Yeteneği", - "welcome_message": "{PLAYER}, {SERVER_NAME} sunucusuna hoş geldin!\nGüncel jRandomSkills versiyonu: {VERSION} ({SKILLS_COUNT} yetenek).\n\nOrijinal yapımcı:\n{AUTHOR1}\nGeliştiren:\n{AUTHOR2}\nResmi Discord: https://discord.gg/9H8EZYBpPF", + "welcome_message": "{PLAYER}, {SERVER_NAME} sunucusuna hoş geldin!", "drawing_skill": "Yetenek çarkı dönüyor...", "disabled_weapon": "Bu silahı kullanamazsın", diff --git a/jRandomSkills - Server Files/plugins/jRandomSkills/languages/zh.json b/jRandomSkills - Server Files/plugins/jRandomSkills/languages/zh.json index 8726bc7..188e120 100644 --- a/jRandomSkills - Server Files/plugins/jRandomSkills/languages/zh.json +++ b/jRandomSkills - Server Files/plugins/jRandomSkills/languages/zh.json @@ -6,10 +6,10 @@ "aimbot_desc": "你击中的每颗子弹都算作爆头", "aimlock": "自", - "aimlock_desc": "点击 [css_useSkill] 瞄准距离最近的敌人", + "aimlock_desc": "按 [css_useSkill] 瞄准距离最近的敌人", "anomaly": "异常", - "anomaly_desc": "点击 [css_useSkill] 回到几秒钟前", + "anomaly_desc": "按 [css_useSkill] 回到几秒钟前", "antyflash": "防闪", "antyflash_desc": "你对闪光弹免疫,你的闪光弹持续7秒", @@ -93,7 +93,7 @@ "cutter_desc": "用刀刀人可立即杀死敌人", "cypher": "相机", - "cypher_desc": "点击 [css_useSkill] 创建/切换摄像机", + "cypher_desc": "按 [css_useSkill] 创建/切换摄像机", "cypher_nospace": "相机必须与墙壁呈直角放置", "darkness": "黑暗", @@ -143,7 +143,7 @@ "empgrenade_enemy_info": "电磁脉冲手雷让你的雷达和准星失效了。", "enemyspawn": "传送敌人出生点", - "enemyspawn_desc": "点击 [css_useSkill] 传送到敌人出生点", + "enemyspawn_desc": "按 [css_useSkill] 传送到敌人出生点", "expensiveammo": "expensiveammo", "expensiveammo_desc": "expensiveammo_desc", @@ -160,17 +160,17 @@ "explosiveshot_desc2": "你发射爆炸子弹的几率是:{0}%", "falconeye": "鹰眼", - "falconeye_desc": "点击 [css_useSkill] 激活俯视视角", + "falconeye_desc": "按 [css_useSkill] 激活俯视视角", "fastreload": "快速装弹", - "fastreload_desc": "点击 [css_useSkill] 重新装填你当前持有的武器", + "fastreload_desc": "按 [css_useSkill] 重新装填你当前持有的武器", "flash": "闪电", "flash_desc": "回合开始时获得随机玩家速度", "flash_desc2": "你的速度倍率是:{0}x", "fortnite": "堡垒之夜玩家", - "fortnite_desc": "点击[css_useSkill]创建可破坏路障", + "fortnite_desc": "按[css_useSkill]创建可破坏路障", "fragilebomb": "脆弱炸弹", "fragilebomb_desc": "射击炸弹会对其造成伤害", @@ -213,7 +213,7 @@ "glue_desc": "你的手榴弹会粘在墙上", "godmode": "我就是神", - "godmode_desc": "点击 [css_useSkill] 在短时间内变得无敌", + "godmode_desc": "按 [css_useSkill] 在短时间内变得无敌", "godmode_off": "无敌状态已禁用", "godmode_on": "无敌状态已启用", @@ -249,14 +249,14 @@ "hotbomb_disable_info": "炸弹不再烫手了。", "iana": "全息图", - "iana_desc": "点击 [css_useSkill] 可控制你的全息影像数秒", + "iana_desc": "按 [css_useSkill] 可控制你的全息影像数秒", "illiterate": "文盲", "illiterate_desc": "只要你还活着,你的敌人就无法阅读", "illiterate_alert": "文盲已激活!在该技能的拥有者被消灭之前,你无法阅读消息。", "illusionist": "幻术师", - "illusionist_desc": "点击 [css_useSkill] 部署一个直线行走的幻象", + "illusionist_desc": "按 [css_useSkill] 部署一个直线行走的幻象", "impostor": "间谍", "impostor_desc": "回合开始时你获得敌方玩家模型", @@ -332,7 +332,7 @@ "magnifier_select_info": "选择需要放大的玩家:", "medic": "医疗兵", - "medic_desc": "点击 [css_useSkill] 使用治疗装置恢复50点生命值", + "medic_desc": "按 [css_useSkill] 使用治疗装置恢复50点生命值", "miner": "炸弹矿工", "miner_desc": "你的高爆手雷仅在附近有敌人时才会爆炸", @@ -370,7 +370,7 @@ "norecoil_desc": "射击时无后坐力", "noclip": "无碰撞", - "noclip_desc": "点击 [css_useSkill] 在短时间内启用无碰撞模式", + "noclip_desc": "按 [css_useSkill] 在短时间内启用无碰撞模式", "oneshot": "一击必杀", "oneshot_desc": "击中敌人立即杀死他们", @@ -437,7 +437,7 @@ "rambo_desc": "回合开始时你获得随机数量的生命值", "randomweapon": "随机武器", - "randomweapon_desc": "点击 [css_useSkill] 获得随机武器", + "randomweapon_desc": "按 [css_useSkill] 获得随机武器", "rezombie": "重生僵尸", "rezombie_desc": "死亡后你将作为僵尸复活,拥有更多生命值但无武器", @@ -449,10 +449,10 @@ "regeneration_desc": "每隔几秒恢复生命值", "replicator": "复制者", - "replicator_desc": "点击 [css_useSkill] 创建一个造成伤害的复制体", + "replicator_desc": "按 [css_useSkill] 创建一个造成伤害的复制体", "retreat": "撤退", - "retreat_desc": "点击 [css_useSkill] 返回出生点", + "retreat_desc": "按 [css_useSkill] 返回出生点", "returntosender": "发送他们房子!!!", "returntosender_desc": "首次击中敌人会将其送回出生点", @@ -495,7 +495,7 @@ "sniperelite": "狙击精英", "sniperelite_customname": "狙击精英技能", - "sniperelite_desc": "点击 [css_useSkill] 将当前武器替换为AWP", + "sniperelite_desc": "按 [css_useSkill] 将当前武器替换为AWP", "soldier": "士兵", "soldier_desc": "你有随机伤害倍率", @@ -505,10 +505,10 @@ "soundmaker_desc": "你会不时听到玩家的惨叫声", "spectator": "观察者", - "spectator_desc": "点击 [css_useSkill] 旁观一个随机敌人", + "spectator_desc": "按 [css_useSkill] 旁观一个随机敌人", "swapposition": "位置交换", - "swapposition_desc": "点击 [css_useSkill] 与随机敌人交换位置", + "swapposition_desc": "按 [css_useSkill] 与随机敌人交换位置", "teleporter": "传送者", "teleporter_desc": "你与被击中的敌人交换位置", @@ -521,13 +521,13 @@ "thief_incorrect_skill": "此技能无法选择!", "thirdeye": "第三只眼", - "thirdeye_desc": "点击 [css_useSkill] 激活第三人称视角", + "thirdeye_desc": "按 [css_useSkill] 激活第三人称视角", "thorns": "荊棘", "thorns_desc": "你的对手将承受其对你造成伤害的一部分", "throwingknife": "投掷飞刀", - "throwingknife_desc": "点击 [css_useSkill] 扔出飞刀。但要小心其他人", + "throwingknife_desc": "按 [css_useSkill] 扔出飞刀。但要小心其他人", "toxicsmoke": "毒烟", "toxicsmoke_desc": "你的烟雾弹会造成伤害", @@ -555,7 +555,7 @@ "watchmaker_tt": "回合时间延长了 {0} 秒。", "weaponsswap": "武器交换", - "weaponsswap_desc": "点击 [css_useSkill] 与随机敌人交换武器", + "weaponsswap_desc": "按 [css_useSkill] 与随机敌人交换武器", "weaponsswap_hud_info2": "你没有可交换的武器", "weightless": "失重", @@ -574,7 +574,7 @@ "your_skill": "你当前的技能", "enemy_skill": "敌人的技能", "observer_skill": "玩家的技能", - "welcome_message": "欢迎 {PLAYER} 来到 {SERVER_NAME}!\n当前 jRandomSkills 版本:{VERSION}({SKILLS_COUNT} 个技能)。\n\n最初由以下人员创建:\n{AUTHOR1}\n由以下人员修改和改进:\n{AUTHOR2}\n官方Discord:https://discord.gg/9H8EZYBpPF", + "welcome_message": "欢迎 {PLAYER} 来到 {SERVER_NAME}!", "drawing_skill": "抽取技能", "disabled_weapon": "你无法使用这把武器",