v1.2.3.b2 - Part 2
## GENERAL - Added a css_entity admin command to check whether an entity with a given index/handle exists (prints the designer name to chat or console). - Added a TakeDamage post-hook (OnTakeDamagePost) alongside the existing pre-hook, so skills can now react after damage has actually been applied, not just before. - Added CreateMolotovProjectile (new CMolotovProjectile_CreateFunc signature) and CreateTrackedChicken entity helpers. - Added a weapon_mp7 → weapon_mp5sd fallback mapping. - Added class for KillfeedIcons ## SKILL IMPROVEMENTS - Aimbot: -- Only forces a headshot hitgroup once (skips if it's already a head or an invalid hitgroup), and now restores the original hitgroup value in the new post-damage hook instead of leaving it overwritten. - Tripwire: -- Reduced the default wire width from 1.5 to 0.7. ## NEW SKILLS: - Berserker: You deal more damage and move faster as your health gets lower. - Blast Shot: Press Attack2 with the MP5 to fire an HE grenade. - Demon Eye: You deal damage to every enemy you are looking at. - Fire Rain: Throw a decoy to call down a rain of Molotovs. - Flashlight: Click [css_useSkill] to turn the flashlight on or off; its light can blind enemies. - Healing Chicken: Your chickens heal you while you are nearby. - Jetkick: Select a player to jetkick - every shot they fire knocks them backwards until disabled. - Last Gasp: After you die, you deal damage to the enemy who killed you. - Take Ammo: Click [css_useSkill] to take the active weapon's magazine from a random enemy. - Team Teleport: Press [css_useSkill] to teleport to the teammate you're looking at.
This commit is contained in:
parent
203a0c3986
commit
8038a4d646
57 changed files with 3663 additions and 553 deletions
|
|
@ -14,6 +14,10 @@
|
|||
<None Remove="tools\**" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<None Include="src\player\skills\TeamTeleport.cs" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="CounterStrikeSharp.API" Version="1.0.371" />
|
||||
<PackageReference Include="MaxMind.Db" Version="5.1.0">
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
using CounterStrikeSharp.API;
|
||||
using CounterStrikeSharp.API.Core;
|
||||
using CounterStrikeSharp.API.Core.Attributes.Registration;
|
||||
using CounterStrikeSharp.API.Modules.Admin;
|
||||
using CounterStrikeSharp.API.Modules.Commands;
|
||||
using CounterStrikeSharp.API.Modules.Entities.Constants;
|
||||
|
|
@ -49,6 +50,7 @@ namespace src.command
|
|||
{ SplitCommands(config.NormalCommands.ChangeLanguageCommand.Alias), ("Change language", Command_ChangeLanguage) },
|
||||
{ SplitCommands(config.NormalCommands.ReloadCommand.Alias), ("Reaload configs", Command_Reload) },
|
||||
{ SplitCommands(config.NormalCommands.NextCommand.Alias), ("Next skill", Command_Next) },
|
||||
{ SplitCommands(config.NormalCommands.CheckEntityCommand.Alias), ("Check entity", Command_CheckEntity) },
|
||||
|
||||
{ SplitCommands(config.VotingCommands.ChangeMapCommand.Alias), ("Change map", Command_ChangeMap) },
|
||||
{ SplitCommands(config.VotingCommands.StartGameCommand.Alias), ("Start game", Command_StartGame) },
|
||||
|
|
@ -184,6 +186,35 @@ namespace src.command
|
|||
Menu.DisplaySkillsList(player);
|
||||
}
|
||||
|
||||
[CommandHelper(minArgs: 1, whoCanExecute: CommandUsage.CLIENT_AND_SERVER)]
|
||||
private static void Command_CheckEntity(CCSPlayerController? player, CommandInfo command)
|
||||
{
|
||||
Debug.WriteToDebug($"Player {player?.PlayerName} used the css_entity {command.ArgString} command.");
|
||||
|
||||
if (player != null && player.IsValid)
|
||||
if (!string.IsNullOrEmpty(config.NormalCommands.CheckEntityCommand.Permissions) && !AdminManager.PlayerHasPermissions(player, config.NormalCommands.CheckEntityCommand.Permissions))
|
||||
return;
|
||||
|
||||
int.TryParse(command.GetArg(1), out int index);
|
||||
if (index == -1)
|
||||
{
|
||||
if (player == null)
|
||||
{
|
||||
Server.PrintToConsole("Invalid entity index!");
|
||||
return;
|
||||
}
|
||||
player.PrintToChat("Invalid entity index!");
|
||||
return;
|
||||
}
|
||||
|
||||
var entity = Utilities.GetAllEntities().FirstOrDefault(e => e != null && e.IsValid && (e.Index == index || e.Handle == (nint)index));
|
||||
|
||||
if (player == null)
|
||||
Server.PrintToConsole(entity != null ? $"Entity {entity?.DesignerName} exists!" : "Entity does not exist!");
|
||||
else
|
||||
player.PrintToChat(entity != null ? $"Entity {entity?.DesignerName} exists!" : "Entity does not exist!");
|
||||
}
|
||||
|
||||
[CommandHelper(minArgs: 1, whoCanExecute: CommandUsage.CLIENT_AND_SERVER)]
|
||||
private static void Command_ChangeMap(CCSPlayerController? player, CommandInfo command)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -13,6 +13,13 @@
|
|||
"linux": "55 4C 89 C1 48 89 E5 41 57 49 89 FF 41 56 49 89 D6 48 89 F2 48 89 FE 41 55 48 8D 3D ? ? ? ? 4D 89 C5 41 54 45 89 CC 53"
|
||||
}
|
||||
},
|
||||
"CMolotovProjectile_CreateFunc": {
|
||||
"signatures": {
|
||||
"library": "server",
|
||||
"windows": "48 8B C4 48 89 58 10 4C 89 40 18 48 89 48 08",
|
||||
"linux": "55 48 8D 05 ? ? ? ? 48 89 E5 41 57 41 56 41 55 41 54 49 89 FC 53 48 81 EC ? ? ? ? 4C 8D 35"
|
||||
}
|
||||
},
|
||||
"Shoot_Secondary": {
|
||||
"signatures": {
|
||||
"library": "server",
|
||||
|
|
|
|||
|
|
@ -51,9 +51,15 @@
|
|||
"behind_desc": "Du hast eine zufällige Chance, einen Feind um 180 Grad zu drehen, wenn du ihn triffst",
|
||||
"behind_desc2": "Deine Chance, einen Feind bei einem Treffer zu drehen, beträgt: {0} %",
|
||||
|
||||
"berserker": "Berserker",
|
||||
"berserker_desc": "Du verursachst mehr Schaden und bewegst dich schneller, je weniger Gesundheit du hast",
|
||||
|
||||
"blademaster": "Schwertmeister",
|
||||
"blademaster_desc": "Wenn du ein Messer hältst, hast du eine hohe Chance, einen Schuss abzuwehren",
|
||||
|
||||
"blastshot": "Explosivschuss",
|
||||
"blastshot_desc": "Drücke Attack2 mit der MP5, um eine HE-Granate abzufeuern",
|
||||
|
||||
"bunnyhop": "Hase",
|
||||
"bunnyhop_desc": "Du erhältst automatisch bunnyhop",
|
||||
|
||||
|
|
@ -104,6 +110,13 @@
|
|||
"deaf_player_info": "Der Ton für den Spieler ‚{0}‘ wurde deaktiviert.",
|
||||
"deaf_select_info": "Alle Töne für den Spieler stummschalten:",
|
||||
|
||||
"deathbomb": "Todesbombe",
|
||||
"deathbomb_desc": "Du explodierst beim Tod und tötest Spieler in deiner Nähe",
|
||||
"deathbomb_explosion": "Kaboom!",
|
||||
|
||||
"demoneye": "Dämonenauge",
|
||||
"demoneye_desc": "Du verursachst allen Gegnern Schaden, die du ansiehst",
|
||||
|
||||
"disarmament": "Entwaffnung",
|
||||
"disarmament_desc": "Du hast eine zufällige Chance, einen Gegner bei einem Treffer seine Waffe fallen zu lassen.",
|
||||
"disarmament_desc2": "Ihre Chance, einen Gegner zu entwaffnen, beträgt: {0} %",
|
||||
|
|
@ -129,15 +142,15 @@
|
|||
"enemyspawn": "Feindes-Spawn",
|
||||
"enemyspawn_desc": "Klicke auf [css_useSkill], um zum Feindes-Spawn zu teleportieren",
|
||||
|
||||
"expensiveammo": "expensiveammo",
|
||||
"expensiveammo_desc": "expensiveammo_desc",
|
||||
"expensiveammo_disable_info": "expensiveammo_disable_info",
|
||||
"expensiveammo_enemy_info": "expensiveammo_enemy_info: {0}",
|
||||
"expensiveammo_player_info": "expensiveammo_player_info: {0}",
|
||||
"expensiveammo_select_info": "expensiveammo_select_info",
|
||||
"expensiveammo": "Teure Munition",
|
||||
"expensiveammo_desc": "Ein ausgewählter Gegner muss für jeden Schuss bezahlen",
|
||||
"expensiveammo_disable_info": "Deine Kugeln sind wieder kostenlos.",
|
||||
"expensiveammo_enemy_info": "Jeder Schuss kostet dich jetzt {0}$.",
|
||||
"expensiveammo_player_info": "Spieler '{0}' muss jetzt für jede Kugel bezahlen.",
|
||||
"expensiveammo_select_info": "Wähle einen Spieler, dessen Munition teuer wird:",
|
||||
|
||||
"explodingbarrel": "explodingbarrel",
|
||||
"explodingbarrel_desc": "explodingbarrel_desc",
|
||||
"explodingbarrel": "Explosives Fass",
|
||||
"explodingbarrel_desc": "Klicke auf [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",
|
||||
|
|
@ -149,10 +162,16 @@
|
|||
"fastreload": "Schnellnachladen",
|
||||
"fastreload_desc": "Klicke auf [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",
|
||||
|
||||
"flash": "Blitz",
|
||||
"flash_desc": "Zufällige Spielergeschwindigkeit zu Beginn der Runde",
|
||||
"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",
|
||||
|
||||
"fortnite": "Fortnite",
|
||||
"fortnite_desc": "Klicke auf [css_useSkill], um eine zerstörbare Barrikade zu erstellen",
|
||||
|
||||
|
|
@ -175,13 +194,13 @@
|
|||
"ghost": "Geist",
|
||||
"ghost_desc": "Du bist vollständig unsichtbar",
|
||||
|
||||
"giant": "giant",
|
||||
"giant_desc": "giant_desc",
|
||||
"giant_desc2": "giant_desc2: {0}x",
|
||||
"giant_disable_info": "giant_disable_info",
|
||||
"giant_enemy_info": "giant_enemy_info: {0}x",
|
||||
"giant_player_info": "giant_player_info: {0} {1}",
|
||||
"giant_select_info": "giant_select_info",
|
||||
"giant": "Riese",
|
||||
"giant_desc": "Vergrößere einen Gegner deiner Wahl",
|
||||
"giant_desc2": "Vergrößere einen Gegner deiner Wahl auf das {0}-Fache seiner normalen Größe",
|
||||
"giant_disable_info": "Du hast wieder deine normale Größe.",
|
||||
"giant_enemy_info": "Du wurdest auf das {0}-Fache deiner normalen Größe vergrößert.",
|
||||
"giant_player_info": "Du hast Spieler '{0}' auf das {1}-Fache seiner normalen Größe vergrößert.",
|
||||
"giant_select_info": "Wähle einen Spieler zum Vergrößern:",
|
||||
|
||||
"glaz": "Glaz",
|
||||
"glaz_desc": "Du kannst durch Rauchgranaten hindurchsehen",
|
||||
|
|
@ -207,6 +226,9 @@
|
|||
"healingsmoke": "Heilender Rauch",
|
||||
"healingsmoke_desc": "Deine Rauchgranaten heilen",
|
||||
|
||||
"healingchicken": "Heilendes Huhn",
|
||||
"healingchicken_desc": "Deine Hühner heilen dich, solange du in ihrer Nähe bist",
|
||||
|
||||
"hermit": "Einsiedler",
|
||||
"hermit_desc": "Durch das Töten von Gegnern werden Munition und ein Teil der Gesundheit wiederhergestellt",
|
||||
|
||||
|
|
@ -252,6 +274,12 @@
|
|||
"jester_on": "EIN",
|
||||
"jester_off": "AUS",
|
||||
|
||||
"jetkick": "Jetkick",
|
||||
"jetkick_desc": "Wähle einen Spieler für einen Jetkick",
|
||||
"jetkick_player_info": "Spieler '{0}' wurde wegge-kickt.",
|
||||
"jetkick_enemy_info": "Jeder Schuss stößt dich nach hinten",
|
||||
"jetkick_disable_info": "Dein Rückstoß ist wieder normal.",
|
||||
|
||||
"jumpban": "Beinlos",
|
||||
"jumpban_desc": "Wähle einen Spieler, der nicht springen kann",
|
||||
"jumpban_enemy_info": "Jemand hat dir die Beine abgeschnitten.",
|
||||
|
|
@ -259,12 +287,12 @@
|
|||
"jumpban_player_info": "Der Spieler ‚{0}‘ kann nicht mehr springen.",
|
||||
"jumpban_select_info": "Spieler vom Springen ausschließen:",
|
||||
|
||||
"jumpcurse": "jumpcurse",
|
||||
"jumpcurse_desc": "jumpcurse_desc",
|
||||
"jumpcurse_disable_info": "jumpcurse_disable_info",
|
||||
"jumpcurse_enemy_info": "jumpcurse_enemy_info",
|
||||
"jumpcurse_player_info": "jumpcurse_player_info: {0}",
|
||||
"jumpcurse_select_info": "jumpcurse_select_info",
|
||||
"jumpcurse": "Sprungfluch",
|
||||
"jumpcurse_desc": "Ein ausgewählter Gegner springt jedes Mal, wenn einer seiner Teamkollegen springt",
|
||||
"jumpcurse_disable_info": "Du kannst deine Sprünge wieder selbst kontrollieren.",
|
||||
"jumpcurse_enemy_info": "Du springst jetzt jedes Mal, wenn einer deiner Teamkollegen springt.",
|
||||
"jumpcurse_player_info": "Spieler '{0}' springt jetzt jedes Mal, wenn seine Teamkollegen springen.",
|
||||
"jumpcurse_select_info": "Wähle einen Spieler für den Fluch:",
|
||||
|
||||
"jumpingjack": "Jumping Jack",
|
||||
"jumpingjack_desc": "Durch Springen wird die Gesundheit wiederhergestellt",
|
||||
|
|
@ -272,8 +300,11 @@
|
|||
"killerflash": "Killer Flash",
|
||||
"killerflash_desc": "Jeder, der durch deine Blendgranate vollständig geblendet wird, stirbt (einschließlich dir selbst)",
|
||||
|
||||
"knockback": "knockback",
|
||||
"knockback_desc": "knockback_desc",
|
||||
"knockback": "Rückstoß",
|
||||
"knockback_desc": "Schießen in der Luft stößt dich nach hinten",
|
||||
|
||||
"lastgasp": "Letzter Atemzug",
|
||||
"lastgasp_desc": "Nach deinem Tod fügst du dem Gegner, der dich getötet hat, Schaden zu",
|
||||
|
||||
"lifeswap": "Lebensaustausch",
|
||||
"lifeswap_desc": "Wähle einen Spieler aus, mit dem du deine Gesundheit austauschen möchtest",
|
||||
|
|
@ -312,16 +343,12 @@
|
|||
"bankrupt_player_info": "Der Spieler ‚{0}‘ ist bankrott.",
|
||||
"bankrupt_select_info": "Wähle einen Spieler aus, der bankrott gehen soll:",
|
||||
|
||||
"deathbomb": "Todesbombe",
|
||||
"deathbomb_desc": "Du explodierst beim Tod und tötest Spieler in deiner Nähe",
|
||||
"deathbomb_explosion": "Kaboom!",
|
||||
|
||||
"nightmare": "nightmare",
|
||||
"nightmare_desc": "nightmare_desc",
|
||||
"nightmare_disable_info": "nightmare_disable_info",
|
||||
"nightmare_enemy_info": "nightmare_enemy_info",
|
||||
"nightmare_player_info": "nightmare_player_info: {0}",
|
||||
"nightmare_select_info": "nightmare_select_info",
|
||||
"nightmare": "Albtraum",
|
||||
"nightmare_desc": "Lass einen ausgewählten Gegner eine schreckliche Vision erleben",
|
||||
"nightmare_disable_info": "Der Albtraum ist vorbei.",
|
||||
"nightmare_enemy_info": "Ein Albtraum trübt deine Sicht.",
|
||||
"nightmare_player_info": "Du hast Spieler '{0}' einen Albtraum verpasst.",
|
||||
"nightmare_select_info": "Wähle einen Spieler für den Albtraum:",
|
||||
|
||||
"ninja": "Ninja",
|
||||
"ninja_desc": "Wenn du stillstehst, erhöht sich deine Unsichtbarkeit um 33 %, wenn du dich duckst um 33 % und wenn du ein Messer hältst um 33 %",
|
||||
|
|
@ -462,6 +489,17 @@
|
|||
"swapposition": "Positionstausch",
|
||||
"swapposition_desc": "Klicke auf [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_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.",
|
||||
|
||||
"teamteleport": "Team-Teleport",
|
||||
"teamteleport_desc": "Drücke [css_useSkill], um dich zu dem anvisierten Teammitglied zu teleportieren",
|
||||
"teamteleport_noenemy": "Kein Teammitglied gefunden",
|
||||
"teamteleport_hud_info": "Gefunden: {0}",
|
||||
|
||||
"teleporter": "Teleporter",
|
||||
"teleporter_desc": "Du hast die Chance, die Plätze mit einem getroffenen Gegner zu tauschen",
|
||||
"teleporter_desc2": "Deine Chance auf Platztausch nach einem Treffer: {0}%",
|
||||
|
|
@ -485,11 +523,11 @@
|
|||
"toxicsmoke": "Giftiger Rauch",
|
||||
"toxicsmoke_desc": "Deine Rauchgranaten verursachen Schaden",
|
||||
|
||||
"tripwire": "tripwire",
|
||||
"tripwire_desc": "tripwire_desc",
|
||||
"tripwire_no_wall_info": "tripwire_no_wall_info",
|
||||
"tripwire_placed_info": "tripwire_placed_info",
|
||||
"tripwire_triggered_info": "tripwire_triggered_info: {0}",
|
||||
"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_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.",
|
||||
|
||||
"wallhack": "Wallhack",
|
||||
"wallhack_desc": "Du kannst Feinde durch Wände hindurch sehen",
|
||||
|
|
|
|||
|
|
@ -51,9 +51,15 @@
|
|||
"behind_desc": "You have a random chance to turn an enemy 180 degrees when hitting them",
|
||||
"behind_desc2": "Your chance to turn an enemy on hit is: {0}%",
|
||||
|
||||
"berserker": "Berserker",
|
||||
"berserker_desc": "You deal more damage and move faster as your health gets lower",
|
||||
|
||||
"blademaster": "Blademaster",
|
||||
"blademaster_desc": "While holding a knife, you have a high chance to deflect a shot",
|
||||
|
||||
"blastshot": "Blast Shot",
|
||||
"blastshot_desc": "Press Attack2 with the MP5 to fire an HE grenade",
|
||||
|
||||
"bunnyhop": "Bunny",
|
||||
"bunnyhop_desc": "You get auto \"BunnyHop\"",
|
||||
|
||||
|
|
@ -130,11 +136,11 @@
|
|||
"enemyspawn_desc": "Click [css_useSkill] to teleport to the enemy spawn",
|
||||
|
||||
"expensiveammo": "Expensive Ammo",
|
||||
"expensiveammo_desc": "A chosen enemy loses money with every shot",
|
||||
"expensiveammo_desc": "A chosen enemy has to pay for every shot",
|
||||
"expensiveammo_disable_info": "Your bullets are free again.",
|
||||
"expensiveammo_enemy_info": "Every shot you fire now costs you {0}$.",
|
||||
"expensiveammo_player_info": "Player '{0}' now pays for every bullet.",
|
||||
"expensiveammo_select_info": "Select player whose ammo becomes expensive:",
|
||||
"expensiveammo_player_info": "Player '{0}' now has to pay for every bullet.",
|
||||
"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",
|
||||
|
|
@ -149,10 +155,16 @@
|
|||
"fastreload": "Fastreload",
|
||||
"fastreload_desc": "Click [css_useSkill] to reload the weapon you are currently holding",
|
||||
|
||||
"firerain": "Fire Rain",
|
||||
"firerain_desc": "Throw a decoy to call down a rain of Molotovs",
|
||||
|
||||
"flash": "Flash",
|
||||
"flash_desc": "Random player speed at the beginning of the round",
|
||||
"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",
|
||||
|
||||
"fortnite": "Fortnite",
|
||||
"fortnite_desc": "Click [css_useSkill] to create a destructible barricade",
|
||||
|
||||
|
|
@ -177,11 +189,11 @@
|
|||
|
||||
"giant": "Giant",
|
||||
"giant_desc": "Enlarge an enemy of your choice",
|
||||
"giant_desc2": "Enlarge an enemy of your choice to {0}x",
|
||||
"giant_desc2": "Enlarge an enemy of your choice to {0}x their normal size",
|
||||
"giant_disable_info": "You are back to your normal size.",
|
||||
"giant_enemy_info": "You have been enlarged to {0}x.",
|
||||
"giant_player_info": "You enlarged player '{0}' to {1}x.",
|
||||
"giant_select_info": "Enlarge player:",
|
||||
"giant_enemy_info": "You have been enlarged to {0}x your normal size.",
|
||||
"giant_player_info": "You enlarged player '{0}' to {1}x their normal size.",
|
||||
"giant_select_info": "Select a player to enlarge:",
|
||||
|
||||
"glaz": "Glaz",
|
||||
"glaz_desc": "You can see through smoke grenades",
|
||||
|
|
@ -204,6 +216,9 @@
|
|||
"grenadier": "Grenadier",
|
||||
"grenadier_desc": "You have infinite hegrenade",
|
||||
|
||||
"healingchicken": "Healing Chicken",
|
||||
"healingchicken_desc": "Your chickens heal you while you are nearby",
|
||||
|
||||
"healingsmoke": "Healing Smoke",
|
||||
"healingsmoke_desc": "Your smoke grenades heal",
|
||||
|
||||
|
|
@ -252,6 +267,12 @@
|
|||
"jester_on": "ON",
|
||||
"jester_off": "OFF",
|
||||
|
||||
"jetkick": "Jetkick",
|
||||
"jetkick_desc": "Select a player to jetkick",
|
||||
"jetkick_player_info": "Player '{0}' has been jetkicked.",
|
||||
"jetkick_enemy_info": "Every shot knocks you backwards",
|
||||
"jetkick_disable_info": "Your recoil is back to normal.",
|
||||
|
||||
"jumpban": "Legless",
|
||||
"jumpban_desc": "Choose a player who cannot jump",
|
||||
"jumpban_enemy_info": "Someone cut off your legs.",
|
||||
|
|
@ -260,11 +281,11 @@
|
|||
"jumpban_select_info": "Ban player from jumping:",
|
||||
|
||||
"jumpcurse": "Jump Curse",
|
||||
"jumpcurse_desc": "A chosen enemy jumps whenever their teammates jump",
|
||||
"jumpcurse_disable_info": "Your legs are your own again.",
|
||||
"jumpcurse_enemy_info": "You now jump whenever your teammates jump.",
|
||||
"jumpcurse_player_info": "Player '{0}' now jumps with their team.",
|
||||
"jumpcurse_select_info": "Select player for the jump curse:",
|
||||
"jumpcurse_desc": "A chosen enemy jumps whenever one of their teammates jumps",
|
||||
"jumpcurse_disable_info": "You can control your jumps again.",
|
||||
"jumpcurse_enemy_info": "You now jump whenever one of your teammates jumps.",
|
||||
"jumpcurse_player_info": "Player '{0}' now jumps whenever their teammates do.",
|
||||
"jumpcurse_select_info": "Select a player to curse:",
|
||||
|
||||
"jumpingjack": "Jumping Jack",
|
||||
"jumpingjack_desc": "Jumping restores health",
|
||||
|
|
@ -275,6 +296,9 @@
|
|||
"knockback": "Knockback",
|
||||
"knockback_desc": "Firing while airborne pushes you backwards",
|
||||
|
||||
"lastgasp": "Last Gasp",
|
||||
"lastgasp_desc": "After you die, you deal damage to the enemy who killed you",
|
||||
|
||||
"lifeswap": "Life Swap",
|
||||
"lifeswap_desc": "Choose a player to swap health with",
|
||||
"lifeswap_enemy_info": "Someone borrowed your health.",
|
||||
|
|
@ -316,12 +340,15 @@
|
|||
"deathbomb_desc": "You explode upon death, killing nearby players",
|
||||
"deathbomb_explosion": "Kaboom!",
|
||||
|
||||
"demoneye": "Demon Eye",
|
||||
"demoneye_desc": "You deal damage to every enemy you are looking at",
|
||||
|
||||
"nightmare": "Nightmare",
|
||||
"nightmare_desc": "Give a chosen enemy a nightmarish vision",
|
||||
"nightmare_desc": "Force a chosen enemy to experience a terrifying vision",
|
||||
"nightmare_disable_info": "The nightmare has faded.",
|
||||
"nightmare_enemy_info": "A nightmare clouds your vision.",
|
||||
"nightmare_enemy_info": "A nightmare is clouding your vision.",
|
||||
"nightmare_player_info": "You cast a nightmare on player '{0}'.",
|
||||
"nightmare_select_info": "Select player for the nightmare:",
|
||||
"nightmare_select_info": "Select a player to inflict with a nightmare:",
|
||||
|
||||
"ninja": "Ninja",
|
||||
"ninja_desc": "Standing still increases your invisibility by 33%, crouching by 33%, and holding a knife by 33%",
|
||||
|
|
@ -462,6 +489,17 @@
|
|||
"swapposition": "Position Swap",
|
||||
"swapposition_desc": "Click [css_useSkill] 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_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_noenemy": "No teammate found",
|
||||
"teamteleport_hud_info": "Found: {0}",
|
||||
|
||||
"teleporter": "Teleporter",
|
||||
"teleporter_desc": "You have the chance to swap places with a hit enemy",
|
||||
"teleporter_desc2": "Your chances of swapping places after a hit: {0}%",
|
||||
|
|
@ -486,10 +524,10 @@
|
|||
"toxicsmoke_desc": "Your smoke grenades deal damage",
|
||||
|
||||
"tripwire": "Tripwire",
|
||||
"tripwire_desc": "Click [css_useSkill] to string a wire between two walls. Enemies touching it show on your radar",
|
||||
"tripwire_no_wall_info": "No walls close enough on both sides.",
|
||||
"tripwire_desc": "Click [css_useSkill] 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}' tripped your wire.",
|
||||
"tripwire_triggered_info": "'{0}' triggered your tripwire.",
|
||||
|
||||
"wallhack": "Wallhack",
|
||||
"wallhack_desc": "You can see enemies through walls",
|
||||
|
|
|
|||
|
|
@ -19,7 +19,7 @@
|
|||
|
||||
"areareaper": "Faucheur de Zone",
|
||||
"areareaper_desc": "Vous pouvez choisir un site de bombe à désactiver",
|
||||
"areareaper_incorrect_site": "Aucun site de bombe trouvé.",
|
||||
"areareaper_incorrect_site": "Aucun site de bombe trouvé",
|
||||
"areareaper_no_site": "Aucun site de bombe disponible.",
|
||||
"areareaper_select_info": "Sélectionnez un site à désactiver :",
|
||||
"areareaper_site_disabled": "Le site de bombe {0} a été désactivé – aucune bombe ne peut y être posée !",
|
||||
|
|
@ -51,9 +51,15 @@
|
|||
"behind_desc": "Vous avez une chance aléatoire de retourner un ennemi à 180° en le touchant",
|
||||
"behind_desc2": "Votre chance de retourner un ennemi à l’impact est : {0}%",
|
||||
|
||||
"berserker": "Berserker",
|
||||
"berserker_desc": "Vous infligez plus de dégâts et vous déplacez plus vite à mesure que votre santé diminue",
|
||||
|
||||
"blademaster": "Maître de Lame",
|
||||
"blademaster_desc": "En tenant un couteau, vous avez une forte chance de dévier un tir",
|
||||
|
||||
"blastshot": "Tir explosif",
|
||||
"blastshot_desc": "Appuyez sur Attack2 avec le MP5 pour tirer une grenade HE",
|
||||
|
||||
"bunnyhop": "Lapin",
|
||||
"bunnyhop_desc": "Vous obtenez l’auto « BunnyHop »",
|
||||
|
||||
|
|
@ -104,6 +110,13 @@
|
|||
"deaf_player_info": "Le son a été désactivé pour le joueur « {0} ».",
|
||||
"deaf_select_info": "Couper tous les sons du joueur :",
|
||||
|
||||
"deathbomb": "Bombe",
|
||||
"deathbomb_desc": "Vous explosez à votre mort, tuant les joueurs proches",
|
||||
"deathbomb_explosion": "Kaboom!",
|
||||
|
||||
"demoneye": "Œil démoniaque",
|
||||
"demoneye_desc": "Vous infligez des dégâts à tous les ennemis que vous regardez",
|
||||
|
||||
"disarmament": "Désarmement",
|
||||
"disarmament_desc": "Vous avez une chance aléatoire de faire lâcher son arme à un ennemi en le touchant",
|
||||
"disarmament_desc2": "Votre chance de désarmer un ennemi est : {0}%",
|
||||
|
|
@ -129,15 +142,15 @@
|
|||
"enemyspawn": "Spawn Ennemi",
|
||||
"enemyspawn_desc": "Appuyez sur [css_useSkill] pour vous téléporter au spawn ennemi",
|
||||
|
||||
"expensiveammo": "expensiveammo",
|
||||
"expensiveammo_desc": "expensiveammo_desc",
|
||||
"expensiveammo_disable_info": "expensiveammo_disable_info",
|
||||
"expensiveammo_enemy_info": "expensiveammo_enemy_info: {0}",
|
||||
"expensiveammo_player_info": "expensiveammo_player_info: {0}",
|
||||
"expensiveammo_select_info": "expensiveammo_select_info",
|
||||
"expensiveammo": "Munitions coûteuses",
|
||||
"expensiveammo_desc": "Un ennemi choisi doit payer pour chaque tir",
|
||||
"expensiveammo_disable_info": "Vos balles sont à nouveau gratuites.",
|
||||
"expensiveammo_enemy_info": "Chaque tir que vous effectuez vous coûte maintenant {0}$.",
|
||||
"expensiveammo_player_info": "Le joueur '{0}' doit maintenant payer pour chaque balle.",
|
||||
"expensiveammo_select_info": "Sélectionnez un joueur dont les munitions deviendront coûteuses :",
|
||||
|
||||
"explodingbarrel": "explodingbarrel",
|
||||
"explodingbarrel_desc": "explodingbarrel_desc",
|
||||
"explodingbarrel": "Baril explosif",
|
||||
"explodingbarrel_desc": "Cliquez 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",
|
||||
|
|
@ -149,10 +162,16 @@
|
|||
"fastreload": "Recharge Rapide",
|
||||
"fastreload_desc": "Appuyez sur [css_useSkill] pour recharger l’arme que vous tenez",
|
||||
|
||||
"firerain": "Pluie de feu",
|
||||
"firerain_desc": "Lancez un leurre pour déclencher une pluie de cocktails Molotov",
|
||||
|
||||
"flash": "Flash",
|
||||
"flash_desc": "Vitesse de joueur aléatoire au début du round",
|
||||
"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",
|
||||
|
||||
"fortnite": "Fortnite",
|
||||
"fortnite_desc": "Appuyez sur [css_useSkill] pour créer une barricade destructible",
|
||||
|
||||
|
|
@ -175,13 +194,13 @@
|
|||
"ghost": "Fantôme",
|
||||
"ghost_desc": "Vous êtes complètement invisible",
|
||||
|
||||
"giant": "giant",
|
||||
"giant_desc": "giant_desc",
|
||||
"giant_desc2": "giant_desc2: {0}x",
|
||||
"giant_disable_info": "giant_disable_info",
|
||||
"giant_enemy_info": "giant_enemy_info: {0}x",
|
||||
"giant_player_info": "giant_player_info: {0} {1}",
|
||||
"giant_select_info": "giant_select_info",
|
||||
"giant": "Géant",
|
||||
"giant_desc": "Agrandissez un ennemi de votre choix",
|
||||
"giant_desc2": "Agrandissez un ennemi de votre choix jusqu'à {0}x sa taille normale",
|
||||
"giant_disable_info": "Vous avez retrouvé votre taille normale.",
|
||||
"giant_enemy_info": "Vous avez été agrandi à {0}x votre taille normale.",
|
||||
"giant_player_info": "Vous avez agrandi le joueur '{0}' jusqu'à {1}x sa taille normale.",
|
||||
"giant_select_info": "Sélectionnez un joueur à agrandir :",
|
||||
|
||||
"glaz": "Glaz",
|
||||
"glaz_desc": "Vous pouvez voir à travers les fumigènes",
|
||||
|
|
@ -207,6 +226,9 @@
|
|||
"healingsmoke": "Fumigène Soin",
|
||||
"healingsmoke_desc": "Vos fumigènes soignent",
|
||||
|
||||
"healingchicken": "Poulet guérisseur",
|
||||
"healingchicken_desc": "Vos poulets vous soignent lorsque vous êtes à proximité",
|
||||
|
||||
"hermit": "Ermite",
|
||||
"hermit_desc": "Tuer restaure des munitions et une partie de vos PV",
|
||||
|
||||
|
|
@ -252,6 +274,12 @@
|
|||
"jester_on": "ACTIVÉ",
|
||||
"jester_off": "DÉSACTIVÉ",
|
||||
|
||||
"jetkick": "Coup de pied propulsé",
|
||||
"jetkick_desc": "Sélectionnez un joueur pour lui donner un coup de pied propulsé",
|
||||
"jetkick_player_info": "Le joueur '{0}' a reçu un coup de pied propulsé.",
|
||||
"jetkick_enemy_info": "Chaque tir vous repousse vers l'arrière",
|
||||
"jetkick_disable_info": "Votre recul est revenu à la normale.",
|
||||
|
||||
"jumpban": "Sans Jambes",
|
||||
"jumpban_desc": "Choisissez un joueur qui ne pourra plus sauter",
|
||||
"jumpban_enemy_info": "Quelqu’un vous a coupé les jambes.",
|
||||
|
|
@ -259,12 +287,12 @@
|
|||
"jumpban_player_info": "Le joueur « {0} » ne peut plus sauter.",
|
||||
"jumpban_select_info": "Interdire de sauter au joueur :",
|
||||
|
||||
"jumpcurse": "jumpcurse",
|
||||
"jumpcurse_desc": "jumpcurse_desc",
|
||||
"jumpcurse_disable_info": "jumpcurse_disable_info",
|
||||
"jumpcurse_enemy_info": "jumpcurse_enemy_info",
|
||||
"jumpcurse_player_info": "jumpcurse_player_info: {0}",
|
||||
"jumpcurse_select_info": "jumpcurse_select_info",
|
||||
"jumpcurse": "Malédiction du saut",
|
||||
"jumpcurse_desc": "Un ennemi choisi saute chaque fois que l'un de ses coéquipiers saute",
|
||||
"jumpcurse_disable_info": "Vous pouvez à nouveau contrôler vos sauts.",
|
||||
"jumpcurse_enemy_info": "Vous sautez maintenant chaque fois que l'un de vos coéquipiers saute.",
|
||||
"jumpcurse_player_info": "Le joueur '{0}' saute maintenant chaque fois que ses coéquipiers sautent.",
|
||||
"jumpcurse_select_info": "Sélectionnez un joueur à maudire :",
|
||||
|
||||
"jumpingjack": "Sauteur",
|
||||
"jumpingjack_desc": "Sauter vous rend de la vie",
|
||||
|
|
@ -272,8 +300,12 @@
|
|||
"killerflash": "Flash Mortel",
|
||||
"killerflash_desc": "Toute personne totalement aveuglée par votre flashbang meurt (y compris vous)",
|
||||
|
||||
"knockback": "knockback",
|
||||
"knockback_desc": "knockback_desc",
|
||||
"knockback": "Repoussement",
|
||||
"knockback_desc": "Tirer dans les airs vous repousse vers l'arrière",
|
||||
|
||||
"lastgasp": "Dernier souffle",
|
||||
"lastgasp_desc": "Après votre mort, vous infligez des dégâts à l'ennemi qui vous a tué",
|
||||
|
||||
"lifeswap": "Échange de Vie",
|
||||
"lifeswap_desc": "Choisissez un joueur avec qui échanger votre santé",
|
||||
"lifeswap_enemy_info": "Quelqu’un a emprunté votre santé.",
|
||||
|
|
@ -311,16 +343,12 @@
|
|||
"bankrupt_player_info": "Le joueur « {0} » est en faillite.",
|
||||
"bankrupt_select_info": "Mettre un joueur en faillite :",
|
||||
|
||||
"deathbomb": "Bombe",
|
||||
"deathbomb_desc": "Vous explosez à votre mort, tuant les joueurs proches",
|
||||
"deathbomb_explosion": "Kaboom!",
|
||||
|
||||
"nightmare": "nightmare",
|
||||
"nightmare_desc": "nightmare_desc",
|
||||
"nightmare_disable_info": "nightmare_disable_info",
|
||||
"nightmare_enemy_info": "nightmare_enemy_info",
|
||||
"nightmare_player_info": "nightmare_player_info: {0}",
|
||||
"nightmare_select_info": "nightmare_select_info",
|
||||
"nightmare": "Cauchemar",
|
||||
"nightmare_desc": "Faites subir une vision terrifiante à un ennemi choisi",
|
||||
"nightmare_disable_info": "Le cauchemar s'est dissipé.",
|
||||
"nightmare_enemy_info": "Un cauchemar obscurcit votre vision.",
|
||||
"nightmare_player_info": "Vous avez lancé un cauchemar sur le joueur '{0}'.",
|
||||
"nightmare_select_info": "Sélectionnez un joueur pour le cauchemar :",
|
||||
|
||||
"ninja": "Ninja",
|
||||
"ninja_desc": "Rester immobile augmente votre invisibilité de 33%, s’accroupir de 33%, et tenir un couteau de 33%",
|
||||
|
|
@ -461,6 +489,17 @@
|
|||
"swapposition": "Échange de Position",
|
||||
"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_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.",
|
||||
|
||||
"teamteleport": "Téléportation d'équipe",
|
||||
"teamteleport_desc": "Appuyez sur [css_useSkill] pour vous téléporter vers le coéquipier que vous regardez",
|
||||
"teamteleport_noenemy": "Aucun coéquipier trouvé",
|
||||
"teamteleport_hud_info": "Trouvé : {0}",
|
||||
|
||||
"teleporter": "Téléporteur",
|
||||
"teleporter_desc": "Vous avez une chance d'échanger votre place avec un ennemi touché",
|
||||
"teleporter_desc2": "Vos chances d'échanger votre place après un coup : {0}%",
|
||||
|
|
@ -484,11 +523,11 @@
|
|||
"toxicsmoke": "Fumée Toxique",
|
||||
"toxicsmoke_desc": "Vos grenades fumigènes infligent des dégâts",
|
||||
|
||||
"tripwire": "tripwire",
|
||||
"tripwire_desc": "tripwire_desc",
|
||||
"tripwire_no_wall_info": "tripwire_no_wall_info",
|
||||
"tripwire_placed_info": "tripwire_placed_info",
|
||||
"tripwire_triggered_info": "tripwire_triggered_info: {0}",
|
||||
"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_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.",
|
||||
|
||||
"wallhack": "Wallhack",
|
||||
"wallhack_desc": "Vous pouvez voir les ennemis à travers les murs",
|
||||
|
|
|
|||
|
|
@ -51,9 +51,15 @@
|
|||
"behind_desc": "Masz losową szansę na obrócenie wroga o 180 stopni po trafieniu go",
|
||||
"behind_desc2": "Twoje szanse na obrócenie wroga po trafieniu to: {0}%",
|
||||
|
||||
"berserker": "Berserker",
|
||||
"berserker_desc": "Zadajesz więcej obrażeń i poruszasz się szybciej, gdy masz mniej zdrowia",
|
||||
|
||||
"blademaster": "Mistrz Ostrza",
|
||||
"blademaster_desc": "Trzymając nóż, masz duże szanse na odparcie strzału",
|
||||
|
||||
"blastshot": "Mocne Uderzenie",
|
||||
"blastshot_desc": "Naciśnij Attack2 na MP5, aby wystrzelić granat HE",
|
||||
|
||||
"bunnyhop": "Królik",
|
||||
"bunnyhop_desc": "Otrzymujesz auto \"BunnyHopa\"",
|
||||
|
||||
|
|
@ -104,6 +110,13 @@
|
|||
"deaf_player_info": "Dźwięk został wyłączony dla gracza '{0}'.",
|
||||
"deaf_select_info": "Wycisz dźwięki gracza:",
|
||||
|
||||
"deathbomb": "Ludzka bomba",
|
||||
"deathbomb_desc": "Po śmierci eksplodujesz i zabijasz graczy znajdujących się w zasięgu",
|
||||
"deathbomb_explosion": "Kaboom!",
|
||||
|
||||
"demoneye": "Oko Demona",
|
||||
"demoneye_desc": "Zadajesz obrażenia wszystkim przeciwnikom, na których patrzysz",
|
||||
|
||||
"disarmament": "Rozbrojenie",
|
||||
"disarmament_desc": "Masz losową szanse na wyrzucenie broni wroga po trafieniu",
|
||||
"disarmament_desc2": "Twoje szanse na wyrzucenie broni wroga to: {0}%",
|
||||
|
|
@ -129,15 +142,15 @@
|
|||
"enemyspawn": "Resp Wroga",
|
||||
"enemyspawn_desc": "Kliknij [css_useSkill], aby teleportować się na resp wroga",
|
||||
|
||||
"expensiveammo": "expensiveammo",
|
||||
"expensiveammo_desc": "expensiveammo_desc",
|
||||
"expensiveammo_disable_info": "expensiveammo_disable_info",
|
||||
"expensiveammo_enemy_info": "expensiveammo_enemy_info: {0}",
|
||||
"expensiveammo_player_info": "expensiveammo_player_info: {0}",
|
||||
"expensiveammo_select_info": "expensiveammo_select_info",
|
||||
"expensiveammo": "Droga Amunicja",
|
||||
"expensiveammo_desc": "Wybrany przeciwnik musi płacić za każdy oddany strzał",
|
||||
"expensiveammo_disable_info": "Twoje pociski znów są darmowe.",
|
||||
"expensiveammo_enemy_info": "Każdy Twój strzał kosztuje teraz {0}$.",
|
||||
"expensiveammo_player_info": "Gracz '{0}' musi teraz płacić za każdy pocisk.",
|
||||
"expensiveammo_select_info": "Wybierz gracza, którego amunicja stanie się droga:",
|
||||
|
||||
"explodingbarrel": "explodingbarrel",
|
||||
"explodingbarrel_desc": "explodingbarrel_desc",
|
||||
"explodingbarrel": "Wybuchowa Beczka",
|
||||
"explodingbarrel_desc": "Kliknij [css_useSkill], aby postawić beczkę, która wybucha po trafieniu",
|
||||
|
||||
"explosiveshot": "Strzał Wybuchowy",
|
||||
"explosiveshot_desc": "Losowa szansa wystrzelenia pocisku wybuchowego podczas strzelania",
|
||||
|
|
@ -149,10 +162,16 @@
|
|||
"fastreload": "Szybkie Rączki",
|
||||
"fastreload_desc": "Kliknij [css_useSkill], aby przeładować broń, którą obecnie trzymasz",
|
||||
|
||||
"firerain": "Deszcz Ognia",
|
||||
"firerain_desc": "Rzuć wabik, aby przywołać deszcz koktajli Mołotowa",
|
||||
|
||||
"flash": "Flash",
|
||||
"flash_desc": "Losowa prędkośc postaci na początku rundy",
|
||||
"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",
|
||||
|
||||
"fortnite": "Fortnite",
|
||||
"fortnite_desc": "Kliknij [css_useSkill], aby stworzyć barykadę, którą można zniszczyć",
|
||||
|
||||
|
|
@ -175,13 +194,13 @@
|
|||
"ghost": "Duszek",
|
||||
"ghost_desc": "Jesteś całkowicie niewidzialny",
|
||||
|
||||
"giant": "giant",
|
||||
"giant_desc": "giant_desc",
|
||||
"giant_desc2": "giant_desc2: {0}x",
|
||||
"giant_disable_info": "giant_disable_info",
|
||||
"giant_enemy_info": "giant_enemy_info: {0}x",
|
||||
"giant_player_info": "giant_player_info: {0} {1}",
|
||||
"giant_select_info": "giant_select_info",
|
||||
"giant": "Olbrzym",
|
||||
"giant_desc": "Powiększ wybranego przeciwnika",
|
||||
"giant_desc2": "Powiększ wybranego przeciwnika do {0}x normalnego rozmiaru",
|
||||
"giant_disable_info": "Wróciłeś do normalnego rozmiaru.",
|
||||
"giant_enemy_info": "Zostałeś powiększony do {0}x normalnego rozmiaru.",
|
||||
"giant_player_info": "Powiększyłeś gracza '{0}' do {1}x normalnego rozmiaru.",
|
||||
"giant_select_info": "Wybierz gracza do powiększenia:",
|
||||
|
||||
"glaz": "Glaz",
|
||||
"glaz_desc": "Nie widzisz granatów dymnych",
|
||||
|
|
@ -207,6 +226,9 @@
|
|||
"healingsmoke": "Leczący Dym",
|
||||
"healingsmoke_desc": "Twoje granaty dymne leczą",
|
||||
|
||||
"healingchicken": "Lecząca Kura",
|
||||
"healingchicken_desc": "Twoje kury leczą Cię, gdy jesteś w pobliżu",
|
||||
|
||||
"hermit": "Pustelnik",
|
||||
"hermit_desc": "Zabijanie przywraca amunicję i część zdrowia",
|
||||
|
||||
|
|
@ -252,6 +274,12 @@
|
|||
"jester_on": "WŁ.",
|
||||
"jester_off": "WYŁ.",
|
||||
|
||||
"jetkick": "Odrzutowy Kop",
|
||||
"jetkick_desc": "Wybierz gracza, aby użyć na nim odrzutowego kopa",
|
||||
"jetkick_player_info": "Gracz '{0}' został odrzucony kopem.",
|
||||
"jetkick_enemy_info": "Każdy strzał mocno odrzuca Cię do tyłu",
|
||||
"jetkick_disable_info": "Twój odrzut wrócił do normy.",
|
||||
|
||||
"jumpban": "Beznogi",
|
||||
"jumpban_desc": "Wybierasz gracza, który nie będzie mógł skakać",
|
||||
"jumpban_enemy_info": "Ktoś odciął ci nogi.",
|
||||
|
|
@ -259,12 +287,12 @@
|
|||
"jumpban_player_info": "Gracz '{0}' nie może teraz skakać.",
|
||||
"jumpban_select_info": "Zablokuj skok dla gracza:",
|
||||
|
||||
"jumpcurse": "jumpcurse",
|
||||
"jumpcurse_desc": "jumpcurse_desc",
|
||||
"jumpcurse_disable_info": "jumpcurse_disable_info",
|
||||
"jumpcurse_enemy_info": "jumpcurse_enemy_info",
|
||||
"jumpcurse_player_info": "jumpcurse_player_info: {0}",
|
||||
"jumpcurse_select_info": "jumpcurse_select_info",
|
||||
"jumpcurse": "Klątwa Skakania",
|
||||
"jumpcurse_desc": "Wybrany przeciwnik skacze za każdym razem, gdy skacze jeden z jego sojuszników",
|
||||
"jumpcurse_disable_info": "Znów możesz kontrolować swoje skoki.",
|
||||
"jumpcurse_enemy_info": "Teraz skaczesz za każdym razem, gdy skacze jeden z Twoich sojuszników.",
|
||||
"jumpcurse_player_info": "Gracz '{0}' skacze teraz za każdym razem, gdy robią to jego sojusznicy.",
|
||||
"jumpcurse_select_info": "Wybierz gracza do przeklęcia:",
|
||||
|
||||
"jumpingjack": "Pajacyk",
|
||||
"jumpingjack_desc": "Skakanie przywraca zdrowie",
|
||||
|
|
@ -272,8 +300,12 @@
|
|||
"killerflash": "Zabójczy Flash",
|
||||
"killerflash_desc": "Każdy całkowicie oślepiony twoim granatem umiera (również ty)",
|
||||
|
||||
"knockback": "knockback",
|
||||
"knockback_desc": "knockback_desc",
|
||||
"knockback": "Odrzut",
|
||||
"knockback_desc": "Strzelanie w powietrzu odpycha Cię do tyłu",
|
||||
|
||||
"lastgasp": "Ostatnie Tchnienie",
|
||||
"lastgasp_desc": "Po śmierci zadajesz obrażenia przeciwnikowi, który Cię zabił",
|
||||
|
||||
"lifeswap": "Zamiana Żyć",
|
||||
"lifeswap_desc": "Wybierasz gracza, z którym chcesz wymienić się zdrowiem",
|
||||
"lifeswap_enemy_info": "Ktoś pożyczył sobie twoje zdrowie.",
|
||||
|
|
@ -311,16 +343,12 @@
|
|||
"moneyswap_player_info": "Wymieniłeś swoje pieniądze z graczem '{0}'.",
|
||||
"moneyswap_select_info": "Zamień się kasą z graczem:",
|
||||
|
||||
"deathbomb": "Ludzka bomba",
|
||||
"deathbomb_desc": "Po śmierci eksplodujesz i zabijasz graczy znajdujących się w zasięgu",
|
||||
"deathbomb_explosion": "Kaboom!",
|
||||
|
||||
"nightmare": "nightmare",
|
||||
"nightmare_desc": "nightmare_desc",
|
||||
"nightmare_disable_info": "nightmare_disable_info",
|
||||
"nightmare_enemy_info": "nightmare_enemy_info",
|
||||
"nightmare_player_info": "nightmare_player_info: {0}",
|
||||
"nightmare_select_info": "nightmare_select_info",
|
||||
"nightmare": "Koszmar",
|
||||
"nightmare_desc": "Wywołaj u wybranego przeciwnika przerażającą wizję",
|
||||
"nightmare_disable_info": "Koszmar minął.",
|
||||
"nightmare_enemy_info": "Koszmar przesłania Ci wzrok.",
|
||||
"nightmare_player_info": "Rzuciłeś koszmar na gracza '{0}'.",
|
||||
"nightmare_select_info": "Wybierz gracza do nałożenia koszmaru:",
|
||||
|
||||
"ninja": "Ninja",
|
||||
"ninja_desc": "Stojąc nieruchomo zwiększasz swoją niewidzialność o 33%, kucając o 33%, a trzymając nóż o 33%",
|
||||
|
|
@ -461,6 +489,17 @@
|
|||
"swapposition": "Zamiana Miejsc",
|
||||
"swapposition_desc": "Kliknij [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_hud_info1": "Nie znaleziono gracza z aktywnym magazynkiem.",
|
||||
"takeammo_hud_info2": "Przeciwnik nie ma magazynków.",
|
||||
"takeammo_enemy_info": "Straciłeś trochę amunicji.",
|
||||
|
||||
"teamteleport": "Teleport do drużyny",
|
||||
"teamteleport_desc": "Naciśnij [css_useSkill], aby teleportować się do członka drużyny, na którego patrzysz",
|
||||
"teamteleport_noenemy": "Nie znaleziono członka drużyny",
|
||||
"teamteleport_hud_info": "Znaleziono: {0}",
|
||||
|
||||
"teleporter": "Teleporter",
|
||||
"teleporter_desc": "Masz szansę na zamianę miejsc z trafionym wrogiem",
|
||||
"teleporter_desc2": "Szansa na zamianę miejsc po trafieniu: {0}%",
|
||||
|
|
@ -484,11 +523,11 @@
|
|||
"toxicsmoke": "Toksyczny Dym",
|
||||
"toxicsmoke_desc": "Twoje granaty dymny zadają obrażenia",
|
||||
|
||||
"tripwire": "tripwire",
|
||||
"tripwire_desc": "tripwire_desc",
|
||||
"tripwire_no_wall_info": "tripwire_no_wall_info",
|
||||
"tripwire_placed_info": "tripwire_placed_info",
|
||||
"tripwire_triggered_info": "tripwire_triggered_info: {0}",
|
||||
"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_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ę.",
|
||||
|
||||
"wallhack": "Wallhack",
|
||||
"wallhack_desc": "Widzisz wrogów przez ściany",
|
||||
|
|
|
|||
|
|
@ -51,9 +51,15 @@
|
|||
"behind_desc": "Você tem uma chance aleatória de girar um inimigo 180 graus ao acertá-lo",
|
||||
"behind_desc2": "Sua chance de girar um inimigo ao acertá-lo é: {0}%",
|
||||
|
||||
"berserker": "Berserker",
|
||||
"berserker_desc": "Você causa mais dano e se move mais rápido conforme sua vida diminui",
|
||||
|
||||
"blademaster": "Mestre das Lâminas",
|
||||
"blademaster_desc": "Enquanto segura a faca, você tem chance de desviar de um tiro",
|
||||
|
||||
"blastshot": "Tiro Explosivo",
|
||||
"blastshot_desc": "Pressione Attack2 com a MP5 para disparar uma granada HE",
|
||||
|
||||
"bunnyhop": "Coelho",
|
||||
"bunnyhop_desc": "Você ganha \"BunnyHop\" automático",
|
||||
|
||||
|
|
@ -104,6 +110,13 @@
|
|||
"deaf_player_info": "O som foi desativado para o jogador '{0}'.",
|
||||
"deaf_select_info": "Silenciar jogador:",
|
||||
|
||||
"deathbomb": "Bomba mortal",
|
||||
"deathbomb_desc": "Você explode ao morrer, matando os jogadores próximos",
|
||||
"deathbomb_explosion": "Kaboom!",
|
||||
|
||||
"demoneye": "Olho Demoníaco",
|
||||
"demoneye_desc": "Você causa dano a todos os inimigos que estiver olhando",
|
||||
|
||||
"disarmament": "Desarmamento",
|
||||
"disarmament_desc": "Você tem uma chance aleatória de fazer um inimigo dropar a arma ao acertá-lo",
|
||||
"disarmament_desc2": "Sua chance de desarmar um inimigo é: {0}%",
|
||||
|
|
@ -129,15 +142,15 @@
|
|||
"enemyspawn": "Spawn Inimigo",
|
||||
"enemyspawn_desc": "Clique em [css_useSkill] para se teletransportar para a base inimiga",
|
||||
|
||||
"expensiveammo": "expensiveammo",
|
||||
"expensiveammo_desc": "expensiveammo_desc",
|
||||
"expensiveammo_disable_info": "expensiveammo_disable_info",
|
||||
"expensiveammo_enemy_info": "expensiveammo_enemy_info: {0}",
|
||||
"expensiveammo_player_info": "expensiveammo_player_info: {0}",
|
||||
"expensiveammo_select_info": "expensiveammo_select_info",
|
||||
"expensiveammo": "Munição Cara",
|
||||
"expensiveammo_desc": "Um inimigo escolhido precisa pagar por cada disparo",
|
||||
"expensiveammo_disable_info": "Suas balas voltaram a ser gratuitas.",
|
||||
"expensiveammo_enemy_info": "Agora cada tiro que você dispara custa {0}$.",
|
||||
"expensiveammo_player_info": "O jogador '{0}' agora precisa pagar por cada bala.",
|
||||
"expensiveammo_select_info": "Selecione um jogador cuja munição ficará cara:",
|
||||
|
||||
"explodingbarrel": "explodingbarrel",
|
||||
"explodingbarrel_desc": "explodingbarrel_desc",
|
||||
"explodingbarrel": "Barril Explosivo",
|
||||
"explodingbarrel_desc": "Clique em [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",
|
||||
|
|
@ -149,10 +162,16 @@
|
|||
"fastreload": "Recarga Rápida",
|
||||
"fastreload_desc": "Clique em [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",
|
||||
|
||||
"flash": "Ligeirinho",
|
||||
"flash_desc": "Velocidade de movimentação aleatória no início da rodada",
|
||||
"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",
|
||||
|
||||
"fortnite": "Fortnite",
|
||||
"fortnite_desc": "Clique em [css_useSkill] para criar uma barreira destrutível",
|
||||
|
||||
|
|
@ -175,13 +194,13 @@
|
|||
"ghost": "Fantasma",
|
||||
"ghost_desc": "Você é completamente invisível",
|
||||
|
||||
"giant": "giant",
|
||||
"giant_desc": "giant_desc",
|
||||
"giant_desc2": "giant_desc2: {0}x",
|
||||
"giant_disable_info": "giant_disable_info",
|
||||
"giant_enemy_info": "giant_enemy_info: {0}x",
|
||||
"giant_player_info": "giant_player_info: {0} {1}",
|
||||
"giant_select_info": "giant_select_info",
|
||||
"giant": "Gigante",
|
||||
"giant_desc": "Aumente o tamanho de um inimigo à sua escolha",
|
||||
"giant_desc2": "Aumente o tamanho de um inimigo à sua escolha para {0}x o tamanho normal",
|
||||
"giant_disable_info": "Você voltou ao seu tamanho normal.",
|
||||
"giant_enemy_info": "Você foi aumentado para {0}x o tamanho normal.",
|
||||
"giant_player_info": "Você aumentou o jogador '{0}' para {1}x o tamanho normal.",
|
||||
"giant_select_info": "Selecione um jogador para aumentar:",
|
||||
|
||||
"glaz": "Smoke Transparente",
|
||||
"glaz_desc": "Smokes tornam-se transparentes para você",
|
||||
|
|
@ -207,6 +226,9 @@
|
|||
"healingsmoke": "Smoke Amiga",
|
||||
"healingsmoke_desc": "Suas smokes curam",
|
||||
|
||||
"healingchicken": "Galinha Curadora",
|
||||
"healingchicken_desc": "Suas galinhas curam você enquanto você estiver por perto",
|
||||
|
||||
"hermit": "Sanguessuga",
|
||||
"hermit_desc": "Matar restaura munição e uma parte da sua vida",
|
||||
|
||||
|
|
@ -252,6 +274,12 @@
|
|||
"jester_on": "LIG.",
|
||||
"jester_off": "DESL.",
|
||||
|
||||
"jetkick": "Chute a Jato",
|
||||
"jetkick_desc": "Selecione um jogador para aplicar um chute a jato",
|
||||
"jetkick_player_info": "O jogador '{0}' recebeu um chute a jato.",
|
||||
"jetkick_enemy_info": "Cada tiro empurra você para trás",
|
||||
"jetkick_disable_info": "Seu recuo voltou ao normal.",
|
||||
|
||||
"jumpban": "Perneta",
|
||||
"jumpban_desc": "Escolha um jogador que não poderá pular",
|
||||
"jumpban_enemy_info": "Cortaram as suas pernas.",
|
||||
|
|
@ -259,12 +287,12 @@
|
|||
"jumpban_player_info": "O jogador '{0}' não pode mais pular.",
|
||||
"jumpban_select_info": "Banir pulo do jogador:",
|
||||
|
||||
"jumpcurse": "jumpcurse",
|
||||
"jumpcurse_desc": "jumpcurse_desc",
|
||||
"jumpcurse_disable_info": "jumpcurse_disable_info",
|
||||
"jumpcurse_enemy_info": "jumpcurse_enemy_info",
|
||||
"jumpcurse_player_info": "jumpcurse_player_info: {0}",
|
||||
"jumpcurse_select_info": "jumpcurse_select_info",
|
||||
"jumpcurse": "Maldição do Salto",
|
||||
"jumpcurse_desc": "Um inimigo escolhido pula sempre que um de seus companheiros pula",
|
||||
"jumpcurse_disable_info": "Você pode controlar seus saltos novamente.",
|
||||
"jumpcurse_enemy_info": "Agora você pula sempre que um de seus companheiros pula.",
|
||||
"jumpcurse_player_info": "O jogador '{0}' agora pula sempre que seus companheiros pulam.",
|
||||
"jumpcurse_select_info": "Selecione um jogador para amaldiçoar:",
|
||||
|
||||
"jumpingjack": "Pula-Pula",
|
||||
"jumpingjack_desc": "Pular restaura vida",
|
||||
|
|
@ -272,8 +300,11 @@
|
|||
"killerflash": "Flash Mortal",
|
||||
"killerflash_desc": "Qualquer pessoa cega pela sua flash morre (incluindo você)",
|
||||
|
||||
"knockback": "knockback",
|
||||
"knockback_desc": "knockback_desc",
|
||||
"knockback": "Repulsão",
|
||||
"knockback_desc": "Atirar enquanto estiver no ar empurra você para trás",
|
||||
|
||||
"lastgasp": "Último Suspiro",
|
||||
"lastgasp_desc": "Após morrer, você causa dano ao inimigo que matou você",
|
||||
|
||||
"lifeswap": "Troca de Vida",
|
||||
"lifeswap_desc": "Escolha um jogador para trocar de vida",
|
||||
|
|
@ -312,16 +343,12 @@
|
|||
"moneyswap_player_info": "Você trocou dinheiro com o jogador '{0}'.",
|
||||
"moneyswap_select_info": "Trocar dinheiro c/ jogador:",
|
||||
|
||||
"deathbomb": "Bomba mortal",
|
||||
"deathbomb_desc": "Você explode ao morrer, matando os jogadores próximos",
|
||||
"deathbomb_explosion": "Kaboom!",
|
||||
|
||||
"nightmare": "nightmare",
|
||||
"nightmare_desc": "nightmare_desc",
|
||||
"nightmare_disable_info": "nightmare_disable_info",
|
||||
"nightmare_enemy_info": "nightmare_enemy_info",
|
||||
"nightmare_player_info": "nightmare_player_info: {0}",
|
||||
"nightmare_select_info": "nightmare_select_info",
|
||||
"nightmare": "Pesadelo",
|
||||
"nightmare_desc": "Faça um inimigo escolhido ter uma visão aterrorizante",
|
||||
"nightmare_disable_info": "O pesadelo desapareceu.",
|
||||
"nightmare_enemy_info": "Um pesadelo está obscurecendo sua visão.",
|
||||
"nightmare_player_info": "Você lançou um pesadelo sobre o jogador '{0}'.",
|
||||
"nightmare_select_info": "Selecione um jogador para o pesadelo:",
|
||||
|
||||
"ninja": "Ninja",
|
||||
"ninja_desc": "Ficar parado aumenta sua invisibilidade em 33%, agachar em 33%, e segurar uma faca em 33%",
|
||||
|
|
@ -462,6 +489,17 @@
|
|||
"swapposition": "Troca de Posição",
|
||||
"swapposition_desc": "Clique em [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_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.",
|
||||
|
||||
"teamteleport": "Teleporte para o Time",
|
||||
"teamteleport_desc": "Pressione [css_useSkill] para se teleportar até o companheiro de equipe que você está olhando",
|
||||
"teamteleport_noenemy": "Nenhum companheiro de equipe encontrado",
|
||||
"teamteleport_hud_info": "Encontrado: {0}",
|
||||
|
||||
"teleporter": "Teletransportador",
|
||||
"teleporter_desc": "Você tem a chance de trocar de lugar com um inimigo atingido",
|
||||
"teleporter_desc2": "Sua chance de trocar de lugar após o acerto: {0}%",
|
||||
|
|
@ -485,11 +523,11 @@
|
|||
"toxicsmoke": "Smoke Tóxica",
|
||||
"toxicsmoke_desc": "Suas smokes causam dano",
|
||||
|
||||
"tripwire": "tripwire",
|
||||
"tripwire_desc": "tripwire_desc",
|
||||
"tripwire_no_wall_info": "tripwire_no_wall_info",
|
||||
"tripwire_placed_info": "tripwire_placed_info",
|
||||
"tripwire_triggered_info": "tripwire_triggered_info: {0}",
|
||||
"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_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.",
|
||||
|
||||
"wallhack": "Wallhack",
|
||||
"wallhack_desc": "Você pode ver inimigos através das paredes",
|
||||
|
|
|
|||
|
|
@ -38,11 +38,11 @@
|
|||
"astronaut_desc": "В начале раунда вам выдаётся случайное значение гравитации",
|
||||
"astronaut_desc2": "Ваша случайная гравитация: {0}x",
|
||||
|
||||
"moneyswap": "Налоговик",
|
||||
"moneyswap_desc": "Выберите игрока для обмена деньгами",
|
||||
"moneyswap_enemy_info": "Налоговая служба добралась до вас.",
|
||||
"moneyswap_player_info": "Вы обменялись деньгами с игроком '{0}'.",
|
||||
"moneyswap_select_info": "Обменять деньги с игроком:",
|
||||
"bankrupt": "Банкрот",
|
||||
"bankrupt_desc": "Выберите игрока, который потеряет все свои деньги",
|
||||
"bankrupt_enemy_info": "Вы обанкротились.",
|
||||
"bankrupt_player_info": "Игрок '{0}' обанкротился.",
|
||||
"bankrupt_select_info": "Выберите игрока для банкротства:",
|
||||
|
||||
"baseball": "Бейсболист",
|
||||
"baseball_desc": "Ваша ложная граната отскакивает от стен и мгновенно убивает врага при попадании",
|
||||
|
|
@ -51,9 +51,15 @@
|
|||
"behind_desc": "Есть шанс развернуть врага на 180° при попадании",
|
||||
"behind_desc2": "Ваш шанс развернуть врага при попадании: {0}%",
|
||||
|
||||
"berserker": "Берсерк",
|
||||
"berserker_desc": "Чем меньше у вас здоровья, тем больше урона вы наносите и тем быстрее двигаетесь",
|
||||
|
||||
"blademaster": "Мастер клинка",
|
||||
"blademaster_desc": "С ножом в руках у вас высокий шанс отразить выстрел",
|
||||
|
||||
"blastshot": "Взрывной выстрел",
|
||||
"blastshot_desc": "Нажмите Attack2 на MP5, чтобы выстрелить гранатой HE",
|
||||
|
||||
"bunnyhop": "Заяц",
|
||||
"bunnyhop_desc": "Вы получаете автоматический «БанниХоп»",
|
||||
|
||||
|
|
@ -104,6 +110,13 @@
|
|||
"deaf_player_info": "Звук отключён для игрока '{0}'.",
|
||||
"deaf_select_info": "Отключить звук для игрока:",
|
||||
|
||||
"deathbomb": "Смертельная бомба",
|
||||
"deathbomb_desc": "Вы взрываетесь при смерти, убивая ближайших игроков",
|
||||
"deathbomb_explosion": "АЛЛАХУ АКБАР!!!",
|
||||
|
||||
"demoneye": "Око демона",
|
||||
"demoneye_desc": "Вы наносите урон каждому врагу, на которого смотрите",
|
||||
|
||||
"disarmament": "Разоружение",
|
||||
"disarmament_desc": "Есть шанс заставить врага выронить оружие при попадании",
|
||||
"disarmament_desc2": "Ваш шанс разоружить врага: {0}%",
|
||||
|
|
@ -129,15 +142,15 @@
|
|||
"enemyspawn": "Спавн врагов",
|
||||
"enemyspawn_desc": "Нажмите [css_useSkill], чтобы телепортироваться на спавн врагов",
|
||||
|
||||
"expensiveammo": "expensiveammo",
|
||||
"expensiveammo_desc": "expensiveammo_desc",
|
||||
"expensiveammo_disable_info": "expensiveammo_disable_info",
|
||||
"expensiveammo_enemy_info": "expensiveammo_enemy_info: {0}",
|
||||
"expensiveammo_player_info": "expensiveammo_player_info: {0}",
|
||||
"expensiveammo_select_info": "expensiveammo_select_info",
|
||||
"expensiveammo": "Дорогие патроны",
|
||||
"expensiveammo_desc": "Выбранный противник платит за каждый выстрел",
|
||||
"expensiveammo_disable_info": "Теперь ваши патроны снова бесплатны.",
|
||||
"expensiveammo_enemy_info": "Теперь каждый ваш выстрел стоит {0}$.",
|
||||
"expensiveammo_player_info": "Игрок '{0}' теперь должен платить за каждый патрон.",
|
||||
"expensiveammo_select_info": "Выберите игрока, для которого патроны станут дорогими:",
|
||||
|
||||
"explodingbarrel": "explodingbarrel",
|
||||
"explodingbarrel_desc": "explodingbarrel_desc",
|
||||
"explodingbarrel": "Взрывающаяся бочка",
|
||||
"explodingbarrel_desc": "Нажмите [css_useSkill], чтобы установить бочку, которая взрывается при попадании",
|
||||
|
||||
"explosiveshot": "Взрывной выстрел",
|
||||
"explosiveshot_desc": "Случайный шанс выстрелить взрывной пулей при стрельбе",
|
||||
|
|
@ -149,10 +162,16 @@
|
|||
"fastreload": "Быстрая перезарядка",
|
||||
"fastreload_desc": "Нажмите [css_useSkill], чтобы перезарядить текущее оружие",
|
||||
|
||||
"firerain": "Огненный дождь",
|
||||
"firerain_desc": "Бросьте приманку, чтобы вызвать дождь из коктейлей Молотова",
|
||||
|
||||
"flash": "Флеш",
|
||||
"flash_desc": "Случайная скорость игрока в начале раунда",
|
||||
"flash_desc2": "Ваш множитель скорости: {0}x",
|
||||
|
||||
"flashlight": "Фонарик",
|
||||
"flashlight_desc": "Нажмите [css_useSkill], чтобы включить или выключить фонарик. Его свет может ослеплять врагов",
|
||||
|
||||
"fortnite": "Фортнайт",
|
||||
"fortnite_desc": "Нажмите [css_useSkill], чтобы создать разрушаемую баррикаду",
|
||||
|
||||
|
|
@ -175,13 +194,13 @@
|
|||
"ghost": "Призрак",
|
||||
"ghost_desc": "Вы полностью невидимы",
|
||||
|
||||
"giant": "giant",
|
||||
"giant_desc": "giant_desc",
|
||||
"giant_desc2": "giant_desc2: {0}x",
|
||||
"giant_disable_info": "giant_disable_info",
|
||||
"giant_enemy_info": "giant_enemy_info: {0}x",
|
||||
"giant_player_info": "giant_player_info: {0} {1}",
|
||||
"giant_select_info": "giant_select_info",
|
||||
"giant": "Гигант",
|
||||
"giant_desc": "Увеличьте выбранного противника",
|
||||
"giant_desc2": "Увеличьте выбранного противника до {0}-кратного размера",
|
||||
"giant_disable_info": "Вы снова обычного размера.",
|
||||
"giant_enemy_info": "Ваш размер увеличен до {0}-кратного.",
|
||||
"giant_player_info": "Вы увеличили игрока '{0}' до {1}-кратного размера.",
|
||||
"giant_select_info": "Выберите игрока для увеличения:",
|
||||
|
||||
"glaz": "Глаз",
|
||||
"glaz_desc": "Вы видите сквозь дымовые гранаты",
|
||||
|
|
@ -204,6 +223,9 @@
|
|||
"grenadier": "Гренадёр",
|
||||
"grenadier_desc": "У вас бесконечные осколочные гранаты",
|
||||
|
||||
"healingchicken": "Лечащая курица",
|
||||
"healingchicken_desc": "Ваши куры лечат вас, пока вы находитесь рядом",
|
||||
|
||||
"healingsmoke": "Лечащий дым",
|
||||
"healingsmoke_desc": "Ваши дымовые гранаты лечат",
|
||||
|
||||
|
|
@ -252,6 +274,12 @@
|
|||
"jester_on": "ВКЛ",
|
||||
"jester_off": "ВЫКЛ",
|
||||
|
||||
"jetkick": "Реактивный удар",
|
||||
"jetkick_desc": "Выберите игрока для реактивного удара",
|
||||
"jetkick_player_info": "Игрок '{0}' получил реактивный удар.",
|
||||
"jetkick_enemy_info": "Каждый выстрел отбрасывает вас назад",
|
||||
"jetkick_disable_info": "Ваша отдача вернулась к норме.",
|
||||
|
||||
"jumpban": "Безногий",
|
||||
"jumpban_desc": "Выберите игрока, который не сможет прыгать",
|
||||
"jumpban_enemy_info": "Кто-то отрезал вам ноги.",
|
||||
|
|
@ -259,12 +287,12 @@
|
|||
"jumpban_player_info": "Игрок '{0}' больше не может прыгать.",
|
||||
"jumpban_select_info": "Запретить прыжки игроку:",
|
||||
|
||||
"jumpcurse": "jumpcurse",
|
||||
"jumpcurse_desc": "jumpcurse_desc",
|
||||
"jumpcurse_disable_info": "jumpcurse_disable_info",
|
||||
"jumpcurse_enemy_info": "jumpcurse_enemy_info",
|
||||
"jumpcurse_player_info": "jumpcurse_player_info: {0}",
|
||||
"jumpcurse_select_info": "jumpcurse_select_info",
|
||||
"jumpcurse": "Проклятие прыжка",
|
||||
"jumpcurse_desc": "Выбранный противник прыгает каждый раз, когда прыгает кто-либо из его союзников",
|
||||
"jumpcurse_disable_info": "Теперь вы снова можете контролировать свои прыжки.",
|
||||
"jumpcurse_enemy_info": "Теперь вы будете прыгать каждый раз, когда прыгает кто-либо из ваших союзников.",
|
||||
"jumpcurse_player_info": "Игрок '{0}' теперь прыгает вместе со своими союзниками.",
|
||||
"jumpcurse_select_info": "Выберите игрока для проклятия:",
|
||||
|
||||
"jumpingjack": "Прыгающий Джек",
|
||||
"jumpingjack_desc": "Прыжки восстанавливают здоровье",
|
||||
|
|
@ -272,8 +300,11 @@
|
|||
"killerflash": "Смертельная флешка",
|
||||
"killerflash_desc": "Любой, полностью ослеплённый вашей флешкой, погибает (включая вас)",
|
||||
|
||||
"knockback": "knockback",
|
||||
"knockback_desc": "knockback_desc",
|
||||
"knockback": "Отдача",
|
||||
"knockback_desc": "Стрельба в воздухе отталкивает вас назад",
|
||||
|
||||
"lastgasp": "Последний вздох",
|
||||
"lastgasp_desc": "После смерти вы наносите урон врагу, который вас убил",
|
||||
|
||||
"lifeswap": "Обмен жизнями",
|
||||
"lifeswap_desc": "Выберите игрока для обмена здоровьем",
|
||||
|
|
@ -306,22 +337,18 @@
|
|||
"miner": "Минёр",
|
||||
"miner_desc": "Ваша осколочная граната взрывается только когда рядом есть враг",
|
||||
|
||||
"bankrupt": "Банкрот",
|
||||
"bankrupt_desc": "Выберите игрока, который потеряет все свои деньги",
|
||||
"bankrupt_enemy_info": "Вы обанкротились.",
|
||||
"bankrupt_player_info": "Игрок '{0}' обанкротился.",
|
||||
"bankrupt_select_info": "Выберите игрока для банкротства:",
|
||||
"moneyswap": "Налоговик",
|
||||
"moneyswap_desc": "Выберите игрока для обмена деньгами",
|
||||
"moneyswap_enemy_info": "Налоговая служба добралась до вас.",
|
||||
"moneyswap_player_info": "Вы обменялись деньгами с игроком '{0}'.",
|
||||
"moneyswap_select_info": "Обменять деньги с игроком:",
|
||||
|
||||
"deathbomb": "Смертельная бомба",
|
||||
"deathbomb_desc": "Вы взрываетесь при смерти, убивая ближайших игроков",
|
||||
"deathbomb_explosion": "АЛЛАХУ АКБАР!!!",
|
||||
|
||||
"nightmare": "nightmare",
|
||||
"nightmare_desc": "nightmare_desc",
|
||||
"nightmare_disable_info": "nightmare_disable_info",
|
||||
"nightmare_enemy_info": "nightmare_enemy_info",
|
||||
"nightmare_player_info": "nightmare_player_info: {0}",
|
||||
"nightmare_select_info": "nightmare_select_info",
|
||||
"nightmare": "Кошмар",
|
||||
"nightmare_desc": "Заставьте выбранного противника увидеть кошмарное видение",
|
||||
"nightmare_disable_info": "Кошмар рассеялся.",
|
||||
"nightmare_enemy_info": "Кошмар затуманивает ваше зрение.",
|
||||
"nightmare_player_info": "Вы наложили кошмар на игрока '{0}'.",
|
||||
"nightmare_select_info": "Выберите игрока для кошмара:",
|
||||
|
||||
"ninja": "Ниндзя",
|
||||
"ninja_desc": "Стоя на месте, ваша невидимость увеличивается на 33%, в приседе на 33%, с ножом на 33%",
|
||||
|
|
@ -462,6 +489,17 @@
|
|||
"swapposition": "Обмен позициями",
|
||||
"swapposition_desc": "Нажмите [css_useSkill], чтобы поменяться местами со случайным врагом",
|
||||
|
||||
"takeammo": "Забрать патроны",
|
||||
"takeammo_desc": "Нажмите [css_useSkill], чтобы забрать магазин активного оружия случайного противника",
|
||||
"takeammo_hud_info1": "Не найден игрок с активным магазином.",
|
||||
"takeammo_hud_info2": "У противника нет магазинов.",
|
||||
"takeammo_enemy_info": "Вы потеряли немного боеприпасов.",
|
||||
|
||||
"teamteleport": "Телепортация к союзнику",
|
||||
"teamteleport_desc": "Нажмите [css_useSkill], чтобы телепортироваться к союзнику, на которого вы смотрите",
|
||||
"teamteleport_noenemy": "Союзник не найден",
|
||||
"teamteleport_hud_info": "Найден: {0}",
|
||||
|
||||
"teleporter": "Телепортер",
|
||||
"teleporter_desc": "Есть шанс поменяться местами с врагом при попадании",
|
||||
"teleporter_desc2": "Ваш шанс обмена местами после попадания: {0}%",
|
||||
|
|
@ -485,11 +523,11 @@
|
|||
"toxicsmoke": "Токсичный дым",
|
||||
"toxicsmoke_desc": "Ваши дымовые гранаты наносят урон",
|
||||
|
||||
"tripwire": "tripwire",
|
||||
"tripwire_desc": "tripwire_desc",
|
||||
"tripwire_no_wall_info": "tripwire_no_wall_info",
|
||||
"tripwire_placed_info": "tripwire_placed_info",
|
||||
"tripwire_triggered_info": "tripwire_triggered_info: {0}",
|
||||
"tripwire": "Растяжка",
|
||||
"tripwire_desc": "Нажмите [css_useSkill], чтобы натянуть трос между двумя стенами. Враги, задевшие его, отображаются на вашем радаре",
|
||||
"tripwire_no_wall_info": "С обеих сторон нет достаточно близких стен.",
|
||||
"tripwire_placed_info": "Растяжка установлена.",
|
||||
"tripwire_triggered_info": "'{0}' задел вашу растяжку.",
|
||||
|
||||
"wallhack": "Воллхак",
|
||||
"wallhack_desc": "Вы видите врагов сквозь стены",
|
||||
|
|
|
|||
|
|
@ -51,9 +51,15 @@
|
|||
"behind_desc": "Vurduğunda düşmanı 180 derece döndürme şansın olur",
|
||||
"behind_desc2": "Baş döndürme şansın: %{0}",
|
||||
|
||||
"berserker": "Berserker",
|
||||
"berserker_desc": "Canın azaldıkça daha fazla hasar verir ve daha hızlı hareket edersin",
|
||||
|
||||
"blademaster": "Kılıç Ustası",
|
||||
"blademaster_desc": "Bıçak tutarken mermileri sektirme şansın artar",
|
||||
|
||||
"blastshot": "Patlama Atışı",
|
||||
"blastshot_desc": "MP5 ile Attack2 tuşuna basarak bir HE bombası ateşle",
|
||||
|
||||
"bunnyhop": "Tavşan",
|
||||
"bunnyhop_desc": "Otomatik \"BunnyHop\" yaparsın",
|
||||
|
||||
|
|
@ -149,10 +155,16 @@
|
|||
"fastreload": "Şipşak Şarjör",
|
||||
"fastreload_desc": "[css_useSkill] tuşuna basarak şarjörünü hızlıca değiştir",
|
||||
|
||||
"firerain": "Ateş Yağmuru",
|
||||
"firerain_desc": "Molotof yağmuru çağırmak için bir yem at",
|
||||
|
||||
"flash": "Flash",
|
||||
"flash_desc": "Raund başında rastgele oyuncu hızı",
|
||||
"flash_desc2": "Hızın: {0}x",
|
||||
|
||||
"flashlight": "El Feneri",
|
||||
"flashlight_desc": "El fenerini açıp kapatmak için [css_useSkill] tuşuna tıkla. Işığı düşmanları kör edebilir",
|
||||
|
||||
"fortnite": "Fortnite",
|
||||
"fortnite_desc": "[css_useSkill] tuşuna basarak barikat kur",
|
||||
|
||||
|
|
@ -204,6 +216,9 @@
|
|||
"grenadier": "Bombacı",
|
||||
"grenadier_desc": "Sınırsız el bombasına sahipsin",
|
||||
|
||||
"healingchicken": "Şifacı Tavuk",
|
||||
"healingchicken_desc": "Yakınındayken tavukların seni iyileştirir",
|
||||
|
||||
"healingsmoke": "Şifalı Sis",
|
||||
"healingsmoke_desc": "Sis bombaların iyileştirir",
|
||||
|
||||
|
|
@ -252,6 +267,12 @@
|
|||
"jester_on": "AÇIK",
|
||||
"jester_off": "KAPALI",
|
||||
|
||||
"jetkick": "Jet Tekmesi",
|
||||
"jetkick_desc": "Jet tekmesi yapmak için bir oyuncu seç",
|
||||
"jetkick_player_info": "'{0}' adlı oyuncuya jet tekmesi yapıldı.",
|
||||
"jetkick_enemy_info": "Her atış seni geriye doğru iter",
|
||||
"jetkick_disable_info": "Geri tepmen normale döndü.",
|
||||
|
||||
"jumpban": "Bacaksız",
|
||||
"jumpban_desc": "Zıplayamayacak bir oyuncu seç",
|
||||
"jumpban_enemy_info": "Bacakların kesildi",
|
||||
|
|
@ -275,6 +296,9 @@
|
|||
"knockback": "Savurma",
|
||||
"knockback_desc": "Havadayken ateş etmek seni geriye savurur",
|
||||
|
||||
"lastgasp": "Son Nefes",
|
||||
"lastgasp_desc": "Öldükten sonra seni öldüren düşmana hasar verirsin",
|
||||
|
||||
"lifeswap": "Can Takası",
|
||||
"lifeswap_desc": "Can değerlerini takas etmek için bir oyuncu seç",
|
||||
"lifeswap_enemy_info": "Birisi canını çaldı",
|
||||
|
|
@ -316,6 +340,9 @@
|
|||
"deathbomb_desc": "Öldüğünde patlayarak etraftaki oyuncuları öldürürsün",
|
||||
"deathbomb_explosion": "BOOM!!!",
|
||||
|
||||
"demoneye": "Şeytan Gözü",
|
||||
"demoneye_desc": "Baktığın tüm düşmanlara hasar verirsin",
|
||||
|
||||
"nightmare": "Kabus",
|
||||
"nightmare_desc": "Seçtiğin bir rakibe kabus görüntüsü verir",
|
||||
"nightmare_disable_info": "Kabus sona erdi.",
|
||||
|
|
@ -462,6 +489,17 @@
|
|||
"swapposition": "Yer Değiştirme",
|
||||
"swapposition_desc": "[css_useSkill] tuşuna basarak vurduğun düşmanla yer değiştir",
|
||||
|
||||
"takeammo": "Mühimmat Al",
|
||||
"takeammo_desc": "Rastgele bir düşmanın aktif silahının şarjörünü almak için [css_useSkill] tuşuna tıkla",
|
||||
"takeammo_hud_info1": "Aktif şarjörü olan bir oyuncu bulunamadı.",
|
||||
"takeammo_hud_info2": "Düşmanın şarjörü yok.",
|
||||
"takeammo_enemy_info": "Bir miktar mühimmat kaybettin.",
|
||||
|
||||
"teamteleport": "Takıma Işınlanma",
|
||||
"teamteleport_desc": "Baktığın takım arkadaşına ışınlanmak için [css_useSkill] tuşuna bas",
|
||||
"teamteleport_noenemy": "Takım arkadaşı bulunamadı",
|
||||
"teamteleport_hud_info": "Bulundu: {0}",
|
||||
|
||||
"teleporter": "Işınlayıcı",
|
||||
"teleporter_desc": "Vurulan bir düşmanla yer değiştirme şansınız var",
|
||||
"teleporter_desc2": "Yer değiştirme şansın: %{0}",
|
||||
|
|
|
|||
|
|
@ -1,20 +1,12 @@
|
|||
using CounterStrikeSharp.API;
|
||||
using CounterStrikeSharp.API.Core;
|
||||
using CounterStrikeSharp.API.Core.Attributes;
|
||||
using CounterStrikeSharp.API.Modules.Admin;
|
||||
using CounterStrikeSharp.API.Modules.Cvars;
|
||||
using CounterStrikeSharp.API.Modules.Events;
|
||||
using CounterStrikeSharp.API.Modules.Memory;
|
||||
using CounterStrikeSharp.API.Modules.Memory.DynamicFunctions;
|
||||
using CounterStrikeSharp.API.Modules.UserMessages;
|
||||
using CounterStrikeSharp.API.Modules.Utils;
|
||||
using RayTraceAPI;
|
||||
using src.player.skills;
|
||||
using src.utils;
|
||||
using System.Collections.Concurrent;
|
||||
using static CounterStrikeSharp.API.Core.Listeners;
|
||||
using static src.jRandomSkills;
|
||||
using Timer = CounterStrikeSharp.API.Modules.Timers.Timer;
|
||||
|
||||
namespace src.player
|
||||
{
|
||||
|
|
@ -106,6 +98,15 @@ namespace src.player
|
|||
}
|
||||
}
|
||||
|
||||
private static HookResult OnTakeDamagePost(DynamicHook h)
|
||||
{
|
||||
lock (setLock)
|
||||
{
|
||||
DispatchOnTakeDamage(h, true);
|
||||
return HookResult.Continue;
|
||||
}
|
||||
}
|
||||
|
||||
private static HookResult OnTriggerEnter(DynamicHook hook)
|
||||
{
|
||||
lock (setLock)
|
||||
|
|
@ -172,33 +173,6 @@ namespace src.player
|
|||
}
|
||||
}
|
||||
|
||||
private static HookResult WeaponDrop(DynamicHook hook)
|
||||
{
|
||||
lock (setLock)
|
||||
{
|
||||
CCSPlayerController player = hook.GetParam<CCSPlayerController>(0);
|
||||
if (player == null || !player.IsValid)
|
||||
return HookResult.Continue;
|
||||
|
||||
var activeSkills = Instance.SkillPlayer
|
||||
.Where(p => !p.IsDrawing)
|
||||
.Select(p => p.Skill.ToString())
|
||||
.Distinct();
|
||||
|
||||
bool block = false;
|
||||
foreach (string skillName in activeSkills)
|
||||
{
|
||||
bool? result = (bool?)Instance.SkillAction(skillName, "WeaponDrop", [hook, player]);
|
||||
if (result == true)
|
||||
{
|
||||
block = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
return block ? HookResult.Handled : HookResult.Continue;
|
||||
}
|
||||
}
|
||||
|
||||
private static void EntitySpawned(CEntityInstance entity)
|
||||
{
|
||||
lock (setLock)
|
||||
|
|
|
|||
|
|
@ -14,6 +14,7 @@ public interface ISkill
|
|||
public static void TypeSkill(CCSPlayerController _, string[] __) { }
|
||||
|
||||
public static void OnTakeDamage(DynamicHook _) { }
|
||||
public static void OnTakeDamagePost(DynamicHook _) { }
|
||||
public static void OnEntitySpawned(CEntityInstance _) { }
|
||||
public static void OnTick() { }
|
||||
public static void CheckTransmit([CastFrom(typeof(nint))] CCheckTransmitInfoList _) { }
|
||||
|
|
@ -70,8 +71,10 @@ public enum Skills
|
|||
Bankrupt,
|
||||
Baseball,
|
||||
Behind,
|
||||
Berserker,
|
||||
BladeMaster,
|
||||
BunnyHop,
|
||||
BlastShot,
|
||||
C4Camouflage,
|
||||
CarefulBullets,
|
||||
Catapult,
|
||||
|
|
@ -83,6 +86,7 @@ public enum Skills
|
|||
Deactivator,
|
||||
Deaf,
|
||||
DeathBomb,
|
||||
DemonEye,
|
||||
Disarmament,
|
||||
Distancer,
|
||||
Dash,
|
||||
|
|
@ -95,7 +99,9 @@ public enum Skills
|
|||
ExplosiveShot,
|
||||
FalconEye,
|
||||
FastReload,
|
||||
FireRain,
|
||||
Flash,
|
||||
Flashlight,
|
||||
Fortnite,
|
||||
FragileBomb,
|
||||
FriendlyFire,
|
||||
|
|
@ -108,6 +114,7 @@ public enum Skills
|
|||
Glue,
|
||||
GodMode,
|
||||
Grenadier,
|
||||
HealingChicken,
|
||||
HealingSmoke,
|
||||
Hermit,
|
||||
HolyHandGrenade,
|
||||
|
|
@ -121,11 +128,13 @@ public enum Skills
|
|||
Jackal,
|
||||
Jammer,
|
||||
Jester,
|
||||
JetKick,
|
||||
JumpBan,
|
||||
JumpCurse,
|
||||
JumpingJack,
|
||||
KillerFlash,
|
||||
Knockback,
|
||||
LastGasp,
|
||||
LifeSwap,
|
||||
LongKnife,
|
||||
LongZeus,
|
||||
|
|
@ -176,6 +185,8 @@ public enum Skills
|
|||
SoundMaker,
|
||||
Spectator,
|
||||
SwapPosition,
|
||||
TakeAmmo,
|
||||
TeamTeleport,
|
||||
Teleporter,
|
||||
Thief,
|
||||
ThirdEye,
|
||||
|
|
|
|||
|
|
@ -79,6 +79,7 @@ namespace src.player
|
|||
|
||||
Instance.HookUserMessage(208, PlayerMakeSound);
|
||||
VirtualFunctions.CBaseEntity_TakeDamageOldFunc.Hook(OnTakeDamage, HookMode.Pre);
|
||||
VirtualFunctions.CBaseEntity_TakeDamageOldFunc.Hook(OnTakeDamagePost, HookMode.Post);
|
||||
|
||||
Instance.RegisterEventHandler<EventBulletImpact>(BulletImpact);
|
||||
|
||||
|
|
@ -94,6 +95,7 @@ namespace src.player
|
|||
public static void Unload()
|
||||
{
|
||||
TryUnhook(() => VirtualFunctions.CBaseEntity_TakeDamageOldFunc.Unhook(OnTakeDamage, HookMode.Pre));
|
||||
TryUnhook(() => VirtualFunctions.CBaseEntity_TakeDamageOldFunc.Unhook(OnTakeDamagePost, HookMode.Post));
|
||||
TryUnhook(() => VirtualFunctions.CBaseTrigger_StartTouchFunc.Unhook(OnTriggerEnter, HookMode.Post));
|
||||
TryUnhook(() => VirtualFunctions.CBaseTrigger_EndTouchFunc.Unhook(OnTriggerExit, HookMode.Pre));
|
||||
TryUnhook(() => VirtualFunctions.CCSPlayer_ItemServices_CanAcquireFunc.Unhook(OnWeaponCanAcquire, HookMode.Pre));
|
||||
|
|
@ -133,7 +135,7 @@ namespace src.player
|
|||
}
|
||||
}
|
||||
|
||||
private static void DispatchOnTakeDamage(DynamicHook h)
|
||||
private static void DispatchOnTakeDamage(DynamicHook h, bool post = false)
|
||||
{
|
||||
object[] args = [h];
|
||||
var seen = new HashSet<Skills>();
|
||||
|
|
@ -149,26 +151,26 @@ namespace src.player
|
|||
continue;
|
||||
}
|
||||
|
||||
InvokeOnTakeDamage(p.Skill, h, args);
|
||||
InvokeOnTakeDamage(p.Skill, h, args, post);
|
||||
}
|
||||
|
||||
if (deferred == null) return;
|
||||
foreach (var skill in deferred)
|
||||
InvokeOnTakeDamage(skill, h, args);
|
||||
InvokeOnTakeDamage(skill, h, args, post);
|
||||
}
|
||||
|
||||
private static void InvokeOnTakeDamage(Skills skill, DynamicHook h, object[] args)
|
||||
private static void InvokeOnTakeDamage(Skills skill, DynamicHook h, object[] args, bool post)
|
||||
{
|
||||
if (Config.LoadedConfig.DebugMode != true)
|
||||
{
|
||||
InvokeSkill(skill, "OnTakeDamage", args);
|
||||
InvokeSkill(skill, post ? "OnTakeDamagePost" : "OnTakeDamage", args);
|
||||
return;
|
||||
}
|
||||
|
||||
var info = h.GetParam<CTakeDamageInfo>(1);
|
||||
float before = info == null ? 0f : info.Damage;
|
||||
|
||||
InvokeSkill(skill, "OnTakeDamage", args);
|
||||
InvokeSkill(skill, post ? "OnTakeDamagePost" : "OnTakeDamage", args);
|
||||
|
||||
float after = info == null ? 0f : info.Damage;
|
||||
if (Math.Abs(before - after) > 0.01f)
|
||||
|
|
@ -345,6 +347,33 @@ namespace src.player
|
|||
}
|
||||
}
|
||||
|
||||
private static HookResult WeaponDrop(DynamicHook hook)
|
||||
{
|
||||
lock (setLock)
|
||||
{
|
||||
CCSPlayerController player = hook.GetParam<CCSPlayerController>(0);
|
||||
if (player == null || !player.IsValid)
|
||||
return HookResult.Continue;
|
||||
|
||||
var activeSkills = Instance.SkillPlayer
|
||||
.Where(p => !p.IsDrawing)
|
||||
.Select(p => p.Skill.ToString())
|
||||
.Distinct();
|
||||
|
||||
bool block = false;
|
||||
foreach (string skillName in activeSkills)
|
||||
{
|
||||
bool? result = (bool?)Instance.SkillAction(skillName, "WeaponDrop", [hook, player]);
|
||||
if (result == true)
|
||||
{
|
||||
block = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
return block ? HookResult.Handled : HookResult.Continue;
|
||||
}
|
||||
}
|
||||
|
||||
private static readonly Dictionary<Skills, string> _skillNames =
|
||||
Enum.GetValues<Skills>().ToDictionary(s => s, s => s.ToString());
|
||||
private static readonly HashSet<Skills> _activeSkillsSet = [];
|
||||
|
|
|
|||
|
|
@ -10,6 +10,7 @@ namespace src.player.skills
|
|||
public class Aimbot : ISkill
|
||||
{
|
||||
private const Skills skillName = Skills.Aimbot;
|
||||
private static readonly ThreadLocal<Stack<(nint Address, HitGroup_t OldValue)>> _restoreStack = new(() => new Stack<(nint, HitGroup_t)>());
|
||||
|
||||
public static void LoadSkill()
|
||||
{
|
||||
|
|
@ -50,7 +51,33 @@ namespace src.player.skills
|
|||
nint hitGroupData = Marshal.ReadIntPtr(hitGroupPointer, 16);
|
||||
if (hitGroupData == nint.Zero) return;
|
||||
|
||||
Marshal.WriteInt32(hitGroupData, 56, (int)HitGroup_t.HITGROUP_HEAD);
|
||||
nint address = hitGroupData + 56;
|
||||
HitGroup_t oldValue = (HitGroup_t)Marshal.ReadInt32(address);
|
||||
|
||||
if (oldValue == HitGroup_t.HITGROUP_HEAD || oldValue == HitGroup_t.HITGROUP_INVALID) return;
|
||||
|
||||
_restoreStack.Value!.Push((address, oldValue));
|
||||
Marshal.WriteInt32(address, (int)HitGroup_t.HITGROUP_HEAD);
|
||||
}
|
||||
|
||||
public static void OnTakeDamagePost(DynamicHook h)
|
||||
{
|
||||
var info = h.GetParam<CTakeDamageInfo>(1);
|
||||
|
||||
if (info == null || info.Handle == nint.Zero)
|
||||
return;
|
||||
|
||||
if (!SkillUtils.IsBulletDamage(info)) return;
|
||||
|
||||
if (_restoreStack.Value!.Count > 0)
|
||||
{
|
||||
var (address, oldValue) = _restoreStack.Value.Pop();
|
||||
|
||||
if (address == nint.Zero)
|
||||
return;
|
||||
|
||||
Marshal.WriteInt32(address, (int)oldValue);
|
||||
}
|
||||
}
|
||||
|
||||
public class SkillConfig(Skills skill = skillName, bool active = true, string color = "#ff0000", CsTeam onlyTeam = CsTeam.None, bool disableOnFreezeTime = false, bool needsTeammates = false, string requiredPermission = "", float? hudDuration = null, float? descriptionHudDuration = null, int maxPerServer = -1, Rarity rarity = Rarity.Common) : SkillsInfo.DefaultSkillInfo(skill, active, color, onlyTeam, disableOnFreezeTime, needsTeammates, requiredPermission, hudDuration, descriptionHudDuration, maxPerServer, rarity)
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@ using CounterStrikeSharp.API;
|
|||
using CounterStrikeSharp.API.Core;
|
||||
using CounterStrikeSharp.API.Modules.Entities.Constants;
|
||||
using CounterStrikeSharp.API.Modules.Utils;
|
||||
using jRandomSkills.src.utils;
|
||||
using src.utils;
|
||||
using System.Collections.Concurrent;
|
||||
|
||||
|
|
@ -57,7 +58,7 @@ namespace src.player.skills
|
|||
var attackerInfo = PlayerManager.GetPlayerByIndex((PlayerManager.GetPlayerEvent(attacker)?.Index ?? attacker.Index));
|
||||
if (attackerInfo?.Skill != skillName) return;
|
||||
|
||||
SkillUtils.TakeHealth(victim!.PlayerPawn.Value, SkillsInfo.GetValue<int>(skillName, "damageDeal"), attacker, "decoy");
|
||||
SkillUtils.TakeHealth(victim!.PlayerPawn.Value, SkillsInfo.GetValue<int>(skillName, "damageDeal"), attacker, KillfeedIcons.Decoy);
|
||||
}
|
||||
|
||||
public static void OnEntitySpawned(CEntityInstance entity)
|
||||
|
|
|
|||
123
jRandomSkills - SRC Files/src/player/skills/Berserker.cs
Normal file
123
jRandomSkills - SRC Files/src/player/skills/Berserker.cs
Normal file
|
|
@ -0,0 +1,123 @@
|
|||
using CounterStrikeSharp.API;
|
||||
using CounterStrikeSharp.API.Core;
|
||||
using CounterStrikeSharp.API.Modules.Memory.DynamicFunctions;
|
||||
using CounterStrikeSharp.API.Modules.Utils;
|
||||
using src.utils;
|
||||
using System.Collections.Concurrent;
|
||||
using static src.jRandomSkills;
|
||||
|
||||
namespace src.player.skills
|
||||
{
|
||||
public class Berserker : ISkill
|
||||
{
|
||||
private const Skills skillName = Skills.Berserker;
|
||||
public static readonly ConcurrentDictionary<uint, int> jumpedPlayers = [];
|
||||
|
||||
public static void LoadSkill()
|
||||
{
|
||||
SkillUtils.RegisterSkill(skillName, SkillsInfo.GetValue<string>(skillName, "color"), false);
|
||||
}
|
||||
|
||||
public static void NewRound()
|
||||
{
|
||||
jumpedPlayers.Clear();
|
||||
}
|
||||
|
||||
private static float CalculateNewVelocity(CCSPlayerPawn pawn, float maxValue)
|
||||
{
|
||||
if (pawn!.Health <= 0) return 1f;
|
||||
|
||||
float healthPercentage = pawn.MaxHealth > 0
|
||||
? Math.Clamp((float)pawn.Health / pawn.MaxHealth, 0f, 1f)
|
||||
: 0f;
|
||||
|
||||
float newValue = 1f + (maxValue - 1f) * (1f - healthPercentage);
|
||||
return Math.Max(1, Math.Min(maxValue, newValue));
|
||||
}
|
||||
|
||||
public static void OnTakeDamage(DynamicHook h)
|
||||
{
|
||||
CEntityInstance param = h.GetParam<CEntityInstance>(0);
|
||||
CTakeDamageInfo param2 = h.GetParam<CTakeDamageInfo>(1);
|
||||
|
||||
if (param == null || param.Entity == null || param2 == null || param2.Attacker == null || param2.Attacker.Value == null)
|
||||
return;
|
||||
|
||||
CCSPlayerPawn attackerPawn = new(param2.Attacker.Value.Handle);
|
||||
CCSPlayerPawn victimPawn = new(param.Handle);
|
||||
|
||||
if (attackerPawn.DesignerName != "player" || victimPawn.DesignerName != "player")
|
||||
return;
|
||||
|
||||
if (attackerPawn == null || attackerPawn.Controller?.Value == null || victimPawn == null || victimPawn.Controller?.Value == null)
|
||||
return;
|
||||
|
||||
CCSPlayerController attacker = PlayerManager.GetPlayerEvent(attackerPawn.Controller.Value.As<CCSPlayerController>())!;
|
||||
|
||||
var playerInfo = PlayerManager.GetPlayerByIndex(attacker!.Index);
|
||||
if (playerInfo == null) return;
|
||||
|
||||
if (playerInfo.Skill == skillName)
|
||||
{
|
||||
float damageMultiplier = CalculateNewVelocity(attackerPawn, SkillsInfo.GetValue<float>(skillName, "maxDamageVelocity"));
|
||||
param2.Damage *= damageMultiplier;
|
||||
}
|
||||
}
|
||||
|
||||
public static void PlayerJump(EventPlayerJump @event)
|
||||
{
|
||||
var player = PlayerManager.GetPlayerEvent(@event.Userid);
|
||||
if (player == null || !player.IsValid) return;
|
||||
if (!jumpedPlayers.TryGetValue(player.Index, out _)) return;
|
||||
jumpedPlayers.AddOrUpdate(player.Index, Server.TickCount + 20, (k, v) => Server.TickCount + 20);
|
||||
}
|
||||
|
||||
public static void EnableSkill(CCSPlayerController player)
|
||||
{
|
||||
var playerPawn = player.PlayerPawn.Value;
|
||||
var playerInfo = PlayerManager.GetPlayerByIndex(player!.Index);
|
||||
if (playerPawn == null || playerInfo == null) return;
|
||||
jumpedPlayers.TryAdd(player.Index, 0);
|
||||
}
|
||||
|
||||
public static void DisableSkill(CCSPlayerController player)
|
||||
{
|
||||
var playerPawn = player.PlayerPawn.Value;
|
||||
if (playerPawn == null) return;
|
||||
playerPawn.VelocityModifier = 1;
|
||||
jumpedPlayers.TryRemove(player.Index, out _);
|
||||
}
|
||||
|
||||
public static void OnTick()
|
||||
{
|
||||
foreach (var player in PlayerManager.GetTickPlayers())
|
||||
{
|
||||
if (!Instance.IsPlayerValid(player)) continue;
|
||||
|
||||
var playerInfo = PlayerManager.GetPlayerByIndex(player!.Index);
|
||||
if (playerInfo?.Skill != skillName) continue;
|
||||
|
||||
var playerPawn = player.PlayerPawn?.Value;
|
||||
if (playerPawn == null || playerPawn.VelocityModifier == 0) continue;
|
||||
|
||||
var buttons = player.Buttons;
|
||||
float newSpeedVelocity = CalculateNewVelocity(playerPawn, SkillsInfo.GetValue<float>(skillName, "maxSpeedVelocity"));
|
||||
|
||||
if (buttons.HasFlag(PlayerButtons.Moveleft) || buttons.HasFlag(PlayerButtons.Moveright) || buttons.HasFlag(PlayerButtons.Forward) || buttons.HasFlag(PlayerButtons.Back))
|
||||
playerPawn.VelocityModifier = newSpeedVelocity;
|
||||
|
||||
if (jumpedPlayers.TryGetValue(player.Index, out var time) && time > Server.TickCount)
|
||||
continue;
|
||||
|
||||
if (!((PlayerFlags)player.Flags).HasFlag(PlayerFlags.FL_ONGROUND))
|
||||
playerPawn.AbsVelocity.Z = Math.Min(playerPawn.AbsVelocity.Z, 10);
|
||||
}
|
||||
}
|
||||
|
||||
public class SkillConfig(Skills skill = skillName, bool active = true, string color = "#cc2929", CsTeam onlyTeam = CsTeam.None, bool disableOnFreezeTime = false, bool needsTeammates = false, string requiredPermission = "", float? hudDuration = null, float? descriptionHudDuration = null, int maxPerServer = -1, Rarity rarity = Rarity.Common, float maxSpeedVelocity = 2f, float maxDamageVelocity = 2f) : SkillsInfo.DefaultSkillInfo(skill, active, color, onlyTeam, disableOnFreezeTime, needsTeammates, requiredPermission, hudDuration, descriptionHudDuration, maxPerServer, rarity)
|
||||
{
|
||||
public float MaxSpeedVelocity { get; set; } = maxSpeedVelocity;
|
||||
public float MaxDamageVelocity { get; set; } = maxDamageVelocity;
|
||||
}
|
||||
}
|
||||
}
|
||||
217
jRandomSkills - SRC Files/src/player/skills/BlastShot.cs
Normal file
217
jRandomSkills - SRC Files/src/player/skills/BlastShot.cs
Normal file
|
|
@ -0,0 +1,217 @@
|
|||
using CounterStrikeSharp.API;
|
||||
using CounterStrikeSharp.API.Core;
|
||||
using CounterStrikeSharp.API.Modules.Cvars;
|
||||
using CounterStrikeSharp.API.Modules.Entities.Constants;
|
||||
using CounterStrikeSharp.API.Modules.Memory.DynamicFunctions;
|
||||
using CounterStrikeSharp.API.Modules.Utils;
|
||||
using jRandomSkills.src.utils;
|
||||
using src.utils;
|
||||
using System.Collections.Concurrent;
|
||||
using Vector = CounterStrikeSharp.API.Modules.Utils.Vector;
|
||||
|
||||
namespace src.player.skills
|
||||
{
|
||||
public class BlastShot : ISkill
|
||||
{
|
||||
private const Skills skillName = Skills.BlastShot;
|
||||
private static readonly QAngle angle = new(13, -5, 5);
|
||||
private static readonly ConcurrentDictionary<int, (byte Team, uint Owner)> nades = [];
|
||||
private static readonly ConcurrentDictionary<uint, PlayerSkillInfo> SkillPlayerInfo = [];
|
||||
private static readonly string[] allowedWeapons = ["weapon_mp5sd"];
|
||||
|
||||
public static void LoadSkill()
|
||||
{
|
||||
SkillUtils.RegisterSkill(skillName, SkillsInfo.GetValue<string>(skillName, "color"));
|
||||
}
|
||||
|
||||
public static void NewRound()
|
||||
{
|
||||
SkillPlayerInfo.Clear();
|
||||
nades.Clear();
|
||||
}
|
||||
|
||||
public static void EnableSkill(CCSPlayerController player)
|
||||
{
|
||||
SkillPlayerInfo.TryAdd(player.Index, new PlayerSkillInfo
|
||||
{
|
||||
SteamID = player.Index,
|
||||
CanUse = true,
|
||||
Cooldown = DateTime.MinValue,
|
||||
});
|
||||
SkillUtils.TryGiveWeapon(player, CsItem.MP5SD);
|
||||
}
|
||||
|
||||
public static void DisableSkill(CCSPlayerController player)
|
||||
{
|
||||
if (player == null || !player.IsValid) return;
|
||||
SkillPlayerInfo.TryRemove(player.Index, out _);
|
||||
}
|
||||
|
||||
public static void OnTick()
|
||||
{
|
||||
float cooldown = SkillsInfo.GetValue<float>(skillName, "cooldown");
|
||||
|
||||
foreach (var player in PlayerManager.GetTickPlayers())
|
||||
{
|
||||
var playerInfo = PlayerManager.GetPlayerByIndex(player!.Index);
|
||||
if (playerInfo?.Skill != skillName) continue;
|
||||
|
||||
var playerPawn = player.PlayerPawn?.Value;
|
||||
if (playerPawn == null || !playerPawn.IsValid) continue;
|
||||
|
||||
if (!SkillPlayerInfo.TryGetValue(player.Index, out var skillInfo)) continue;
|
||||
|
||||
var buttons = player.Buttons;
|
||||
bool isAttack2 = (buttons & PlayerButtons.Attack2) != 0;
|
||||
|
||||
if (skillInfo.CanUse && isAttack2)
|
||||
{
|
||||
var weapon = playerPawn.WeaponServices?.ActiveWeapon?.Value;
|
||||
|
||||
if (weapon == null || !weapon.IsValid) continue;
|
||||
if (!allowedWeapons.Contains(SkillUtils.GetDesignerName(weapon))) continue;
|
||||
|
||||
skillInfo.CanUse = false;
|
||||
skillInfo.Cooldown = DateTime.Now;
|
||||
SpawnExplosion(player);
|
||||
}
|
||||
|
||||
UpdateHUD(player, skillInfo, cooldown);
|
||||
}
|
||||
}
|
||||
|
||||
private static void UpdateHUD(CCSPlayerController player, PlayerSkillInfo skillInfo, float cooldownSkill)
|
||||
{
|
||||
float cooldown = 0;
|
||||
if (skillInfo != null)
|
||||
{
|
||||
float time = (int)Math.Ceiling((skillInfo.Cooldown.AddSeconds(cooldownSkill) - DateTime.Now).TotalSeconds);
|
||||
cooldown = Math.Max(time, 0);
|
||||
|
||||
if (cooldown == 0 && skillInfo?.CanUse == false)
|
||||
skillInfo.CanUse = true;
|
||||
}
|
||||
|
||||
var playerInfo = PlayerManager.GetPlayerByIndex(player!.Index);
|
||||
if (playerInfo == null) return;
|
||||
|
||||
if (cooldown == 0)
|
||||
playerInfo.PrintHTML = null;
|
||||
else
|
||||
playerInfo.PrintHTML = $"{player.GetTranslation("hud_info", $"<font color='#FF0000'>{cooldown}</font>")}";
|
||||
}
|
||||
|
||||
private static void SpawnExplosion(CCSPlayerController player)
|
||||
{
|
||||
var pawn = player.PlayerPawn.Value;
|
||||
if (pawn == null || !pawn.IsValid || pawn.AbsOrigin == null) return;
|
||||
|
||||
float force = SkillsInfo.GetValue<float>(skillName, "force");
|
||||
|
||||
Vector pos = new(pawn.AbsOrigin.X, pawn.AbsOrigin.Y, pawn.AbsOrigin.Z + pawn.ViewOffset.Z);
|
||||
Vector vel = SkillUtils.GetForwardVector(pawn.EyeAngles) * force;
|
||||
|
||||
SkillUtils.CreateHEGrenadeProjectile(pos, angle, vel, player.TeamNum);
|
||||
nades.AddOrUpdate(Server.TickCount, (player.TeamNum, player.Index), (_, _) => (player.TeamNum, player.Index));
|
||||
}
|
||||
|
||||
public static void OnEntitySpawned(CEntityInstance entity)
|
||||
{
|
||||
if (entity.DesignerName != "hegrenade_projectile") return;
|
||||
|
||||
var heProjectile = entity.As<CBaseCSGrenadeProjectile>();
|
||||
if (heProjectile == null || !heProjectile.IsValid || heProjectile.AbsRotation == null) return;
|
||||
|
||||
int lastTick = Server.TickCount;
|
||||
|
||||
Server.NextFrame(() =>
|
||||
{
|
||||
if (heProjectile == null || !heProjectile.IsValid) return;
|
||||
if (!(NearlyEquals(angle.X, heProjectile.AbsRotation.X) && NearlyEquals(angle.Y, heProjectile.AbsRotation.Y) && NearlyEquals(angle.Z, heProjectile.AbsRotation.Z)))
|
||||
return;
|
||||
|
||||
heProjectile.TicksAtZeroVelocity = 100;
|
||||
heProjectile.Damage = SkillsInfo.GetValue<int>(skillName, "explosionDamage");
|
||||
heProjectile.DmgRadius = SkillsInfo.GetValue<float>(skillName, "explosionRadius");
|
||||
|
||||
if (nades.TryRemove(lastTick, out var source))
|
||||
heProjectile.Globalname = $"deathbomb_team_{source.Team}_{source.Owner}_{heProjectile.Index}";
|
||||
});
|
||||
}
|
||||
|
||||
public static void OnTakeDamage(DynamicHook h)
|
||||
{
|
||||
CEntityInstance param = h.GetParam<CEntityInstance>(0);
|
||||
CTakeDamageInfo param2 = h.GetParam<CTakeDamageInfo>(1);
|
||||
|
||||
if (param == null || param.Entity == null || param2 == null) return;
|
||||
|
||||
var nade = param2.Attacker.Value;
|
||||
if (nade == null || !nade.IsValid) return;
|
||||
|
||||
if (nade.DesignerName != "hegrenade_projectile") return;
|
||||
if (string.IsNullOrEmpty(nade.Globalname) || !nade.Globalname.StartsWith("deathbomb_team_")) return;
|
||||
|
||||
var parts = nade.Globalname.Split('_');
|
||||
if (parts.Length < 4) return;
|
||||
if (!int.TryParse(parts[2], out int nadeTeam)) return;
|
||||
if (!uint.TryParse(parts[3], out uint ownerIndex)) return;
|
||||
|
||||
CCSPlayerPawn victimPawn = new(param.Handle);
|
||||
|
||||
if (victimPawn.DesignerName != "player") return;
|
||||
if (victimPawn.Controller?.Value == null) return;
|
||||
|
||||
var victim = victimPawn.Controller.Value.As<CCSPlayerController>();
|
||||
if (victim == null || !victim.IsValid || victim.Index == ownerIndex) return;
|
||||
|
||||
var owner = Utilities.GetPlayerFromIndex((int)ownerIndex);
|
||||
if (owner != null && !owner.IsValid) owner = null;
|
||||
|
||||
if (victimPawn.TeamNum == nadeTeam)
|
||||
{
|
||||
float reduction = SkillsInfo.GetValue<float>(skillName, "dmgReductionForTeamates");
|
||||
param2.Damage *= 1f - Math.Clamp(reduction, 0f, 1f);
|
||||
|
||||
if (IsFriendlyFireOff())
|
||||
{
|
||||
int teamDamage = (int)param2.Damage;
|
||||
param2.Damage = 0;
|
||||
|
||||
if (teamDamage > 0)
|
||||
SkillUtils.TakeHealth(victimPawn, teamDamage, owner, KillfeedIcons.Explosion);
|
||||
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if (owner != null && param2.Damage >= victimPawn.Health)
|
||||
SkillUtils.RegisterKillCredit(victim.Index, owner.Index, KillfeedIcons.Explosion);
|
||||
}
|
||||
|
||||
private static bool IsFriendlyFireOff()
|
||||
{
|
||||
bool ff = ConVar.Find("mp_friendlyfire")?.GetPrimitiveValue<bool>() ?? false;
|
||||
bool tae = ConVar.Find("mp_teammates_are_enemies")?.GetPrimitiveValue<bool>() ?? false;
|
||||
return !ff && !tae;
|
||||
}
|
||||
|
||||
private static bool NearlyEquals(float a, float b, float epsilon = 0.001f) => Math.Abs(a - b) < epsilon;
|
||||
|
||||
public class PlayerSkillInfo
|
||||
{
|
||||
public ulong SteamID { get; set; }
|
||||
public bool CanUse { get; set; }
|
||||
public DateTime Cooldown { get; set; }
|
||||
}
|
||||
|
||||
public class SkillConfig(Skills skill = skillName, bool active = true, string color = "#7740c9", CsTeam onlyTeam = CsTeam.None, bool disableOnFreezeTime = false, bool needsTeammates = false, string requiredPermission = "", float? hudDuration = null, float? descriptionHudDuration = null, int maxPerServer = -1, Rarity rarity = Rarity.Common, float explosionRadius = 400.0f, int explosionDamage = 60, float dmgReductionForTeamates = 0.5f, float cooldown = 10f, float force = 1000f) : SkillsInfo.DefaultSkillInfo(skill, active, color, onlyTeam, disableOnFreezeTime, needsTeammates, requiredPermission, hudDuration, descriptionHudDuration, maxPerServer, rarity)
|
||||
{
|
||||
public float ExplosionRadius { get; set; } = explosionRadius;
|
||||
public int ExplosionDamage { get; set; } = explosionDamage;
|
||||
public float DmgReductionForTeamates { get; set; } = dmgReductionForTeamates;
|
||||
public float Cooldown { get; set; } = cooldown;
|
||||
public float Force { get; set; } = force;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -2,6 +2,7 @@ using CounterStrikeSharp.API;
|
|||
using CounterStrikeSharp.API.Core;
|
||||
using CounterStrikeSharp.API.Modules.Memory.DynamicFunctions;
|
||||
using CounterStrikeSharp.API.Modules.Utils;
|
||||
using jRandomSkills.src.utils;
|
||||
using src.utils;
|
||||
using System.Collections.Concurrent;
|
||||
using static src.jRandomSkills;
|
||||
|
|
@ -154,7 +155,7 @@ namespace src.player.skills
|
|||
{
|
||||
eventPlayer.ExecuteClientCommand($"play player/player_damagebody_0{Instance.Random.Next(4, 8)}");
|
||||
|
||||
SkillUtils.TakeHealth(playerPawn, SkillsInfo.GetValue<int>(skillName, "damageAfterMiss"), GetSkillOwner(playerIndex), "planted_c4");
|
||||
SkillUtils.TakeHealth(playerPawn, SkillsInfo.GetValue<int>(skillName, "damageAfterMiss"), GetSkillOwner(playerIndex), KillfeedIcons.Fist);
|
||||
}
|
||||
lastShot.TryRemove(playerIndex, out _);
|
||||
});
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@ using CounterStrikeSharp.API.Core;
|
|||
using CounterStrikeSharp.API.Modules.Cvars;
|
||||
using CounterStrikeSharp.API.Modules.Memory.DynamicFunctions;
|
||||
using CounterStrikeSharp.API.Modules.Utils;
|
||||
using jRandomSkills.src.utils;
|
||||
using src.utils;
|
||||
using System.Collections.Concurrent;
|
||||
using Vector = CounterStrikeSharp.API.Modules.Utils.Vector;
|
||||
|
|
@ -132,14 +133,14 @@ namespace src.player.skills
|
|||
param2.Damage = 0;
|
||||
|
||||
if (teamDamage > 0)
|
||||
SkillUtils.TakeHealth(victimPawn, teamDamage, owner, "hegrenade");
|
||||
SkillUtils.TakeHealth(victimPawn, teamDamage, owner, KillfeedIcons.Explosion);
|
||||
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if (owner != null && param2.Damage >= victimPawn.Health)
|
||||
SkillUtils.RegisterKillCredit(victim.Index, owner.Index, "hegrenade");
|
||||
SkillUtils.RegisterKillCredit(victim.Index, owner.Index, KillfeedIcons.Explosion);
|
||||
}
|
||||
|
||||
private static bool IsFriendlyFireOff()
|
||||
|
|
|
|||
80
jRandomSkills - SRC Files/src/player/skills/DemonEye.cs
Normal file
80
jRandomSkills - SRC Files/src/player/skills/DemonEye.cs
Normal file
|
|
@ -0,0 +1,80 @@
|
|||
using CounterStrikeSharp.API;
|
||||
using CounterStrikeSharp.API.Core;
|
||||
using CounterStrikeSharp.API.Modules.Utils;
|
||||
using jRandomSkills.src.utils;
|
||||
using src.utils;
|
||||
using static src.jRandomSkills;
|
||||
|
||||
namespace src.player.skills
|
||||
{
|
||||
public class DemonEye : ISkill
|
||||
{
|
||||
private const Skills skillName = Skills.DemonEye;
|
||||
private static readonly Skills[] hidingSkills = [Skills.Ghost, Skills.Ninja, Skills.C4Camouflage];
|
||||
|
||||
public static void LoadSkill()
|
||||
{
|
||||
SkillUtils.RegisterSkill(skillName, SkillsInfo.GetValue<string>(skillName, "color"));
|
||||
}
|
||||
|
||||
public static void OnTick()
|
||||
{
|
||||
int tickCooldown = (int)(64 * SkillsInfo.GetValue<float>(skillName, "SecondCooldown"));
|
||||
if (Server.TickCount % tickCooldown != 0) return;
|
||||
|
||||
int damage = SkillsInfo.GetValue<int>(skillName, "damage");
|
||||
|
||||
foreach (var player in PlayerManager.GetTickPlayers())
|
||||
{
|
||||
var playerEvent = PlayerManager.GetPlayerEvent(player);
|
||||
if (!Instance.IsPlayerValid(playerEvent)) continue;
|
||||
|
||||
var playerInfo = PlayerManager.GetPlayerByIndex(playerEvent!.Index);
|
||||
if (playerInfo?.Skill == skillName)
|
||||
HitEnemies(playerEvent, damage);
|
||||
}
|
||||
}
|
||||
|
||||
private static void HitEnemies(CCSPlayerController player, int damage)
|
||||
{
|
||||
if (player == null || !player.IsValid || player.PlayerPawn?.Value == null) return;
|
||||
|
||||
int playerSlot = player.Slot;
|
||||
int playerBit = playerSlot % 32;
|
||||
|
||||
if (playerSlot < 0)
|
||||
return;
|
||||
|
||||
foreach (var enemy in PlayerManager.GetTickPlayers().FindAll(p => p != null && p.IsValid && p.Team != player.Team))
|
||||
{
|
||||
var enemyEvent = PlayerManager.GetPlayerEvent(enemy);
|
||||
if (enemyEvent == null || !enemyEvent.IsValid) continue;
|
||||
|
||||
var enemyPawn = enemyEvent.PlayerPawn?.Value;
|
||||
if (enemyPawn == null || !enemyPawn.IsValid || enemyPawn.Health <= 0) continue;
|
||||
|
||||
int enemySlot = enemy.Slot;
|
||||
if (enemySlot < 0)
|
||||
return;
|
||||
|
||||
int enemyBit = enemySlot % 32;
|
||||
uint playerMask = 1u << playerBit;
|
||||
uint enemyMask = 1u << enemyBit;
|
||||
|
||||
bool playerSeesEnemy = (enemyPawn.EntitySpottedState.SpottedByMask[0] & playerMask) != 0;
|
||||
|
||||
if (playerSeesEnemy)
|
||||
{
|
||||
SkillUtils.TakeHealth(enemyPawn, damage, player, KillfeedIcons.Fist);
|
||||
enemyEvent.EmitSound("Player.DamageBody.Onlooker");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public class SkillConfig(Skills skill = skillName, bool active = true, string color = "#c91243", CsTeam onlyTeam = CsTeam.None, bool disableOnFreezeTime = false, bool needsTeammates = false, string requiredPermission = "", float? hudDuration = null, float? descriptionHudDuration = null, int maxPerServer = -1, Rarity rarity = Rarity.Common, float secondCooldown = 1f, int damage = 5) : SkillsInfo.DefaultSkillInfo(skill, active, color, onlyTeam, disableOnFreezeTime, needsTeammates, requiredPermission, hudDuration, descriptionHudDuration, maxPerServer, rarity)
|
||||
{
|
||||
public float SecondCooldown { get; set; } = secondCooldown;
|
||||
public int Damage { get; set; } = damage;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -3,6 +3,7 @@ using CounterStrikeSharp.API.Core;
|
|||
using CounterStrikeSharp.API.Modules.Cvars;
|
||||
using CounterStrikeSharp.API.Modules.Memory.DynamicFunctions;
|
||||
using CounterStrikeSharp.API.Modules.Utils;
|
||||
using jRandomSkills.src.utils;
|
||||
using src.utils;
|
||||
using System.Collections.Concurrent;
|
||||
|
||||
|
|
@ -238,14 +239,14 @@ namespace src.player.skills
|
|||
param2.Damage = 0;
|
||||
|
||||
if (teamDamage > 0)
|
||||
SkillUtils.TakeHealth(victimPawn, teamDamage, owner, "planted_c4");
|
||||
SkillUtils.TakeHealth(victimPawn, teamDamage, owner, KillfeedIcons.Explosion);
|
||||
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if (owner != null && param2.Damage >= victimPawn.Health)
|
||||
SkillUtils.RegisterKillCredit(victim.Index, owner.Index, "planted_c4");
|
||||
SkillUtils.RegisterKillCredit(victim.Index, owner.Index, KillfeedIcons.Explosion);
|
||||
}
|
||||
|
||||
private static bool IsFriendlyFireOff()
|
||||
|
|
|
|||
144
jRandomSkills - SRC Files/src/player/skills/FireRain.cs
Normal file
144
jRandomSkills - SRC Files/src/player/skills/FireRain.cs
Normal file
|
|
@ -0,0 +1,144 @@
|
|||
using CounterStrikeSharp.API;
|
||||
using CounterStrikeSharp.API.Core;
|
||||
using CounterStrikeSharp.API.Modules.Entities.Constants;
|
||||
using CounterStrikeSharp.API.Modules.Utils;
|
||||
using src.utils;
|
||||
using System.Collections.Concurrent;
|
||||
|
||||
namespace src.player.skills
|
||||
{
|
||||
public class FireRain : ISkill
|
||||
{
|
||||
private const Skills skillName = Skills.FireRain;
|
||||
private static readonly QAngle angle = new(10, -4, 13);
|
||||
private static readonly ConcurrentDictionary<uint, byte> decoys = [];
|
||||
|
||||
public static void LoadSkill()
|
||||
{
|
||||
SkillUtils.RegisterSkill(skillName, SkillsInfo.GetValue<string>(skillName, "color"));
|
||||
}
|
||||
|
||||
public static void NewRound()
|
||||
{
|
||||
KillAllDecoys();
|
||||
}
|
||||
|
||||
private static void KillAllDecoys()
|
||||
{
|
||||
foreach (var decoyIndex in decoys.Keys.ToArray())
|
||||
{
|
||||
var decoy = Utilities.GetEntityFromIndex<CDecoyProjectile>((int)decoyIndex);
|
||||
if (decoy != null && decoy.IsValid && decoy.DesignerName == "decoy_projectile")
|
||||
decoy.AddEntityIOEvent("Kill", decoy, delay: 0.1f);
|
||||
}
|
||||
|
||||
decoys.Clear();
|
||||
}
|
||||
|
||||
private static void SpawnRain(CCSPlayerController player, Vector targetPos)
|
||||
{
|
||||
var pawn = player.PlayerPawn.Value;
|
||||
|
||||
if (pawn == null || !pawn.IsValid || pawn.AbsOrigin == null)
|
||||
return;
|
||||
|
||||
const int grenadeCount = 5;
|
||||
const float spawnHeight = 800.0f;
|
||||
const float approachDistance = 600.0f;
|
||||
const float clusterRadius = 130.0f;
|
||||
const float flightTime = 0.65f;
|
||||
const float gravity = 800.0f;
|
||||
|
||||
float approachAngle = Random.Shared.NextSingle() * MathF.Tau;
|
||||
float dirX = MathF.Cos(approachAngle);
|
||||
float dirY = MathF.Sin(approachAngle);
|
||||
|
||||
Vector skyCenter = new(
|
||||
targetPos.X + dirX * approachDistance,
|
||||
targetPos.Y + dirY * approachDistance,
|
||||
targetPos.Z + spawnHeight
|
||||
);
|
||||
|
||||
float dx = targetPos.X - skyCenter.X;
|
||||
float dy = targetPos.Y - skyCenter.Y;
|
||||
float dz = targetPos.Z - skyCenter.Z;
|
||||
|
||||
float vx = dx / flightTime;
|
||||
float vy = dy / flightTime;
|
||||
float vz = (dz + 0.5f * gravity * flightTime * flightTime) / flightTime;
|
||||
|
||||
Vector velocity = new(vx, vy, vz);
|
||||
|
||||
float yaw = MathF.Atan2(vy, vx) * (180.0f / MathF.PI);
|
||||
float horizontalSpeed = MathF.Sqrt(vx * vx + vy * vy);
|
||||
float pitch = -MathF.Atan2(vz, horizontalSpeed) * (180.0f / MathF.PI);
|
||||
QAngle launchAngle = new(pitch, yaw, 0.0f);
|
||||
|
||||
for (int i = 0; i < grenadeCount; i++)
|
||||
{
|
||||
float offsetAngle = Random.Shared.NextSingle() * MathF.Tau;
|
||||
float offsetDist = MathF.Sqrt(Random.Shared.NextSingle()) * clusterRadius;
|
||||
|
||||
float offsetX = MathF.Cos(offsetAngle) * offsetDist;
|
||||
float offsetY = MathF.Sin(offsetAngle) * offsetDist;
|
||||
|
||||
Vector spawnPos = new(
|
||||
skyCenter.X + offsetX,
|
||||
skyCenter.Y + offsetY,
|
||||
skyCenter.Z
|
||||
);
|
||||
|
||||
SkillUtils.CreateMolotovProjectile(spawnPos, launchAngle, velocity, player.TeamNum);
|
||||
}
|
||||
}
|
||||
|
||||
public static void OnEntitySpawned(CEntityInstance entity)
|
||||
{
|
||||
var name = entity.DesignerName;
|
||||
if (name != "decoy_projectile")
|
||||
return;
|
||||
|
||||
var decoy = entity.As<CDecoyProjectile>();
|
||||
if (decoy == null || !decoy.IsValid || decoy.OwnerEntity == null || decoy.OwnerEntity.Value == null || !decoy.OwnerEntity.Value.IsValid) return;
|
||||
|
||||
var pawn = decoy.OwnerEntity.Value.As<CCSPlayerPawn>();
|
||||
if (pawn == null || !pawn.IsValid || pawn.Controller == null || pawn.Controller.Value == null || !pawn.Controller.Value.IsValid) return;
|
||||
|
||||
var player = pawn.Controller.Value.As<CCSPlayerController>();
|
||||
if (player == null || !player.IsValid) return;
|
||||
|
||||
var playerInfo = PlayerManager.GetPlayerByIndex((PlayerManager.GetPlayerEvent(player)?.Index ?? player.Index));
|
||||
if (playerInfo?.Skill != skillName) return;
|
||||
decoys.TryAdd(decoy.Index, 0);
|
||||
}
|
||||
|
||||
public static void DecoyStarted(EventDecoyStarted @event)
|
||||
{
|
||||
var player = PlayerManager.GetPlayerEvent(@event.Userid);
|
||||
if (player == null || !player.IsValid) return;
|
||||
|
||||
var playerInfo = PlayerManager.GetPlayerByIndex(player!.Index);
|
||||
if (playerInfo?.Skill != skillName) return;
|
||||
|
||||
uint key = (uint)@event.Entityid;
|
||||
if (decoys.ContainsKey(key))
|
||||
{
|
||||
var decoy = Utilities.GetEntityFromIndex<CDecoyProjectile>(@event.Entityid);
|
||||
if (decoy != null && decoy.IsValid)
|
||||
decoy.AddEntityIOEvent("Kill", decoy, delay: 0.1f);
|
||||
decoys.TryRemove(key, out _);
|
||||
SpawnRain(player, new Vector(@event.X, @event.Y, @event.Z));
|
||||
}
|
||||
}
|
||||
|
||||
public static void EnableSkill(CCSPlayerController player)
|
||||
{
|
||||
if (player == null || !player.IsValid) return;
|
||||
SkillUtils.TryGiveWeapon(player, CsItem.DecoyGrenade);
|
||||
}
|
||||
|
||||
public class SkillConfig(Skills skill = skillName, bool active = true, string color = "#ffbf47", CsTeam onlyTeam = CsTeam.None, bool disableOnFreezeTime = false, bool needsTeammates = false, string requiredPermission = "", float? hudDuration = null, float? descriptionHudDuration = null, int maxPerServer = -1, Rarity rarity = Rarity.Epic) : SkillsInfo.DefaultSkillInfo(skill, active, color, onlyTeam, disableOnFreezeTime, needsTeammates, requiredPermission, hudDuration, descriptionHudDuration, maxPerServer, rarity)
|
||||
{
|
||||
}
|
||||
}
|
||||
}
|
||||
466
jRandomSkills - SRC Files/src/player/skills/Flashlight.cs
Normal file
466
jRandomSkills - SRC Files/src/player/skills/Flashlight.cs
Normal file
|
|
@ -0,0 +1,466 @@
|
|||
// https://github.com/creazy231/cs2-css-flashlight
|
||||
|
||||
using CounterStrikeSharp.API;
|
||||
using CounterStrikeSharp.API.Core;
|
||||
using CounterStrikeSharp.API.Modules.Utils;
|
||||
using src.utils;
|
||||
using System.Collections.Concurrent;
|
||||
using System.Drawing;
|
||||
|
||||
namespace src.player.skills
|
||||
{
|
||||
public class Flashlight : ISkill
|
||||
{
|
||||
private const Skills skillName = Skills.Flashlight;
|
||||
private static readonly ConcurrentDictionary<uint, PlayerSkillInfo> SkillPlayerInfo = [];
|
||||
|
||||
public class PlayerSkillInfo
|
||||
{
|
||||
public ulong SteamID { get; set; }
|
||||
public bool CanUse { get; set; }
|
||||
public DateTime Cooldown { get; set; }
|
||||
public uint LightEntityIndex { get; set; }
|
||||
public bool IsActive { get; set; }
|
||||
}
|
||||
|
||||
public static void LoadSkill()
|
||||
{
|
||||
SkillUtils.RegisterSkill(skillName, SkillsInfo.GetValue<string>(skillName, "color"));
|
||||
}
|
||||
|
||||
public static void NewRound()
|
||||
{
|
||||
ClearAllEntities();
|
||||
SkillPlayerInfo.Clear();
|
||||
}
|
||||
|
||||
public static void RoundEnd()
|
||||
{
|
||||
ClearAllEntities();
|
||||
}
|
||||
|
||||
public static void OnTick()
|
||||
{
|
||||
foreach (var player in PlayerManager.GetTickPlayers())
|
||||
{
|
||||
if (player == null || !player.IsValid)
|
||||
continue;
|
||||
|
||||
var playerInfo = PlayerManager.GetPlayerByIndex(player.Index);
|
||||
|
||||
if (playerInfo?.Skill != skillName)
|
||||
continue;
|
||||
|
||||
if (!SkillPlayerInfo.TryGetValue(player.Index, out var skillInfo))
|
||||
continue;
|
||||
|
||||
UpdateHUD(player, skillInfo);
|
||||
|
||||
if (!skillInfo.IsActive || skillInfo.LightEntityIndex == 0)
|
||||
continue;
|
||||
|
||||
var lightEntity = Utilities.GetEntityFromIndex<CBarnLight>((int)skillInfo.LightEntityIndex);
|
||||
|
||||
if (lightEntity == null || !lightEntity.IsValid)
|
||||
{
|
||||
skillInfo.IsActive = false;
|
||||
skillInfo.LightEntityIndex = 0;
|
||||
continue;
|
||||
}
|
||||
|
||||
UpdateLightPosition(player, lightEntity);
|
||||
|
||||
if (Server.TickCount % 32 != 0) continue;
|
||||
CanBlind(player, lightEntity);
|
||||
}
|
||||
}
|
||||
|
||||
public static void EnableSkill(CCSPlayerController player)
|
||||
{
|
||||
if (player == null || !player.IsValid)
|
||||
return;
|
||||
|
||||
SkillPlayerInfo.TryAdd(player.Index, new PlayerSkillInfo
|
||||
{
|
||||
SteamID = player.Index,
|
||||
CanUse = true,
|
||||
Cooldown = DateTime.MinValue,
|
||||
LightEntityIndex = 0,
|
||||
IsActive = false
|
||||
});
|
||||
}
|
||||
|
||||
public static void DisableSkill(CCSPlayerController player)
|
||||
{
|
||||
if (player == null)
|
||||
return;
|
||||
|
||||
RemovePlayerLight(player.Index);
|
||||
SkillPlayerInfo.TryRemove(player.Index, out _);
|
||||
SkillUtils.ResetPrintHTML(player);
|
||||
}
|
||||
|
||||
public static void PlayerDeath(EventPlayerDeath @event)
|
||||
{
|
||||
var victim = PlayerManager.GetPlayerEvent(@event.Userid);
|
||||
if (victim != null && victim.IsValid)
|
||||
RemovePlayerLight(victim.Index);
|
||||
}
|
||||
|
||||
public static void UseSkill(CCSPlayerController player)
|
||||
{
|
||||
if (player == null || !player.IsValid)
|
||||
return;
|
||||
|
||||
var playerPawn = player.PlayerPawn?.Value;
|
||||
if (playerPawn == null || !playerPawn.IsValid || playerPawn.Health <= 0)
|
||||
return;
|
||||
|
||||
if (!SkillPlayerInfo.TryGetValue(player.Index, out var skillInfo))
|
||||
return;
|
||||
|
||||
if (!skillInfo.CanUse)
|
||||
return;
|
||||
|
||||
skillInfo.CanUse = false;
|
||||
skillInfo.Cooldown = DateTime.Now;
|
||||
|
||||
CBarnLight? lightEntity = null;
|
||||
if (skillInfo.LightEntityIndex != 0)
|
||||
lightEntity = Utilities.GetEntityFromIndex<CBarnLight>((int)skillInfo.LightEntityIndex);
|
||||
|
||||
if (lightEntity == null || !lightEntity.IsValid)
|
||||
CreatePlayerFlashlight(player, skillInfo);
|
||||
else
|
||||
{
|
||||
skillInfo.IsActive = !skillInfo.IsActive;
|
||||
lightEntity.Enabled = skillInfo.IsActive;
|
||||
|
||||
if (skillInfo.IsActive)
|
||||
{
|
||||
lightEntity.AcceptInput("TurnOn");
|
||||
UpdateLightPosition(player, lightEntity);
|
||||
}
|
||||
else
|
||||
{
|
||||
lightEntity.AcceptInput("TurnOff");
|
||||
lightEntity.Teleport(new Vector(0, 0, -1000));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static void CreatePlayerFlashlight(CCSPlayerController player, PlayerSkillInfo skillInfo)
|
||||
{
|
||||
var playerPawn = player.PlayerPawn?.Value;
|
||||
|
||||
if (playerPawn == null || !playerPawn.IsValid || playerPawn.AbsOrigin == null)
|
||||
return;
|
||||
|
||||
RemovePlayerLight(player.Index);
|
||||
|
||||
if (EntityManager.OverBudget())
|
||||
return;
|
||||
|
||||
var light = Utilities.CreateEntityByName<CBarnLight>("light_barn");
|
||||
|
||||
if (light == null || !light.IsValid)
|
||||
return;
|
||||
|
||||
EntityManager.RegisterEntity(light.Index, player.Index, "light_barn");
|
||||
|
||||
int colorR = SkillsInfo.GetValue<int>(skillName, "colorR");
|
||||
int colorG = SkillsInfo.GetValue<int>(skillName, "colorG");
|
||||
int colorB = SkillsInfo.GetValue<int>(skillName, "colorB");
|
||||
float brightness = SkillsInfo.GetValue<float>(skillName, "brightness");
|
||||
float range = SkillsInfo.GetValue<float>(skillName, "range");
|
||||
|
||||
light.Enabled = true;
|
||||
light.Color = Color.FromArgb(255, Math.Clamp(colorR, 0, 255), Math.Clamp(colorG, 0, 255), Math.Clamp(colorB, 0, 255));
|
||||
light.ColorTemperature = 6500;
|
||||
light.Brightness = brightness;
|
||||
light.Range = range;
|
||||
light.SoftX = 1f;
|
||||
light.SoftY = 1f;
|
||||
light.Skirt = 0.5f;
|
||||
light.SkirtNear = 1.0f;
|
||||
light.CastShadows = 0;
|
||||
light.DirectLight = 3;
|
||||
light.SizeParams.X = 45;
|
||||
light.SizeParams.Y = 45;
|
||||
light.SizeParams.Z = 0.03f;
|
||||
|
||||
using (var keyValues = new CEntityKeyValues())
|
||||
{
|
||||
light.DispatchSpawn(keyValues);
|
||||
}
|
||||
|
||||
light.AcceptInput("TurnOn");
|
||||
|
||||
skillInfo.LightEntityIndex = light.Index;
|
||||
skillInfo.IsActive = true;
|
||||
|
||||
UpdateLightPosition(player, light);
|
||||
}
|
||||
|
||||
private static void UpdateLightPosition(CCSPlayerController player, CBarnLight light)
|
||||
{
|
||||
var pawn = player.PlayerPawn.Value;
|
||||
|
||||
if (pawn == null || !pawn.IsValid || pawn.AbsOrigin == null || pawn.V_angle == null)
|
||||
return;
|
||||
|
||||
Vector eyePos = new(
|
||||
pawn.AbsOrigin.X,
|
||||
pawn.AbsOrigin.Y,
|
||||
pawn.AbsOrigin.Z + pawn.ViewOffset.Z
|
||||
);
|
||||
|
||||
Vector forward = SkillUtils.GetForwardVector(pawn.V_angle);
|
||||
|
||||
const float distance = 18.0f;
|
||||
|
||||
Vector lightPos = new(
|
||||
eyePos.X + forward.X * distance,
|
||||
eyePos.Y + forward.Y * distance,
|
||||
eyePos.Z + forward.Z * distance
|
||||
);
|
||||
|
||||
light.Teleport(lightPos, pawn.V_angle, null);
|
||||
}
|
||||
|
||||
private static void CanBlind(CCSPlayerController owner, CBarnLight light)
|
||||
{
|
||||
var ownerPawn = owner.PlayerPawn.Value;
|
||||
if (ownerPawn == null || !ownerPawn.IsValid || ownerPawn.AbsOrigin == null || ownerPawn.V_angle == null)
|
||||
return;
|
||||
|
||||
if (light == null || !light.IsValid || light.AbsOrigin == null)
|
||||
return;
|
||||
|
||||
float blindDuration = SkillsInfo.GetValue<float>(skillName, "blindDuration");
|
||||
float blindAlpha = SkillsInfo.GetValue<float>(skillName, "blindAlpha");
|
||||
|
||||
float blindAngle = SkillsInfo.GetValue<float>(skillName, "blindAngle");
|
||||
float range = SkillsInfo.GetValue<float>(skillName, "range");
|
||||
float rangeSq = range * range;
|
||||
|
||||
Vector eyePos = new(
|
||||
ownerPawn.AbsOrigin.X,
|
||||
ownerPawn.AbsOrigin.Y,
|
||||
ownerPawn.AbsOrigin.Z + ownerPawn.ViewOffset.Z
|
||||
);
|
||||
Vector ownerForward = SkillUtils.GetForwardVector(ownerPawn.V_angle);
|
||||
Vector lightPos = new(
|
||||
eyePos.X + ownerForward.X * 18.0f,
|
||||
eyePos.Y + ownerForward.Y * 18.0f,
|
||||
eyePos.Z + ownerForward.Z * 18.0f
|
||||
);
|
||||
|
||||
float minDot = MathF.Cos(blindAngle * MathF.PI / 180.0f);
|
||||
|
||||
foreach (var target in PlayerManager.GetTickPlayers())
|
||||
{
|
||||
if (target == null || !target.IsValid || target.Index == owner.Index || target.Team == owner.Team)
|
||||
continue;
|
||||
|
||||
var targetInfo = PlayerManager.GetPlayerByIndex(target.Index);
|
||||
if (targetInfo != null && targetInfo.Skill == Skills.AntyFlash)
|
||||
continue;
|
||||
|
||||
var targetPawn = target.PlayerPawn.Value;
|
||||
|
||||
if (targetPawn == null || !targetPawn.IsValid || targetPawn.Health <= 0 || target.TeamNum == owner.TeamNum)
|
||||
continue;
|
||||
|
||||
bool targetBlinded = targetPawn.BlindUntilTime > Server.CurrentTime;
|
||||
bool ownerBlinded = ownerPawn.BlindUntilTime > Server.CurrentTime;
|
||||
var (playerSeesEnemy, enemySeesPlayer) = ArePlayersSpottedBothWays(owner, ownerPawn, target, targetPawn);
|
||||
|
||||
bool needPlayerSees = !ownerBlinded;
|
||||
bool needEnemySees = !targetBlinded;
|
||||
|
||||
if (ownerBlinded && targetBlinded)
|
||||
continue;
|
||||
|
||||
if (needPlayerSees && !playerSeesEnemy)
|
||||
continue;
|
||||
|
||||
if (needEnemySees && !enemySeesPlayer)
|
||||
continue;
|
||||
|
||||
Vector targetEyePos = new(
|
||||
targetPawn.AbsOrigin.X,
|
||||
targetPawn.AbsOrigin.Y,
|
||||
targetPawn.AbsOrigin.Z + targetPawn.ViewOffset.Z
|
||||
);
|
||||
|
||||
Vector toTarget = new(
|
||||
targetEyePos.X - lightPos.X,
|
||||
targetEyePos.Y - lightPos.Y,
|
||||
targetEyePos.Z - lightPos.Z
|
||||
);
|
||||
|
||||
float distanceSq = toTarget.X * toTarget.X + toTarget.Y * toTarget.Y + toTarget.Z * toTarget.Z;
|
||||
|
||||
if (distanceSq <= 0.0001f || distanceSq > rangeSq)
|
||||
continue;
|
||||
|
||||
float distance = MathF.Sqrt(distanceSq);
|
||||
float invLength = 1.0f / distance;
|
||||
|
||||
Vector directionToTarget = new(
|
||||
toTarget.X * invLength,
|
||||
toTarget.Y * invLength,
|
||||
toTarget.Z * invLength
|
||||
);
|
||||
|
||||
float sourceDot = ownerForward.X * directionToTarget.X +
|
||||
ownerForward.Y * directionToTarget.Y +
|
||||
ownerForward.Z * directionToTarget.Z;
|
||||
|
||||
if (sourceDot < minDot)
|
||||
continue;
|
||||
|
||||
Vector targetForward = SkillUtils.GetForwardVector(targetPawn.V_angle);
|
||||
|
||||
Vector fromTargetToLight = new(
|
||||
lightPos.X - targetEyePos.X,
|
||||
lightPos.Y - targetEyePos.Y,
|
||||
lightPos.Z - targetEyePos.Z
|
||||
);
|
||||
|
||||
float targetDistanceSq = fromTargetToLight.X * fromTargetToLight.X +
|
||||
fromTargetToLight.Y * fromTargetToLight.Y +
|
||||
fromTargetToLight.Z * fromTargetToLight.Z;
|
||||
|
||||
if (targetDistanceSq <= 0.0001f)
|
||||
continue;
|
||||
|
||||
float targetInvLength = 1.0f / MathF.Sqrt(targetDistanceSq);
|
||||
|
||||
fromTargetToLight.X *= targetInvLength;
|
||||
fromTargetToLight.Y *= targetInvLength;
|
||||
fromTargetToLight.Z *= targetInvLength;
|
||||
|
||||
float targetDot = targetForward.X * fromTargetToLight.X +
|
||||
targetForward.Y * fromTargetToLight.Y +
|
||||
targetForward.Z * fromTargetToLight.Z;
|
||||
|
||||
if (targetDot < minDot)
|
||||
continue;
|
||||
|
||||
BlindPlayers(targetPawn, blindDuration, blindAlpha);
|
||||
}
|
||||
}
|
||||
|
||||
private static void BlindPlayers(CCSPlayerPawn pawn, float blindDuration, float blindAlpha)
|
||||
{
|
||||
var rng = jRandomSkills.Instance.Random;
|
||||
float now = Server.CurrentTime;
|
||||
|
||||
bool alreadyBlinded = pawn.BlindUntilTime > now;
|
||||
|
||||
if (!alreadyBlinded)
|
||||
pawn.BlindStartTime = now;
|
||||
|
||||
pawn.BlindUntilTime = now + blindDuration;
|
||||
|
||||
pawn.FlashDuration = blindDuration + (float)rng.NextDouble() * 0.05f;
|
||||
pawn.FlashMaxAlpha = blindAlpha + (float)rng.NextDouble() * 0.5f;
|
||||
|
||||
Utilities.SetStateChanged(pawn, "CCSPlayerPawnBase", "m_flFlashDuration");
|
||||
Utilities.SetStateChanged(pawn, "CCSPlayerPawnBase", "m_flFlashMaxAlpha");
|
||||
}
|
||||
|
||||
private static (bool, bool) ArePlayersSpottedBothWays(CCSPlayerController player, CCSPlayerPawn playerPawn, CCSPlayerController enemy, CCSPlayerPawn enemyPawn)
|
||||
{
|
||||
int playerSlot = player.Slot;
|
||||
int enemySlot = enemy.Slot;
|
||||
|
||||
if (playerSlot < 0 || enemySlot < 0)
|
||||
return (false, false);
|
||||
|
||||
int playerBit = playerSlot % 32;
|
||||
int enemyBit = enemySlot % 32;
|
||||
|
||||
uint playerMask = 1u << playerBit;
|
||||
uint enemyMask = 1u << enemyBit;
|
||||
|
||||
bool playerSeesEnemy = (enemyPawn.EntitySpottedState.SpottedByMask[0] & playerMask) != 0;
|
||||
bool enemySeesPlayer = (playerPawn.EntitySpottedState.SpottedByMask[0] & enemyMask) != 0;
|
||||
|
||||
return (playerSeesEnemy, enemySeesPlayer);
|
||||
}
|
||||
|
||||
private static void RemovePlayerLight(uint playerIndex)
|
||||
{
|
||||
if (SkillPlayerInfo.TryGetValue(playerIndex, out var info) && info.LightEntityIndex != 0)
|
||||
{
|
||||
EntityManager.DestroyEntity(info.LightEntityIndex);
|
||||
info.LightEntityIndex = 0;
|
||||
info.IsActive = false;
|
||||
}
|
||||
}
|
||||
|
||||
private static void UpdateHUD(CCSPlayerController player, PlayerSkillInfo skillInfo)
|
||||
{
|
||||
float cooldown = 0;
|
||||
|
||||
float time = (float)Math.Ceiling((skillInfo.Cooldown.AddSeconds(SkillsInfo.GetValue<float>(skillName, "cooldown")) - DateTime.Now).TotalSeconds);
|
||||
cooldown = Math.Max(time, 0);
|
||||
|
||||
if (cooldown == 0 && !skillInfo.CanUse)
|
||||
skillInfo.CanUse = true;
|
||||
|
||||
var playerInfo = PlayerManager.GetPlayerByIndex(player.Index);
|
||||
|
||||
if (playerInfo == null)
|
||||
return;
|
||||
|
||||
if (cooldown == 0)
|
||||
playerInfo.PrintHTML = null;
|
||||
else
|
||||
playerInfo.PrintHTML = $"{player.GetTranslation("hud_info", $"<font color='#FF0000'>{cooldown}</font>")}";
|
||||
}
|
||||
|
||||
private static void ClearAllEntities()
|
||||
{
|
||||
foreach (var key in SkillPlayerInfo.Keys)
|
||||
RemovePlayerLight(key);
|
||||
}
|
||||
|
||||
public class SkillConfig(
|
||||
Skills skill = skillName,
|
||||
bool active = true,
|
||||
string color = "#a3000b",
|
||||
CsTeam onlyTeam = CsTeam.None,
|
||||
bool disableOnFreezeTime = true,
|
||||
bool needsTeammates = false,
|
||||
string requiredPermission = "",
|
||||
float? hudDuration = null,
|
||||
float? descriptionHudDuration = null,
|
||||
int maxPerServer = 2,
|
||||
Rarity rarity = Rarity.Legendary,
|
||||
float cooldown = 2f,
|
||||
int colorR = 255,
|
||||
int colorG = 255,
|
||||
int colorB = 255,
|
||||
float brightness = 1.5f,
|
||||
float range = 1200.0f,
|
||||
float blindDuration = 5f,
|
||||
float blindAngle = 10.0f,
|
||||
float blindAlpha = 200
|
||||
) : SkillsInfo.DefaultSkillInfo(skill, active, color, onlyTeam, disableOnFreezeTime, needsTeammates, requiredPermission, hudDuration, descriptionHudDuration, maxPerServer, rarity)
|
||||
{
|
||||
public float Cooldown { get; set; } = cooldown;
|
||||
public int ColorR { get; set; } = colorR;
|
||||
public int ColorG { get; set; } = colorG;
|
||||
public int ColorB { get; set; } = colorB;
|
||||
public float Brightness { get; set; } = brightness;
|
||||
public float Range { get; set; } = range;
|
||||
public float BlindDuration { get; set; } = blindDuration;
|
||||
public float BlindAlpha { get; set; } = blindAlpha;
|
||||
public float BlindAngle { get; set; } = blindAngle;
|
||||
}
|
||||
}
|
||||
}
|
||||
167
jRandomSkills - SRC Files/src/player/skills/HealingChicken.cs
Normal file
167
jRandomSkills - SRC Files/src/player/skills/HealingChicken.cs
Normal file
|
|
@ -0,0 +1,167 @@
|
|||
using CounterStrikeSharp.API;
|
||||
using CounterStrikeSharp.API.Core;
|
||||
using CounterStrikeSharp.API.Modules.Utils;
|
||||
using src.utils;
|
||||
using System.Collections.Concurrent;
|
||||
using System.Drawing;
|
||||
|
||||
namespace src.player.skills
|
||||
{
|
||||
public class HealingChicken : ISkill
|
||||
{
|
||||
private const Skills skillName = Skills.HealingChicken;
|
||||
|
||||
private class ChickenState
|
||||
{
|
||||
public CChicken? Chicken { get; set; }
|
||||
public Vector? LastOrigin { get; set; }
|
||||
public int TickCounter { get; set; }
|
||||
}
|
||||
|
||||
private static readonly ConcurrentDictionary<uint, List<ChickenState>> activeChickens = new();
|
||||
|
||||
public static void LoadSkill()
|
||||
{
|
||||
SkillUtils.RegisterSkill(skillName, SkillsInfo.GetValue<string>(skillName, "color"));
|
||||
}
|
||||
|
||||
public static void NewRound()
|
||||
{
|
||||
activeChickens.Clear();
|
||||
}
|
||||
|
||||
public static void EnableSkill(CCSPlayerController player)
|
||||
{
|
||||
SpawnChicken(player);
|
||||
}
|
||||
|
||||
public static void DisableSkill(CCSPlayerController player)
|
||||
{
|
||||
if (activeChickens.TryRemove(player.Index, out var chickens))
|
||||
foreach (var state in chickens)
|
||||
if (state.Chicken != null && state.Chicken.IsValid)
|
||||
state.Chicken.Remove();
|
||||
}
|
||||
|
||||
private static void SpawnChicken(CCSPlayerController player)
|
||||
{
|
||||
if (player == null || !player.IsValid) return;
|
||||
|
||||
var pawn = player.PlayerPawn.Value;
|
||||
if (pawn == null || !pawn.IsValid || pawn.AbsOrigin == null) return;
|
||||
|
||||
int amount = SkillsInfo.GetValue<int>(skillName, "amount");
|
||||
var list = new List<ChickenState>();
|
||||
|
||||
for (int i = 0; i < amount; i++)
|
||||
{
|
||||
CChicken? chicken = EntityManager.CreateTrackedChicken(player.Index);
|
||||
if (chicken == null || !chicken.IsValid) continue;
|
||||
|
||||
chicken.Render = Color.LightGreen;
|
||||
|
||||
Vector offset = new(
|
||||
(float)(100 * Math.Cos(2 * Math.PI * i / amount)),
|
||||
(float)(100 * Math.Sin(2 * Math.PI * i / amount)),
|
||||
0
|
||||
);
|
||||
|
||||
chicken.Teleport(new Vector(pawn.AbsOrigin.X + offset.X, pawn.AbsOrigin.Y + offset.Y, pawn.AbsOrigin.Z + offset.Z));
|
||||
chicken.Leader.Raw = pawn.Index;
|
||||
|
||||
list.Add(new ChickenState { Chicken = chicken, LastOrigin = null, TickCounter = 0 });
|
||||
}
|
||||
|
||||
activeChickens[player.Index] = list;
|
||||
}
|
||||
|
||||
public static void OnTick()
|
||||
{
|
||||
int tickCooldown = SkillsInfo.GetValue<int>(skillName, "tickCooldown");
|
||||
if (Server.TickCount % tickCooldown == 0) return;
|
||||
|
||||
var players = PlayerManager.GetTickPlayers().ToArray();
|
||||
int healAmount = SkillsInfo.GetValue<int>(skillName, "heal");
|
||||
float healRadius = SkillsInfo.GetValue<float>(skillName, "healRadius");
|
||||
|
||||
foreach (var player in players)
|
||||
{
|
||||
if (player == null || !player.IsValid) continue;
|
||||
|
||||
var playerInfo = PlayerManager.GetPlayerByIndex(player.Index);
|
||||
if (playerInfo?.Skill != skillName) continue;
|
||||
|
||||
var pawn = player.PlayerPawn.Value;
|
||||
if (pawn == null || !pawn.IsValid || pawn.AbsOrigin == null) continue;
|
||||
|
||||
if (!activeChickens.TryGetValue(player.Index, out var chickens)) continue;
|
||||
|
||||
for (int i = chickens.Count - 1; i >= 0; i--)
|
||||
{
|
||||
var state = chickens[i];
|
||||
if (state.Chicken == null || !state.Chicken.IsValid || state.Chicken.AbsOrigin == null)
|
||||
{
|
||||
chickens.RemoveAt(i);
|
||||
continue;
|
||||
}
|
||||
|
||||
var chicken = state.Chicken;
|
||||
|
||||
if (chicken.Leader.Raw != player.Pawn.Raw)
|
||||
chicken.Leader.Raw = player.Pawn.Raw;
|
||||
|
||||
Vector currentOrigin = new(chicken.AbsOrigin.X, chicken.AbsOrigin.Y, chicken.AbsOrigin.Z);
|
||||
|
||||
if (state.LastOrigin != null)
|
||||
{
|
||||
float dx = currentOrigin.X - state.LastOrigin.X;
|
||||
float dy = currentOrigin.Y - state.LastOrigin.Y;
|
||||
float dist2D = MathF.Sqrt(dx * dx + dy * dy);
|
||||
|
||||
if (dist2D > 0.05f && dist2D < 20.0f)
|
||||
{
|
||||
float boostFactor = 2.5f;
|
||||
Vector newPos = new(
|
||||
currentOrigin.X + (dx * boostFactor),
|
||||
currentOrigin.Y + (dy * boostFactor),
|
||||
currentOrigin.Z
|
||||
);
|
||||
|
||||
chicken.Teleport(newPos, chicken.AbsRotation, chicken.AbsVelocity);
|
||||
state.LastOrigin = newPos;
|
||||
}
|
||||
else
|
||||
state.LastOrigin = currentOrigin;
|
||||
}
|
||||
else
|
||||
state.LastOrigin = currentOrigin;
|
||||
|
||||
float pdx = pawn.AbsOrigin.X - state.LastOrigin.X;
|
||||
float pdy = pawn.AbsOrigin.Y - state.LastOrigin.Y;
|
||||
float pdz = pawn.AbsOrigin.Z - state.LastOrigin.Z;
|
||||
float distToPlayer = MathF.Sqrt(pdx * pdx + pdy * pdy + pdz * pdz);
|
||||
|
||||
if (distToPlayer <= healRadius)
|
||||
{
|
||||
state.TickCounter++;
|
||||
if (state.TickCounter >= tickCooldown)
|
||||
{
|
||||
SkillUtils.AddHealth(pawn, healAmount);
|
||||
state.TickCounter = 0;
|
||||
}
|
||||
}
|
||||
else
|
||||
state.TickCounter = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public class SkillConfig(Skills skill = skillName, bool active = true, string color = "#b5ab8f", CsTeam onlyTeam = CsTeam.None, bool disableOnFreezeTime = false, bool needsTeammates = false, string requiredPermission = "", float? hudDuration = null, float? descriptionHudDuration = null, int maxPerServer = 1, Rarity rarity = Rarity.Legendary, int amount = 3, int heal = 2, int tickCooldown = 16, float healRadius = 150.0f) : SkillsInfo.DefaultSkillInfo(skill, active, color, onlyTeam, disableOnFreezeTime, needsTeammates, requiredPermission, hudDuration, descriptionHudDuration, maxPerServer, rarity)
|
||||
{
|
||||
public int Amount { get; set; } = amount;
|
||||
public int Heal { get; set; } = heal;
|
||||
public int TickCooldown { get; set; } = tickCooldown;
|
||||
public float HealRadius { get; set; } = healRadius;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -2,6 +2,7 @@ using CounterStrikeSharp.API;
|
|||
using CounterStrikeSharp.API.Core;
|
||||
using CounterStrikeSharp.API.Modules.Commands.Targeting;
|
||||
using CounterStrikeSharp.API.Modules.Utils;
|
||||
using jRandomSkills.src.utils;
|
||||
using src.utils;
|
||||
using System.Collections.Concurrent;
|
||||
using System.Drawing;
|
||||
|
|
@ -39,7 +40,7 @@ namespace src.player.skills
|
|||
bool hasC4 = pawn.WeaponServices.MyWeapons.Any(w => w.Value?.DesignerName == "weapon_c4");
|
||||
if (!hasC4) continue;
|
||||
|
||||
SkillUtils.TakeHealth(pawn, damage, owner, "planted_c4");
|
||||
SkillUtils.TakeHealth(pawn, damage, owner, KillfeedIcons.C4);
|
||||
playerEvent?.ExecuteClientCommand($"play player/player_damagebody_0{jRandomSkills.Instance.Random.Next(4, 8)}");
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@ using CounterStrikeSharp.API.Core;
|
|||
using CounterStrikeSharp.API.Modules.Memory.DynamicFunctions;
|
||||
using CounterStrikeSharp.API.Modules.Timers;
|
||||
using CounterStrikeSharp.API.Modules.Utils;
|
||||
using jRandomSkills.src.utils;
|
||||
using src.utils;
|
||||
using System.Collections.Concurrent;
|
||||
using Timer = CounterStrikeSharp.API.Modules.Timers.Timer;
|
||||
|
|
@ -353,7 +354,10 @@ namespace src.player.skills
|
|||
|
||||
var playerPawn = player.PlayerPawn.Value;
|
||||
if (playerPawn != null)
|
||||
SkillUtils.TakeHealth(playerPawn, (int)dealDamage, GetShooter(param2), param2.Ability?.Value?.DesignerName);
|
||||
{
|
||||
KillfeedIcons? killfeed = KillfeedIconsExtensions.FromWeaponName(param2.Ability?.Value?.DesignerName);
|
||||
SkillUtils.TakeHealth(playerPawn, (int)dealDamage, GetShooter(param2), killfeed ?? KillfeedIcons.Leg);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,11 +1,12 @@
|
|||
using CounterStrikeSharp.API;
|
||||
using CounterStrikeSharp.API.Core;
|
||||
using CounterStrikeSharp.API.Modules.Memory.DynamicFunctions;
|
||||
using CounterStrikeSharp.API.Modules.Utils;
|
||||
using static src.jRandomSkills;
|
||||
using System.Collections.Concurrent;
|
||||
using src.utils;
|
||||
using CounterStrikeSharp.API.Modules.Timers;
|
||||
using CounterStrikeSharp.API.Modules.Utils;
|
||||
using jRandomSkills.src.utils;
|
||||
using src.utils;
|
||||
using System.Collections.Concurrent;
|
||||
using static src.jRandomSkills;
|
||||
using Timer = CounterStrikeSharp.API.Modules.Timers.Timer;
|
||||
|
||||
namespace src.player.skills
|
||||
|
|
@ -209,7 +210,7 @@ namespace src.player.skills
|
|||
var attackerTeam = attackerPawn.TeamNum;
|
||||
var replicaTeam = replica.Globalname.EndsWith("CT") ? 3 : 2;
|
||||
|
||||
SkillUtils.TakeHealth(attackerPawn, attackerTeam != replicaTeam ? SkillsInfo.GetValue<int>(skillName, "EnemyTeamDamage") : SkillsInfo.GetValue<int>(skillName, "YourTeamDamage"), owner, "planted_c4");
|
||||
SkillUtils.TakeHealth(attackerPawn, attackerTeam != replicaTeam ? SkillsInfo.GetValue<int>(skillName, "EnemyTeamDamage") : SkillsInfo.GetValue<int>(skillName, "YourTeamDamage"), owner, KillfeedIcons.Player);
|
||||
}
|
||||
|
||||
private static CCSPlayerController? GetReplicaOwner(uint replicaIndex)
|
||||
|
|
|
|||
166
jRandomSkills - SRC Files/src/player/skills/JetKick.cs
Normal file
166
jRandomSkills - SRC Files/src/player/skills/JetKick.cs
Normal file
|
|
@ -0,0 +1,166 @@
|
|||
using CounterStrikeSharp.API;
|
||||
using CounterStrikeSharp.API.Core;
|
||||
using CounterStrikeSharp.API.Modules.Utils;
|
||||
using src.utils;
|
||||
using System.Collections.Concurrent;
|
||||
|
||||
namespace src.player.skills
|
||||
{
|
||||
public class JetKick : ISkill
|
||||
{
|
||||
private const Skills skillName = Skills.JetKick;
|
||||
private static readonly ConcurrentDictionary<uint, byte> targetedPlayers = [];
|
||||
private static readonly ConcurrentDictionary<uint, uint> playersToTarget = [];
|
||||
private static readonly object setLock = new();
|
||||
|
||||
public static void LoadSkill()
|
||||
{
|
||||
SkillUtils.RegisterSkill(skillName, SkillsInfo.GetValue<string>(skillName, "color"));
|
||||
}
|
||||
|
||||
public static void NewRound()
|
||||
{
|
||||
lock (setLock)
|
||||
{
|
||||
foreach (var player in PlayerManager.GetTickPlayers())
|
||||
{
|
||||
DisableSkill(player);
|
||||
SkillUtils.CloseMenu(player);
|
||||
}
|
||||
|
||||
targetedPlayers.Clear();
|
||||
playersToTarget.Clear();
|
||||
}
|
||||
}
|
||||
|
||||
public static void OnTick()
|
||||
{
|
||||
if (Server.TickCount % 32 != 0) return;
|
||||
foreach (var player in PlayerManager.GetTickPlayers())
|
||||
{
|
||||
var playerInfo = PlayerManager.GetPlayerByIndex(player!.Index);
|
||||
|
||||
if (playerInfo == null || playerInfo.Skill != skillName) continue;
|
||||
if (!SkillUtils.HasMenu(player)) continue;
|
||||
|
||||
var enemies = PlayerManager.GetTickPlayers().Where(p => p != null && p.IsValid).Select(p => PlayerManager.GetPlayerEvent(p)).Where(p => p != null && p.IsValid && p.Team != player.Team && p.PlayerPawn?.Value != null && p.PlayerPawn.Value.IsValid && p.PlayerPawn.Value.Health > 0 && !p.IsHLTV && p.Team != CsTeam.Spectator && p.Team != CsTeam.None).ToArray();
|
||||
|
||||
ConcurrentBag<(string, string)> menuItems = new(enemies.Select(e => (e.PlayerName, e.Index.ToString())));
|
||||
SkillUtils.UpdateMenu(player, menuItems);
|
||||
}
|
||||
}
|
||||
|
||||
public static void TypeSkill(CCSPlayerController player, string[] commands)
|
||||
{
|
||||
if (player == null || !player.IsValid || player.LifeState != (byte)LifeState_t.LIFE_ALIVE) return;
|
||||
var playerInfo = PlayerManager.GetPlayerByIndex(player!.Index);
|
||||
if (playerInfo?.Skill != skillName) return;
|
||||
|
||||
var playerEvent = PlayerManager.GetPlayerFromEvent(player);
|
||||
if (playerEvent == null || !playerEvent.IsValid) return;
|
||||
|
||||
if (playerInfo.SkillUsed)
|
||||
{
|
||||
playerEvent.PrintToChat($" {ChatColors.Red}{playerEvent.GetTranslation("areareaper_used_info")}");
|
||||
return;
|
||||
}
|
||||
|
||||
string enemyId = commands[0];
|
||||
|
||||
if (!uint.TryParse(enemyId, out uint enemyIndex))
|
||||
{
|
||||
playerEvent.PrintToChat($" {ChatColors.Red}" + playerEvent.GetTranslation("selectplayerskill_incorrect_enemy_index"));
|
||||
return;
|
||||
}
|
||||
|
||||
var enemy = Utilities.GetPlayerFromIndex((int)enemyIndex);
|
||||
|
||||
if (enemy == null)
|
||||
{
|
||||
playerEvent.PrintToChat($" {ChatColors.Red}" + playerEvent.GetTranslation("selectplayerskill_incorrect_enemy_index"));
|
||||
return;
|
||||
}
|
||||
|
||||
targetedPlayers.TryAdd(enemy.Index, 0);
|
||||
playersToTarget[player.Index] = enemy.Index;
|
||||
|
||||
var enemyEvent = PlayerManager.GetPlayerFromEvent(enemy);
|
||||
if (enemyEvent == null || !enemyEvent.IsValid) return;
|
||||
|
||||
playerInfo.SkillUsed = true;
|
||||
|
||||
playerEvent.PrintToChat($" {ChatColors.Green}" + playerEvent.GetTranslation("jetkick_player_info", enemy.PlayerName));
|
||||
enemyEvent.PrintToChat($" {ChatColors.Red}" + enemyEvent.GetTranslation("jetkick_enemy_info"));
|
||||
}
|
||||
|
||||
public static void EnableSkill(CCSPlayerController player)
|
||||
{
|
||||
var playerInfo = PlayerManager.GetPlayerByIndex(player!.Index);
|
||||
if (playerInfo == null) return;
|
||||
playerInfo.SkillUsed = false;
|
||||
|
||||
var playerEvent = PlayerManager.GetPlayerFromEvent(player);
|
||||
if (playerEvent == null || !playerEvent.IsValid) return;
|
||||
|
||||
var enemies = PlayerManager.GetTickPlayers().Where(p => p != null && p.IsValid).Select(p => PlayerManager.GetPlayerEvent(p)).Where(p => p != null && p.IsValid && p.Team != player.Team && p.PlayerPawn?.Value != null && p.PlayerPawn.Value.IsValid && p.PlayerPawn.Value.Health > 0 && !p.IsHLTV && p.Team != CsTeam.Spectator && p.Team != CsTeam.None).ToArray();
|
||||
|
||||
if (enemies.Length > 0)
|
||||
{
|
||||
ConcurrentBag<(string, string)> menuItems = new(enemies.Select(e => (e.PlayerName, e.Index.ToString())));
|
||||
SkillUtils.CreateMenu(player, menuItems);
|
||||
}
|
||||
else
|
||||
playerEvent.PrintToChat($" {ChatColors.Red}{playerEvent.GetTranslation("selectplayerskill_incorrect_enemy_index")}");
|
||||
}
|
||||
|
||||
public static void DisableSkill(CCSPlayerController player)
|
||||
{
|
||||
if (playersToTarget.TryRemove(player.Index, out uint targetIndex))
|
||||
{
|
||||
var target = PlayerManager.GetPlayerFromEvent(Utilities.GetPlayerFromIndex((int)targetIndex));
|
||||
if (target != null && target.IsValid)
|
||||
{
|
||||
if (target.PawnIsAlive && !SkillUtils.IsFreezeTime())
|
||||
target.PrintToChat($" {ChatColors.Green}" + target.GetTranslation("jetkick_disable_info"));
|
||||
}
|
||||
targetedPlayers.TryRemove(targetIndex, out _);
|
||||
}
|
||||
|
||||
SkillUtils.CloseMenu(player);
|
||||
}
|
||||
|
||||
public static void PlayerDeath(EventPlayerDeath @event)
|
||||
{
|
||||
var player = @event.Userid;
|
||||
if (player == null || !player.IsValid) return;
|
||||
|
||||
targetedPlayers.TryRemove(player.Index, out _);
|
||||
SkillUtils.CloseMenu(player);
|
||||
}
|
||||
|
||||
public static void WeaponFire(EventWeaponFire @event)
|
||||
{
|
||||
var player = PlayerManager.GetPlayerEvent(@event.Userid);
|
||||
if (player == null || !player.IsValid) return;
|
||||
|
||||
if (!targetedPlayers.ContainsKey(player.Index)) return;
|
||||
if (!SkillUtils.FiresBullets(@event.Weapon)) return;
|
||||
|
||||
PushPlayer(player);
|
||||
}
|
||||
|
||||
private static void PushPlayer(CCSPlayerController player)
|
||||
{
|
||||
var playerPawn = player.PlayerPawn.Value;
|
||||
if (playerPawn == null || !playerPawn.IsValid || playerPawn.Health <= 0) return;
|
||||
|
||||
Vector newVelocity = -SkillUtils.GetForwardVector(playerPawn.V_angle) * SkillsInfo.GetValue<float>(skillName, "pushVelocity");
|
||||
playerPawn.Teleport(null, null, newVelocity);
|
||||
}
|
||||
|
||||
public class SkillConfig(Skills skill = skillName, bool active = true, string color = "#5a4fd1", CsTeam onlyTeam = CsTeam.None, bool disableOnFreezeTime = false, bool needsTeammates = false, string requiredPermission = "", float? hudDuration = null, float? descriptionHudDuration = null, int maxPerServer = -1, Rarity rarity = Rarity.Common, float pushVelocity = 400f) : SkillsInfo.DefaultSkillInfo(skill, active, color, onlyTeam, disableOnFreezeTime, needsTeammates, requiredPermission, hudDuration, descriptionHudDuration, maxPerServer, rarity)
|
||||
{
|
||||
public float PushVelocity { get; set; } = pushVelocity;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -2,6 +2,7 @@ using CounterStrikeSharp.API.Core;
|
|||
using CounterStrikeSharp.API.Modules.Cvars;
|
||||
using CounterStrikeSharp.API.Modules.Entities.Constants;
|
||||
using CounterStrikeSharp.API.Modules.Utils;
|
||||
using jRandomSkills.src.utils;
|
||||
using src.utils;
|
||||
using System.Collections.Concurrent;
|
||||
using static src.jRandomSkills;
|
||||
|
|
@ -30,7 +31,7 @@ namespace src.player.skills
|
|||
if (!SkillsInfo.GetValue<bool>(skillName, "friendlyFire") && player!.Team == attacker!.Team) return;
|
||||
|
||||
if (attackerInfo?.Skill == skillName && playerInfo?.Skill != Skills.AntyFlash && player!.PlayerPawn.Value!.FlashDuration >= SkillsInfo.GetValue<float>(skillName, "flashDuration"))
|
||||
SkillUtils.TakeHealth(player.PlayerPawn.Value, 9999, attacker, "weapon_flashbang");
|
||||
SkillUtils.TakeHealth(player.PlayerPawn.Value, 9999, attacker, KillfeedIcons.Flashbang);
|
||||
}
|
||||
|
||||
public static void GrenadeThrown(EventGrenadeThrown @event)
|
||||
|
|
|
|||
58
jRandomSkills - SRC Files/src/player/skills/LastGasp.cs
Normal file
58
jRandomSkills - SRC Files/src/player/skills/LastGasp.cs
Normal file
|
|
@ -0,0 +1,58 @@
|
|||
using CounterStrikeSharp.API.Core;
|
||||
using CounterStrikeSharp.API.Modules.Utils;
|
||||
using jRandomSkills.src.utils;
|
||||
using src.utils;
|
||||
using static System.Net.Mime.MediaTypeNames;
|
||||
|
||||
namespace src.player.skills
|
||||
{
|
||||
public class LastGasp : ISkill
|
||||
{
|
||||
private const Skills skillName = Skills.LastGasp;
|
||||
|
||||
public static void LoadSkill()
|
||||
{
|
||||
SkillUtils.RegisterSkill(skillName, SkillsInfo.GetValue<string>(skillName, "color"));
|
||||
}
|
||||
|
||||
public static void PlayerDeath(EventPlayerDeath @event)
|
||||
{
|
||||
var victim = PlayerManager.GetPlayerEvent(@event.Userid);
|
||||
var attacker = PlayerManager.GetPlayerEvent(@event.Attacker);
|
||||
|
||||
if (victim == null || !victim.IsValid || attacker == null || !attacker.IsValid)
|
||||
return;
|
||||
|
||||
var victimPawn = victim.PlayerPawn?.Value;
|
||||
var attackerPawn = attacker.PlayerPawn?.Value;
|
||||
|
||||
if (victimPawn == null || !victimPawn.IsValid || attackerPawn == null || !attackerPawn.IsValid)
|
||||
return;
|
||||
|
||||
var victimInfo = PlayerManager.GetPlayerByIndex(victim!.Index);
|
||||
if (victimInfo?.Skill != skillName)
|
||||
return;
|
||||
|
||||
int damageAfterDeath = SkillsInfo.GetValue<int>(skillName, "DamageAfterDeath");
|
||||
bool canKill = SkillsInfo.GetValue<bool>(skillName, "CanKill");
|
||||
|
||||
if (!canKill)
|
||||
{
|
||||
int newHealth = (int)(attackerPawn.Health - damageAfterDeath);
|
||||
if (newHealth <= 0)
|
||||
damageAfterDeath = damageAfterDeath - 1 + newHealth;
|
||||
|
||||
}
|
||||
|
||||
SkillUtils.TakeHealth(attackerPawn, damageAfterDeath, victim, KillfeedIcons.Fist);
|
||||
PlayerManager.GetPlayerFromEvent(attacker)?.ExecuteClientCommand($"play player/player_damagebody_0{jRandomSkills.Instance.Random.Next(4, 8)}");
|
||||
}
|
||||
|
||||
public class SkillConfig(Skills skill = skillName, bool active = true, string color = "#88bdba", CsTeam onlyTeam = CsTeam.None, bool disableOnFreezeTime = false, bool needsTeammates = false, string requiredPermission = "", float? hudDuration = null, float? descriptionHudDuration = null, int maxPerServer = -1, Rarity rarity = Rarity.Rare, int damageAfterDeath = 30, bool canKill = true) : SkillsInfo.DefaultSkillInfo(skill, active, color, onlyTeam, disableOnFreezeTime, needsTeammates, requiredPermission, hudDuration, descriptionHudDuration, maxPerServer, rarity)
|
||||
{
|
||||
public int DamageAfterDeath { get; set; } = damageAfterDeath;
|
||||
public bool CanKill { get; set; } = canKill;
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -2,6 +2,7 @@ using CounterStrikeSharp.API;
|
|||
using CounterStrikeSharp.API.Core;
|
||||
using CounterStrikeSharp.API.Modules.Memory.DynamicFunctions;
|
||||
using CounterStrikeSharp.API.Modules.Utils;
|
||||
using jRandomSkills.src.utils;
|
||||
using src.utils;
|
||||
using System.Collections.Concurrent;
|
||||
using static src.jRandomSkills;
|
||||
|
|
@ -76,7 +77,8 @@ namespace src.player.skills
|
|||
var playerInfo = PlayerManager.GetPlayerByIndex(eventPlayer.Index);
|
||||
if (playerInfo == null || playerInfo.Skill != skillName) return HookResult.Continue;
|
||||
|
||||
KnifeHit(eventPlayer, true);
|
||||
KillfeedIcons? killfeedIcon = KillfeedIconsExtensions.FromWeapon(weapon);
|
||||
KnifeHit(eventPlayer, true, killfeedIcon);
|
||||
return HookResult.Continue;
|
||||
}
|
||||
|
||||
|
|
@ -94,10 +96,11 @@ namespace src.player.skills
|
|||
var activeWeapon = pawn.WeaponServices.ActiveWeapon.Value;
|
||||
if (activeWeapon == null || !activeWeapon.IsValid || (activeWeapon.DesignerName != "weapon_knife" && activeWeapon.DesignerName != "weapon_bayonet")) return;
|
||||
|
||||
KnifeHit(player, false);
|
||||
KillfeedIcons? killfeedIcon = KillfeedIconsExtensions.FromWeapon(activeWeapon);
|
||||
KnifeHit(player, false, killfeedIcon);
|
||||
}
|
||||
|
||||
private unsafe static void KnifeHit(CCSPlayerController player, bool heavyHit)
|
||||
private unsafe static void KnifeHit(CCSPlayerController player, bool heavyHit, KillfeedIcons? killfeedIcon)
|
||||
{
|
||||
var pawn = player!.PlayerPawn.Value;
|
||||
if (pawn == null || !pawn.IsValid || pawn.AbsOrigin == null)
|
||||
|
|
@ -119,7 +122,7 @@ namespace src.player.skills
|
|||
if (!SkillsInfo.GetValue<bool>(skillName, "friendlyFire") && player.Team == target.Team) return;
|
||||
|
||||
target.PlayerPawn.Value.EmitSound("Player.DamageBody.Onlooker");
|
||||
SkillUtils.TakeHealth(target.PlayerPawn.Value, heavyHit ? Instance.Random.Next(45, 55) : Instance.Random.Next(21, 34), player, "weapon_knife");
|
||||
SkillUtils.TakeHealth(target.PlayerPawn.Value, heavyHit ? Instance.Random.Next(45, 55) : Instance.Random.Next(21, 34), player, killfeedIcon ?? KillfeedIcons.Knife);
|
||||
}
|
||||
|
||||
public class SkillConfig(Skills skill = skillName, bool active = true, string color = "#c9f8ff", CsTeam onlyTeam = CsTeam.None, bool disableOnFreezeTime = false, bool needsTeammates = false, string requiredPermission = "", float? hudDuration = null, float? descriptionHudDuration = null, int maxPerServer = -1, Rarity rarity = Rarity.Common, float maxDistance = 4096f, bool friendlyFire = true) : SkillsInfo.DefaultSkillInfo(skill, active, color, onlyTeam, disableOnFreezeTime, needsTeammates, requiredPermission, hudDuration, descriptionHudDuration, maxPerServer, rarity)
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
using CounterStrikeSharp.API.Core;
|
||||
using CounterStrikeSharp.API.Modules.Entities.Constants;
|
||||
using CounterStrikeSharp.API.Modules.Utils;
|
||||
using jRandomSkills.src.utils;
|
||||
using src.utils;
|
||||
using static src.jRandomSkills;
|
||||
|
||||
|
|
@ -39,7 +40,7 @@ namespace src.player.skills
|
|||
if (target.Handle == player.Handle) return;
|
||||
if (!SkillsInfo.GetValue<bool>(skillName, "friendlyFire") && player.Team == target.Team) return;
|
||||
|
||||
SkillUtils.TakeHealth(target.PlayerPawn.Value, 9999, player, "weapon_taser");
|
||||
SkillUtils.TakeHealth(target.PlayerPawn.Value, 9999, player, KillfeedIcons.Taser);
|
||||
}
|
||||
|
||||
public static void EnableSkill(CCSPlayerController player)
|
||||
|
|
|
|||
|
|
@ -1,8 +1,9 @@
|
|||
using CounterStrikeSharp.API;
|
||||
using CounterStrikeSharp.API.Core;
|
||||
using CounterStrikeSharp.API.Modules.Utils;
|
||||
using System.Collections.Concurrent;
|
||||
using jRandomSkills.src.utils;
|
||||
using src.utils;
|
||||
using System.Collections.Concurrent;
|
||||
|
||||
namespace src.player.skills
|
||||
{
|
||||
|
|
@ -65,7 +66,7 @@ namespace src.player.skills
|
|||
|
||||
if (pawn.Health <= SkillsInfo.GetValue<int>(skillName, "MinHealth")) continue;
|
||||
|
||||
SkillUtils.TakeHealth(pawn, SkillsInfo.GetValue<int>(skillName, "Damage"), GetSkillOwner(playerIndex), "planted_c4");
|
||||
SkillUtils.TakeHealth(pawn, SkillsInfo.GetValue<int>(skillName, "Damage"), GetSkillOwner(playerIndex), KillfeedIcons.Spray);
|
||||
|
||||
if (Server.TickCount % cooldown2 == 0)
|
||||
PlayerManager.GetPlayerFromEvent(player)?.ExecuteClientCommand($"play player/player_damagebody_0{jRandomSkills.Instance.Random.Next(4, 8)}");
|
||||
|
|
|
|||
|
|
@ -2,10 +2,9 @@ using CounterStrikeSharp.API;
|
|||
using CounterStrikeSharp.API.Core;
|
||||
using CounterStrikeSharp.API.Modules.Memory.DynamicFunctions;
|
||||
using CounterStrikeSharp.API.Modules.Utils;
|
||||
using static src.jRandomSkills;
|
||||
using System.Collections.Concurrent;
|
||||
using jRandomSkills.src.utils;
|
||||
using src.utils;
|
||||
using CounterStrikeSharp.API.Modules.Memory;
|
||||
using System.Collections.Concurrent;
|
||||
|
||||
namespace src.player.skills
|
||||
{
|
||||
|
|
@ -62,7 +61,7 @@ namespace src.player.skills
|
|||
|
||||
public static void DisableSkill(CCSPlayerController player)
|
||||
{
|
||||
if (player == null) return;
|
||||
if (player == null || !player.IsValid) return;
|
||||
SkillPlayerInfo.TryRemove(player.Index, out _);
|
||||
EntityManager.DestroyPlayerEntities(player.Index);
|
||||
SkillUtils.ResetPrintHTML(player);
|
||||
|
|
@ -164,7 +163,7 @@ namespace src.player.skills
|
|||
var attackerTeam = attackerPawn.TeamNum;
|
||||
var replicaTeam = replica.Globalname.EndsWith("CT") ? 3 : 2;
|
||||
|
||||
SkillUtils.TakeHealth(attackerPawn, attackerTeam != replicaTeam ? SkillsInfo.GetValue<int>(skillName, "EnemyTeamDamage") : SkillsInfo.GetValue<int>(skillName, "YourTeamDamage"), owner, "planted_c4");
|
||||
SkillUtils.TakeHealth(attackerPawn, attackerTeam != replicaTeam ? SkillsInfo.GetValue<int>(skillName, "EnemyTeamDamage") : SkillsInfo.GetValue<int>(skillName, "YourTeamDamage"), owner, KillfeedIcons.Player);
|
||||
}
|
||||
|
||||
private static CCSPlayerController? GetReplicaOwner(uint replicaIndex)
|
||||
|
|
|
|||
300
jRandomSkills - SRC Files/src/player/skills/TakeAmmo.cs
Normal file
300
jRandomSkills - SRC Files/src/player/skills/TakeAmmo.cs
Normal file
|
|
@ -0,0 +1,300 @@
|
|||
using CounterStrikeSharp.API;
|
||||
using CounterStrikeSharp.API.Core;
|
||||
using CounterStrikeSharp.API.Modules.Memory;
|
||||
using CounterStrikeSharp.API.Modules.Utils;
|
||||
using src.utils;
|
||||
using System.Collections.Concurrent;
|
||||
using static src.jRandomSkills;
|
||||
|
||||
namespace src.player.skills
|
||||
{
|
||||
public class TakeAmmo : ISkill
|
||||
{
|
||||
private const Skills skillName = Skills.TakeAmmo;
|
||||
private static readonly ConcurrentDictionary<uint, PlayerSkillInfo> SkillPlayerInfo = [];
|
||||
private static readonly object setLock = new();
|
||||
private static readonly ConcurrentDictionary<string, (int, string)> OriginalWeaponMaxAmmo = new();
|
||||
|
||||
public static void LoadSkill()
|
||||
{
|
||||
SkillUtils.RegisterSkill(skillName, SkillsInfo.GetValue<string>(skillName, "color"));
|
||||
}
|
||||
|
||||
public static void NewRound()
|
||||
{
|
||||
lock (setLock)
|
||||
{
|
||||
SkillPlayerInfo.Clear();
|
||||
}
|
||||
|
||||
foreach (var kvp in OriginalWeaponMaxAmmo)
|
||||
{
|
||||
var vdata = VirtualFunctions.GetCSWeaponDataFromKey(-1, kvp.Value.Item2);
|
||||
if (vdata != null)
|
||||
vdata.PrimaryReserveAmmoMax = kvp.Value.Item1;
|
||||
}
|
||||
OriginalWeaponMaxAmmo.Clear();
|
||||
}
|
||||
|
||||
public static void EnableSkill(CCSPlayerController player)
|
||||
{
|
||||
SkillPlayerInfo.TryAdd(player.Index, new PlayerSkillInfo
|
||||
{
|
||||
SteamID = player.Index,
|
||||
CanUse = true,
|
||||
Cooldown = DateTime.MinValue,
|
||||
LastClick = DateTime.MinValue,
|
||||
FindedEnemy = true,
|
||||
EnemyHaveAmmo = true,
|
||||
MaxWeaponAmmo = new ConcurrentDictionary<string, int>()
|
||||
});
|
||||
}
|
||||
|
||||
public static void DisableSkill(CCSPlayerController player)
|
||||
{
|
||||
if (SkillPlayerInfo.TryRemove(player.Index, out var _))
|
||||
SkillUtils.ResetPrintHTML(player);
|
||||
|
||||
var weaponServices = player.PlayerPawn?.Value?.WeaponServices;
|
||||
if (weaponServices == null) return;
|
||||
|
||||
foreach (var _weapon in weaponServices.MyWeapons.ToArray())
|
||||
{
|
||||
if (_weapon == null || !_weapon.IsValid) continue;
|
||||
|
||||
var weapon = _weapon?.Value;
|
||||
if (weapon == null || string.IsNullOrEmpty(weapon.DesignerName)) continue;
|
||||
|
||||
OriginalWeaponMaxAmmo.TryGetValue(weapon.DesignerName, out var items);
|
||||
|
||||
weapon.ReserveAmmo.Fill(items.Item1);
|
||||
Utilities.SetStateChanged(weapon, "CBasePlayerWeapon", "m_pReserveAmmo");
|
||||
}
|
||||
}
|
||||
|
||||
public static void OnTick()
|
||||
{
|
||||
var players = PlayerManager.GetTickPlayers().ToArray();
|
||||
foreach (var player in players)
|
||||
{
|
||||
var playerInfo = PlayerManager.GetPlayerByIndex(player!.Index);
|
||||
if (playerInfo?.Skill != skillName) continue;
|
||||
|
||||
if (SkillPlayerInfo.TryGetValue(player.Index, out var skillInfo))
|
||||
{
|
||||
bool recentClick = skillInfo.LastClick.AddSeconds(4) >= DateTime.Now;
|
||||
UpdateHUD(player, skillInfo, recentClick);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static void UpdateHUD(CCSPlayerController player, PlayerSkillInfo skillInfo, bool showInfo)
|
||||
{
|
||||
float cooldown = 0;
|
||||
if (skillInfo != null)
|
||||
{
|
||||
float time = (int)Math.Ceiling((skillInfo.Cooldown.AddSeconds(SkillsInfo.GetValue<float>(skillName, "cooldown")) - DateTime.Now).TotalSeconds);
|
||||
cooldown = Math.Max(time, 0);
|
||||
|
||||
if (cooldown == 0 && skillInfo?.CanUse == false)
|
||||
skillInfo.CanUse = true;
|
||||
}
|
||||
|
||||
var playerInfo = PlayerManager.GetPlayerByIndex(player!.Index);
|
||||
if (playerInfo == null) return;
|
||||
|
||||
if (cooldown == 0)
|
||||
{
|
||||
if (showInfo)
|
||||
playerInfo.PrintHTML =
|
||||
skillInfo != null && !skillInfo.FindedEnemy
|
||||
? $"<font color='#FF0000'>{player.GetTranslation("takeammo_hud_info1")}</font>"
|
||||
: skillInfo != null && !skillInfo.EnemyHaveAmmo ? $"<font color='#FF0000'>{player.GetTranslation("takeammo_hud_info2")}</font>" : null;
|
||||
else
|
||||
SkillUtils.ResetPrintHTML(player);
|
||||
return;
|
||||
}
|
||||
|
||||
playerInfo.PrintHTML = $"{player.GetTranslation("hud_info", $"<font color='#FF0000'>{cooldown}</font>")}";
|
||||
}
|
||||
|
||||
public static void UseSkill(CCSPlayerController player)
|
||||
{
|
||||
var playerPawn = player.PlayerPawn.Value;
|
||||
if (playerPawn?.CBodyComponent == null) return;
|
||||
|
||||
if (SkillPlayerInfo.TryGetValue(player.Index, out var skillInfo))
|
||||
{
|
||||
if (!player.IsValid || playerPawn.Health <= 0) return;
|
||||
if (skillInfo.CanUse)
|
||||
{
|
||||
CCSPlayerController? enemy = GetRandomEnemy(player);
|
||||
if (enemy == null)
|
||||
{
|
||||
skillInfo.FindedEnemy = false;
|
||||
skillInfo.LastClick = DateTime.Now;
|
||||
return;
|
||||
}
|
||||
|
||||
int playerMagazines = GetMagazinesCount(player);
|
||||
int enemyMagazines = GetMagazinesCount(enemy);
|
||||
|
||||
if (enemyMagazines == 0)
|
||||
{
|
||||
skillInfo.FindedEnemy = true;
|
||||
skillInfo.EnemyHaveAmmo = false;
|
||||
skillInfo.LastClick = DateTime.Now;
|
||||
return;
|
||||
}
|
||||
|
||||
skillInfo.EnemyHaveAmmo = true;
|
||||
skillInfo.FindedEnemy = true;
|
||||
skillInfo.CanUse = false;
|
||||
skillInfo.Cooldown = DateTime.Now;
|
||||
|
||||
Server.NextFrame(() =>
|
||||
{
|
||||
if (player == null || !player.IsValid) return;
|
||||
if (enemy == null || !enemy.IsValid) return;
|
||||
|
||||
SetMagazines(player, playerMagazines + enemyMagazines);
|
||||
SetMagazines(enemy, 0);
|
||||
|
||||
PlayerManager.GetPlayerFromEvent(enemy)?.ExecuteClientCommand($"play sounds/weapons/g3sg1/g3sg1_clipout");
|
||||
|
||||
var enemyEvent = PlayerManager.GetPlayerFromEvent(enemy);
|
||||
if (enemyEvent == null || !enemyEvent.IsValid) return;
|
||||
enemyEvent.PrintToChat($" {ChatColors.Red}" + enemyEvent.GetTranslation("takeammo_enemy_info"));
|
||||
});
|
||||
}
|
||||
else
|
||||
skillInfo.LastClick = DateTime.Now;
|
||||
}
|
||||
}
|
||||
|
||||
private static int GetMagazinesCount(CCSPlayerController player)
|
||||
{
|
||||
var pawn = player.PlayerPawn.Value;
|
||||
if (pawn == null || !pawn.IsValid || pawn.Health <= 0) return 0;
|
||||
|
||||
var ws = pawn.WeaponServices;
|
||||
if (ws == null) return 0;
|
||||
|
||||
var activeWeapon = ws.ActiveWeapon?.Value;
|
||||
if (activeWeapon == null || !activeWeapon.IsValid || activeWeapon.VData == null || string.IsNullOrEmpty(activeWeapon.DesignerName)) return 0;
|
||||
|
||||
if (activeWeapon.VData.PrimaryAmmoType == 7 && activeWeapon.ReserveAmmo.Length >= 1)
|
||||
return (int)(activeWeapon.ReserveAmmo[0] / activeWeapon.VData.MaxClip1);
|
||||
|
||||
int magazines = activeWeapon.VData.ReserveAmmoAsClips && activeWeapon.ReserveAmmo.Length >= 1 ? activeWeapon.ReserveAmmo[0] : 0;
|
||||
return magazines;
|
||||
}
|
||||
|
||||
private static void SetMagazines(CCSPlayerController player, int magazines)
|
||||
{
|
||||
var pawn = player.PlayerPawn.Value;
|
||||
if (pawn == null || !pawn.IsValid || pawn.Health <= 0) return;
|
||||
|
||||
var ws = pawn.WeaponServices;
|
||||
if (ws == null) return;
|
||||
|
||||
var activeWeapon = ws.ActiveWeapon?.Value;
|
||||
if (activeWeapon == null || !activeWeapon.IsValid || activeWeapon.VData == null || string.IsNullOrEmpty(activeWeapon.DesignerName)) return;
|
||||
|
||||
if (activeWeapon.VData.PrimaryAmmoType == 7)
|
||||
magazines = (int)(magazines * activeWeapon.VData.MaxClip1);
|
||||
|
||||
activeWeapon.ReserveAmmo.Fill(magazines);
|
||||
Utilities.SetStateChanged(activeWeapon, "CBasePlayerWeapon", "m_pReserveAmmo");
|
||||
|
||||
string weaponName = activeWeapon.DesignerName;
|
||||
string weaponIndex = activeWeapon.AttributeManager.Item.ItemDefinitionIndex.ToString();
|
||||
|
||||
if (SkillPlayerInfo.TryGetValue(player.Index, out var skillInfo))
|
||||
{
|
||||
if (skillInfo.MaxWeaponAmmo.TryGetValue(weaponName, out int currentMax))
|
||||
skillInfo.MaxWeaponAmmo[weaponName] = Math.Max(currentMax, magazines);
|
||||
else
|
||||
skillInfo.MaxWeaponAmmo.TryAdd(weaponName, magazines);
|
||||
}
|
||||
|
||||
var vdata = VirtualFunctions.GetCSWeaponDataFromKey(-1, weaponIndex);
|
||||
if (vdata == null) return;
|
||||
|
||||
if (!OriginalWeaponMaxAmmo.ContainsKey(weaponName))
|
||||
OriginalWeaponMaxAmmo.TryAdd(weaponName, (vdata.PrimaryReserveAmmoMax, weaponIndex));
|
||||
|
||||
vdata.PrimaryReserveAmmoMax = Math.Max(vdata.PrimaryReserveAmmoMax, magazines);
|
||||
}
|
||||
|
||||
public static void WeaponEquip(EventItemEquip @event)
|
||||
{
|
||||
var player = @event.Userid;
|
||||
if (player == null || !player.IsValid) return;
|
||||
|
||||
string weaponName = @event.Item;
|
||||
if (string.IsNullOrEmpty(weaponName)) return;
|
||||
|
||||
if (OriginalWeaponMaxAmmo.TryGetValue("weapon_" + weaponName, out var items))
|
||||
{
|
||||
var pawn = player.PlayerPawn?.Value;
|
||||
if (pawn == null) return;
|
||||
|
||||
var ws = pawn.WeaponServices;
|
||||
if (ws == null) return;
|
||||
|
||||
var activeWeapon = ws.ActiveWeapon?.Value;
|
||||
if (activeWeapon == null || !activeWeapon.IsValid || string.IsNullOrEmpty(activeWeapon.DesignerName)) return;
|
||||
|
||||
int ammoLimit = items.Item1;
|
||||
|
||||
if (SkillPlayerInfo.TryGetValue(player.Index, out var skillInfo))
|
||||
{
|
||||
if (skillInfo.MaxWeaponAmmo.TryGetValue("weapon_" + weaponName, out int personalMax))
|
||||
ammoLimit = Math.Max(ammoLimit, personalMax);
|
||||
}
|
||||
|
||||
if (activeWeapon.ReserveAmmo.Length > 0 && activeWeapon.ReserveAmmo[0] > ammoLimit)
|
||||
{
|
||||
activeWeapon.ReserveAmmo.Fill(ammoLimit);
|
||||
Utilities.SetStateChanged(activeWeapon, "CBasePlayerWeapon", "m_pReserveAmmo");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static CCSPlayerController? GetRandomEnemy(CCSPlayerController player)
|
||||
{
|
||||
CCSPlayerController[] enemies = [.. PlayerManager.GetTickPlayers().FindAll(e =>
|
||||
e.Team != player.Team &&
|
||||
e.PlayerPawn?.Value?.Health > 0 &&
|
||||
e.PlayerPawn?.Value?.WeaponServices?.ActiveWeapon?.Value?.ReserveAmmo.Length > 0
|
||||
)];
|
||||
if (enemies.Length == 0) return null;
|
||||
return enemies[Instance.Random.Next(enemies.Length)];
|
||||
}
|
||||
|
||||
public class PlayerSkillInfo
|
||||
{
|
||||
public ulong SteamID { get; set; }
|
||||
public bool CanUse { get; set; }
|
||||
public DateTime Cooldown { get; set; }
|
||||
public DateTime LastClick { get; set; }
|
||||
public bool FindedEnemy { get; set; }
|
||||
public bool EnemyHaveAmmo { get; set; }
|
||||
public ConcurrentDictionary<string, int> MaxWeaponAmmo { get; set; } = new();
|
||||
}
|
||||
|
||||
public class WeaponInfo
|
||||
{
|
||||
public required string Name { get; set; }
|
||||
public required int Clip1 { get; set; }
|
||||
public required int Clip2 { get; set; }
|
||||
public required int Reserve { get; set; }
|
||||
}
|
||||
|
||||
public class SkillConfig(Skills skill = skillName, bool active = true, string color = "#5eb8b0", CsTeam onlyTeam = CsTeam.None, bool disableOnFreezeTime = false, bool needsTeammates = false, string requiredPermission = "", float? hudDuration = null, float? descriptionHudDuration = null, int maxPerServer = -1, Rarity rarity = Rarity.Common, float cooldown = 30f) : SkillsInfo.DefaultSkillInfo(skill, active, color, onlyTeam, disableOnFreezeTime, needsTeammates, requiredPermission, hudDuration, descriptionHudDuration, maxPerServer, rarity)
|
||||
{
|
||||
public float Cooldown { get; set; } = cooldown;
|
||||
}
|
||||
}
|
||||
}
|
||||
257
jRandomSkills - SRC Files/src/player/skills/TeamTeleport.cs
Normal file
257
jRandomSkills - SRC Files/src/player/skills/TeamTeleport.cs
Normal file
|
|
@ -0,0 +1,257 @@
|
|||
using CounterStrikeSharp.API;
|
||||
using CounterStrikeSharp.API.Core;
|
||||
using CounterStrikeSharp.API.Modules.Utils;
|
||||
using src.utils;
|
||||
using System.Collections.Concurrent;
|
||||
|
||||
namespace src.player.skills
|
||||
{
|
||||
public class TeamTeleport : ISkill
|
||||
{
|
||||
private const Skills skillName = Skills.TeamTeleport;
|
||||
private static readonly ConcurrentDictionary<uint, PlayerSkillInfo> SkillPlayerInfo = [];
|
||||
|
||||
public class PlayerSkillInfo
|
||||
{
|
||||
public ulong SteamID { get; set; }
|
||||
public bool CanUse { get; set; }
|
||||
public DateTime Cooldown { get; set; }
|
||||
public string? TeamateName { get; set; }
|
||||
public uint? TeamateIndex { get; set; }
|
||||
public Vector? TeamatePosition { get; set; }
|
||||
public int NoSpace { get; set; }
|
||||
public int NoEnemy { get; set; }
|
||||
}
|
||||
|
||||
public static void LoadSkill()
|
||||
{
|
||||
SkillUtils.RegisterSkill(skillName, SkillsInfo.GetValue<string>(skillName, "color"));
|
||||
}
|
||||
|
||||
public static void NewRound()
|
||||
{
|
||||
SkillPlayerInfo.Clear();
|
||||
}
|
||||
|
||||
public static void OnTick()
|
||||
{
|
||||
foreach (var player in PlayerManager.GetTickPlayers())
|
||||
{
|
||||
if (player == null || !player.IsValid) continue;
|
||||
|
||||
var playerInfo = PlayerManager.GetPlayerByIndex(player.Index);
|
||||
if (playerInfo?.Skill != skillName) continue;
|
||||
|
||||
if (!SkillPlayerInfo.TryGetValue(player.Index, out var skillInfo)) continue;
|
||||
|
||||
GetTeamate(player, skillInfo);
|
||||
UpdateHUD(player, skillInfo);
|
||||
}
|
||||
}
|
||||
|
||||
public static void EnableSkill(CCSPlayerController player)
|
||||
{
|
||||
if (player == null || !player.IsValid) return;
|
||||
|
||||
SkillPlayerInfo.TryAdd(player.Index, new PlayerSkillInfo
|
||||
{
|
||||
SteamID = player.Index,
|
||||
CanUse = true,
|
||||
Cooldown = DateTime.MinValue,
|
||||
TeamateName = null,
|
||||
TeamateIndex = null,
|
||||
TeamatePosition = null,
|
||||
NoSpace = int.MinValue,
|
||||
NoEnemy = int.MinValue
|
||||
});
|
||||
}
|
||||
|
||||
public static void DisableSkill(CCSPlayerController player)
|
||||
{
|
||||
if (player == null) return;
|
||||
SkillPlayerInfo.TryRemove(player.Index, out _);
|
||||
SkillUtils.ResetPrintHTML(player);
|
||||
}
|
||||
|
||||
public static void UseSkill(CCSPlayerController player)
|
||||
{
|
||||
if (player == null || !player.IsValid) return;
|
||||
|
||||
var playerPawn = player.PlayerPawn?.Value;
|
||||
if (playerPawn == null || !playerPawn.IsValid || playerPawn.Health <= 0) return;
|
||||
|
||||
if (!SkillPlayerInfo.TryGetValue(player.Index, out var skillInfo)) return;
|
||||
if (!skillInfo.CanUse) return;
|
||||
|
||||
skillInfo.NoEnemy = int.MinValue;
|
||||
skillInfo.NoSpace = int.MinValue;
|
||||
|
||||
if (skillInfo.TeamateIndex == null || skillInfo.TeamatePosition == null)
|
||||
{
|
||||
skillInfo.NoEnemy = Server.TickCount + (64 * 2);
|
||||
return;
|
||||
}
|
||||
|
||||
var victim = PlayerManager.GetTickPlayers().FirstOrDefault(p => p.Index == skillInfo.TeamateIndex.Value);
|
||||
if (victim == null || !victim.IsValid)
|
||||
{
|
||||
skillInfo.NoEnemy = Server.TickCount + (64 * 2);
|
||||
return;
|
||||
}
|
||||
|
||||
TeleportToTeamate(player, victim, skillInfo.TeamatePosition, skillInfo);
|
||||
}
|
||||
|
||||
private static void GetTeamate(CCSPlayerController player, PlayerSkillInfo skillInfo)
|
||||
{
|
||||
var playerPawn = player.PlayerPawn?.Value;
|
||||
if (playerPawn == null || !playerPawn.IsValid || playerPawn.AbsOrigin == null || playerPawn.V_angle == null || playerPawn.ViewOffset == null)
|
||||
return;
|
||||
|
||||
Vector eyePos = new(playerPawn.AbsOrigin.X, playerPawn.AbsOrigin.Y, playerPawn.AbsOrigin.Z + playerPawn.ViewOffset.Z);
|
||||
Vector playerForward = SkillUtils.GetForwardVector(playerPawn.V_angle);
|
||||
|
||||
float teleportAngle = SkillsInfo.GetValue<float>(skillName, "teleportAngle");
|
||||
float minDot = MathF.Cos(teleportAngle * MathF.PI / 180.0f);
|
||||
|
||||
skillInfo.TeamateIndex = null;
|
||||
skillInfo.TeamateName = null;
|
||||
skillInfo.TeamatePosition = null;
|
||||
|
||||
foreach (var teammate in PlayerManager.GetTickPlayers())
|
||||
{
|
||||
if (teammate == null || !teammate.IsValid || teammate.Index == player.Index || teammate.Team != player.Team)
|
||||
continue;
|
||||
|
||||
var teammatePawn = teammate.PlayerPawn?.Value;
|
||||
if (teammatePawn == null || !teammatePawn.IsValid || teammatePawn.Health <= 0 || teammatePawn.AbsOrigin == null)
|
||||
continue;
|
||||
|
||||
Vector targetPos = new(teammatePawn.AbsOrigin.X, teammatePawn.AbsOrigin.Y, teammatePawn.AbsOrigin.Z + (teammatePawn.ViewOffset.Z * 0.5f));
|
||||
Vector toTarget = new(targetPos.X - eyePos.X, targetPos.Y - eyePos.Y, targetPos.Z - eyePos.Z);
|
||||
|
||||
float distanceSq = toTarget.X * toTarget.X + toTarget.Y * toTarget.Y + toTarget.Z * toTarget.Z;
|
||||
if (distanceSq <= 0.0001f)
|
||||
continue;
|
||||
|
||||
float distance = MathF.Sqrt(distanceSq);
|
||||
|
||||
float invLength = 1.0f / distance;
|
||||
|
||||
toTarget.X *= invLength;
|
||||
toTarget.Y *= invLength;
|
||||
toTarget.Z *= invLength;
|
||||
|
||||
float dot = playerForward.X * toTarget.X + playerForward.Y * toTarget.Y + playerForward.Z * toTarget.Z;
|
||||
|
||||
if (distance > 30.0f && dot < minDot)
|
||||
continue;
|
||||
|
||||
skillInfo.TeamateIndex = teammate.Index;
|
||||
skillInfo.TeamateName = teammate.PlayerName;
|
||||
skillInfo.TeamatePosition = new Vector(teammatePawn.AbsOrigin.X, teammatePawn.AbsOrigin.Y, teammatePawn.AbsOrigin.Z);
|
||||
}
|
||||
}
|
||||
|
||||
private unsafe static bool CheckTeleport(CCSPlayerController attacker, CCSPlayerController victim, Vector startPos, Vector endPos, QAngle angle)
|
||||
{
|
||||
var attackerPawn = attacker.PlayerPawn.Value;
|
||||
if (attackerPawn == null || !attackerPawn.IsValid) return false;
|
||||
|
||||
var victimPawn = victim.PlayerPawn.Value;
|
||||
if (victimPawn == null || !victimPawn.IsValid) return false;
|
||||
|
||||
var result = RayTrace.TraceHullShape(
|
||||
startPos,
|
||||
endPos,
|
||||
victim,
|
||||
attackerPawn.Collision.Mins,
|
||||
attackerPawn.Collision.Maxs,
|
||||
null,
|
||||
null,
|
||||
angle
|
||||
);
|
||||
|
||||
if (!result.HasValue)
|
||||
return false;
|
||||
|
||||
return !result.Value.DidHit;
|
||||
}
|
||||
|
||||
private static void TeleportToTeamate(CCSPlayerController player, CCSPlayerController victim, Vector position, PlayerSkillInfo skillInfo)
|
||||
{
|
||||
var playerPawn = player.PlayerPawn?.Value;
|
||||
if (playerPawn == null || !playerPawn.IsValid || player.AbsRotation == null) return;
|
||||
|
||||
QAngle playerAngles = new(player.AbsRotation.X, player.AbsRotation.Y, player.AbsRotation.Z);
|
||||
float distance = SkillsInfo.GetValue<float>(skillName, "teleportDistance");
|
||||
|
||||
int[] angles = [0, 90, -90, 179];
|
||||
bool teleported = false;
|
||||
|
||||
foreach (int extraAngle in angles)
|
||||
{
|
||||
QAngle targetAngle = new(0, playerAngles.Y + extraAngle, 0);
|
||||
Vector direction = SkillUtils.GetForwardVector(targetAngle);
|
||||
|
||||
Vector targetPos = position - (direction * distance);
|
||||
Vector traceStart = position - (direction * 20f);
|
||||
|
||||
if (CheckTeleport(player, victim, traceStart, targetPos, targetAngle))
|
||||
{
|
||||
playerPawn.Teleport(targetPos, targetAngle, Vector.Zero);
|
||||
teleported = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!teleported)
|
||||
skillInfo.NoSpace = Server.TickCount + (64 * 2);
|
||||
else
|
||||
{
|
||||
skillInfo.NoSpace = int.MinValue;
|
||||
skillInfo.NoEnemy = int.MinValue;
|
||||
skillInfo.CanUse = false;
|
||||
skillInfo.Cooldown = DateTime.Now;
|
||||
}
|
||||
}
|
||||
|
||||
private static void UpdateHUD(CCSPlayerController player, PlayerSkillInfo skillInfo)
|
||||
{
|
||||
float cooldown = 0;
|
||||
|
||||
float time = (float)Math.Ceiling((skillInfo.Cooldown.AddSeconds(SkillsInfo.GetValue<float>(skillName, "cooldown")) - DateTime.Now).TotalSeconds);
|
||||
cooldown = Math.Max(time, 0);
|
||||
|
||||
if (cooldown == 0 && !skillInfo.CanUse)
|
||||
skillInfo.CanUse = true;
|
||||
|
||||
var playerInfo = PlayerManager.GetPlayerByIndex(player.Index);
|
||||
if (playerInfo == null) return;
|
||||
|
||||
if (cooldown != 0)
|
||||
playerInfo.PrintHTML = $"{player.GetTranslation("hud_info", $"<font color='#FF0000'>{cooldown}</font>")}";
|
||||
else if (skillInfo.NoSpace >= Server.TickCount)
|
||||
playerInfo.PrintHTML = $"<font color='#FF0000'>{player.GetTranslation("shade_nospace")}</font>";
|
||||
else if (skillInfo.NoEnemy >= Server.TickCount)
|
||||
playerInfo.PrintHTML = $"<font color='#FF0000'>{player.GetTranslation("teamteleport_noenemy")}</font>";
|
||||
else
|
||||
{
|
||||
if (skillInfo.TeamateName == null)
|
||||
playerInfo.PrintHTML = null;
|
||||
else
|
||||
{
|
||||
string color = player.Team == CsTeam.Terrorist ? "#FFA500" : "#ADD8E6";
|
||||
playerInfo.PrintHTML = $"{player.GetTranslation("teamteleport_hud_info", $"<font color='{color}'>{System.Net.WebUtility.HtmlEncode(skillInfo.TeamateName)}</font>")}";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public class SkillConfig(Skills skill = skillName, bool active = true, string color = "#bcf542", CsTeam onlyTeam = CsTeam.None, bool disableOnFreezeTime = true, bool needsTeammates = true, string requiredPermission = "", float? hudDuration = null, float? descriptionHudDuration = null, int maxPerServer = 2, Rarity rarity = Rarity.Common, float cooldown = 15f, float teleportAngle = 10.0f, float teleportDistance = 100f) : SkillsInfo.DefaultSkillInfo(skill, active, color, onlyTeam, disableOnFreezeTime, needsTeammates, requiredPermission, hudDuration, descriptionHudDuration, maxPerServer, rarity)
|
||||
{
|
||||
public float Cooldown { get; set; } = cooldown;
|
||||
public float TeleportAngle { get; set; } = teleportAngle;
|
||||
public float TeleportDistance { get; set; } = teleportDistance;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1,5 +1,6 @@
|
|||
using CounterStrikeSharp.API.Core;
|
||||
using CounterStrikeSharp.API.Modules.Utils;
|
||||
using jRandomSkills.src.utils;
|
||||
using src.utils;
|
||||
|
||||
namespace src.player.skills
|
||||
|
|
@ -38,7 +39,7 @@ namespace src.player.skills
|
|||
int damage = (int)(@event.DmgHealth * SkillsInfo.GetValue<float>(skillName, "healthTakenScale"));
|
||||
damage = Math.Min(damage, SkillsInfo.GetValue<int>(skillName, "maxTakenDamagePerShot"));
|
||||
|
||||
SkillUtils.TakeHealth(attackerEvent.PlayerPawn.Value, damage, victimEvent, "planted_c4");
|
||||
SkillUtils.TakeHealth(attackerEvent.PlayerPawn.Value, damage, victimEvent, KillfeedIcons.Armor);
|
||||
attackerEvent.EmitSound("Player.DamageBody.Onlooker");
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -6,6 +6,7 @@ using CounterStrikeSharp.API.Modules.Memory.DynamicFunctions;
|
|||
using CounterStrikeSharp.API.Modules.Timers;
|
||||
using CounterStrikeSharp.API.Modules.UserMessages;
|
||||
using CounterStrikeSharp.API.Modules.Utils;
|
||||
using jRandomSkills.src.utils;
|
||||
using src.utils;
|
||||
using System.Collections.Concurrent;
|
||||
using System.Drawing;
|
||||
|
|
@ -360,7 +361,7 @@ namespace src.player.skills
|
|||
|
||||
if (CheckHasKnife(thrower!)) return;
|
||||
|
||||
SkillUtils.TakeHealth(victimPawn, SkillsInfo.GetValue<int>(skillName, "damage"), thrower, "weapon_knife");
|
||||
SkillUtils.TakeHealth(victimPawn, SkillsInfo.GetValue<int>(skillName, "damage"), thrower, KillfeedIcons.Knife);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@ using CounterStrikeSharp.API;
|
|||
using CounterStrikeSharp.API.Core;
|
||||
using CounterStrikeSharp.API.Modules.Entities.Constants;
|
||||
using CounterStrikeSharp.API.Modules.Utils;
|
||||
using jRandomSkills.src.utils;
|
||||
using src.utils;
|
||||
using System.Collections.Concurrent;
|
||||
|
||||
|
|
@ -95,7 +96,7 @@ namespace src.player.skills
|
|||
if (pawn == null || !pawn.IsValid || pawn.AbsOrigin == null) continue;
|
||||
|
||||
if (SkillUtils.GetDistance(smoke.Key, pawn.AbsOrigin) <= smokeRadius)
|
||||
if (SkillUtils.TakeHealth(pawn, smokeDamage, thrower, "smokegrenade"))
|
||||
if (SkillUtils.TakeHealth(pawn, smokeDamage, thrower, KillfeedIcons.Smokegrenade))
|
||||
player.EmitSound("Player.DamageBody.Onlooker");
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -314,7 +314,7 @@ namespace src.player.skills
|
|||
public DateTime LastAttempt { get; set; }
|
||||
}
|
||||
|
||||
public class SkillConfig(Skills skill = skillName, bool active = true, string color = "#ff3b3b", CsTeam onlyTeam = CsTeam.None, bool disableOnFreezeTime = false, bool needsTeammates = false, string requiredPermission = "", float? hudDuration = null, float? descriptionHudDuration = null, int maxPerServer = -1, Rarity rarity = Rarity.Rare, float radarDuration = 5f, float triggerRadius = 24f, float wireHeight = 30f, float wireWidth = 1.5f, float maxWallDistance = 400f, float cooldown = 20f) : SkillsInfo.DefaultSkillInfo(skill, active, color, onlyTeam, disableOnFreezeTime, needsTeammates, requiredPermission, hudDuration, descriptionHudDuration, maxPerServer, rarity)
|
||||
public class SkillConfig(Skills skill = skillName, bool active = true, string color = "#ff3b3b", CsTeam onlyTeam = CsTeam.None, bool disableOnFreezeTime = false, bool needsTeammates = false, string requiredPermission = "", float? hudDuration = null, float? descriptionHudDuration = null, int maxPerServer = -1, Rarity rarity = Rarity.Rare, float radarDuration = 5f, float triggerRadius = 24f, float wireHeight = 30f, float wireWidth = 0.7f, float maxWallDistance = 400f, float cooldown = 20f) : SkillsInfo.DefaultSkillInfo(skill, active, color, onlyTeam, disableOnFreezeTime, needsTeammates, requiredPermission, hudDuration, descriptionHudDuration, maxPerServer, rarity)
|
||||
{
|
||||
public float RadarDuration { get; set; } = radarDuration;
|
||||
public float TriggerRadius { get; set; } = triggerRadius;
|
||||
|
|
|
|||
|
|
@ -195,7 +195,6 @@ namespace src.player.skills
|
|||
|
||||
itemServices.HasHelmet = gear.HasHelmet;
|
||||
itemServices.HasDefuser = gear.HasDefuser;
|
||||
Utilities.SetStateChanged(pawn, "CCSPlayerPawn", "m_pItemServices");
|
||||
}
|
||||
|
||||
private static (WeaponInfo[]?, bool) GetWeapons(CCSPlayerController player)
|
||||
|
|
@ -272,7 +271,7 @@ namespace src.player.skills
|
|||
|
||||
private static CCSPlayerController? GetRandomEnemy(CCSPlayerController player)
|
||||
{
|
||||
CCSPlayerController[] enemies = [.. PlayerManager.GetTickPlayers().FindAll(e => e.Team != player.Team && e.PawnIsAlive)];
|
||||
CCSPlayerController[] enemies = [.. PlayerManager.GetTickPlayers().FindAll(e => e.Team != player.Team && e.PlayerPawn?.Value?.Health > 0)];
|
||||
if (enemies.Length == 0) return null;
|
||||
return enemies[Instance.Random.Next(enemies.Length)];
|
||||
}
|
||||
|
|
|
|||
|
|
@ -187,6 +187,7 @@ namespace src.utils
|
|||
ChangeLanguageCommand = new NormalCommand("lang, language, changelang, change_lang, jezyk, język", ""),
|
||||
ReloadCommand = new NormalCommand("reload, refresh", "@jRandomSkills/admin"),
|
||||
NextCommand = new NormalCommand("next_skill", "@jRandomSkills/admin"),
|
||||
CheckEntityCommand = new NormalCommand("ent, entity, checkentity, check_entity, sprawdzencje, checkent, check_ent, 检查实体, 检查实体", "@jRandomSkills/owner"),
|
||||
};
|
||||
|
||||
VotingCommands = new VotingCommands
|
||||
|
|
@ -267,6 +268,7 @@ namespace src.utils
|
|||
public required NormalCommand ChangeLanguageCommand { get; set; }
|
||||
public required NormalCommand ReloadCommand { get; set; }
|
||||
public required NormalCommand NextCommand { get; set; }
|
||||
public required NormalCommand CheckEntityCommand { get; set; }
|
||||
}
|
||||
|
||||
public class VotingCommand(bool enableVoting, string alias, string permissions, float timeToVote, float percentagesToSuccess, float timeToNextVoting, float timeToNextSameVoting, int minimumPlayersToStartVoting) : NormalCommand(alias, permissions)
|
||||
|
|
|
|||
|
|
@ -123,6 +123,25 @@ namespace src.utils
|
|||
return CreateTrackedDynamicProp(playerIndex, "prop_dynamic_override");
|
||||
}
|
||||
|
||||
public static CChicken? CreateTrackedChicken(uint playerIndex)
|
||||
{
|
||||
try
|
||||
{
|
||||
if (OverBudget()) return null;
|
||||
var chicken = Utilities.CreateEntityByName<CChicken>("chicken");
|
||||
if (chicken == null || !chicken.IsValid) return null;
|
||||
|
||||
chicken.DispatchSpawn();
|
||||
RegisterEntity(chicken.Index, playerIndex, "chicken");
|
||||
return chicken;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Server.PrintToConsole($"[EntityManager] CreateTrackedChicken: {ex.Message}");
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
public static CPhysicsPropMultiplayer? CreateTrackedPhysicsProp(uint playerIndex)
|
||||
{
|
||||
try
|
||||
|
|
|
|||
314
jRandomSkills - SRC Files/src/utils/KillfeedIcons.cs
Normal file
314
jRandomSkills - SRC Files/src/utils/KillfeedIcons.cs
Normal file
|
|
@ -0,0 +1,314 @@
|
|||
using CounterStrikeSharp.API.Core;
|
||||
using src.utils;
|
||||
|
||||
namespace jRandomSkills.src.utils
|
||||
{
|
||||
public enum KillfeedIcons
|
||||
{
|
||||
// Pistols
|
||||
Deagle,
|
||||
Elite,
|
||||
FiveSeven,
|
||||
Glock,
|
||||
Hkp2000,
|
||||
P2000,
|
||||
P250,
|
||||
Tec9,
|
||||
Cz75a,
|
||||
Revolver,
|
||||
UspSilencer,
|
||||
UspSilencerOff,
|
||||
|
||||
// Assault Rifles
|
||||
Ak47,
|
||||
Aug,
|
||||
Famas,
|
||||
Galilar,
|
||||
M4A4,
|
||||
M4A1,
|
||||
M4A1_off,
|
||||
Sg556,
|
||||
|
||||
// Sniper Rifles
|
||||
AWP,
|
||||
G3SG1,
|
||||
Scar20,
|
||||
Ssg,
|
||||
|
||||
// Machine Guns
|
||||
M249,
|
||||
Negev,
|
||||
|
||||
// Submachine Guns
|
||||
Bizon,
|
||||
Mac10,
|
||||
Mp5,
|
||||
Mp7,
|
||||
Mp9,
|
||||
P90,
|
||||
Ump45,
|
||||
|
||||
// Shotguns
|
||||
Mag7,
|
||||
Nova,
|
||||
Sawedoff,
|
||||
Xm1014,
|
||||
|
||||
// Knives
|
||||
Bayonet,
|
||||
Knife,
|
||||
KnifeBowie,
|
||||
KnifeButterfly,
|
||||
KnifeCanis,
|
||||
KnifeCord,
|
||||
KnifeCss,
|
||||
KnifeFalchion,
|
||||
KnifeFlip,
|
||||
KnifeGut,
|
||||
KnifeGypsyJackknife,
|
||||
KnifeKarambit,
|
||||
KnifeKukri,
|
||||
KnifeM9Bayonet,
|
||||
KnifeOutdoor,
|
||||
KnifePush,
|
||||
KnifeSkeleton,
|
||||
KnifeStiletto,
|
||||
KnifeSurvivalBowie,
|
||||
KnifeT,
|
||||
KnifeTactical,
|
||||
KnifeTwinblade,
|
||||
KnifeUrsus,
|
||||
KnifeWidowmaker,
|
||||
Knifegg,
|
||||
|
||||
// Grenades and Explosives
|
||||
C4,
|
||||
Decoy,
|
||||
Flashbang,
|
||||
FlashbangAssist,
|
||||
Grenadepack,
|
||||
Grenadepack2,
|
||||
Hegrenade,
|
||||
Incgrenade,
|
||||
Fire,
|
||||
Molotov,
|
||||
Smokegrenade,
|
||||
|
||||
// Equipment and Armor
|
||||
Armor,
|
||||
ArmorHelmet,
|
||||
Assaultsuit,
|
||||
AssaultsuitHelmetOnly,
|
||||
Defuser,
|
||||
HeavyArmor,
|
||||
Helmet,
|
||||
Taser,
|
||||
Healthshot,
|
||||
Ammobox,
|
||||
AmmoboxThreepack,
|
||||
|
||||
// Environmental and Other Damage
|
||||
Disconnect,
|
||||
Sentry,
|
||||
MeleeKnife,
|
||||
Fist,
|
||||
Explosion,
|
||||
Leg,
|
||||
|
||||
// Cosmetics and Effects
|
||||
ClothingHands,
|
||||
Player,
|
||||
Medal,
|
||||
Spray
|
||||
}
|
||||
|
||||
public static class KillfeedIconsExtensions
|
||||
{
|
||||
public static string? ToIcon(this KillfeedIcons icon)
|
||||
{
|
||||
return icon switch
|
||||
{
|
||||
// Pistols
|
||||
KillfeedIcons.Deagle => "deagle",
|
||||
KillfeedIcons.Elite => "elite",
|
||||
KillfeedIcons.FiveSeven => "fiveseven",
|
||||
KillfeedIcons.Glock => "glock",
|
||||
KillfeedIcons.Hkp2000 => "hkp2000",
|
||||
KillfeedIcons.P2000 => "p2000",
|
||||
KillfeedIcons.P250 => "p250",
|
||||
KillfeedIcons.Tec9 => "tec9",
|
||||
KillfeedIcons.Cz75a => "cz75a",
|
||||
KillfeedIcons.Revolver => "revolver",
|
||||
KillfeedIcons.UspSilencer => "usp_silencer",
|
||||
KillfeedIcons.UspSilencerOff => "usp_silencer_off",
|
||||
|
||||
// Assault Rifles
|
||||
KillfeedIcons.Ak47 => "ak47",
|
||||
KillfeedIcons.Aug => "aug",
|
||||
KillfeedIcons.Famas => "famas",
|
||||
KillfeedIcons.Galilar => "galilar",
|
||||
KillfeedIcons.M4A4 => "m4a1",
|
||||
KillfeedIcons.M4A1 => "m4a1_silencer",
|
||||
KillfeedIcons.M4A1_off => "m4a1_silencer_off",
|
||||
KillfeedIcons.Sg556 => "sg556",
|
||||
|
||||
// Sniper Rifles
|
||||
KillfeedIcons.AWP => "awp",
|
||||
KillfeedIcons.G3SG1 => "g3sg1",
|
||||
KillfeedIcons.Scar20 => "scar20",
|
||||
KillfeedIcons.Ssg => "ssg08",
|
||||
|
||||
// Machine Guns
|
||||
KillfeedIcons.M249 => "m249",
|
||||
KillfeedIcons.Negev => "negev",
|
||||
|
||||
// Submachine Guns
|
||||
KillfeedIcons.Bizon => "bizon",
|
||||
KillfeedIcons.Mac10 => "mac10",
|
||||
KillfeedIcons.Mp5 => "mp5sd",
|
||||
KillfeedIcons.Mp7 => "mp7",
|
||||
KillfeedIcons.Mp9 => "mp9",
|
||||
KillfeedIcons.P90 => "p90",
|
||||
KillfeedIcons.Ump45 => "ump45",
|
||||
|
||||
// Shotguns
|
||||
KillfeedIcons.Mag7 => "mag7",
|
||||
KillfeedIcons.Nova => "nova",
|
||||
KillfeedIcons.Sawedoff => "sawedoff",
|
||||
KillfeedIcons.Xm1014 => "xm1014",
|
||||
|
||||
// Knives
|
||||
KillfeedIcons.Bayonet => "bayonet",
|
||||
KillfeedIcons.Knife => "knife",
|
||||
KillfeedIcons.KnifeBowie => "knife_bowie",
|
||||
KillfeedIcons.KnifeButterfly => "knife_butterfly",
|
||||
KillfeedIcons.KnifeCanis => "knife_canis",
|
||||
KillfeedIcons.KnifeCord => "knife_cord",
|
||||
KillfeedIcons.KnifeCss => "knife_css",
|
||||
KillfeedIcons.KnifeFalchion => "knife_falchion",
|
||||
KillfeedIcons.KnifeFlip => "knife_flip",
|
||||
KillfeedIcons.KnifeGut => "knife_gut",
|
||||
KillfeedIcons.KnifeGypsyJackknife => "knife_gypsy_jackknife",
|
||||
KillfeedIcons.KnifeKarambit => "knife_karambit",
|
||||
KillfeedIcons.KnifeKukri => "knife_kukri",
|
||||
KillfeedIcons.KnifeM9Bayonet => "knife_m9_bayonet",
|
||||
KillfeedIcons.KnifeOutdoor => "knife_outdoor",
|
||||
KillfeedIcons.KnifePush => "knife_push",
|
||||
KillfeedIcons.KnifeSkeleton => "knife_skeleton",
|
||||
KillfeedIcons.KnifeStiletto => "knife_stiletto",
|
||||
KillfeedIcons.KnifeSurvivalBowie => "knife_survival_bowie",
|
||||
KillfeedIcons.KnifeT => "knife_t",
|
||||
KillfeedIcons.KnifeTactical => "knife_tactical",
|
||||
KillfeedIcons.KnifeTwinblade => "knife_twinblade",
|
||||
KillfeedIcons.KnifeUrsus => "knife_ursus",
|
||||
KillfeedIcons.KnifeWidowmaker => "knife_widowmaker",
|
||||
KillfeedIcons.Knifegg => "knifegg",
|
||||
|
||||
// Grenades and Explosives
|
||||
KillfeedIcons.C4 => "c4",
|
||||
KillfeedIcons.Decoy => "decoy",
|
||||
KillfeedIcons.Flashbang => "flashbang",
|
||||
KillfeedIcons.FlashbangAssist => "flashbang_assist",
|
||||
KillfeedIcons.Grenadepack => "grenadepack",
|
||||
KillfeedIcons.Grenadepack2 => "grenadepack2",
|
||||
KillfeedIcons.Hegrenade => "hegrenade",
|
||||
KillfeedIcons.Incgrenade => "incgrenade",
|
||||
KillfeedIcons.Fire => "inferno",
|
||||
KillfeedIcons.Molotov => "molotov",
|
||||
KillfeedIcons.Smokegrenade => "smokegrenade",
|
||||
|
||||
// Equipment and Armor
|
||||
KillfeedIcons.Armor => "armor",
|
||||
KillfeedIcons.ArmorHelmet => "armor_helmet",
|
||||
KillfeedIcons.Assaultsuit => "assaultsuit",
|
||||
KillfeedIcons.AssaultsuitHelmetOnly => "assaultsuit_helmet_only",
|
||||
KillfeedIcons.Defuser => "defuser",
|
||||
KillfeedIcons.HeavyArmor => "heavy_armor",
|
||||
KillfeedIcons.Helmet => "helmet",
|
||||
KillfeedIcons.Taser => "taser",
|
||||
KillfeedIcons.Healthshot => "healthshot",
|
||||
KillfeedIcons.Ammobox => "ammobox",
|
||||
KillfeedIcons.AmmoboxThreepack => "ammobox_threepack",
|
||||
|
||||
// Environmental and Other Damage
|
||||
KillfeedIcons.Disconnect => "disconnect",
|
||||
KillfeedIcons.Sentry => "dronegun",
|
||||
KillfeedIcons.MeleeKnife => "melee",
|
||||
KillfeedIcons.Fist => "movelinear",
|
||||
KillfeedIcons.Explosion => "prop_exploding_barrel",
|
||||
KillfeedIcons.Leg => "stomp_damage",
|
||||
|
||||
// Cosmetics and Effects
|
||||
KillfeedIcons.ClothingHands => "clothing_hands",
|
||||
KillfeedIcons.Player => "customplayer",
|
||||
KillfeedIcons.Medal => "flair0",
|
||||
KillfeedIcons.Spray => "spray0",
|
||||
|
||||
_ => throw new ArgumentOutOfRangeException(nameof(icon), icon, null)
|
||||
};
|
||||
}
|
||||
|
||||
public static KillfeedIcons? FromWeapon(CBasePlayerWeapon? weapon)
|
||||
{
|
||||
string weaponName = SkillUtils.GetDesignerName(weapon);
|
||||
return FromWeaponName(weaponName);
|
||||
}
|
||||
|
||||
public static KillfeedIcons? FromWeaponName(string? weaponName)
|
||||
{
|
||||
if (string.IsNullOrWhiteSpace(weaponName))
|
||||
return null;
|
||||
|
||||
return weaponName.ToLowerInvariant() switch
|
||||
{
|
||||
"weapon_deagle" => KillfeedIcons.Deagle,
|
||||
"weapon_revolver" => KillfeedIcons.Revolver,
|
||||
"weapon_glock" => KillfeedIcons.Glock,
|
||||
"weapon_usp_silencer" => KillfeedIcons.UspSilencer,
|
||||
"weapon_cz75a" => KillfeedIcons.Cz75a,
|
||||
"weapon_fiveseven" => KillfeedIcons.FiveSeven,
|
||||
"weapon_p250" => KillfeedIcons.P250,
|
||||
"weapon_tec9" => KillfeedIcons.Tec9,
|
||||
"weapon_elite" => KillfeedIcons.Elite,
|
||||
"weapon_hkp2000" => KillfeedIcons.Hkp2000,
|
||||
"weapon_mp9" => KillfeedIcons.Mp9,
|
||||
"weapon_mac10" => KillfeedIcons.Mac10,
|
||||
"weapon_bizon" => KillfeedIcons.Bizon,
|
||||
"weapon_mp7" => KillfeedIcons.Mp7,
|
||||
"weapon_ump45" => KillfeedIcons.Ump45,
|
||||
"weapon_p90" => KillfeedIcons.P90,
|
||||
"weapon_mp5sd" => KillfeedIcons.Mp5,
|
||||
"weapon_sg556" => KillfeedIcons.Sg556,
|
||||
"weapon_sg553" => KillfeedIcons.Sg556,
|
||||
"weapon_famas" => KillfeedIcons.Famas,
|
||||
"weapon_galilar" => KillfeedIcons.Galilar,
|
||||
"weapon_m4a4" => KillfeedIcons.M4A4,
|
||||
"weapon_m4a1_silencer" => KillfeedIcons.M4A1,
|
||||
"weapon_ak47" => KillfeedIcons.Ak47,
|
||||
"weapon_aug" => KillfeedIcons.Aug,
|
||||
"weapon_ssg08" => KillfeedIcons.Ssg,
|
||||
"weapon_awp" => KillfeedIcons.AWP,
|
||||
"weapon_scar20" => KillfeedIcons.Scar20,
|
||||
"weapon_g3sg1" => KillfeedIcons.G3SG1,
|
||||
"weapon_nova" => KillfeedIcons.Nova,
|
||||
"weapon_xm1014" => KillfeedIcons.Xm1014,
|
||||
"weapon_mag7" => KillfeedIcons.Mag7,
|
||||
"weapon_sawedoff" => KillfeedIcons.Sawedoff,
|
||||
"weapon_m249" => KillfeedIcons.M249,
|
||||
"weapon_negev" => KillfeedIcons.Negev,
|
||||
"weapon_taser" => KillfeedIcons.Taser,
|
||||
"weapon_molotov" => KillfeedIcons.Molotov,
|
||||
"weapon_incgrenade" => KillfeedIcons.Incgrenade,
|
||||
"weapon_flashbang" => KillfeedIcons.Flashbang,
|
||||
"weapon_smokegrenade" => KillfeedIcons.Smokegrenade,
|
||||
"weapon_decoy" => KillfeedIcons.Decoy,
|
||||
"weapon_hegrenade" => KillfeedIcons.Hegrenade,
|
||||
"weapon_knife" => KillfeedIcons.Knife,
|
||||
"weapon_bayonet" => KillfeedIcons.Bayonet,
|
||||
"weapon_c4" => KillfeedIcons.C4,
|
||||
|
||||
_ => null
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -32,6 +32,8 @@ namespace src.utils
|
|||
LazySig<MemoryFunctionWithReturn<IntPtr, IntPtr, IntPtr, IntPtr, IntPtr, IntPtr, IntPtr, int>>("HEGrenadeProjectile_CreateFunc", s => new(s));
|
||||
private static readonly Lazy<MemoryFunctionWithReturn<IntPtr, IntPtr, IntPtr, IntPtr, IntPtr, int, int, CSmokeGrenadeProjectile>?> SmokeGrenadeProjectile_CreateFunc =
|
||||
LazySig<MemoryFunctionWithReturn<IntPtr, IntPtr, IntPtr, IntPtr, IntPtr, int, int, CSmokeGrenadeProjectile>>("SmokeGrenadeProjectile_CreateFunc", s => new(s));
|
||||
private static readonly Lazy<MemoryFunctionWithReturn<IntPtr, IntPtr, IntPtr, IntPtr, IntPtr, IntPtr, IntPtr, int>?> CMolotovProjectile_CreateFunc =
|
||||
LazySig<MemoryFunctionWithReturn<IntPtr, IntPtr, IntPtr, IntPtr, IntPtr, IntPtr, IntPtr, int>>("CMolotovProjectile_CreateFunc", s => new(s));
|
||||
private static readonly Lazy<MemoryFunctionVoid<nint, float, RoundEndReason, nint, nint>?> TerminateRoundFunc =
|
||||
LazySig<MemoryFunctionVoid<nint, float, RoundEndReason, nint, nint>>("CCSGameRules_TerminateRound", s => new(s));
|
||||
private static readonly Lazy<MemoryFunctionVoid<CBasePlayerPawn, QAngle>?> SnapViewAngles =
|
||||
|
|
@ -310,6 +312,11 @@ namespace src.utils
|
|||
SmokeGrenadeProjectile_CreateFunc.Value?.Invoke(pos.Handle, angle.Handle, vel.Handle, vel.Handle, IntPtr.Zero, 45, teamNum);
|
||||
}
|
||||
|
||||
public static void CreateMolotovProjectile(Vector pos, QAngle angle, Vector vel, int teamNum)
|
||||
{
|
||||
CMolotovProjectile_CreateFunc.Value?.Invoke(pos.Handle, angle.Handle, vel.Handle, vel.Handle, IntPtr.Zero, 46, teamNum);
|
||||
}
|
||||
|
||||
// True when this hit would be nullified by the server's friendly-fire rules (same-team hit,
|
||||
// mp_friendlyfire 0 and mp_teammates_are_enemies 0). The TakeDamage pre-hook still sees the raw
|
||||
// damage, so lethal victim-side skills (SecondLife/Phoenix) must skip it — otherwise they "revive"
|
||||
|
|
@ -333,9 +340,9 @@ namespace src.utils
|
|||
|
||||
private static readonly ConcurrentDictionary<uint, (uint AttackerIndex, string? Weapon, int ExpiryTick)> pendingKillCredits = [];
|
||||
|
||||
public static void RegisterKillCredit(uint victimIndex, uint attackerIndex, string? weapon = null)
|
||||
public static void RegisterKillCredit(uint victimIndex, uint attackerIndex, KillfeedIcons? killfeedIcon = null)
|
||||
{
|
||||
pendingKillCredits[victimIndex] = (attackerIndex, weapon, Server.TickCount + 64);
|
||||
pendingKillCredits[victimIndex] = (attackerIndex, killfeedIcon == null ? null : KillfeedIconsExtensions.ToIcon((KillfeedIcons)killfeedIcon), Server.TickCount + 64);
|
||||
}
|
||||
|
||||
public static bool TryConsumeKillCredit(uint victimIndex, out uint attackerIndex, out string? weapon)
|
||||
|
|
@ -505,7 +512,7 @@ namespace src.utils
|
|||
.Cast<CCSPlayerController>()];
|
||||
}
|
||||
|
||||
public static bool TakeHealth(CCSPlayerPawn? pawn, int damage, CCSPlayerController? damageAttacker = null, string? damageWeapon = null)
|
||||
public static bool TakeHealth(CCSPlayerPawn? pawn, int damage, CCSPlayerController? damageAttacker = null, KillfeedIcons? killfeedIcon = null)
|
||||
{
|
||||
if (pawn == null || !pawn.IsValid || pawn.LifeState != (byte)LifeState_t.LIFE_ALIVE)
|
||||
return false;
|
||||
|
|
@ -546,9 +553,8 @@ namespace src.utils
|
|||
|
||||
if (pawn.Health <= 0)
|
||||
{
|
||||
if (damageAttacker != null && damageAttacker.IsValid && victim != null && victim.IsValid
|
||||
&& damageAttacker.Index != victim.Index)
|
||||
RegisterKillCredit(victim.Index, damageAttacker.Index, damageWeapon);
|
||||
if (damageAttacker != null && damageAttacker.IsValid && victim != null && victim.IsValid && damageAttacker.Index != victim.Index)
|
||||
RegisterKillCredit(victim.Index, damageAttacker.Index, killfeedIcon);
|
||||
|
||||
Server.NextFrame(() =>
|
||||
{
|
||||
|
|
@ -752,6 +758,7 @@ namespace src.utils
|
|||
("weapon_m4a1", 60) => "weapon_m4a1_silencer",
|
||||
("weapon_hkp2000", 61) => "weapon_usp_silencer",
|
||||
("weapon_deagle", 64) => "weapon_revolver",
|
||||
("weapon_mp7", 23) => "weapon_mp5sd",
|
||||
_ => designerName
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -13,6 +13,13 @@
|
|||
"linux": "55 4C 89 C1 48 89 E5 41 57 49 89 FF 41 56 49 89 D6 48 89 F2 48 89 FE 41 55 48 8D 3D ? ? ? ? 4D 89 C5 41 54 45 89 CC 53"
|
||||
}
|
||||
},
|
||||
"CMolotovProjectile_CreateFunc": {
|
||||
"signatures": {
|
||||
"library": "server",
|
||||
"windows": "48 8B C4 48 89 58 10 4C 89 40 18 48 89 48 08",
|
||||
"linux": "55 48 8D 05 ? ? ? ? 48 89 E5 41 57 41 56 41 55 41 54 49 89 FC 53 48 81 EC ? ? ? ? 4C 8D 35"
|
||||
}
|
||||
},
|
||||
"Shoot_Secondary": {
|
||||
"signatures": {
|
||||
"library": "server",
|
||||
|
|
|
|||
Binary file not shown.
|
|
@ -143,6 +143,10 @@
|
|||
"NextCommand": {
|
||||
"Alias": "next_skill",
|
||||
"Permissions": "@jRandomSkills/admin"
|
||||
},
|
||||
"CheckEntityCommand": {
|
||||
"Alias": "ent, entity, checkentity, check_entity, sprawdzencje, checkent, check_ent, 检查实体, 检查实体",
|
||||
"Permissions": "@jRandomSkills/owner"
|
||||
}
|
||||
},
|
||||
"VotingCommands": {
|
||||
|
|
|
|||
|
|
@ -85,7 +85,7 @@
|
|||
"RadarDuration": 5.0,
|
||||
"TriggerRadius": 24.0,
|
||||
"WireHeight": 30.0,
|
||||
"WireWidth": 1.5,
|
||||
"WireWidth": 0.7,
|
||||
"MaxWallDistance": 400.0,
|
||||
"Cooldown": 20.0,
|
||||
"NeedsTeammates": false,
|
||||
|
|
@ -189,6 +189,20 @@
|
|||
"MaxPerServer": -1,
|
||||
"Rarity": "Common"
|
||||
},
|
||||
{
|
||||
"Cooldown": 30.0,
|
||||
"NeedsTeammates": false,
|
||||
"DisableOnFreezeTime": false,
|
||||
"OnlyTeam": 0,
|
||||
"Color": "#5eb8b0",
|
||||
"Active": true,
|
||||
"Name": "TakeAmmo",
|
||||
"HudDuration": null,
|
||||
"DescriptionHudDuration": null,
|
||||
"RequiredPermission": "",
|
||||
"MaxPerServer": -1,
|
||||
"Rarity": "Common"
|
||||
},
|
||||
{
|
||||
"Cooldown": 30.0,
|
||||
"CooldownBeforeUse": 10.0,
|
||||
|
|
@ -928,6 +942,21 @@
|
|||
"MaxPerServer": -1,
|
||||
"Rarity": "Common"
|
||||
},
|
||||
{
|
||||
"DamageAfterDeath": 30,
|
||||
"CanKill": true,
|
||||
"NeedsTeammates": false,
|
||||
"DisableOnFreezeTime": false,
|
||||
"OnlyTeam": 0,
|
||||
"Color": "#88bdba",
|
||||
"Active": true,
|
||||
"Name": "LastGasp",
|
||||
"HudDuration": null,
|
||||
"DescriptionHudDuration": null,
|
||||
"RequiredPermission": "",
|
||||
"MaxPerServer": -1,
|
||||
"Rarity": "Rare"
|
||||
},
|
||||
{
|
||||
"KnockbackUnits": 120.0,
|
||||
"MaxSpeed": 1200.0,
|
||||
|
|
@ -1000,6 +1029,20 @@
|
|||
"MaxPerServer": -1,
|
||||
"Rarity": "Common"
|
||||
},
|
||||
{
|
||||
"PushVelocity": 400.0,
|
||||
"NeedsTeammates": false,
|
||||
"DisableOnFreezeTime": false,
|
||||
"OnlyTeam": 0,
|
||||
"Color": "#5a4fd1",
|
||||
"Active": true,
|
||||
"Name": "JetKick",
|
||||
"HudDuration": null,
|
||||
"DescriptionHudDuration": null,
|
||||
"RequiredPermission": "",
|
||||
"MaxPerServer": -1,
|
||||
"Rarity": "Common"
|
||||
},
|
||||
{
|
||||
"MinTime": 10.0,
|
||||
"MaxTime": 25.0,
|
||||
|
|
@ -1194,6 +1237,23 @@
|
|||
"MaxPerServer": -1,
|
||||
"Rarity": "Common"
|
||||
},
|
||||
{
|
||||
"Amount": 3,
|
||||
"Heal": 2,
|
||||
"TickCooldown": 16,
|
||||
"HealRadius": 150.0,
|
||||
"NeedsTeammates": false,
|
||||
"DisableOnFreezeTime": false,
|
||||
"OnlyTeam": 0,
|
||||
"Color": "#b5ab8f",
|
||||
"Active": true,
|
||||
"Name": "HealingChicken",
|
||||
"HudDuration": null,
|
||||
"DescriptionHudDuration": null,
|
||||
"RequiredPermission": "",
|
||||
"MaxPerServer": 1,
|
||||
"Rarity": "Legendary"
|
||||
},
|
||||
{
|
||||
"NeedsTeammates": false,
|
||||
"DisableOnFreezeTime": false,
|
||||
|
|
@ -1364,6 +1424,28 @@
|
|||
"MaxPerServer": 5,
|
||||
"Rarity": "Common"
|
||||
},
|
||||
{
|
||||
"Cooldown": 2.0,
|
||||
"ColorR": 255,
|
||||
"ColorG": 255,
|
||||
"ColorB": 255,
|
||||
"Brightness": 1.5,
|
||||
"Range": 1200.0,
|
||||
"BlindDuration": 5.0,
|
||||
"BlindAlpha": 200.0,
|
||||
"BlindAngle": 10.0,
|
||||
"NeedsTeammates": false,
|
||||
"DisableOnFreezeTime": true,
|
||||
"OnlyTeam": 0,
|
||||
"Color": "#a3000b",
|
||||
"Active": true,
|
||||
"Name": "Flashlight",
|
||||
"HudDuration": null,
|
||||
"DescriptionHudDuration": null,
|
||||
"RequiredPermission": "",
|
||||
"MaxPerServer": 2,
|
||||
"Rarity": "Legendary"
|
||||
},
|
||||
{
|
||||
"ChanceFrom": 1.2,
|
||||
"ChanceTo": 3.0,
|
||||
|
|
@ -1379,6 +1461,19 @@
|
|||
"MaxPerServer": -1,
|
||||
"Rarity": "Common"
|
||||
},
|
||||
{
|
||||
"NeedsTeammates": false,
|
||||
"DisableOnFreezeTime": false,
|
||||
"OnlyTeam": 0,
|
||||
"Color": "#ffbf47",
|
||||
"Active": true,
|
||||
"Name": "FireRain",
|
||||
"HudDuration": null,
|
||||
"DescriptionHudDuration": null,
|
||||
"RequiredPermission": "",
|
||||
"MaxPerServer": -1,
|
||||
"Rarity": "Epic"
|
||||
},
|
||||
{
|
||||
"NeedsTeammates": false,
|
||||
"DisableOnFreezeTime": false,
|
||||
|
|
@ -1540,6 +1635,21 @@
|
|||
"MaxPerServer": -1,
|
||||
"Rarity": "Common"
|
||||
},
|
||||
{
|
||||
"SecondCooldown": 1.0,
|
||||
"Damage": 5,
|
||||
"NeedsTeammates": false,
|
||||
"DisableOnFreezeTime": false,
|
||||
"OnlyTeam": 0,
|
||||
"Color": "#c91243",
|
||||
"Active": true,
|
||||
"Name": "DemonEye",
|
||||
"HudDuration": null,
|
||||
"DescriptionHudDuration": null,
|
||||
"RequiredPermission": "",
|
||||
"MaxPerServer": -1,
|
||||
"Rarity": "Common"
|
||||
},
|
||||
{
|
||||
"ExplosionRadius": 500.0,
|
||||
"ExplosionDamage": 999,
|
||||
|
|
@ -1728,6 +1838,24 @@
|
|||
"MaxPerServer": -1,
|
||||
"Rarity": "Common"
|
||||
},
|
||||
{
|
||||
"ExplosionRadius": 400.0,
|
||||
"ExplosionDamage": 60,
|
||||
"DmgReductionForTeamates": 0.5,
|
||||
"Cooldown": 10.0,
|
||||
"Force": 1000.0,
|
||||
"NeedsTeammates": false,
|
||||
"DisableOnFreezeTime": false,
|
||||
"OnlyTeam": 0,
|
||||
"Color": "#7740c9",
|
||||
"Active": true,
|
||||
"Name": "BlastShot",
|
||||
"HudDuration": null,
|
||||
"DescriptionHudDuration": null,
|
||||
"RequiredPermission": "",
|
||||
"MaxPerServer": -1,
|
||||
"Rarity": "Common"
|
||||
},
|
||||
{
|
||||
"TorseReflectionChance": 0.95,
|
||||
"LegReflectionChance": 0.7,
|
||||
|
|
@ -1744,6 +1872,21 @@
|
|||
"MaxPerServer": -1,
|
||||
"Rarity": "Common"
|
||||
},
|
||||
{
|
||||
"MaxSpeedVelocity": 2.0,
|
||||
"MaxDamageVelocity": 2.0,
|
||||
"NeedsTeammates": false,
|
||||
"DisableOnFreezeTime": false,
|
||||
"OnlyTeam": 0,
|
||||
"Color": "#cc2929",
|
||||
"Active": true,
|
||||
"Name": "Berserker",
|
||||
"HudDuration": null,
|
||||
"DescriptionHudDuration": null,
|
||||
"RequiredPermission": "",
|
||||
"MaxPerServer": -1,
|
||||
"Rarity": "Common"
|
||||
},
|
||||
{
|
||||
"ChanceFrom": 0.2,
|
||||
"ChanceTo": 0.4,
|
||||
|
|
|
|||
Binary file not shown.
|
|
@ -51,9 +51,15 @@
|
|||
"behind_desc": "Du hast eine zufällige Chance, einen Feind um 180 Grad zu drehen, wenn du ihn triffst",
|
||||
"behind_desc2": "Deine Chance, einen Feind bei einem Treffer zu drehen, beträgt: {0} %",
|
||||
|
||||
"berserker": "Berserker",
|
||||
"berserker_desc": "Du verursachst mehr Schaden und bewegst dich schneller, je weniger Gesundheit du hast",
|
||||
|
||||
"blademaster": "Schwertmeister",
|
||||
"blademaster_desc": "Wenn du ein Messer hältst, hast du eine hohe Chance, einen Schuss abzuwehren",
|
||||
|
||||
"blastshot": "Explosivschuss",
|
||||
"blastshot_desc": "Drücke Attack2 mit der MP5, um eine HE-Granate abzufeuern",
|
||||
|
||||
"bunnyhop": "Hase",
|
||||
"bunnyhop_desc": "Du erhältst automatisch bunnyhop",
|
||||
|
||||
|
|
@ -104,6 +110,13 @@
|
|||
"deaf_player_info": "Der Ton für den Spieler ‚{0}‘ wurde deaktiviert.",
|
||||
"deaf_select_info": "Alle Töne für den Spieler stummschalten:",
|
||||
|
||||
"deathbomb": "Todesbombe",
|
||||
"deathbomb_desc": "Du explodierst beim Tod und tötest Spieler in deiner Nähe",
|
||||
"deathbomb_explosion": "Kaboom!",
|
||||
|
||||
"demoneye": "Dämonenauge",
|
||||
"demoneye_desc": "Du verursachst allen Gegnern Schaden, die du ansiehst",
|
||||
|
||||
"disarmament": "Entwaffnung",
|
||||
"disarmament_desc": "Du hast eine zufällige Chance, einen Gegner bei einem Treffer seine Waffe fallen zu lassen.",
|
||||
"disarmament_desc2": "Ihre Chance, einen Gegner zu entwaffnen, beträgt: {0} %",
|
||||
|
|
@ -129,15 +142,15 @@
|
|||
"enemyspawn": "Feindes-Spawn",
|
||||
"enemyspawn_desc": "Klicke auf [css_useSkill], um zum Feindes-Spawn zu teleportieren",
|
||||
|
||||
"expensiveammo": "expensiveammo",
|
||||
"expensiveammo_desc": "expensiveammo_desc",
|
||||
"expensiveammo_disable_info": "expensiveammo_disable_info",
|
||||
"expensiveammo_enemy_info": "expensiveammo_enemy_info: {0}",
|
||||
"expensiveammo_player_info": "expensiveammo_player_info: {0}",
|
||||
"expensiveammo_select_info": "expensiveammo_select_info",
|
||||
"expensiveammo": "Teure Munition",
|
||||
"expensiveammo_desc": "Ein ausgewählter Gegner muss für jeden Schuss bezahlen",
|
||||
"expensiveammo_disable_info": "Deine Kugeln sind wieder kostenlos.",
|
||||
"expensiveammo_enemy_info": "Jeder Schuss kostet dich jetzt {0}$.",
|
||||
"expensiveammo_player_info": "Spieler '{0}' muss jetzt für jede Kugel bezahlen.",
|
||||
"expensiveammo_select_info": "Wähle einen Spieler, dessen Munition teuer wird:",
|
||||
|
||||
"explodingbarrel": "explodingbarrel",
|
||||
"explodingbarrel_desc": "explodingbarrel_desc",
|
||||
"explodingbarrel": "Explosives Fass",
|
||||
"explodingbarrel_desc": "Klicke auf [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",
|
||||
|
|
@ -149,10 +162,16 @@
|
|||
"fastreload": "Schnellnachladen",
|
||||
"fastreload_desc": "Klicke auf [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",
|
||||
|
||||
"flash": "Blitz",
|
||||
"flash_desc": "Zufällige Spielergeschwindigkeit zu Beginn der Runde",
|
||||
"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",
|
||||
|
||||
"fortnite": "Fortnite",
|
||||
"fortnite_desc": "Klicke auf [css_useSkill], um eine zerstörbare Barrikade zu erstellen",
|
||||
|
||||
|
|
@ -175,13 +194,13 @@
|
|||
"ghost": "Geist",
|
||||
"ghost_desc": "Du bist vollständig unsichtbar",
|
||||
|
||||
"giant": "giant",
|
||||
"giant_desc": "giant_desc",
|
||||
"giant_desc2": "giant_desc2: {0}x",
|
||||
"giant_disable_info": "giant_disable_info",
|
||||
"giant_enemy_info": "giant_enemy_info: {0}x",
|
||||
"giant_player_info": "giant_player_info: {0} {1}",
|
||||
"giant_select_info": "giant_select_info",
|
||||
"giant": "Riese",
|
||||
"giant_desc": "Vergrößere einen Gegner deiner Wahl",
|
||||
"giant_desc2": "Vergrößere einen Gegner deiner Wahl auf das {0}-Fache seiner normalen Größe",
|
||||
"giant_disable_info": "Du hast wieder deine normale Größe.",
|
||||
"giant_enemy_info": "Du wurdest auf das {0}-Fache deiner normalen Größe vergrößert.",
|
||||
"giant_player_info": "Du hast Spieler '{0}' auf das {1}-Fache seiner normalen Größe vergrößert.",
|
||||
"giant_select_info": "Wähle einen Spieler zum Vergrößern:",
|
||||
|
||||
"glaz": "Glaz",
|
||||
"glaz_desc": "Du kannst durch Rauchgranaten hindurchsehen",
|
||||
|
|
@ -207,6 +226,9 @@
|
|||
"healingsmoke": "Heilender Rauch",
|
||||
"healingsmoke_desc": "Deine Rauchgranaten heilen",
|
||||
|
||||
"healingchicken": "Heilendes Huhn",
|
||||
"healingchicken_desc": "Deine Hühner heilen dich, solange du in ihrer Nähe bist",
|
||||
|
||||
"hermit": "Einsiedler",
|
||||
"hermit_desc": "Durch das Töten von Gegnern werden Munition und ein Teil der Gesundheit wiederhergestellt",
|
||||
|
||||
|
|
@ -252,6 +274,12 @@
|
|||
"jester_on": "EIN",
|
||||
"jester_off": "AUS",
|
||||
|
||||
"jetkick": "Jetkick",
|
||||
"jetkick_desc": "Wähle einen Spieler für einen Jetkick",
|
||||
"jetkick_player_info": "Spieler '{0}' wurde wegge-kickt.",
|
||||
"jetkick_enemy_info": "Jeder Schuss stößt dich nach hinten",
|
||||
"jetkick_disable_info": "Dein Rückstoß ist wieder normal.",
|
||||
|
||||
"jumpban": "Beinlos",
|
||||
"jumpban_desc": "Wähle einen Spieler, der nicht springen kann",
|
||||
"jumpban_enemy_info": "Jemand hat dir die Beine abgeschnitten.",
|
||||
|
|
@ -259,12 +287,12 @@
|
|||
"jumpban_player_info": "Der Spieler ‚{0}‘ kann nicht mehr springen.",
|
||||
"jumpban_select_info": "Spieler vom Springen ausschließen:",
|
||||
|
||||
"jumpcurse": "jumpcurse",
|
||||
"jumpcurse_desc": "jumpcurse_desc",
|
||||
"jumpcurse_disable_info": "jumpcurse_disable_info",
|
||||
"jumpcurse_enemy_info": "jumpcurse_enemy_info",
|
||||
"jumpcurse_player_info": "jumpcurse_player_info: {0}",
|
||||
"jumpcurse_select_info": "jumpcurse_select_info",
|
||||
"jumpcurse": "Sprungfluch",
|
||||
"jumpcurse_desc": "Ein ausgewählter Gegner springt jedes Mal, wenn einer seiner Teamkollegen springt",
|
||||
"jumpcurse_disable_info": "Du kannst deine Sprünge wieder selbst kontrollieren.",
|
||||
"jumpcurse_enemy_info": "Du springst jetzt jedes Mal, wenn einer deiner Teamkollegen springt.",
|
||||
"jumpcurse_player_info": "Spieler '{0}' springt jetzt jedes Mal, wenn seine Teamkollegen springen.",
|
||||
"jumpcurse_select_info": "Wähle einen Spieler für den Fluch:",
|
||||
|
||||
"jumpingjack": "Jumping Jack",
|
||||
"jumpingjack_desc": "Durch Springen wird die Gesundheit wiederhergestellt",
|
||||
|
|
@ -272,8 +300,11 @@
|
|||
"killerflash": "Killer Flash",
|
||||
"killerflash_desc": "Jeder, der durch deine Blendgranate vollständig geblendet wird, stirbt (einschließlich dir selbst)",
|
||||
|
||||
"knockback": "knockback",
|
||||
"knockback_desc": "knockback_desc",
|
||||
"knockback": "Rückstoß",
|
||||
"knockback_desc": "Schießen in der Luft stößt dich nach hinten",
|
||||
|
||||
"lastgasp": "Letzter Atemzug",
|
||||
"lastgasp_desc": "Nach deinem Tod fügst du dem Gegner, der dich getötet hat, Schaden zu",
|
||||
|
||||
"lifeswap": "Lebensaustausch",
|
||||
"lifeswap_desc": "Wähle einen Spieler aus, mit dem du deine Gesundheit austauschen möchtest",
|
||||
|
|
@ -312,16 +343,12 @@
|
|||
"bankrupt_player_info": "Der Spieler ‚{0}‘ ist bankrott.",
|
||||
"bankrupt_select_info": "Wähle einen Spieler aus, der bankrott gehen soll:",
|
||||
|
||||
"deathbomb": "Todesbombe",
|
||||
"deathbomb_desc": "Du explodierst beim Tod und tötest Spieler in deiner Nähe",
|
||||
"deathbomb_explosion": "Kaboom!",
|
||||
|
||||
"nightmare": "nightmare",
|
||||
"nightmare_desc": "nightmare_desc",
|
||||
"nightmare_disable_info": "nightmare_disable_info",
|
||||
"nightmare_enemy_info": "nightmare_enemy_info",
|
||||
"nightmare_player_info": "nightmare_player_info: {0}",
|
||||
"nightmare_select_info": "nightmare_select_info",
|
||||
"nightmare": "Albtraum",
|
||||
"nightmare_desc": "Lass einen ausgewählten Gegner eine schreckliche Vision erleben",
|
||||
"nightmare_disable_info": "Der Albtraum ist vorbei.",
|
||||
"nightmare_enemy_info": "Ein Albtraum trübt deine Sicht.",
|
||||
"nightmare_player_info": "Du hast Spieler '{0}' einen Albtraum verpasst.",
|
||||
"nightmare_select_info": "Wähle einen Spieler für den Albtraum:",
|
||||
|
||||
"ninja": "Ninja",
|
||||
"ninja_desc": "Wenn du stillstehst, erhöht sich deine Unsichtbarkeit um 33 %, wenn du dich duckst um 33 % und wenn du ein Messer hältst um 33 %",
|
||||
|
|
@ -462,6 +489,17 @@
|
|||
"swapposition": "Positionstausch",
|
||||
"swapposition_desc": "Klicke auf [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_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.",
|
||||
|
||||
"teamteleport": "Team-Teleport",
|
||||
"teamteleport_desc": "Drücke [css_useSkill], um dich zu dem anvisierten Teammitglied zu teleportieren",
|
||||
"teamteleport_noenemy": "Kein Teammitglied gefunden",
|
||||
"teamteleport_hud_info": "Gefunden: {0}",
|
||||
|
||||
"teleporter": "Teleporter",
|
||||
"teleporter_desc": "Du hast die Chance, die Plätze mit einem getroffenen Gegner zu tauschen",
|
||||
"teleporter_desc2": "Deine Chance auf Platztausch nach einem Treffer: {0}%",
|
||||
|
|
@ -485,11 +523,11 @@
|
|||
"toxicsmoke": "Giftiger Rauch",
|
||||
"toxicsmoke_desc": "Deine Rauchgranaten verursachen Schaden",
|
||||
|
||||
"tripwire": "tripwire",
|
||||
"tripwire_desc": "tripwire_desc",
|
||||
"tripwire_no_wall_info": "tripwire_no_wall_info",
|
||||
"tripwire_placed_info": "tripwire_placed_info",
|
||||
"tripwire_triggered_info": "tripwire_triggered_info: {0}",
|
||||
"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_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.",
|
||||
|
||||
"wallhack": "Wallhack",
|
||||
"wallhack_desc": "Du kannst Feinde durch Wände hindurch sehen",
|
||||
|
|
|
|||
|
|
@ -51,9 +51,15 @@
|
|||
"behind_desc": "You have a random chance to turn an enemy 180 degrees when hitting them",
|
||||
"behind_desc2": "Your chance to turn an enemy on hit is: {0}%",
|
||||
|
||||
"berserker": "Berserker",
|
||||
"berserker_desc": "You deal more damage and move faster as your health gets lower",
|
||||
|
||||
"blademaster": "Blademaster",
|
||||
"blademaster_desc": "While holding a knife, you have a high chance to deflect a shot",
|
||||
|
||||
"blastshot": "Blast Shot",
|
||||
"blastshot_desc": "Press Attack2 with the MP5 to fire an HE grenade",
|
||||
|
||||
"bunnyhop": "Bunny",
|
||||
"bunnyhop_desc": "You get auto \"BunnyHop\"",
|
||||
|
||||
|
|
@ -130,11 +136,11 @@
|
|||
"enemyspawn_desc": "Click [css_useSkill] to teleport to the enemy spawn",
|
||||
|
||||
"expensiveammo": "Expensive Ammo",
|
||||
"expensiveammo_desc": "A chosen enemy loses money with every shot",
|
||||
"expensiveammo_desc": "A chosen enemy has to pay for every shot",
|
||||
"expensiveammo_disable_info": "Your bullets are free again.",
|
||||
"expensiveammo_enemy_info": "Every shot you fire now costs you {0}$.",
|
||||
"expensiveammo_player_info": "Player '{0}' now pays for every bullet.",
|
||||
"expensiveammo_select_info": "Select player whose ammo becomes expensive:",
|
||||
"expensiveammo_player_info": "Player '{0}' now has to pay for every bullet.",
|
||||
"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",
|
||||
|
|
@ -149,10 +155,16 @@
|
|||
"fastreload": "Fastreload",
|
||||
"fastreload_desc": "Click [css_useSkill] to reload the weapon you are currently holding",
|
||||
|
||||
"firerain": "Fire Rain",
|
||||
"firerain_desc": "Throw a decoy to call down a rain of Molotovs",
|
||||
|
||||
"flash": "Flash",
|
||||
"flash_desc": "Random player speed at the beginning of the round",
|
||||
"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",
|
||||
|
||||
"fortnite": "Fortnite",
|
||||
"fortnite_desc": "Click [css_useSkill] to create a destructible barricade",
|
||||
|
||||
|
|
@ -177,11 +189,11 @@
|
|||
|
||||
"giant": "Giant",
|
||||
"giant_desc": "Enlarge an enemy of your choice",
|
||||
"giant_desc2": "Enlarge an enemy of your choice to {0}x",
|
||||
"giant_desc2": "Enlarge an enemy of your choice to {0}x their normal size",
|
||||
"giant_disable_info": "You are back to your normal size.",
|
||||
"giant_enemy_info": "You have been enlarged to {0}x.",
|
||||
"giant_player_info": "You enlarged player '{0}' to {1}x.",
|
||||
"giant_select_info": "Enlarge player:",
|
||||
"giant_enemy_info": "You have been enlarged to {0}x your normal size.",
|
||||
"giant_player_info": "You enlarged player '{0}' to {1}x their normal size.",
|
||||
"giant_select_info": "Select a player to enlarge:",
|
||||
|
||||
"glaz": "Glaz",
|
||||
"glaz_desc": "You can see through smoke grenades",
|
||||
|
|
@ -204,6 +216,9 @@
|
|||
"grenadier": "Grenadier",
|
||||
"grenadier_desc": "You have infinite hegrenade",
|
||||
|
||||
"healingchicken": "Healing Chicken",
|
||||
"healingchicken_desc": "Your chickens heal you while you are nearby",
|
||||
|
||||
"healingsmoke": "Healing Smoke",
|
||||
"healingsmoke_desc": "Your smoke grenades heal",
|
||||
|
||||
|
|
@ -252,6 +267,12 @@
|
|||
"jester_on": "ON",
|
||||
"jester_off": "OFF",
|
||||
|
||||
"jetkick": "Jetkick",
|
||||
"jetkick_desc": "Select a player to jetkick",
|
||||
"jetkick_player_info": "Player '{0}' has been jetkicked.",
|
||||
"jetkick_enemy_info": "Every shot knocks you backwards",
|
||||
"jetkick_disable_info": "Your recoil is back to normal.",
|
||||
|
||||
"jumpban": "Legless",
|
||||
"jumpban_desc": "Choose a player who cannot jump",
|
||||
"jumpban_enemy_info": "Someone cut off your legs.",
|
||||
|
|
@ -260,11 +281,11 @@
|
|||
"jumpban_select_info": "Ban player from jumping:",
|
||||
|
||||
"jumpcurse": "Jump Curse",
|
||||
"jumpcurse_desc": "A chosen enemy jumps whenever their teammates jump",
|
||||
"jumpcurse_disable_info": "Your legs are your own again.",
|
||||
"jumpcurse_enemy_info": "You now jump whenever your teammates jump.",
|
||||
"jumpcurse_player_info": "Player '{0}' now jumps with their team.",
|
||||
"jumpcurse_select_info": "Select player for the jump curse:",
|
||||
"jumpcurse_desc": "A chosen enemy jumps whenever one of their teammates jumps",
|
||||
"jumpcurse_disable_info": "You can control your jumps again.",
|
||||
"jumpcurse_enemy_info": "You now jump whenever one of your teammates jumps.",
|
||||
"jumpcurse_player_info": "Player '{0}' now jumps whenever their teammates do.",
|
||||
"jumpcurse_select_info": "Select a player to curse:",
|
||||
|
||||
"jumpingjack": "Jumping Jack",
|
||||
"jumpingjack_desc": "Jumping restores health",
|
||||
|
|
@ -275,6 +296,9 @@
|
|||
"knockback": "Knockback",
|
||||
"knockback_desc": "Firing while airborne pushes you backwards",
|
||||
|
||||
"lastgasp": "Last Gasp",
|
||||
"lastgasp_desc": "After you die, you deal damage to the enemy who killed you",
|
||||
|
||||
"lifeswap": "Life Swap",
|
||||
"lifeswap_desc": "Choose a player to swap health with",
|
||||
"lifeswap_enemy_info": "Someone borrowed your health.",
|
||||
|
|
@ -316,12 +340,15 @@
|
|||
"deathbomb_desc": "You explode upon death, killing nearby players",
|
||||
"deathbomb_explosion": "Kaboom!",
|
||||
|
||||
"demoneye": "Demon Eye",
|
||||
"demoneye_desc": "You deal damage to every enemy you are looking at",
|
||||
|
||||
"nightmare": "Nightmare",
|
||||
"nightmare_desc": "Give a chosen enemy a nightmarish vision",
|
||||
"nightmare_desc": "Force a chosen enemy to experience a terrifying vision",
|
||||
"nightmare_disable_info": "The nightmare has faded.",
|
||||
"nightmare_enemy_info": "A nightmare clouds your vision.",
|
||||
"nightmare_enemy_info": "A nightmare is clouding your vision.",
|
||||
"nightmare_player_info": "You cast a nightmare on player '{0}'.",
|
||||
"nightmare_select_info": "Select player for the nightmare:",
|
||||
"nightmare_select_info": "Select a player to inflict with a nightmare:",
|
||||
|
||||
"ninja": "Ninja",
|
||||
"ninja_desc": "Standing still increases your invisibility by 33%, crouching by 33%, and holding a knife by 33%",
|
||||
|
|
@ -462,6 +489,17 @@
|
|||
"swapposition": "Position Swap",
|
||||
"swapposition_desc": "Click [css_useSkill] 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_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_noenemy": "No teammate found",
|
||||
"teamteleport_hud_info": "Found: {0}",
|
||||
|
||||
"teleporter": "Teleporter",
|
||||
"teleporter_desc": "You have the chance to swap places with a hit enemy",
|
||||
"teleporter_desc2": "Your chances of swapping places after a hit: {0}%",
|
||||
|
|
@ -486,10 +524,10 @@
|
|||
"toxicsmoke_desc": "Your smoke grenades deal damage",
|
||||
|
||||
"tripwire": "Tripwire",
|
||||
"tripwire_desc": "Click [css_useSkill] to string a wire between two walls. Enemies touching it show on your radar",
|
||||
"tripwire_no_wall_info": "No walls close enough on both sides.",
|
||||
"tripwire_desc": "Click [css_useSkill] 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}' tripped your wire.",
|
||||
"tripwire_triggered_info": "'{0}' triggered your tripwire.",
|
||||
|
||||
"wallhack": "Wallhack",
|
||||
"wallhack_desc": "You can see enemies through walls",
|
||||
|
|
|
|||
|
|
@ -19,7 +19,7 @@
|
|||
|
||||
"areareaper": "Faucheur de Zone",
|
||||
"areareaper_desc": "Vous pouvez choisir un site de bombe à désactiver",
|
||||
"areareaper_incorrect_site": "Aucun site de bombe trouvé.",
|
||||
"areareaper_incorrect_site": "Aucun site de bombe trouvé",
|
||||
"areareaper_no_site": "Aucun site de bombe disponible.",
|
||||
"areareaper_select_info": "Sélectionnez un site à désactiver :",
|
||||
"areareaper_site_disabled": "Le site de bombe {0} a été désactivé – aucune bombe ne peut y être posée !",
|
||||
|
|
@ -51,9 +51,15 @@
|
|||
"behind_desc": "Vous avez une chance aléatoire de retourner un ennemi à 180° en le touchant",
|
||||
"behind_desc2": "Votre chance de retourner un ennemi à l’impact est : {0}%",
|
||||
|
||||
"berserker": "Berserker",
|
||||
"berserker_desc": "Vous infligez plus de dégâts et vous déplacez plus vite à mesure que votre santé diminue",
|
||||
|
||||
"blademaster": "Maître de Lame",
|
||||
"blademaster_desc": "En tenant un couteau, vous avez une forte chance de dévier un tir",
|
||||
|
||||
"blastshot": "Tir explosif",
|
||||
"blastshot_desc": "Appuyez sur Attack2 avec le MP5 pour tirer une grenade HE",
|
||||
|
||||
"bunnyhop": "Lapin",
|
||||
"bunnyhop_desc": "Vous obtenez l’auto « BunnyHop »",
|
||||
|
||||
|
|
@ -104,6 +110,13 @@
|
|||
"deaf_player_info": "Le son a été désactivé pour le joueur « {0} ».",
|
||||
"deaf_select_info": "Couper tous les sons du joueur :",
|
||||
|
||||
"deathbomb": "Bombe",
|
||||
"deathbomb_desc": "Vous explosez à votre mort, tuant les joueurs proches",
|
||||
"deathbomb_explosion": "Kaboom!",
|
||||
|
||||
"demoneye": "Œil démoniaque",
|
||||
"demoneye_desc": "Vous infligez des dégâts à tous les ennemis que vous regardez",
|
||||
|
||||
"disarmament": "Désarmement",
|
||||
"disarmament_desc": "Vous avez une chance aléatoire de faire lâcher son arme à un ennemi en le touchant",
|
||||
"disarmament_desc2": "Votre chance de désarmer un ennemi est : {0}%",
|
||||
|
|
@ -129,15 +142,15 @@
|
|||
"enemyspawn": "Spawn Ennemi",
|
||||
"enemyspawn_desc": "Appuyez sur [css_useSkill] pour vous téléporter au spawn ennemi",
|
||||
|
||||
"expensiveammo": "expensiveammo",
|
||||
"expensiveammo_desc": "expensiveammo_desc",
|
||||
"expensiveammo_disable_info": "expensiveammo_disable_info",
|
||||
"expensiveammo_enemy_info": "expensiveammo_enemy_info: {0}",
|
||||
"expensiveammo_player_info": "expensiveammo_player_info: {0}",
|
||||
"expensiveammo_select_info": "expensiveammo_select_info",
|
||||
"expensiveammo": "Munitions coûteuses",
|
||||
"expensiveammo_desc": "Un ennemi choisi doit payer pour chaque tir",
|
||||
"expensiveammo_disable_info": "Vos balles sont à nouveau gratuites.",
|
||||
"expensiveammo_enemy_info": "Chaque tir que vous effectuez vous coûte maintenant {0}$.",
|
||||
"expensiveammo_player_info": "Le joueur '{0}' doit maintenant payer pour chaque balle.",
|
||||
"expensiveammo_select_info": "Sélectionnez un joueur dont les munitions deviendront coûteuses :",
|
||||
|
||||
"explodingbarrel": "explodingbarrel",
|
||||
"explodingbarrel_desc": "explodingbarrel_desc",
|
||||
"explodingbarrel": "Baril explosif",
|
||||
"explodingbarrel_desc": "Cliquez 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",
|
||||
|
|
@ -149,10 +162,16 @@
|
|||
"fastreload": "Recharge Rapide",
|
||||
"fastreload_desc": "Appuyez sur [css_useSkill] pour recharger l’arme que vous tenez",
|
||||
|
||||
"firerain": "Pluie de feu",
|
||||
"firerain_desc": "Lancez un leurre pour déclencher une pluie de cocktails Molotov",
|
||||
|
||||
"flash": "Flash",
|
||||
"flash_desc": "Vitesse de joueur aléatoire au début du round",
|
||||
"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",
|
||||
|
||||
"fortnite": "Fortnite",
|
||||
"fortnite_desc": "Appuyez sur [css_useSkill] pour créer une barricade destructible",
|
||||
|
||||
|
|
@ -175,13 +194,13 @@
|
|||
"ghost": "Fantôme",
|
||||
"ghost_desc": "Vous êtes complètement invisible",
|
||||
|
||||
"giant": "giant",
|
||||
"giant_desc": "giant_desc",
|
||||
"giant_desc2": "giant_desc2: {0}x",
|
||||
"giant_disable_info": "giant_disable_info",
|
||||
"giant_enemy_info": "giant_enemy_info: {0}x",
|
||||
"giant_player_info": "giant_player_info: {0} {1}",
|
||||
"giant_select_info": "giant_select_info",
|
||||
"giant": "Géant",
|
||||
"giant_desc": "Agrandissez un ennemi de votre choix",
|
||||
"giant_desc2": "Agrandissez un ennemi de votre choix jusqu'à {0}x sa taille normale",
|
||||
"giant_disable_info": "Vous avez retrouvé votre taille normale.",
|
||||
"giant_enemy_info": "Vous avez été agrandi à {0}x votre taille normale.",
|
||||
"giant_player_info": "Vous avez agrandi le joueur '{0}' jusqu'à {1}x sa taille normale.",
|
||||
"giant_select_info": "Sélectionnez un joueur à agrandir :",
|
||||
|
||||
"glaz": "Glaz",
|
||||
"glaz_desc": "Vous pouvez voir à travers les fumigènes",
|
||||
|
|
@ -207,6 +226,9 @@
|
|||
"healingsmoke": "Fumigène Soin",
|
||||
"healingsmoke_desc": "Vos fumigènes soignent",
|
||||
|
||||
"healingchicken": "Poulet guérisseur",
|
||||
"healingchicken_desc": "Vos poulets vous soignent lorsque vous êtes à proximité",
|
||||
|
||||
"hermit": "Ermite",
|
||||
"hermit_desc": "Tuer restaure des munitions et une partie de vos PV",
|
||||
|
||||
|
|
@ -252,6 +274,12 @@
|
|||
"jester_on": "ACTIVÉ",
|
||||
"jester_off": "DÉSACTIVÉ",
|
||||
|
||||
"jetkick": "Coup de pied propulsé",
|
||||
"jetkick_desc": "Sélectionnez un joueur pour lui donner un coup de pied propulsé",
|
||||
"jetkick_player_info": "Le joueur '{0}' a reçu un coup de pied propulsé.",
|
||||
"jetkick_enemy_info": "Chaque tir vous repousse vers l'arrière",
|
||||
"jetkick_disable_info": "Votre recul est revenu à la normale.",
|
||||
|
||||
"jumpban": "Sans Jambes",
|
||||
"jumpban_desc": "Choisissez un joueur qui ne pourra plus sauter",
|
||||
"jumpban_enemy_info": "Quelqu’un vous a coupé les jambes.",
|
||||
|
|
@ -259,12 +287,12 @@
|
|||
"jumpban_player_info": "Le joueur « {0} » ne peut plus sauter.",
|
||||
"jumpban_select_info": "Interdire de sauter au joueur :",
|
||||
|
||||
"jumpcurse": "jumpcurse",
|
||||
"jumpcurse_desc": "jumpcurse_desc",
|
||||
"jumpcurse_disable_info": "jumpcurse_disable_info",
|
||||
"jumpcurse_enemy_info": "jumpcurse_enemy_info",
|
||||
"jumpcurse_player_info": "jumpcurse_player_info: {0}",
|
||||
"jumpcurse_select_info": "jumpcurse_select_info",
|
||||
"jumpcurse": "Malédiction du saut",
|
||||
"jumpcurse_desc": "Un ennemi choisi saute chaque fois que l'un de ses coéquipiers saute",
|
||||
"jumpcurse_disable_info": "Vous pouvez à nouveau contrôler vos sauts.",
|
||||
"jumpcurse_enemy_info": "Vous sautez maintenant chaque fois que l'un de vos coéquipiers saute.",
|
||||
"jumpcurse_player_info": "Le joueur '{0}' saute maintenant chaque fois que ses coéquipiers sautent.",
|
||||
"jumpcurse_select_info": "Sélectionnez un joueur à maudire :",
|
||||
|
||||
"jumpingjack": "Sauteur",
|
||||
"jumpingjack_desc": "Sauter vous rend de la vie",
|
||||
|
|
@ -272,8 +300,12 @@
|
|||
"killerflash": "Flash Mortel",
|
||||
"killerflash_desc": "Toute personne totalement aveuglée par votre flashbang meurt (y compris vous)",
|
||||
|
||||
"knockback": "knockback",
|
||||
"knockback_desc": "knockback_desc",
|
||||
"knockback": "Repoussement",
|
||||
"knockback_desc": "Tirer dans les airs vous repousse vers l'arrière",
|
||||
|
||||
"lastgasp": "Dernier souffle",
|
||||
"lastgasp_desc": "Après votre mort, vous infligez des dégâts à l'ennemi qui vous a tué",
|
||||
|
||||
"lifeswap": "Échange de Vie",
|
||||
"lifeswap_desc": "Choisissez un joueur avec qui échanger votre santé",
|
||||
"lifeswap_enemy_info": "Quelqu’un a emprunté votre santé.",
|
||||
|
|
@ -311,16 +343,12 @@
|
|||
"bankrupt_player_info": "Le joueur « {0} » est en faillite.",
|
||||
"bankrupt_select_info": "Mettre un joueur en faillite :",
|
||||
|
||||
"deathbomb": "Bombe",
|
||||
"deathbomb_desc": "Vous explosez à votre mort, tuant les joueurs proches",
|
||||
"deathbomb_explosion": "Kaboom!",
|
||||
|
||||
"nightmare": "nightmare",
|
||||
"nightmare_desc": "nightmare_desc",
|
||||
"nightmare_disable_info": "nightmare_disable_info",
|
||||
"nightmare_enemy_info": "nightmare_enemy_info",
|
||||
"nightmare_player_info": "nightmare_player_info: {0}",
|
||||
"nightmare_select_info": "nightmare_select_info",
|
||||
"nightmare": "Cauchemar",
|
||||
"nightmare_desc": "Faites subir une vision terrifiante à un ennemi choisi",
|
||||
"nightmare_disable_info": "Le cauchemar s'est dissipé.",
|
||||
"nightmare_enemy_info": "Un cauchemar obscurcit votre vision.",
|
||||
"nightmare_player_info": "Vous avez lancé un cauchemar sur le joueur '{0}'.",
|
||||
"nightmare_select_info": "Sélectionnez un joueur pour le cauchemar :",
|
||||
|
||||
"ninja": "Ninja",
|
||||
"ninja_desc": "Rester immobile augmente votre invisibilité de 33%, s’accroupir de 33%, et tenir un couteau de 33%",
|
||||
|
|
@ -461,6 +489,17 @@
|
|||
"swapposition": "Échange de Position",
|
||||
"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_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.",
|
||||
|
||||
"teamteleport": "Téléportation d'équipe",
|
||||
"teamteleport_desc": "Appuyez sur [css_useSkill] pour vous téléporter vers le coéquipier que vous regardez",
|
||||
"teamteleport_noenemy": "Aucun coéquipier trouvé",
|
||||
"teamteleport_hud_info": "Trouvé : {0}",
|
||||
|
||||
"teleporter": "Téléporteur",
|
||||
"teleporter_desc": "Vous avez une chance d'échanger votre place avec un ennemi touché",
|
||||
"teleporter_desc2": "Vos chances d'échanger votre place après un coup : {0}%",
|
||||
|
|
@ -484,11 +523,11 @@
|
|||
"toxicsmoke": "Fumée Toxique",
|
||||
"toxicsmoke_desc": "Vos grenades fumigènes infligent des dégâts",
|
||||
|
||||
"tripwire": "tripwire",
|
||||
"tripwire_desc": "tripwire_desc",
|
||||
"tripwire_no_wall_info": "tripwire_no_wall_info",
|
||||
"tripwire_placed_info": "tripwire_placed_info",
|
||||
"tripwire_triggered_info": "tripwire_triggered_info: {0}",
|
||||
"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_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.",
|
||||
|
||||
"wallhack": "Wallhack",
|
||||
"wallhack_desc": "Vous pouvez voir les ennemis à travers les murs",
|
||||
|
|
|
|||
|
|
@ -51,9 +51,15 @@
|
|||
"behind_desc": "Masz losową szansę na obrócenie wroga o 180 stopni po trafieniu go",
|
||||
"behind_desc2": "Twoje szanse na obrócenie wroga po trafieniu to: {0}%",
|
||||
|
||||
"berserker": "Berserker",
|
||||
"berserker_desc": "Zadajesz więcej obrażeń i poruszasz się szybciej, gdy masz mniej zdrowia",
|
||||
|
||||
"blademaster": "Mistrz Ostrza",
|
||||
"blademaster_desc": "Trzymając nóż, masz duże szanse na odparcie strzału",
|
||||
|
||||
"blastshot": "Mocne Uderzenie",
|
||||
"blastshot_desc": "Naciśnij Attack2 na MP5, aby wystrzelić granat HE",
|
||||
|
||||
"bunnyhop": "Królik",
|
||||
"bunnyhop_desc": "Otrzymujesz auto \"BunnyHopa\"",
|
||||
|
||||
|
|
@ -104,6 +110,13 @@
|
|||
"deaf_player_info": "Dźwięk został wyłączony dla gracza '{0}'.",
|
||||
"deaf_select_info": "Wycisz dźwięki gracza:",
|
||||
|
||||
"deathbomb": "Ludzka bomba",
|
||||
"deathbomb_desc": "Po śmierci eksplodujesz i zabijasz graczy znajdujących się w zasięgu",
|
||||
"deathbomb_explosion": "Kaboom!",
|
||||
|
||||
"demoneye": "Oko Demona",
|
||||
"demoneye_desc": "Zadajesz obrażenia wszystkim przeciwnikom, na których patrzysz",
|
||||
|
||||
"disarmament": "Rozbrojenie",
|
||||
"disarmament_desc": "Masz losową szanse na wyrzucenie broni wroga po trafieniu",
|
||||
"disarmament_desc2": "Twoje szanse na wyrzucenie broni wroga to: {0}%",
|
||||
|
|
@ -129,15 +142,15 @@
|
|||
"enemyspawn": "Resp Wroga",
|
||||
"enemyspawn_desc": "Kliknij [css_useSkill], aby teleportować się na resp wroga",
|
||||
|
||||
"expensiveammo": "expensiveammo",
|
||||
"expensiveammo_desc": "expensiveammo_desc",
|
||||
"expensiveammo_disable_info": "expensiveammo_disable_info",
|
||||
"expensiveammo_enemy_info": "expensiveammo_enemy_info: {0}",
|
||||
"expensiveammo_player_info": "expensiveammo_player_info: {0}",
|
||||
"expensiveammo_select_info": "expensiveammo_select_info",
|
||||
"expensiveammo": "Droga Amunicja",
|
||||
"expensiveammo_desc": "Wybrany przeciwnik musi płacić za każdy oddany strzał",
|
||||
"expensiveammo_disable_info": "Twoje pociski znów są darmowe.",
|
||||
"expensiveammo_enemy_info": "Każdy Twój strzał kosztuje teraz {0}$.",
|
||||
"expensiveammo_player_info": "Gracz '{0}' musi teraz płacić za każdy pocisk.",
|
||||
"expensiveammo_select_info": "Wybierz gracza, którego amunicja stanie się droga:",
|
||||
|
||||
"explodingbarrel": "explodingbarrel",
|
||||
"explodingbarrel_desc": "explodingbarrel_desc",
|
||||
"explodingbarrel": "Wybuchowa Beczka",
|
||||
"explodingbarrel_desc": "Kliknij [css_useSkill], aby postawić beczkę, która wybucha po trafieniu",
|
||||
|
||||
"explosiveshot": "Strzał Wybuchowy",
|
||||
"explosiveshot_desc": "Losowa szansa wystrzelenia pocisku wybuchowego podczas strzelania",
|
||||
|
|
@ -149,10 +162,16 @@
|
|||
"fastreload": "Szybkie Rączki",
|
||||
"fastreload_desc": "Kliknij [css_useSkill], aby przeładować broń, którą obecnie trzymasz",
|
||||
|
||||
"firerain": "Deszcz Ognia",
|
||||
"firerain_desc": "Rzuć wabik, aby przywołać deszcz koktajli Mołotowa",
|
||||
|
||||
"flash": "Flash",
|
||||
"flash_desc": "Losowa prędkośc postaci na początku rundy",
|
||||
"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",
|
||||
|
||||
"fortnite": "Fortnite",
|
||||
"fortnite_desc": "Kliknij [css_useSkill], aby stworzyć barykadę, którą można zniszczyć",
|
||||
|
||||
|
|
@ -175,13 +194,13 @@
|
|||
"ghost": "Duszek",
|
||||
"ghost_desc": "Jesteś całkowicie niewidzialny",
|
||||
|
||||
"giant": "giant",
|
||||
"giant_desc": "giant_desc",
|
||||
"giant_desc2": "giant_desc2: {0}x",
|
||||
"giant_disable_info": "giant_disable_info",
|
||||
"giant_enemy_info": "giant_enemy_info: {0}x",
|
||||
"giant_player_info": "giant_player_info: {0} {1}",
|
||||
"giant_select_info": "giant_select_info",
|
||||
"giant": "Olbrzym",
|
||||
"giant_desc": "Powiększ wybranego przeciwnika",
|
||||
"giant_desc2": "Powiększ wybranego przeciwnika do {0}x normalnego rozmiaru",
|
||||
"giant_disable_info": "Wróciłeś do normalnego rozmiaru.",
|
||||
"giant_enemy_info": "Zostałeś powiększony do {0}x normalnego rozmiaru.",
|
||||
"giant_player_info": "Powiększyłeś gracza '{0}' do {1}x normalnego rozmiaru.",
|
||||
"giant_select_info": "Wybierz gracza do powiększenia:",
|
||||
|
||||
"glaz": "Glaz",
|
||||
"glaz_desc": "Nie widzisz granatów dymnych",
|
||||
|
|
@ -207,6 +226,9 @@
|
|||
"healingsmoke": "Leczący Dym",
|
||||
"healingsmoke_desc": "Twoje granaty dymne leczą",
|
||||
|
||||
"healingchicken": "Lecząca Kura",
|
||||
"healingchicken_desc": "Twoje kury leczą Cię, gdy jesteś w pobliżu",
|
||||
|
||||
"hermit": "Pustelnik",
|
||||
"hermit_desc": "Zabijanie przywraca amunicję i część zdrowia",
|
||||
|
||||
|
|
@ -252,6 +274,12 @@
|
|||
"jester_on": "WŁ.",
|
||||
"jester_off": "WYŁ.",
|
||||
|
||||
"jetkick": "Odrzutowy Kop",
|
||||
"jetkick_desc": "Wybierz gracza, aby użyć na nim odrzutowego kopa",
|
||||
"jetkick_player_info": "Gracz '{0}' został odrzucony kopem.",
|
||||
"jetkick_enemy_info": "Każdy strzał mocno odrzuca Cię do tyłu",
|
||||
"jetkick_disable_info": "Twój odrzut wrócił do normy.",
|
||||
|
||||
"jumpban": "Beznogi",
|
||||
"jumpban_desc": "Wybierasz gracza, który nie będzie mógł skakać",
|
||||
"jumpban_enemy_info": "Ktoś odciął ci nogi.",
|
||||
|
|
@ -259,12 +287,12 @@
|
|||
"jumpban_player_info": "Gracz '{0}' nie może teraz skakać.",
|
||||
"jumpban_select_info": "Zablokuj skok dla gracza:",
|
||||
|
||||
"jumpcurse": "jumpcurse",
|
||||
"jumpcurse_desc": "jumpcurse_desc",
|
||||
"jumpcurse_disable_info": "jumpcurse_disable_info",
|
||||
"jumpcurse_enemy_info": "jumpcurse_enemy_info",
|
||||
"jumpcurse_player_info": "jumpcurse_player_info: {0}",
|
||||
"jumpcurse_select_info": "jumpcurse_select_info",
|
||||
"jumpcurse": "Klątwa Skakania",
|
||||
"jumpcurse_desc": "Wybrany przeciwnik skacze za każdym razem, gdy skacze jeden z jego sojuszników",
|
||||
"jumpcurse_disable_info": "Znów możesz kontrolować swoje skoki.",
|
||||
"jumpcurse_enemy_info": "Teraz skaczesz za każdym razem, gdy skacze jeden z Twoich sojuszników.",
|
||||
"jumpcurse_player_info": "Gracz '{0}' skacze teraz za każdym razem, gdy robią to jego sojusznicy.",
|
||||
"jumpcurse_select_info": "Wybierz gracza do przeklęcia:",
|
||||
|
||||
"jumpingjack": "Pajacyk",
|
||||
"jumpingjack_desc": "Skakanie przywraca zdrowie",
|
||||
|
|
@ -272,8 +300,12 @@
|
|||
"killerflash": "Zabójczy Flash",
|
||||
"killerflash_desc": "Każdy całkowicie oślepiony twoim granatem umiera (również ty)",
|
||||
|
||||
"knockback": "knockback",
|
||||
"knockback_desc": "knockback_desc",
|
||||
"knockback": "Odrzut",
|
||||
"knockback_desc": "Strzelanie w powietrzu odpycha Cię do tyłu",
|
||||
|
||||
"lastgasp": "Ostatnie Tchnienie",
|
||||
"lastgasp_desc": "Po śmierci zadajesz obrażenia przeciwnikowi, który Cię zabił",
|
||||
|
||||
"lifeswap": "Zamiana Żyć",
|
||||
"lifeswap_desc": "Wybierasz gracza, z którym chcesz wymienić się zdrowiem",
|
||||
"lifeswap_enemy_info": "Ktoś pożyczył sobie twoje zdrowie.",
|
||||
|
|
@ -311,16 +343,12 @@
|
|||
"moneyswap_player_info": "Wymieniłeś swoje pieniądze z graczem '{0}'.",
|
||||
"moneyswap_select_info": "Zamień się kasą z graczem:",
|
||||
|
||||
"deathbomb": "Ludzka bomba",
|
||||
"deathbomb_desc": "Po śmierci eksplodujesz i zabijasz graczy znajdujących się w zasięgu",
|
||||
"deathbomb_explosion": "Kaboom!",
|
||||
|
||||
"nightmare": "nightmare",
|
||||
"nightmare_desc": "nightmare_desc",
|
||||
"nightmare_disable_info": "nightmare_disable_info",
|
||||
"nightmare_enemy_info": "nightmare_enemy_info",
|
||||
"nightmare_player_info": "nightmare_player_info: {0}",
|
||||
"nightmare_select_info": "nightmare_select_info",
|
||||
"nightmare": "Koszmar",
|
||||
"nightmare_desc": "Wywołaj u wybranego przeciwnika przerażającą wizję",
|
||||
"nightmare_disable_info": "Koszmar minął.",
|
||||
"nightmare_enemy_info": "Koszmar przesłania Ci wzrok.",
|
||||
"nightmare_player_info": "Rzuciłeś koszmar na gracza '{0}'.",
|
||||
"nightmare_select_info": "Wybierz gracza do nałożenia koszmaru:",
|
||||
|
||||
"ninja": "Ninja",
|
||||
"ninja_desc": "Stojąc nieruchomo zwiększasz swoją niewidzialność o 33%, kucając o 33%, a trzymając nóż o 33%",
|
||||
|
|
@ -461,6 +489,17 @@
|
|||
"swapposition": "Zamiana Miejsc",
|
||||
"swapposition_desc": "Kliknij [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_hud_info1": "Nie znaleziono gracza z aktywnym magazynkiem.",
|
||||
"takeammo_hud_info2": "Przeciwnik nie ma magazynków.",
|
||||
"takeammo_enemy_info": "Straciłeś trochę amunicji.",
|
||||
|
||||
"teamteleport": "Teleport do drużyny",
|
||||
"teamteleport_desc": "Naciśnij [css_useSkill], aby teleportować się do członka drużyny, na którego patrzysz",
|
||||
"teamteleport_noenemy": "Nie znaleziono członka drużyny",
|
||||
"teamteleport_hud_info": "Znaleziono: {0}",
|
||||
|
||||
"teleporter": "Teleporter",
|
||||
"teleporter_desc": "Masz szansę na zamianę miejsc z trafionym wrogiem",
|
||||
"teleporter_desc2": "Szansa na zamianę miejsc po trafieniu: {0}%",
|
||||
|
|
@ -484,11 +523,11 @@
|
|||
"toxicsmoke": "Toksyczny Dym",
|
||||
"toxicsmoke_desc": "Twoje granaty dymny zadają obrażenia",
|
||||
|
||||
"tripwire": "tripwire",
|
||||
"tripwire_desc": "tripwire_desc",
|
||||
"tripwire_no_wall_info": "tripwire_no_wall_info",
|
||||
"tripwire_placed_info": "tripwire_placed_info",
|
||||
"tripwire_triggered_info": "tripwire_triggered_info: {0}",
|
||||
"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_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ę.",
|
||||
|
||||
"wallhack": "Wallhack",
|
||||
"wallhack_desc": "Widzisz wrogów przez ściany",
|
||||
|
|
|
|||
|
|
@ -51,9 +51,15 @@
|
|||
"behind_desc": "Você tem uma chance aleatória de girar um inimigo 180 graus ao acertá-lo",
|
||||
"behind_desc2": "Sua chance de girar um inimigo ao acertá-lo é: {0}%",
|
||||
|
||||
"berserker": "Berserker",
|
||||
"berserker_desc": "Você causa mais dano e se move mais rápido conforme sua vida diminui",
|
||||
|
||||
"blademaster": "Mestre das Lâminas",
|
||||
"blademaster_desc": "Enquanto segura a faca, você tem chance de desviar de um tiro",
|
||||
|
||||
"blastshot": "Tiro Explosivo",
|
||||
"blastshot_desc": "Pressione Attack2 com a MP5 para disparar uma granada HE",
|
||||
|
||||
"bunnyhop": "Coelho",
|
||||
"bunnyhop_desc": "Você ganha \"BunnyHop\" automático",
|
||||
|
||||
|
|
@ -104,6 +110,13 @@
|
|||
"deaf_player_info": "O som foi desativado para o jogador '{0}'.",
|
||||
"deaf_select_info": "Silenciar jogador:",
|
||||
|
||||
"deathbomb": "Bomba mortal",
|
||||
"deathbomb_desc": "Você explode ao morrer, matando os jogadores próximos",
|
||||
"deathbomb_explosion": "Kaboom!",
|
||||
|
||||
"demoneye": "Olho Demoníaco",
|
||||
"demoneye_desc": "Você causa dano a todos os inimigos que estiver olhando",
|
||||
|
||||
"disarmament": "Desarmamento",
|
||||
"disarmament_desc": "Você tem uma chance aleatória de fazer um inimigo dropar a arma ao acertá-lo",
|
||||
"disarmament_desc2": "Sua chance de desarmar um inimigo é: {0}%",
|
||||
|
|
@ -129,15 +142,15 @@
|
|||
"enemyspawn": "Spawn Inimigo",
|
||||
"enemyspawn_desc": "Clique em [css_useSkill] para se teletransportar para a base inimiga",
|
||||
|
||||
"expensiveammo": "expensiveammo",
|
||||
"expensiveammo_desc": "expensiveammo_desc",
|
||||
"expensiveammo_disable_info": "expensiveammo_disable_info",
|
||||
"expensiveammo_enemy_info": "expensiveammo_enemy_info: {0}",
|
||||
"expensiveammo_player_info": "expensiveammo_player_info: {0}",
|
||||
"expensiveammo_select_info": "expensiveammo_select_info",
|
||||
"expensiveammo": "Munição Cara",
|
||||
"expensiveammo_desc": "Um inimigo escolhido precisa pagar por cada disparo",
|
||||
"expensiveammo_disable_info": "Suas balas voltaram a ser gratuitas.",
|
||||
"expensiveammo_enemy_info": "Agora cada tiro que você dispara custa {0}$.",
|
||||
"expensiveammo_player_info": "O jogador '{0}' agora precisa pagar por cada bala.",
|
||||
"expensiveammo_select_info": "Selecione um jogador cuja munição ficará cara:",
|
||||
|
||||
"explodingbarrel": "explodingbarrel",
|
||||
"explodingbarrel_desc": "explodingbarrel_desc",
|
||||
"explodingbarrel": "Barril Explosivo",
|
||||
"explodingbarrel_desc": "Clique em [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",
|
||||
|
|
@ -149,10 +162,16 @@
|
|||
"fastreload": "Recarga Rápida",
|
||||
"fastreload_desc": "Clique em [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",
|
||||
|
||||
"flash": "Ligeirinho",
|
||||
"flash_desc": "Velocidade de movimentação aleatória no início da rodada",
|
||||
"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",
|
||||
|
||||
"fortnite": "Fortnite",
|
||||
"fortnite_desc": "Clique em [css_useSkill] para criar uma barreira destrutível",
|
||||
|
||||
|
|
@ -175,13 +194,13 @@
|
|||
"ghost": "Fantasma",
|
||||
"ghost_desc": "Você é completamente invisível",
|
||||
|
||||
"giant": "giant",
|
||||
"giant_desc": "giant_desc",
|
||||
"giant_desc2": "giant_desc2: {0}x",
|
||||
"giant_disable_info": "giant_disable_info",
|
||||
"giant_enemy_info": "giant_enemy_info: {0}x",
|
||||
"giant_player_info": "giant_player_info: {0} {1}",
|
||||
"giant_select_info": "giant_select_info",
|
||||
"giant": "Gigante",
|
||||
"giant_desc": "Aumente o tamanho de um inimigo à sua escolha",
|
||||
"giant_desc2": "Aumente o tamanho de um inimigo à sua escolha para {0}x o tamanho normal",
|
||||
"giant_disable_info": "Você voltou ao seu tamanho normal.",
|
||||
"giant_enemy_info": "Você foi aumentado para {0}x o tamanho normal.",
|
||||
"giant_player_info": "Você aumentou o jogador '{0}' para {1}x o tamanho normal.",
|
||||
"giant_select_info": "Selecione um jogador para aumentar:",
|
||||
|
||||
"glaz": "Smoke Transparente",
|
||||
"glaz_desc": "Smokes tornam-se transparentes para você",
|
||||
|
|
@ -207,6 +226,9 @@
|
|||
"healingsmoke": "Smoke Amiga",
|
||||
"healingsmoke_desc": "Suas smokes curam",
|
||||
|
||||
"healingchicken": "Galinha Curadora",
|
||||
"healingchicken_desc": "Suas galinhas curam você enquanto você estiver por perto",
|
||||
|
||||
"hermit": "Sanguessuga",
|
||||
"hermit_desc": "Matar restaura munição e uma parte da sua vida",
|
||||
|
||||
|
|
@ -252,6 +274,12 @@
|
|||
"jester_on": "LIG.",
|
||||
"jester_off": "DESL.",
|
||||
|
||||
"jetkick": "Chute a Jato",
|
||||
"jetkick_desc": "Selecione um jogador para aplicar um chute a jato",
|
||||
"jetkick_player_info": "O jogador '{0}' recebeu um chute a jato.",
|
||||
"jetkick_enemy_info": "Cada tiro empurra você para trás",
|
||||
"jetkick_disable_info": "Seu recuo voltou ao normal.",
|
||||
|
||||
"jumpban": "Perneta",
|
||||
"jumpban_desc": "Escolha um jogador que não poderá pular",
|
||||
"jumpban_enemy_info": "Cortaram as suas pernas.",
|
||||
|
|
@ -259,12 +287,12 @@
|
|||
"jumpban_player_info": "O jogador '{0}' não pode mais pular.",
|
||||
"jumpban_select_info": "Banir pulo do jogador:",
|
||||
|
||||
"jumpcurse": "jumpcurse",
|
||||
"jumpcurse_desc": "jumpcurse_desc",
|
||||
"jumpcurse_disable_info": "jumpcurse_disable_info",
|
||||
"jumpcurse_enemy_info": "jumpcurse_enemy_info",
|
||||
"jumpcurse_player_info": "jumpcurse_player_info: {0}",
|
||||
"jumpcurse_select_info": "jumpcurse_select_info",
|
||||
"jumpcurse": "Maldição do Salto",
|
||||
"jumpcurse_desc": "Um inimigo escolhido pula sempre que um de seus companheiros pula",
|
||||
"jumpcurse_disable_info": "Você pode controlar seus saltos novamente.",
|
||||
"jumpcurse_enemy_info": "Agora você pula sempre que um de seus companheiros pula.",
|
||||
"jumpcurse_player_info": "O jogador '{0}' agora pula sempre que seus companheiros pulam.",
|
||||
"jumpcurse_select_info": "Selecione um jogador para amaldiçoar:",
|
||||
|
||||
"jumpingjack": "Pula-Pula",
|
||||
"jumpingjack_desc": "Pular restaura vida",
|
||||
|
|
@ -272,8 +300,11 @@
|
|||
"killerflash": "Flash Mortal",
|
||||
"killerflash_desc": "Qualquer pessoa cega pela sua flash morre (incluindo você)",
|
||||
|
||||
"knockback": "knockback",
|
||||
"knockback_desc": "knockback_desc",
|
||||
"knockback": "Repulsão",
|
||||
"knockback_desc": "Atirar enquanto estiver no ar empurra você para trás",
|
||||
|
||||
"lastgasp": "Último Suspiro",
|
||||
"lastgasp_desc": "Após morrer, você causa dano ao inimigo que matou você",
|
||||
|
||||
"lifeswap": "Troca de Vida",
|
||||
"lifeswap_desc": "Escolha um jogador para trocar de vida",
|
||||
|
|
@ -312,16 +343,12 @@
|
|||
"moneyswap_player_info": "Você trocou dinheiro com o jogador '{0}'.",
|
||||
"moneyswap_select_info": "Trocar dinheiro c/ jogador:",
|
||||
|
||||
"deathbomb": "Bomba mortal",
|
||||
"deathbomb_desc": "Você explode ao morrer, matando os jogadores próximos",
|
||||
"deathbomb_explosion": "Kaboom!",
|
||||
|
||||
"nightmare": "nightmare",
|
||||
"nightmare_desc": "nightmare_desc",
|
||||
"nightmare_disable_info": "nightmare_disable_info",
|
||||
"nightmare_enemy_info": "nightmare_enemy_info",
|
||||
"nightmare_player_info": "nightmare_player_info: {0}",
|
||||
"nightmare_select_info": "nightmare_select_info",
|
||||
"nightmare": "Pesadelo",
|
||||
"nightmare_desc": "Faça um inimigo escolhido ter uma visão aterrorizante",
|
||||
"nightmare_disable_info": "O pesadelo desapareceu.",
|
||||
"nightmare_enemy_info": "Um pesadelo está obscurecendo sua visão.",
|
||||
"nightmare_player_info": "Você lançou um pesadelo sobre o jogador '{0}'.",
|
||||
"nightmare_select_info": "Selecione um jogador para o pesadelo:",
|
||||
|
||||
"ninja": "Ninja",
|
||||
"ninja_desc": "Ficar parado aumenta sua invisibilidade em 33%, agachar em 33%, e segurar uma faca em 33%",
|
||||
|
|
@ -462,6 +489,17 @@
|
|||
"swapposition": "Troca de Posição",
|
||||
"swapposition_desc": "Clique em [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_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.",
|
||||
|
||||
"teamteleport": "Teleporte para o Time",
|
||||
"teamteleport_desc": "Pressione [css_useSkill] para se teleportar até o companheiro de equipe que você está olhando",
|
||||
"teamteleport_noenemy": "Nenhum companheiro de equipe encontrado",
|
||||
"teamteleport_hud_info": "Encontrado: {0}",
|
||||
|
||||
"teleporter": "Teletransportador",
|
||||
"teleporter_desc": "Você tem a chance de trocar de lugar com um inimigo atingido",
|
||||
"teleporter_desc2": "Sua chance de trocar de lugar após o acerto: {0}%",
|
||||
|
|
@ -485,11 +523,11 @@
|
|||
"toxicsmoke": "Smoke Tóxica",
|
||||
"toxicsmoke_desc": "Suas smokes causam dano",
|
||||
|
||||
"tripwire": "tripwire",
|
||||
"tripwire_desc": "tripwire_desc",
|
||||
"tripwire_no_wall_info": "tripwire_no_wall_info",
|
||||
"tripwire_placed_info": "tripwire_placed_info",
|
||||
"tripwire_triggered_info": "tripwire_triggered_info: {0}",
|
||||
"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_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.",
|
||||
|
||||
"wallhack": "Wallhack",
|
||||
"wallhack_desc": "Você pode ver inimigos através das paredes",
|
||||
|
|
|
|||
|
|
@ -38,11 +38,11 @@
|
|||
"astronaut_desc": "В начале раунда вам выдаётся случайное значение гравитации",
|
||||
"astronaut_desc2": "Ваша случайная гравитация: {0}x",
|
||||
|
||||
"moneyswap": "Налоговик",
|
||||
"moneyswap_desc": "Выберите игрока для обмена деньгами",
|
||||
"moneyswap_enemy_info": "Налоговая служба добралась до вас.",
|
||||
"moneyswap_player_info": "Вы обменялись деньгами с игроком '{0}'.",
|
||||
"moneyswap_select_info": "Обменять деньги с игроком:",
|
||||
"bankrupt": "Банкрот",
|
||||
"bankrupt_desc": "Выберите игрока, который потеряет все свои деньги",
|
||||
"bankrupt_enemy_info": "Вы обанкротились.",
|
||||
"bankrupt_player_info": "Игрок '{0}' обанкротился.",
|
||||
"bankrupt_select_info": "Выберите игрока для банкротства:",
|
||||
|
||||
"baseball": "Бейсболист",
|
||||
"baseball_desc": "Ваша ложная граната отскакивает от стен и мгновенно убивает врага при попадании",
|
||||
|
|
@ -51,9 +51,15 @@
|
|||
"behind_desc": "Есть шанс развернуть врага на 180° при попадании",
|
||||
"behind_desc2": "Ваш шанс развернуть врага при попадании: {0}%",
|
||||
|
||||
"berserker": "Берсерк",
|
||||
"berserker_desc": "Чем меньше у вас здоровья, тем больше урона вы наносите и тем быстрее двигаетесь",
|
||||
|
||||
"blademaster": "Мастер клинка",
|
||||
"blademaster_desc": "С ножом в руках у вас высокий шанс отразить выстрел",
|
||||
|
||||
"blastshot": "Взрывной выстрел",
|
||||
"blastshot_desc": "Нажмите Attack2 на MP5, чтобы выстрелить гранатой HE",
|
||||
|
||||
"bunnyhop": "Заяц",
|
||||
"bunnyhop_desc": "Вы получаете автоматический «БанниХоп»",
|
||||
|
||||
|
|
@ -104,6 +110,13 @@
|
|||
"deaf_player_info": "Звук отключён для игрока '{0}'.",
|
||||
"deaf_select_info": "Отключить звук для игрока:",
|
||||
|
||||
"deathbomb": "Смертельная бомба",
|
||||
"deathbomb_desc": "Вы взрываетесь при смерти, убивая ближайших игроков",
|
||||
"deathbomb_explosion": "АЛЛАХУ АКБАР!!!",
|
||||
|
||||
"demoneye": "Око демона",
|
||||
"demoneye_desc": "Вы наносите урон каждому врагу, на которого смотрите",
|
||||
|
||||
"disarmament": "Разоружение",
|
||||
"disarmament_desc": "Есть шанс заставить врага выронить оружие при попадании",
|
||||
"disarmament_desc2": "Ваш шанс разоружить врага: {0}%",
|
||||
|
|
@ -129,15 +142,15 @@
|
|||
"enemyspawn": "Спавн врагов",
|
||||
"enemyspawn_desc": "Нажмите [css_useSkill], чтобы телепортироваться на спавн врагов",
|
||||
|
||||
"expensiveammo": "expensiveammo",
|
||||
"expensiveammo_desc": "expensiveammo_desc",
|
||||
"expensiveammo_disable_info": "expensiveammo_disable_info",
|
||||
"expensiveammo_enemy_info": "expensiveammo_enemy_info: {0}",
|
||||
"expensiveammo_player_info": "expensiveammo_player_info: {0}",
|
||||
"expensiveammo_select_info": "expensiveammo_select_info",
|
||||
"expensiveammo": "Дорогие патроны",
|
||||
"expensiveammo_desc": "Выбранный противник платит за каждый выстрел",
|
||||
"expensiveammo_disable_info": "Теперь ваши патроны снова бесплатны.",
|
||||
"expensiveammo_enemy_info": "Теперь каждый ваш выстрел стоит {0}$.",
|
||||
"expensiveammo_player_info": "Игрок '{0}' теперь должен платить за каждый патрон.",
|
||||
"expensiveammo_select_info": "Выберите игрока, для которого патроны станут дорогими:",
|
||||
|
||||
"explodingbarrel": "explodingbarrel",
|
||||
"explodingbarrel_desc": "explodingbarrel_desc",
|
||||
"explodingbarrel": "Взрывающаяся бочка",
|
||||
"explodingbarrel_desc": "Нажмите [css_useSkill], чтобы установить бочку, которая взрывается при попадании",
|
||||
|
||||
"explosiveshot": "Взрывной выстрел",
|
||||
"explosiveshot_desc": "Случайный шанс выстрелить взрывной пулей при стрельбе",
|
||||
|
|
@ -149,10 +162,16 @@
|
|||
"fastreload": "Быстрая перезарядка",
|
||||
"fastreload_desc": "Нажмите [css_useSkill], чтобы перезарядить текущее оружие",
|
||||
|
||||
"firerain": "Огненный дождь",
|
||||
"firerain_desc": "Бросьте приманку, чтобы вызвать дождь из коктейлей Молотова",
|
||||
|
||||
"flash": "Флеш",
|
||||
"flash_desc": "Случайная скорость игрока в начале раунда",
|
||||
"flash_desc2": "Ваш множитель скорости: {0}x",
|
||||
|
||||
"flashlight": "Фонарик",
|
||||
"flashlight_desc": "Нажмите [css_useSkill], чтобы включить или выключить фонарик. Его свет может ослеплять врагов",
|
||||
|
||||
"fortnite": "Фортнайт",
|
||||
"fortnite_desc": "Нажмите [css_useSkill], чтобы создать разрушаемую баррикаду",
|
||||
|
||||
|
|
@ -175,13 +194,13 @@
|
|||
"ghost": "Призрак",
|
||||
"ghost_desc": "Вы полностью невидимы",
|
||||
|
||||
"giant": "giant",
|
||||
"giant_desc": "giant_desc",
|
||||
"giant_desc2": "giant_desc2: {0}x",
|
||||
"giant_disable_info": "giant_disable_info",
|
||||
"giant_enemy_info": "giant_enemy_info: {0}x",
|
||||
"giant_player_info": "giant_player_info: {0} {1}",
|
||||
"giant_select_info": "giant_select_info",
|
||||
"giant": "Гигант",
|
||||
"giant_desc": "Увеличьте выбранного противника",
|
||||
"giant_desc2": "Увеличьте выбранного противника до {0}-кратного размера",
|
||||
"giant_disable_info": "Вы снова обычного размера.",
|
||||
"giant_enemy_info": "Ваш размер увеличен до {0}-кратного.",
|
||||
"giant_player_info": "Вы увеличили игрока '{0}' до {1}-кратного размера.",
|
||||
"giant_select_info": "Выберите игрока для увеличения:",
|
||||
|
||||
"glaz": "Глаз",
|
||||
"glaz_desc": "Вы видите сквозь дымовые гранаты",
|
||||
|
|
@ -204,6 +223,9 @@
|
|||
"grenadier": "Гренадёр",
|
||||
"grenadier_desc": "У вас бесконечные осколочные гранаты",
|
||||
|
||||
"healingchicken": "Лечащая курица",
|
||||
"healingchicken_desc": "Ваши куры лечат вас, пока вы находитесь рядом",
|
||||
|
||||
"healingsmoke": "Лечащий дым",
|
||||
"healingsmoke_desc": "Ваши дымовые гранаты лечат",
|
||||
|
||||
|
|
@ -252,6 +274,12 @@
|
|||
"jester_on": "ВКЛ",
|
||||
"jester_off": "ВЫКЛ",
|
||||
|
||||
"jetkick": "Реактивный удар",
|
||||
"jetkick_desc": "Выберите игрока для реактивного удара",
|
||||
"jetkick_player_info": "Игрок '{0}' получил реактивный удар.",
|
||||
"jetkick_enemy_info": "Каждый выстрел отбрасывает вас назад",
|
||||
"jetkick_disable_info": "Ваша отдача вернулась к норме.",
|
||||
|
||||
"jumpban": "Безногий",
|
||||
"jumpban_desc": "Выберите игрока, который не сможет прыгать",
|
||||
"jumpban_enemy_info": "Кто-то отрезал вам ноги.",
|
||||
|
|
@ -259,12 +287,12 @@
|
|||
"jumpban_player_info": "Игрок '{0}' больше не может прыгать.",
|
||||
"jumpban_select_info": "Запретить прыжки игроку:",
|
||||
|
||||
"jumpcurse": "jumpcurse",
|
||||
"jumpcurse_desc": "jumpcurse_desc",
|
||||
"jumpcurse_disable_info": "jumpcurse_disable_info",
|
||||
"jumpcurse_enemy_info": "jumpcurse_enemy_info",
|
||||
"jumpcurse_player_info": "jumpcurse_player_info: {0}",
|
||||
"jumpcurse_select_info": "jumpcurse_select_info",
|
||||
"jumpcurse": "Проклятие прыжка",
|
||||
"jumpcurse_desc": "Выбранный противник прыгает каждый раз, когда прыгает кто-либо из его союзников",
|
||||
"jumpcurse_disable_info": "Теперь вы снова можете контролировать свои прыжки.",
|
||||
"jumpcurse_enemy_info": "Теперь вы будете прыгать каждый раз, когда прыгает кто-либо из ваших союзников.",
|
||||
"jumpcurse_player_info": "Игрок '{0}' теперь прыгает вместе со своими союзниками.",
|
||||
"jumpcurse_select_info": "Выберите игрока для проклятия:",
|
||||
|
||||
"jumpingjack": "Прыгающий Джек",
|
||||
"jumpingjack_desc": "Прыжки восстанавливают здоровье",
|
||||
|
|
@ -272,8 +300,11 @@
|
|||
"killerflash": "Смертельная флешка",
|
||||
"killerflash_desc": "Любой, полностью ослеплённый вашей флешкой, погибает (включая вас)",
|
||||
|
||||
"knockback": "knockback",
|
||||
"knockback_desc": "knockback_desc",
|
||||
"knockback": "Отдача",
|
||||
"knockback_desc": "Стрельба в воздухе отталкивает вас назад",
|
||||
|
||||
"lastgasp": "Последний вздох",
|
||||
"lastgasp_desc": "После смерти вы наносите урон врагу, который вас убил",
|
||||
|
||||
"lifeswap": "Обмен жизнями",
|
||||
"lifeswap_desc": "Выберите игрока для обмена здоровьем",
|
||||
|
|
@ -306,22 +337,18 @@
|
|||
"miner": "Минёр",
|
||||
"miner_desc": "Ваша осколочная граната взрывается только когда рядом есть враг",
|
||||
|
||||
"bankrupt": "Банкрот",
|
||||
"bankrupt_desc": "Выберите игрока, который потеряет все свои деньги",
|
||||
"bankrupt_enemy_info": "Вы обанкротились.",
|
||||
"bankrupt_player_info": "Игрок '{0}' обанкротился.",
|
||||
"bankrupt_select_info": "Выберите игрока для банкротства:",
|
||||
"moneyswap": "Налоговик",
|
||||
"moneyswap_desc": "Выберите игрока для обмена деньгами",
|
||||
"moneyswap_enemy_info": "Налоговая служба добралась до вас.",
|
||||
"moneyswap_player_info": "Вы обменялись деньгами с игроком '{0}'.",
|
||||
"moneyswap_select_info": "Обменять деньги с игроком:",
|
||||
|
||||
"deathbomb": "Смертельная бомба",
|
||||
"deathbomb_desc": "Вы взрываетесь при смерти, убивая ближайших игроков",
|
||||
"deathbomb_explosion": "АЛЛАХУ АКБАР!!!",
|
||||
|
||||
"nightmare": "nightmare",
|
||||
"nightmare_desc": "nightmare_desc",
|
||||
"nightmare_disable_info": "nightmare_disable_info",
|
||||
"nightmare_enemy_info": "nightmare_enemy_info",
|
||||
"nightmare_player_info": "nightmare_player_info: {0}",
|
||||
"nightmare_select_info": "nightmare_select_info",
|
||||
"nightmare": "Кошмар",
|
||||
"nightmare_desc": "Заставьте выбранного противника увидеть кошмарное видение",
|
||||
"nightmare_disable_info": "Кошмар рассеялся.",
|
||||
"nightmare_enemy_info": "Кошмар затуманивает ваше зрение.",
|
||||
"nightmare_player_info": "Вы наложили кошмар на игрока '{0}'.",
|
||||
"nightmare_select_info": "Выберите игрока для кошмара:",
|
||||
|
||||
"ninja": "Ниндзя",
|
||||
"ninja_desc": "Стоя на месте, ваша невидимость увеличивается на 33%, в приседе на 33%, с ножом на 33%",
|
||||
|
|
@ -462,6 +489,17 @@
|
|||
"swapposition": "Обмен позициями",
|
||||
"swapposition_desc": "Нажмите [css_useSkill], чтобы поменяться местами со случайным врагом",
|
||||
|
||||
"takeammo": "Забрать патроны",
|
||||
"takeammo_desc": "Нажмите [css_useSkill], чтобы забрать магазин активного оружия случайного противника",
|
||||
"takeammo_hud_info1": "Не найден игрок с активным магазином.",
|
||||
"takeammo_hud_info2": "У противника нет магазинов.",
|
||||
"takeammo_enemy_info": "Вы потеряли немного боеприпасов.",
|
||||
|
||||
"teamteleport": "Телепортация к союзнику",
|
||||
"teamteleport_desc": "Нажмите [css_useSkill], чтобы телепортироваться к союзнику, на которого вы смотрите",
|
||||
"teamteleport_noenemy": "Союзник не найден",
|
||||
"teamteleport_hud_info": "Найден: {0}",
|
||||
|
||||
"teleporter": "Телепортер",
|
||||
"teleporter_desc": "Есть шанс поменяться местами с врагом при попадании",
|
||||
"teleporter_desc2": "Ваш шанс обмена местами после попадания: {0}%",
|
||||
|
|
@ -485,11 +523,11 @@
|
|||
"toxicsmoke": "Токсичный дым",
|
||||
"toxicsmoke_desc": "Ваши дымовые гранаты наносят урон",
|
||||
|
||||
"tripwire": "tripwire",
|
||||
"tripwire_desc": "tripwire_desc",
|
||||
"tripwire_no_wall_info": "tripwire_no_wall_info",
|
||||
"tripwire_placed_info": "tripwire_placed_info",
|
||||
"tripwire_triggered_info": "tripwire_triggered_info: {0}",
|
||||
"tripwire": "Растяжка",
|
||||
"tripwire_desc": "Нажмите [css_useSkill], чтобы натянуть трос между двумя стенами. Враги, задевшие его, отображаются на вашем радаре",
|
||||
"tripwire_no_wall_info": "С обеих сторон нет достаточно близких стен.",
|
||||
"tripwire_placed_info": "Растяжка установлена.",
|
||||
"tripwire_triggered_info": "'{0}' задел вашу растяжку.",
|
||||
|
||||
"wallhack": "Воллхак",
|
||||
"wallhack_desc": "Вы видите врагов сквозь стены",
|
||||
|
|
|
|||
|
|
@ -51,9 +51,15 @@
|
|||
"behind_desc": "Vurduğunda düşmanı 180 derece döndürme şansın olur",
|
||||
"behind_desc2": "Baş döndürme şansın: %{0}",
|
||||
|
||||
"berserker": "Berserker",
|
||||
"berserker_desc": "Canın azaldıkça daha fazla hasar verir ve daha hızlı hareket edersin",
|
||||
|
||||
"blademaster": "Kılıç Ustası",
|
||||
"blademaster_desc": "Bıçak tutarken mermileri sektirme şansın artar",
|
||||
|
||||
"blastshot": "Patlama Atışı",
|
||||
"blastshot_desc": "MP5 ile Attack2 tuşuna basarak bir HE bombası ateşle",
|
||||
|
||||
"bunnyhop": "Tavşan",
|
||||
"bunnyhop_desc": "Otomatik \"BunnyHop\" yaparsın",
|
||||
|
||||
|
|
@ -149,10 +155,16 @@
|
|||
"fastreload": "Şipşak Şarjör",
|
||||
"fastreload_desc": "[css_useSkill] tuşuna basarak şarjörünü hızlıca değiştir",
|
||||
|
||||
"firerain": "Ateş Yağmuru",
|
||||
"firerain_desc": "Molotof yağmuru çağırmak için bir yem at",
|
||||
|
||||
"flash": "Flash",
|
||||
"flash_desc": "Raund başında rastgele oyuncu hızı",
|
||||
"flash_desc2": "Hızın: {0}x",
|
||||
|
||||
"flashlight": "El Feneri",
|
||||
"flashlight_desc": "El fenerini açıp kapatmak için [css_useSkill] tuşuna tıkla. Işığı düşmanları kör edebilir",
|
||||
|
||||
"fortnite": "Fortnite",
|
||||
"fortnite_desc": "[css_useSkill] tuşuna basarak barikat kur",
|
||||
|
||||
|
|
@ -204,6 +216,9 @@
|
|||
"grenadier": "Bombacı",
|
||||
"grenadier_desc": "Sınırsız el bombasına sahipsin",
|
||||
|
||||
"healingchicken": "Şifacı Tavuk",
|
||||
"healingchicken_desc": "Yakınındayken tavukların seni iyileştirir",
|
||||
|
||||
"healingsmoke": "Şifalı Sis",
|
||||
"healingsmoke_desc": "Sis bombaların iyileştirir",
|
||||
|
||||
|
|
@ -252,6 +267,12 @@
|
|||
"jester_on": "AÇIK",
|
||||
"jester_off": "KAPALI",
|
||||
|
||||
"jetkick": "Jet Tekmesi",
|
||||
"jetkick_desc": "Jet tekmesi yapmak için bir oyuncu seç",
|
||||
"jetkick_player_info": "'{0}' adlı oyuncuya jet tekmesi yapıldı.",
|
||||
"jetkick_enemy_info": "Her atış seni geriye doğru iter",
|
||||
"jetkick_disable_info": "Geri tepmen normale döndü.",
|
||||
|
||||
"jumpban": "Bacaksız",
|
||||
"jumpban_desc": "Zıplayamayacak bir oyuncu seç",
|
||||
"jumpban_enemy_info": "Bacakların kesildi",
|
||||
|
|
@ -275,6 +296,9 @@
|
|||
"knockback": "Savurma",
|
||||
"knockback_desc": "Havadayken ateş etmek seni geriye savurur",
|
||||
|
||||
"lastgasp": "Son Nefes",
|
||||
"lastgasp_desc": "Öldükten sonra seni öldüren düşmana hasar verirsin",
|
||||
|
||||
"lifeswap": "Can Takası",
|
||||
"lifeswap_desc": "Can değerlerini takas etmek için bir oyuncu seç",
|
||||
"lifeswap_enemy_info": "Birisi canını çaldı",
|
||||
|
|
@ -316,6 +340,9 @@
|
|||
"deathbomb_desc": "Öldüğünde patlayarak etraftaki oyuncuları öldürürsün",
|
||||
"deathbomb_explosion": "BOOM!!!",
|
||||
|
||||
"demoneye": "Şeytan Gözü",
|
||||
"demoneye_desc": "Baktığın tüm düşmanlara hasar verirsin",
|
||||
|
||||
"nightmare": "Kabus",
|
||||
"nightmare_desc": "Seçtiğin bir rakibe kabus görüntüsü verir",
|
||||
"nightmare_disable_info": "Kabus sona erdi.",
|
||||
|
|
@ -462,6 +489,17 @@
|
|||
"swapposition": "Yer Değiştirme",
|
||||
"swapposition_desc": "[css_useSkill] tuşuna basarak vurduğun düşmanla yer değiştir",
|
||||
|
||||
"takeammo": "Mühimmat Al",
|
||||
"takeammo_desc": "Rastgele bir düşmanın aktif silahının şarjörünü almak için [css_useSkill] tuşuna tıkla",
|
||||
"takeammo_hud_info1": "Aktif şarjörü olan bir oyuncu bulunamadı.",
|
||||
"takeammo_hud_info2": "Düşmanın şarjörü yok.",
|
||||
"takeammo_enemy_info": "Bir miktar mühimmat kaybettin.",
|
||||
|
||||
"teamteleport": "Takıma Işınlanma",
|
||||
"teamteleport_desc": "Baktığın takım arkadaşına ışınlanmak için [css_useSkill] tuşuna bas",
|
||||
"teamteleport_noenemy": "Takım arkadaşı bulunamadı",
|
||||
"teamteleport_hud_info": "Bulundu: {0}",
|
||||
|
||||
"teleporter": "Işınlayıcı",
|
||||
"teleporter_desc": "Vurulan bir düşmanla yer değiştirme şansınız var",
|
||||
"teleporter_desc2": "Yer değiştirme şansın: %{0}",
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue