v1.1.7
This commit is contained in:
parent
ac53655184
commit
e5ead42dfa
34 changed files with 953 additions and 1333 deletions
|
|
@ -56,7 +56,7 @@ namespace src
|
|||
|
||||
internal void SkillAction(string skill, string methodName, object[]? param = null)
|
||||
{
|
||||
string className = $"jRandomSkills.{skill}";
|
||||
string className = $"src.player.skills.{skill}";
|
||||
Type? type = Type.GetType(className);
|
||||
|
||||
if (type != null && typeof(ISkill).IsAssignableFrom(type))
|
||||
|
|
|
|||
|
|
@ -345,7 +345,8 @@
|
|||
"secondlife_desc": "After death, you respawn with the same amount of health",
|
||||
|
||||
"shade": "Shade",
|
||||
"shade_desc": "You teleport behind the back of a hit enemy",
|
||||
"shade_desc": "You have a random chance to teleport behind the back of a hit enemy",
|
||||
"shade_desc2": "Your chances of teleporting behind a hit enemy are: {0}%",
|
||||
"shade_nospace": "No space available",
|
||||
|
||||
"shortbomb": "Short Fuse",
|
||||
|
|
|
|||
|
|
@ -346,6 +346,7 @@
|
|||
|
||||
"shade": "Ombre",
|
||||
"shade_desc": "Vous vous téléportez derrière l’ennemi touché",
|
||||
"shade_desc2": "Vos chances de vous téléporter derrière un ennemi touché sont de: {0}%",
|
||||
"shade_nospace": "Aucun espace disponible",
|
||||
|
||||
"shortbomb": "Mèche Courte",
|
||||
|
|
|
|||
|
|
@ -345,7 +345,8 @@
|
|||
"secondlife_desc": "Po śmierci odradzasz się z taką samą ilością zdrowia",
|
||||
|
||||
"shade": "Cień",
|
||||
"shade_desc": "Teleportujesz się za plecy trafionego wroga",
|
||||
"shade_desc": "Masz losową szansę na teleportację za plecy trafionego wroga",
|
||||
"shade_desc2": "Twoje szanse na teleportację za trafionego wroga wynoszą: {0}%",
|
||||
"shade_nospace": "Brak miejsca",
|
||||
|
||||
"shortbomb": "Krótka Bomba",
|
||||
|
|
|
|||
|
|
@ -345,7 +345,8 @@
|
|||
"secondlife_desc": "Após a morte, você renasce com a mesma quantidade de saúde",
|
||||
|
||||
"shade": "Sombra",
|
||||
"shade_desc": "Você se teletransporta para trás de um inimigo acertado",
|
||||
"shade_desc": "Você tem uma chance aleatória de se teletransportar para trás de um inimigo atingido",
|
||||
"shade_desc2": "Suas chances de se teletransportar para trás de um inimigo atingido são: {0}%",
|
||||
"shade_nospace": "Sem espaço disponível",
|
||||
|
||||
"shortbomb": "Fusível Curto",
|
||||
|
|
|
|||
|
|
@ -345,7 +345,8 @@
|
|||
"secondlife_desc": "死亡后你会以相同生命值复活",
|
||||
|
||||
"shade": "阴影",
|
||||
"shade_desc": "你会传送到被击中敌人的背后",
|
||||
"shade_desc": "你存在随机几率将被击中的敌人传送至其身后",
|
||||
"shade_desc2": "你传送至击中敌人身后的概率为:{0}%",
|
||||
"shade_nospace": "无可用空间",
|
||||
|
||||
"shortbomb": "短引信",
|
||||
|
|
|
|||
|
|
@ -2,7 +2,6 @@
|
|||
using CounterStrikeSharp.API.Core;
|
||||
using CounterStrikeSharp.API.Modules.Utils;
|
||||
using static src.jRandomSkills;
|
||||
using System.Collections.Concurrent;
|
||||
using src.utils;
|
||||
|
||||
namespace src.player.skills
|
||||
|
|
@ -58,9 +57,7 @@ namespace src.player.skills
|
|||
var playerInfo = Instance.SkillPlayer.FirstOrDefault(p => p.SteamID == player.SteamID);
|
||||
if (playerInfo == null) return;
|
||||
playerInfo.SkillChance = 0;
|
||||
|
||||
ConcurrentBag<(string, string)> menuItems = [(player.GetTranslation("bombsite_a"), "a"), (player.GetTranslation("bombsite_b"), "b")];
|
||||
SkillUtils.CreateMenu(player, menuItems);
|
||||
SkillUtils.CreateMenu(player, [(player.GetTranslation("bombsite_a"), "a")], (player.GetTranslation("bombsite_b"), "b"));
|
||||
}
|
||||
|
||||
public static void DisableSkill(CCSPlayerController player)
|
||||
|
|
|
|||
|
|
@ -33,7 +33,6 @@ namespace src.player.skills
|
|||
if (playerInfo == null) return;
|
||||
|
||||
player.PlayerPawn.Value.ActualGravityScale = 1;
|
||||
playerInfo.SkillChance = 1;
|
||||
}
|
||||
|
||||
private static void ApplyGravityModifier(CCSPlayerController player)
|
||||
|
|
|
|||
|
|
@ -33,8 +33,6 @@ namespace src.player.skills
|
|||
if (playerInfo == null) return;
|
||||
float newChance = (float)Instance.Random.NextDouble() * (SkillsInfo.GetValue<float>(skillName, "ChanceTo") - SkillsInfo.GetValue<float>(skillName, "ChanceFrom")) + SkillsInfo.GetValue<float>(skillName, "ChanceFrom");
|
||||
playerInfo.SkillChance = newChance;
|
||||
newChance = (float)Math.Round(newChance, 2) * 100;
|
||||
newChance = (float)Math.Round(newChance);
|
||||
SkillUtils.PrintToChat(player, $"{ChatColors.DarkRed}{player.GetSkillName(skillName)}{ChatColors.Lime}: {player.GetSkillDescription(skillName, newChance)}", false);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -37,8 +37,6 @@ namespace src.player.skills
|
|||
if (playerInfo == null) return;
|
||||
float newChance = (float)Instance.Random.NextDouble() * (SkillsInfo.GetValue<float>(skillName, "chanceTo") - SkillsInfo.GetValue<float>(skillName, "chanceFrom")) + SkillsInfo.GetValue<float>(skillName, "chanceFrom");
|
||||
playerInfo.SkillChance = newChance;
|
||||
newChance = (float)Math.Round(newChance, 2) * 100;
|
||||
newChance = (float)Math.Round(newChance);
|
||||
SkillUtils.PrintToChat(player, $"{ChatColors.DarkRed}{player.GetSkillName(skillName)}{ChatColors.Lime}: {player.GetSkillDescription(skillName, newChance)}", false);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -22,6 +22,9 @@ namespace src.player.skills
|
|||
"weapon_negev"
|
||||
];
|
||||
private static readonly ConcurrentDictionary<CCSPlayerController, CBaseModelEntity> chickens = [];
|
||||
private static readonly string defaultCTModel = "characters/models/ctm_sas/ctm_sas.vmdl";
|
||||
private static readonly string defaultTModel = "characters/models/tm_phoenix/tm_phoenix.vmdl";
|
||||
private static readonly ConcurrentDictionary<ulong, string> originalModels = [];
|
||||
|
||||
public static void LoadSkill()
|
||||
{
|
||||
|
|
@ -36,6 +39,7 @@ namespace src.player.skills
|
|||
if (valuePair.Value != null && valuePair.Value.IsValid)
|
||||
valuePair.Value.AcceptInput("Kill");
|
||||
chickens.Clear();
|
||||
originalModels.Clear();
|
||||
}
|
||||
|
||||
public static void WeaponPickup(EventItemPickup @event)
|
||||
|
|
@ -61,9 +65,12 @@ namespace src.player.skills
|
|||
SkillUtils.ChangePlayerScale(player, .2f);
|
||||
|
||||
playerPawn.Render = Color.FromArgb(0, 255, 255, 255);
|
||||
playerPawn.ShadowStrength = 0.0f;
|
||||
playerPawn.ShadowStrength = 0f;
|
||||
Utilities.SetStateChanged(playerPawn, "CBaseModelEntity", "m_clrRender");
|
||||
|
||||
if (playerPawn.CBodyComponent != null && playerPawn.CBodyComponent.SceneNode != null)
|
||||
originalModels.TryAdd(player.SteamID, playerPawn.CBodyComponent.SceneNode.GetSkeletonInstance().ModelState.ModelName);
|
||||
|
||||
SetWeaponAttack(player, true);
|
||||
CreateChicken(player);
|
||||
}
|
||||
|
|
@ -77,7 +84,7 @@ namespace src.player.skills
|
|||
{
|
||||
playerPawn.VelocityModifier = 1f;
|
||||
|
||||
playerPawn.Health += 50;
|
||||
playerPawn.Health = Math.Min(playerPawn.Health + 50, 100);
|
||||
Utilities.SetStateChanged(playerPawn, "CBaseEntity", "m_iHealth");
|
||||
|
||||
SkillUtils.ChangePlayerScale(player, 1);
|
||||
|
|
@ -95,6 +102,23 @@ namespace src.player.skills
|
|||
chicken.AcceptInput("Kill");
|
||||
chickens.TryRemove(player, out _);
|
||||
}
|
||||
|
||||
if (originalModels.TryGetValue(player.SteamID, out var model))
|
||||
{
|
||||
var pawn = player.PlayerPawn?.Value;
|
||||
if (pawn == null) return;
|
||||
|
||||
Server.NextFrame(() =>
|
||||
{
|
||||
if (string.IsNullOrEmpty(model))
|
||||
model = player.Team == CsTeam.Terrorist ? defaultTModel : defaultCTModel;
|
||||
|
||||
pawn.SetModel(model);
|
||||
var originalRender = pawn.Render;
|
||||
pawn.Render = Color.FromArgb(255, originalRender.R, originalRender.G, originalRender.B);
|
||||
originalModels.TryRemove(player.SteamID, out _);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
private static void SetWeaponAttack(CCSPlayerController player, bool disableWeapon)
|
||||
|
|
|
|||
|
|
@ -94,8 +94,8 @@ namespace src.player.skills
|
|||
|
||||
public static void DisableSkill(CCSPlayerController player)
|
||||
{
|
||||
deafPlayers.TryRemove(player, out _);
|
||||
SkillUtils.CloseMenu(player);
|
||||
deafPlayers.TryRemove(player, out _);
|
||||
}
|
||||
|
||||
public class SkillConfig(Skills skill = skillName, bool active = true, string color = "#dae01f", CsTeam onlyTeam = CsTeam.None, bool disableOnFreezeTime = false, bool needsTeammates = false) : SkillsInfo.DefaultSkillInfo(skill, active, color, onlyTeam, disableOnFreezeTime, needsTeammates)
|
||||
|
|
|
|||
|
|
@ -42,8 +42,6 @@ namespace src.player.skills
|
|||
if (playerInfo == null) return;
|
||||
float newChance = (float)Instance.Random.NextDouble() * (SkillsInfo.GetValue<float>(skillName, "chanceTo") - SkillsInfo.GetValue<float>(skillName, "chanceFrom")) + SkillsInfo.GetValue<float>(skillName, "chanceFrom");
|
||||
playerInfo.SkillChance = newChance;
|
||||
newChance = (float)Math.Round(newChance, 2) * 100;
|
||||
newChance = (float)Math.Round(newChance);
|
||||
SkillUtils.PrintToChat(player, $"{ChatColors.DarkRed}{player.GetSkillName(skillName)}{ChatColors.Lime}: {player.GetSkillDescription(skillName, newChance)}", false);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -31,12 +31,6 @@ namespace src.player.skills
|
|||
var playerInfo = jRandomSkills.Instance.SkillPlayer.FirstOrDefault(s => s.SteamID == player?.SteamID);
|
||||
if (playerInfo == null) return;
|
||||
|
||||
if (playerInfo.SkillDescriptionHudExpired >= DateTime.Now)
|
||||
{
|
||||
playerInfo.PrintHTML = null;
|
||||
return;
|
||||
}
|
||||
|
||||
var playerPawn = player.PlayerPawn.Value;
|
||||
if (playerPawn == null || !playerPawn.IsValid) return;
|
||||
if (playerPawn.LifeState != (byte)LifeState_t.LIFE_ALIVE) return;
|
||||
|
|
|
|||
|
|
@ -49,7 +49,6 @@ namespace src.player.skills
|
|||
var playerPawn = player.PlayerPawn?.Value;
|
||||
if (playerPawn != null && playerPawn?.CBodyComponent != null)
|
||||
{
|
||||
playerInfo.SkillChance = 1;
|
||||
SkillUtils.ChangePlayerScale(player, 1);
|
||||
Utilities.SetStateChanged(playerPawn, "CBaseEntity", "m_CBodyComponent");
|
||||
}
|
||||
|
|
|
|||
|
|
@ -26,8 +26,6 @@ namespace src.player.skills
|
|||
if (playerInfo == null) return;
|
||||
float newChance = (float)Instance.Random.NextDouble() * (SkillsInfo.GetValue<float>(skillName, "ChanceTo") - SkillsInfo.GetValue<float>(skillName, "ChanceFrom")) + SkillsInfo.GetValue<float>(skillName, "ChanceFrom");
|
||||
playerInfo.SkillChance = newChance;
|
||||
newChance = (float)Math.Round(newChance, 2) * 100;
|
||||
newChance = (float)Math.Round(newChance);
|
||||
SkillUtils.PrintToChat(player, $"{ChatColors.DarkRed}{player.GetSkillName(skillName)}{ChatColors.Lime}: {player.GetSkillDescription(skillName, newChance)}", false);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,3 +1,4 @@
|
|||
using System.Collections.Concurrent;
|
||||
using System.Drawing;
|
||||
using CounterStrikeSharp.API;
|
||||
using CounterStrikeSharp.API.Core;
|
||||
|
|
@ -11,22 +12,33 @@ namespace src.player.skills
|
|||
{
|
||||
private const Skills skillName = Skills.Impostor;
|
||||
private static readonly string defaultCTModel = "characters/models/ctm_sas/ctm_sas.vmdl";
|
||||
private static readonly string defaultTModel = "characters/models/tm_phoenix_heavy/tm_phoenix_heavy.vmdl";
|
||||
private static readonly string defaultTModel = "characters/models/tm_phoenix/tm_phoenix.vmdl";
|
||||
private static readonly ConcurrentDictionary<ulong, string> originalModels = [];
|
||||
|
||||
public static void LoadSkill()
|
||||
{
|
||||
SkillUtils.RegisterSkill(skillName, SkillsInfo.GetValue<string>(skillName, "color"));
|
||||
}
|
||||
|
||||
public static void NewRound()
|
||||
{
|
||||
originalModels.Clear();
|
||||
}
|
||||
|
||||
public static void EnableSkill(CCSPlayerController player)
|
||||
{
|
||||
string model = GetEnemyModel(player);
|
||||
if (player.PlayerPawn.Value != null && player.PlayerPawn.Value.IsValid && player.PlayerPawn.Value.CBodyComponent != null && player.PlayerPawn.Value.CBodyComponent.SceneNode != null)
|
||||
originalModels.TryAdd(player.SteamID, player.PlayerPawn.Value.CBodyComponent.SceneNode.GetSkeletonInstance().ModelState.ModelName);
|
||||
SetPlayerModel(player, model);
|
||||
}
|
||||
|
||||
public static void DisableSkill(CCSPlayerController player)
|
||||
{
|
||||
SetPlayerModel(player, player.Team == CsTeam.Terrorist ? defaultTModel : defaultCTModel);
|
||||
var model = originalModels.TryGetValue(player.SteamID, out var originalModel) && !string.IsNullOrEmpty(originalModel) ? originalModel :
|
||||
player.Team == CsTeam.Terrorist ? defaultTModel : defaultCTModel;
|
||||
SetPlayerModel(player, model);
|
||||
originalModels.TryRemove(player.SteamID, out _);
|
||||
}
|
||||
|
||||
private static string GetEnemyModel(CCSPlayerController player)
|
||||
|
|
|
|||
|
|
@ -12,6 +12,7 @@ namespace src.player.skills
|
|||
public class Jackal : ISkill
|
||||
{
|
||||
private const Skills skillName = Skills.Jackal;
|
||||
private static readonly ConcurrentDictionary<ulong, byte> playersInAction = [];
|
||||
private static readonly ConcurrentDictionary<CCSPlayerController, ConcurrentQueue<CBeam>> stepBeams = [];
|
||||
|
||||
public static void LoadSkill()
|
||||
|
|
@ -26,6 +27,7 @@ namespace src.player.skills
|
|||
if (beam != null && beam.IsValid)
|
||||
beam.AcceptInput("Kill");
|
||||
stepBeams.Clear();
|
||||
playersInAction.Clear();
|
||||
}
|
||||
|
||||
public static void OnTick()
|
||||
|
|
@ -102,9 +104,10 @@ namespace src.player.skills
|
|||
return beam;
|
||||
}
|
||||
|
||||
public static void EnableSkill(CCSPlayerController _)
|
||||
public static void EnableSkill(CCSPlayerController player)
|
||||
{
|
||||
Event.EnableTransmit();
|
||||
playersInAction.TryAdd(player.SteamID, 0);
|
||||
foreach (var _player in Utilities.GetPlayers().Where(p => p.IsValid && !p.IsBot && !p.IsHLTV && p.PawnIsAlive && p.Team is CsTeam.CounterTerrorist or CsTeam.Terrorist))
|
||||
if (!stepBeams.ContainsKey(_player))
|
||||
stepBeams.TryAdd(_player, []);
|
||||
|
|
@ -112,11 +115,8 @@ namespace src.player.skills
|
|||
|
||||
public static void DisableSkill(CCSPlayerController player)
|
||||
{
|
||||
var playerInfo = Instance.SkillPlayer.FirstOrDefault(p => p.SteamID == player.SteamID);
|
||||
if (playerInfo == null) return;
|
||||
|
||||
playerInfo.Skill = Skills.None;
|
||||
if (!Instance.SkillPlayer.Any(s => s.Skill == skillName))
|
||||
playersInAction.TryRemove(player.SteamID, out _);
|
||||
if (playersInAction.IsEmpty)
|
||||
NewRound();
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@ using CounterStrikeSharp.API;
|
|||
using CounterStrikeSharp.API.Core;
|
||||
using CounterStrikeSharp.API.Modules.Utils;
|
||||
using src.utils;
|
||||
using System.Collections.Concurrent;
|
||||
using System.Drawing;
|
||||
using static src.jRandomSkills;
|
||||
|
||||
|
|
@ -12,6 +13,8 @@ namespace src.player.skills
|
|||
private const Skills skillName = Skills.Jester;
|
||||
private static bool jesterMode = false;
|
||||
private static bool jesterStarted = false;
|
||||
public static bool GetJesterMode() => jesterMode;
|
||||
private static readonly ConcurrentBag<CCSPlayerController> jesters = [];
|
||||
|
||||
public static void LoadSkill()
|
||||
{
|
||||
|
|
@ -21,11 +24,17 @@ namespace src.player.skills
|
|||
public static void NewRound()
|
||||
{
|
||||
jesterStarted = false;
|
||||
foreach (var jester in jesters)
|
||||
if (jester != null && jester.IsValid)
|
||||
DisableSkill(jester);
|
||||
jesters.Clear();
|
||||
}
|
||||
|
||||
public static void DisableSkill(CCSPlayerController player)
|
||||
{
|
||||
SkillUtils.ResetPrintHTML(player);
|
||||
if (player.PlayerPawn.Value == null || !player.PlayerPawn.Value.IsValid) return;
|
||||
SetPlayerColor(player.PlayerPawn.Value, true);
|
||||
}
|
||||
|
||||
public static void PlayerHurt(EventPlayerHurt @event)
|
||||
|
|
@ -35,10 +44,17 @@ namespace src.player.skills
|
|||
var victim = @event.Userid;
|
||||
int hitgroup = @event.Hitgroup;
|
||||
|
||||
if (!Instance.IsPlayerValid(attacker) || !Instance.IsPlayerValid(victim)) return;
|
||||
var attackerInfo = Instance.SkillPlayer.FirstOrDefault(p => p.SteamID == attacker?.SteamID);
|
||||
if (!Instance.IsPlayerValid(victim)) return;
|
||||
var victimInfo = Instance.SkillPlayer.FirstOrDefault(p => p.SteamID == victim?.SteamID);
|
||||
|
||||
if (!Instance.IsPlayerValid(attacker))
|
||||
{
|
||||
if (victimInfo?.Skill == skillName)
|
||||
RestoreHealth(victim!, @event.DmgHealth);
|
||||
return;
|
||||
}
|
||||
|
||||
var attackerInfo = Instance.SkillPlayer.FirstOrDefault(p => p.SteamID == attacker?.SteamID);
|
||||
if (attackerInfo?.Skill == skillName || victimInfo?.Skill == skillName)
|
||||
RestoreHealth(victim!, @event.DmgHealth);
|
||||
}
|
||||
|
|
@ -89,9 +105,9 @@ namespace src.player.skills
|
|||
}
|
||||
}
|
||||
|
||||
private static void SetPlayerColor(CCSPlayerPawn pawn)
|
||||
private static void SetPlayerColor(CCSPlayerPawn pawn, bool forceDisable = false)
|
||||
{
|
||||
var color = jesterMode ? Color.FromArgb(255, 128, 0, 128) : Color.FromArgb(255, 255, 255, 255);
|
||||
var color = jesterMode && !forceDisable ? Color.FromArgb(255, 128, 0, 128) : Color.FromArgb(255, 255, 255, 255);
|
||||
pawn.Render = color;
|
||||
Utilities.SetStateChanged(pawn, "CBaseModelEntity", "m_clrRender");
|
||||
}
|
||||
|
|
|
|||
|
|
@ -7,6 +7,7 @@ using CS2TraceRay.Class;
|
|||
using CS2TraceRay.Enum;
|
||||
using CS2TraceRay.Struct;
|
||||
using src.utils;
|
||||
using System.Collections.Concurrent;
|
||||
using System.Drawing;
|
||||
using System.Numerics;
|
||||
using static src.jRandomSkills;
|
||||
|
|
@ -20,6 +21,7 @@ namespace src.player.skills
|
|||
|
||||
private static bool hooked = false;
|
||||
private const int actionCode = 503;
|
||||
private static readonly ConcurrentDictionary<ulong, byte> playersInAction = [];
|
||||
private static readonly MemoryFunctionVoid<IntPtr, short> Shoot_Secondary = new(GameData.GetSignature("Shoot_Secondary"));
|
||||
|
||||
public static void LoadSkill()
|
||||
|
|
@ -29,23 +31,23 @@ namespace src.player.skills
|
|||
|
||||
public static void NewRound()
|
||||
{
|
||||
playersInAction.Clear();
|
||||
hooked = false;
|
||||
Shoot_Secondary.Unhook(ShootSecondary, HookMode.Pre);
|
||||
}
|
||||
|
||||
public static void EnableSkill(CCSPlayerController _)
|
||||
public static void EnableSkill(CCSPlayerController player)
|
||||
{
|
||||
if (hooked) return;
|
||||
hooked = true;
|
||||
Shoot_Secondary.Hook(ShootSecondary, HookMode.Pre);
|
||||
playersInAction.TryAdd(player.SteamID, 0);
|
||||
}
|
||||
|
||||
public static void DisableSkill(CCSPlayerController player)
|
||||
{
|
||||
var playerInfo = Instance.SkillPlayer.FirstOrDefault(p => p.SteamID == player.SteamID);
|
||||
if (playerInfo == null) return;
|
||||
|
||||
playerInfo.Skill = Skills.None;
|
||||
if (!Instance.SkillPlayer.Any(p => p.Skill == skillName))
|
||||
playersInAction.TryRemove(player.SteamID, out _);
|
||||
if (playersInAction.IsEmpty)
|
||||
{
|
||||
Shoot_Secondary.Unhook(ShootSecondary, HookMode.Pre);
|
||||
hooked = false;
|
||||
|
|
|
|||
|
|
@ -41,8 +41,6 @@ namespace src.player.skills
|
|||
if (playerInfo == null) return;
|
||||
float newChance = (float)Instance.Random.NextDouble() * (SkillsInfo.GetValue<float>(skillName, "ChanceTo") - SkillsInfo.GetValue<float>(skillName, "ChanceFrom")) + SkillsInfo.GetValue<float>(skillName, "ChanceFrom");
|
||||
playerInfo.SkillChance = newChance;
|
||||
newChance = (float)Math.Round(newChance, 2) * 100;
|
||||
newChance = (float)Math.Round(newChance);
|
||||
SkillUtils.PrintToChat(player, $"{ChatColors.DarkRed}{player.GetSkillName(skillName)}{ChatColors.Lime}: {player.GetSkillDescription(skillName, newChance)}", false);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -37,8 +37,6 @@ namespace src.player.skills
|
|||
if (playerInfo == null) return;
|
||||
float newChance = (float)Instance.Random.NextDouble() * (SkillsInfo.GetValue<float>(skillName, "ChanceTo") - SkillsInfo.GetValue<float>(skillName, "ChanceFrom")) + SkillsInfo.GetValue<float>(skillName, "ChanceFrom");
|
||||
playerInfo.SkillChance = newChance;
|
||||
newChance = (float)Math.Round(newChance, 2) * 100;
|
||||
newChance = (float)Math.Round(newChance);
|
||||
SkillUtils.PrintToChat(player, $"{ChatColors.DarkRed}{player.GetSkillName(skillName)}{ChatColors.Lime}: {player.GetSkillDescription(skillName, newChance)}", false);
|
||||
}
|
||||
|
||||
|
|
@ -56,7 +54,7 @@ namespace src.player.skills
|
|||
player.PlayerPawn.Value.Teleport(currentPosition, currentAngles, newVelocity);
|
||||
}
|
||||
|
||||
public class SkillConfig(Skills skill = skillName, bool active = true, string color = "#1e9ab0", CsTeam onlyTeam = CsTeam.None, bool disableOnFreezeTime = false, bool needsTeammates = false, float chanceFrom = 1f, float chanceTo = 1f, float jumpVelocity = 300f, float pushVelocity = 400f) : SkillsInfo.DefaultSkillInfo(skill, active, color, onlyTeam, disableOnFreezeTime, needsTeammates)
|
||||
public class SkillConfig(Skills skill = skillName, bool active = true, string color = "#1e9ab0", CsTeam onlyTeam = CsTeam.None, bool disableOnFreezeTime = false, bool needsTeammates = false, float chanceFrom = .3f, float chanceTo = .4f, float jumpVelocity = 300f, float pushVelocity = 400f) : SkillsInfo.DefaultSkillInfo(skill, active, color, onlyTeam, disableOnFreezeTime, needsTeammates)
|
||||
{
|
||||
public float ChanceFrom { get; set; } = chanceFrom;
|
||||
public float ChanceTo { get; set; } = chanceTo;
|
||||
|
|
|
|||
|
|
@ -19,7 +19,7 @@ namespace src.player.skills
|
|||
|
||||
public static void LoadSkill()
|
||||
{
|
||||
SkillUtils.RegisterSkill(skillName, SkillsInfo.GetValue<string>(skillName, "color"));
|
||||
SkillUtils.RegisterSkill(skillName, SkillsInfo.GetValue<string>(skillName, "color"), false);
|
||||
}
|
||||
|
||||
public static void NewRound()
|
||||
|
|
@ -38,9 +38,19 @@ namespace src.player.skills
|
|||
var attackerInfo = Instance.SkillPlayer.FirstOrDefault(p => p.SteamID == attacker?.SteamID);
|
||||
|
||||
if (attackerInfo?.Skill == skillName)
|
||||
if (Instance.Random.NextDouble() <= attackerInfo.SkillChance)
|
||||
TeleportAttackerBehindVictim(attacker!, victim!);
|
||||
}
|
||||
|
||||
public static void EnableSkill(CCSPlayerController player)
|
||||
{
|
||||
var playerInfo = Instance.SkillPlayer.FirstOrDefault(p => p.SteamID == player.SteamID);
|
||||
if (playerInfo == null) return;
|
||||
float newChance = (float)Instance.Random.NextDouble() * (SkillsInfo.GetValue<float>(skillName, "ChanceTo") - SkillsInfo.GetValue<float>(skillName, "ChanceFrom")) + SkillsInfo.GetValue<float>(skillName, "ChanceFrom");
|
||||
playerInfo.SkillChance = newChance;
|
||||
SkillUtils.PrintToChat(player, $"{ChatColors.DarkRed}{player.GetSkillName(skillName)}{ChatColors.Lime}: {player.GetSkillDescription(skillName, newChance)}", false);
|
||||
}
|
||||
|
||||
public static void DisableSkill(CCSPlayerController player)
|
||||
{
|
||||
noSpace.TryRemove(player, out _);
|
||||
|
|
@ -109,9 +119,11 @@ namespace src.player.skills
|
|||
noSpace.AddOrUpdate(attacker, Server.TickCount + (64 * 2), (k, v) => Server.TickCount + (64 * 2));
|
||||
}
|
||||
|
||||
public class SkillConfig(Skills skill = skillName, bool active = true, string color = "#4d4d4d", CsTeam onlyTeam = CsTeam.None, bool disableOnFreezeTime = false, bool needsTeammates = false, float teleportDistance = 100f) : SkillsInfo.DefaultSkillInfo(skill, active, color, onlyTeam, disableOnFreezeTime, needsTeammates)
|
||||
public class SkillConfig(Skills skill = skillName, bool active = true, string color = "#4d4d4d", CsTeam onlyTeam = CsTeam.None, bool disableOnFreezeTime = false, bool needsTeammates = false, float teleportDistance = 100f, float chanceFrom = .3f, float chanceTo = .45f) : SkillsInfo.DefaultSkillInfo(skill, active, color, onlyTeam, disableOnFreezeTime, needsTeammates)
|
||||
{
|
||||
public float TeleportDistance { get; set; } = teleportDistance;
|
||||
public float ChanceFrom { get; set; } = chanceFrom;
|
||||
public float ChanceTo { get; set; } = chanceTo;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -12,6 +12,7 @@ namespace src.player.skills
|
|||
public class Wallhack : ISkill
|
||||
{
|
||||
private const Skills skillName = Skills.Wallhack;
|
||||
private static readonly ConcurrentDictionary<ulong, byte> playersInAction = [];
|
||||
private static readonly ConcurrentBag<(CDynamicProp, CDynamicProp, CsTeam)> glows = [];
|
||||
|
||||
public static void LoadSkill()
|
||||
|
|
@ -50,22 +51,21 @@ namespace src.player.skills
|
|||
glow.Item2.AcceptInput("Kill");
|
||||
}
|
||||
glows.Clear();
|
||||
playersInAction.Clear();
|
||||
}
|
||||
|
||||
public static void EnableSkill(CCSPlayerController _)
|
||||
public static void EnableSkill(CCSPlayerController player)
|
||||
{
|
||||
Event.EnableTransmit();
|
||||
playersInAction.TryAdd(player.SteamID, 0);
|
||||
if (glows.IsEmpty)
|
||||
SetGlowEffectForAll();
|
||||
}
|
||||
|
||||
public static void DisableSkill(CCSPlayerController player)
|
||||
{
|
||||
var playerInfo = Instance.SkillPlayer.FirstOrDefault(p => p.SteamID == player.SteamID);
|
||||
if (playerInfo == null) return;
|
||||
|
||||
playerInfo.Skill = Skills.None;
|
||||
if (!Instance.SkillPlayer.Any(s => s.Skill == skillName))
|
||||
playersInAction.TryRemove(player.SteamID, out _);
|
||||
if (playersInAction.IsEmpty)
|
||||
NewRound();
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -8,9 +8,9 @@ using CounterStrikeSharp.API.Modules.Utils;
|
|||
using System.Runtime.InteropServices;
|
||||
using WASDMenuAPI.Classes;
|
||||
using WASDSharedAPI;
|
||||
using static CounterStrikeSharp.API.Core.Listeners;
|
||||
using System.Collections.Concurrent;
|
||||
using src.player;
|
||||
using src.player.skills;
|
||||
|
||||
namespace src.utils
|
||||
{
|
||||
|
|
@ -97,6 +97,14 @@ namespace src.utils
|
|||
if (pawn == null || !pawn.IsValid || pawn.LifeState != (byte)LifeState_t.LIFE_ALIVE)
|
||||
return;
|
||||
|
||||
if (pawn.Controller.Value != null && pawn.Controller.Value.IsValid)
|
||||
{
|
||||
var playerInfo = jRandomSkills.Instance.SkillPlayer.FirstOrDefault(p => p.SteamID == pawn.Controller.Value.SteamID);
|
||||
if (playerInfo == null) return;
|
||||
if (playerInfo.Skill == Skills.Jester && Jester.GetJesterMode())
|
||||
return;
|
||||
}
|
||||
|
||||
int newHealth = (int)(pawn.Health - damage);
|
||||
pawn.Health = newHealth;
|
||||
Utilities.SetStateChanged(pawn, "CBaseEntity", "m_iHealth");
|
||||
|
|
|
|||
Binary file not shown.
File diff suppressed because it is too large
Load diff
|
|
@ -345,7 +345,8 @@
|
|||
"secondlife_desc": "After death, you respawn with the same amount of health",
|
||||
|
||||
"shade": "Shade",
|
||||
"shade_desc": "You teleport behind the back of a hit enemy",
|
||||
"shade_desc": "You have a random chance to teleport behind the back of a hit enemy",
|
||||
"shade_desc2": "Your chances of teleporting behind a hit enemy are: {0}%",
|
||||
"shade_nospace": "No space available",
|
||||
|
||||
"shortbomb": "Short Fuse",
|
||||
|
|
|
|||
|
|
@ -346,6 +346,7 @@
|
|||
|
||||
"shade": "Ombre",
|
||||
"shade_desc": "Vous vous téléportez derrière l’ennemi touché",
|
||||
"shade_desc2": "Vos chances de vous téléporter derrière un ennemi touché sont de: {0}%",
|
||||
"shade_nospace": "Aucun espace disponible",
|
||||
|
||||
"shortbomb": "Mèche Courte",
|
||||
|
|
|
|||
|
|
@ -345,7 +345,8 @@
|
|||
"secondlife_desc": "Po śmierci odradzasz się z taką samą ilością zdrowia",
|
||||
|
||||
"shade": "Cień",
|
||||
"shade_desc": "Teleportujesz się za plecy trafionego wroga",
|
||||
"shade_desc": "Masz losową szansę na teleportację za plecy trafionego wroga",
|
||||
"shade_desc2": "Twoje szanse na teleportację za trafionego wroga wynoszą: {0}%",
|
||||
"shade_nospace": "Brak miejsca",
|
||||
|
||||
"shortbomb": "Krótka Bomba",
|
||||
|
|
|
|||
|
|
@ -345,7 +345,8 @@
|
|||
"secondlife_desc": "Após a morte, você renasce com a mesma quantidade de saúde",
|
||||
|
||||
"shade": "Sombra",
|
||||
"shade_desc": "Você se teletransporta para trás de um inimigo acertado",
|
||||
"shade_desc": "Você tem uma chance aleatória de se teletransportar para trás de um inimigo atingido",
|
||||
"shade_desc2": "Suas chances de se teletransportar para trás de um inimigo atingido são: {0}%",
|
||||
"shade_nospace": "Sem espaço disponível",
|
||||
|
||||
"shortbomb": "Fusível Curto",
|
||||
|
|
|
|||
|
|
@ -1,458 +0,0 @@
|
|||
{
|
||||
"none": "Brak",
|
||||
"none_desc": "Nie posiadasz żadnej supermocy",
|
||||
|
||||
"aimbot": "Aimbot",
|
||||
"aimbot_desc": "Każdy twój trafiony pocisk liczy się jako strzał w głowę",
|
||||
|
||||
"anomaly": "Anomalia",
|
||||
"anomaly_desc": "Cofasz się o kilka sekund do tyłu",
|
||||
|
||||
"antyflash": "Anty Flash",
|
||||
"antyflash_desc": "Posiadasz odporność na flash'e, a twoje flash'e trwają 7 sekund",
|
||||
|
||||
"antyhead": "Żelazna Głowa",
|
||||
"antyhead_desc": "Nie otrzymujesz obrażeń w głowę",
|
||||
|
||||
"areareaper": "Niszczyciel Stref",
|
||||
"areareaper_desc": "Możesz wybrać strefę detonacji, którą chcesz dezaktywować",
|
||||
"areareaper_incorrect_site": "Nie znaleziono takiej strefy detonacji.",
|
||||
"areareaper_no_site": "Nie znaleziono żadnej strefy detonacji.",
|
||||
"areareaper_select_info": "Wybierz strefę do dezaktyw.:",
|
||||
"areareaper_site_disabled": "Strefa detonacji {0} została dezaktywowana - nie można na niej podłożyć bomby!",
|
||||
"areareaper_used_info": "Twoja moc została już wykorzystana.",
|
||||
|
||||
"armored": "Gruby",
|
||||
"armored_desc": "Masz losowy mnożnik otrzymywanych obrażeń",
|
||||
"armored_desc2": "Twój mnożnik otrzymywanych obrażeń wynosi: {0}x",
|
||||
|
||||
"assassin": "Skrytobójca",
|
||||
"assassin_desc": "Zadajesz większe obrażenia przeciwnikowi od tyłu",
|
||||
|
||||
"astronaut": "Astronauta",
|
||||
"astronaut_desc": "Na początku rundy otrzymujesz losową wartość grawitacji",
|
||||
"astronaut_desc2": "Twoja losowa grawitacja wynosi: {0}x",
|
||||
|
||||
"bankrupt": "Bankrut",
|
||||
"bankrupt_desc": "Wybierz gracza, który straci wszystkie swoje pieniądze",
|
||||
"bankrupt_enemy_info": "Stałeś się bankrutem.",
|
||||
"bankrupt_player_info": "Gracz '{0}' zbankrutował.",
|
||||
"bankrupt_select_info": "Wybierz gracza do bankrucji:",
|
||||
|
||||
"baseball": "Bejsbolista",
|
||||
"baseball_desc": "Twój wabik odbija się od ścian i natychmiastowo zabija wroga po trafieniu",
|
||||
|
||||
"behind": "Obrót Wroga",
|
||||
"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}%",
|
||||
|
||||
"blademaster": "Mistrz Ostrza",
|
||||
"blademaster_desc": "Trzymając nóż, masz duże szanse na odparcie strzału",
|
||||
|
||||
"bunnyhop": "Królik",
|
||||
"bunnyhop_desc": "Otrzymujesz auto \"BunnyHopa\"",
|
||||
|
||||
"c4camouflage": "C4 Kamuflaż",
|
||||
"c4camouflage_desc": "Kiedy trzymasz bombę, jesteś niewidzialny",
|
||||
|
||||
"catapult": "Katapulta",
|
||||
"catapult_desc": "Masz losową szanse na podrzucenie wroga",
|
||||
"catapult_desc2": "Twoje szanse na podrzucenie wroga po trafieniu to: {0}%",
|
||||
|
||||
"chicken": "Kurczak",
|
||||
"chicken_desc": "Otrzymujesz model kurczaka + jesteś o 10% szybszy - 50hp",
|
||||
|
||||
"chillout": "Wyluzowany",
|
||||
"chillout_desc": "Podłożenie bomby zajmuje znacznie więcej czasu",
|
||||
|
||||
"cutter": "Scyzoryk",
|
||||
"cutter_desc": "Natychmiastowe zabójstwo nożem",
|
||||
|
||||
"darkness": "Mrok",
|
||||
"darkness_desc": "Nadaje efekt ciemności wybranemu przeciwnikowi",
|
||||
"darkness_enemy_info": "Niech zgasną światła.",
|
||||
"darkness_player_info": "Ciemność opanowała gracza '{0}'.",
|
||||
"darkness_select_info": "Nałóż efekt ciemności:",
|
||||
|
||||
"deactivator": "Deaktywator",
|
||||
"deactivator_desc": "Wybierasz gracza, którego supermoc chcesz wyłączyć",
|
||||
"deactivator_enemy_info": "Twoja supermoc została wyłączona.",
|
||||
"deactivator_player_info": "Moc gracza '{0}' została wyłączona.",
|
||||
"deactivator_select_info": "Wyłącz moc gracza:",
|
||||
|
||||
"deaf": "Głuchy",
|
||||
"deaf_desc": "Wybierasz gracza, dla którego chcesz wyłączyć wszystkie dźwięki",
|
||||
"deaf_enemy_info": "Słuchawki opuściły grę.",
|
||||
"deaf_player_info": "Dźwięk został wyłączony dla gracza '{0}'.",
|
||||
"deaf_select_info": "Wycisz dźwięki gracza:",
|
||||
|
||||
"disarmament": "Rozbrojenie",
|
||||
"disarmament_desc": "Masz losową szanse na wyrzucenie broni wroga po trafieniu",
|
||||
"disarmament_desc2": "Twoje szanse na wyrzucenie broni wroga to: {0}%",
|
||||
|
||||
"distancer": "Odległościomierz",
|
||||
"distancer_desc": "Możesz zobaczyć odległość do najbliższego przeciwnika",
|
||||
|
||||
"dash": "Doskok",
|
||||
"dash_desc": "Wykonaj drugi skok, aby wykonać doskok",
|
||||
|
||||
"dracula": "Drakula",
|
||||
"dracula_desc": "Po trafieniu ofiary odzyskujesz zdrowie równe pewnemu procentowi zadanych obrażeń",
|
||||
|
||||
"duplicator": "Duplikator",
|
||||
"duplicator_desc": "Wybierasz gracza, od którego chcesz skopiować supermoc",
|
||||
"duplicator_player_info": "Moc gracza '{0}' została skopiowana.",
|
||||
"duplicator_select_info": "Skopiuj moc gracza:",
|
||||
|
||||
"dwarf": "Mini Majk ({0}%)",
|
||||
"dwarf_desc": "Losowa wielkość postaci na początku rundy",
|
||||
"dwarf_desc2": "Twój mnożnik wielkości to {0}%",
|
||||
|
||||
"enemyspawn": "Resp Wroga",
|
||||
"enemyspawn_desc": "Kliknij [css_useSkill], aby teleportować się na resp wroga",
|
||||
|
||||
"explosiveshot": "Strzał Wybuchowy",
|
||||
"explosiveshot_desc": "Losowa szansa wystrzelenia pocisku wybuchowego podczas strzelania",
|
||||
"explosiveshot_desc2": "Twoja szansa na wystrzelenie pocisku wybuchowego: {0}%",
|
||||
|
||||
"falconeye": "Oko Sokoła",
|
||||
"falconeye_desc": "Kliknij [css_useSkill], aby aktywować kamerę z lotu ptaka",
|
||||
|
||||
"fastreload": "Szybkie Rączki",
|
||||
"fastreload_desc": "Kliknij [css_useSkill], aby przeładować broń, którą obecnie trzymasz",
|
||||
|
||||
"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",
|
||||
|
||||
"fortnite": "Fortnite",
|
||||
"fortnite_desc": "Kliknij [css_useSkill], aby stworzyć barykadę, którą można zniszczyć",
|
||||
|
||||
"fragilebomb": "Krucha Bomba",
|
||||
"fragilebomb_desc": "Strzelanie do bomby powoduje jej uszkodzenie",
|
||||
"fragilebomb_bomb_health": "Zdrowie bomby",
|
||||
|
||||
"friendlyfire": "Ogień Przyjacielski",
|
||||
"friendlyfire_desc": "Strzelanie do członków drużyny leczy ich",
|
||||
|
||||
"frozendecoy": "Zamrażający Wabik",
|
||||
"frozendecoy_desc": "Twój decoy zamraża wszystkich graczy w pobliżu",
|
||||
|
||||
"gambler": "Hazardzista",
|
||||
"gambler_desc": "Wybierz umiejętność z podanej listy.",
|
||||
"gambler_select_info": "Wybierz umiejętność:",
|
||||
"gambler_more": "#00FF00|Odśwież za ${0}",
|
||||
|
||||
"ghost": "Duszek",
|
||||
"ghost_desc": "Jesteś całkowicie niewidzialny",
|
||||
|
||||
"glaz": "Glaz",
|
||||
"glaz_desc": "Nie widzisz granatów dymnych",
|
||||
|
||||
"glitch": "Glitch",
|
||||
"glitch_desc": "Wyłączasz radar wybranemu przeciwnikowi",
|
||||
"glitch_enemy_info": "Twój radar został wyłączony.",
|
||||
"glitch_player_info": "Radar gracza '{0}' został wyłączony.",
|
||||
"glitch_select_info": "Wyłącz radar dla gracza:",
|
||||
|
||||
"glue": "Klej",
|
||||
"glue_desc": "Twoje granaty przyklejają się do ścian",
|
||||
|
||||
"godmode": "Nieśmiertelność",
|
||||
"godmode_desc": "Kliknij [css_useSkill], aby stać się nieśmiertelnym na krótką chwilę",
|
||||
"godmode_off": "Nieśmiertelność wyłączona",
|
||||
"godmode_on": "Nieśmiertelność włączona",
|
||||
|
||||
"grenadier": "Granatnik",
|
||||
"grenadier_desc": "Masz nieskończone granaty odłamkowe",
|
||||
|
||||
"healingsmoke": "Leczący Dym",
|
||||
"healingsmoke_desc": "Twoje granaty dymne leczą",
|
||||
|
||||
"hermit": "Pustelnik",
|
||||
"hermit_desc": "Zabijanie przywraca amunicję i część zdrowia",
|
||||
|
||||
"holyhandgrenade": "Święty Granat Ręczny",
|
||||
"holyhandgrenade_desc": "Twoje granaty uderzeniowe zadają podwójne obrażenia i mają podwójny zasięg",
|
||||
|
||||
"impostor": "Szpieg",
|
||||
"impostor_desc": "Na początku rundy otrzymujesz model postaci przeciwnika",
|
||||
|
||||
"infiniteammo": "Nieskończone Ammo",
|
||||
"infiniteammo_desc": "Otrzymujesz nieskończoną ilość amunicji do wszystkich broni",
|
||||
|
||||
"jackal": "Stópkarz",
|
||||
"jackal_desc": "Każdy przeciwnik pozostawia za sobą ślad",
|
||||
|
||||
"jammer": "Zakłócacz",
|
||||
"jammer_desc": "Wybierasz gracza, dla którego chcesz wyłączyć celownik",
|
||||
"jammer_enemy_info": "Twój celownik został wyłączony.",
|
||||
"jammer_player_info": "Celownik gracza '{0}' została wyłączona.",
|
||||
"jammer_select_info": "Wyłącz celownik dla gracza:",
|
||||
|
||||
"jester": "Błazen",
|
||||
"jester_desc": "W trybie błazna nie możesz zadawać ani otrzymywać obrażeń. Tryb zmienia się co kilka sekund.",
|
||||
"jester_mode": "Tryb Błazna",
|
||||
"jester_on": "WŁ.",
|
||||
"jester_off": "WYŁ.",
|
||||
|
||||
"jumpban": "Beznogi",
|
||||
"jumpban_desc": "Wybierasz gracza, który nie będzie mógł skakać",
|
||||
"jumpban_enemy_info": "Ktoś odciął ci nogi.",
|
||||
"jumpban_player_info": "Gracz '{0}' nie może teraz skakać.",
|
||||
"jumpban_select_info": "Zablokuj skok dla gracza:",
|
||||
|
||||
"jumpingjack": "Pajacyk",
|
||||
"jumpingjack_desc": "Skakanie przywraca zdrowie",
|
||||
|
||||
"killerflash": "Zabójczy Flash",
|
||||
"killerflash_desc": "Każdy całkowicie oślepiony twoim granatem umiera (również ty)",
|
||||
|
||||
"lifeswap": "Zamiana Żyć",
|
||||
"lifeswap_desc": "Wybierasz gracza, z którym chcesz wymienić się zdrowiem",
|
||||
"lifeswap_enemy_info": "Ktoś pożyczył sobie twoje zdrowie.",
|
||||
"lifeswap_player_info": "Wymieniłeś się zdrowiem z graczem '{0}'.",
|
||||
"lifeswap_select_info": "Zamień się zdrowiem z graczem:",
|
||||
|
||||
"longknife": "Długi Nóż",
|
||||
"longknife_desc": "Podstawowy atak nożem zadaje obrażenia niezależnie od odległości",
|
||||
|
||||
"longzeus": "Długi Zeus",
|
||||
"longzeus_desc": "Zeus zadaje obrażenia niezależnie od odległości",
|
||||
|
||||
"magnifier": "Lupa",
|
||||
"magnifier_desc": "Przybiżasz ekran wybranemu przeciwnikowi",
|
||||
"magnifier_enemy_info": "Twoje pole widzenia zostało zniekształcone!",
|
||||
"magnifier_player_info": "Gracz '{0}' został zmuszony do przejścia w tryb powiększenia.",
|
||||
"magnifier_select_info": "Powiększ ekran gracza:",
|
||||
|
||||
"medic": "Medyk",
|
||||
"medic_desc": "Kliknij [css_useSkill], aby użyć ładunku leczniczego, który przywraca 50 punktów zdrowia",
|
||||
|
||||
"moneyswap": "Skarbówka",
|
||||
"moneyswap_desc": "Wybierasz gracza, z którym chcesz zamienić się pieniędzmi",
|
||||
"moneyswap_enemy_info": "Urząd skarbowy cię dopadł.",
|
||||
"moneyswap_player_info": "Wymieniłeś swoje pieniądze z graczem '{0}'.",
|
||||
"moneyswap_select_info": "Zamień się kasą z graczem:",
|
||||
|
||||
"muhammed": "Muhammed",
|
||||
"muhammed_desc": "Po śmierci eksplodujesz i zabijasz graczy znajdujących się w zasięgu",
|
||||
|
||||
"ninja": "Ninja",
|
||||
"ninja_desc": "Stojąc nieruchomo zwiększasz swoją niewidzialność o 33%, kucając o 33%, a trzymając nóż o 33%",
|
||||
|
||||
"nonades": "Pancernik",
|
||||
"nonades_desc": "Granaty nie zadają Ci obrażeń",
|
||||
|
||||
"norecoil": "Skupienie",
|
||||
"norecoil_desc": "Brak odrzutu podczas strzelania",
|
||||
|
||||
"noclip": "NoClip",
|
||||
"noclip_desc": "Kliknij [css_useSkill], aby włączyć noclip na krótki czas",
|
||||
|
||||
"oneshot": "Jednostrzałowiec",
|
||||
"oneshot_desc": "Po trafieniu natychmiast zabijasz przeciwnika",
|
||||
|
||||
"onlyhead": "Tylko Głowa",
|
||||
"onlyhead_desc": "Otrzymujesz obrażenia tylko w głowę",
|
||||
|
||||
"paweljumper": "Pawel Jumper",
|
||||
"paweljumper_desc": "Otrzymujesz losową liczbę dodatkowych skoków",
|
||||
"paweljumper_desc2": "Otrzymujesz {0} dodatkowych skoków",
|
||||
|
||||
"phoenix": "Feniks",
|
||||
"phoenix_desc": "Masz losową szans na odrodzenie się po śmierci",
|
||||
"phoenix_desc2": "Twoje szanse na odrodzenie się po śmierci: {0}%",
|
||||
"phoenix_respawn": "Zostałeś odrodzony z popiołów dzięki mocy: CHATCOLORS.REDPhoenix",
|
||||
|
||||
"psychicdefusing": "Zdalne Rozbrajanie",
|
||||
"psychicdefusing_desc": "Kiedy jesteś blisko bomby, zaczynasz ją rozbrajać",
|
||||
"psychicdefusing_hud_info": "Pozostało {0} sekund do rozbrojenia",
|
||||
|
||||
"pilot": "Pilot",
|
||||
"pilot_desc": "Latanie przez określony czas. Przytrzymaj [USE - E], aby latać",
|
||||
"pilot_hud_info": "Paliwo",
|
||||
|
||||
"planter": "Samowolka",
|
||||
"planter_desc": "Bombę można podłożyć w dowolnym miejscu, a czas detonacji wynosi 60 sekund.",
|
||||
|
||||
"poison": "Trutka",
|
||||
"poison_desc": "Wybierasz gracza, który co kilka sekund będzie otrzymywał obrażenia",
|
||||
"poison_enemy_info": "Zostałeś otruty.",
|
||||
"poison_player_info": "Gracz '{0}' został otruty.",
|
||||
"poison_select_info": "Zatruj gracza:",
|
||||
|
||||
"primaryban": "Brak Karabinów",
|
||||
"primaryban_desc": "Wybierasz gracza, który nie może używać karabinów",
|
||||
"primaryban_enemy_info": "Nie możesz już używać karabinów.",
|
||||
"primaryban_player_info": "Gracz '{0}' nie może już używać karabinów.",
|
||||
"primaryban_select_info": "Zablokuj karabiny dla gracza:",
|
||||
|
||||
"prosthesis": "Proteza",
|
||||
"prosthesis_desc": "Ramiona i nogi są kuloodporne",
|
||||
|
||||
"push": "Odpychacz",
|
||||
"push_desc": "Masz losową szansę na odepchnięcie wroga po trafieniu go",
|
||||
"push_desc2": "Twoje szanse na odepchnięcie wroga to: {0}%",
|
||||
|
||||
"pyro": "Pyro",
|
||||
"pyro_desc": "Molotow przywraca zdrowie",
|
||||
|
||||
"quickshot": "Szybkostrzelność",
|
||||
"quickshot_desc": "Wszystkie pociski są wystrzeliwane bardzo szybko",
|
||||
|
||||
"radarhack": "Radarowiec",
|
||||
"radarhack_desc": "Na radarze widać wrogów",
|
||||
|
||||
"rambo": "Rambo",
|
||||
"rambo_desc": "Na początku rundy otrzymujesz losową ilość zdrowia",
|
||||
|
||||
"randomweapon": "Losowa Broń",
|
||||
"randomweapon_desc": "Kliknij [css_useSkill], aby otrzymać losową broń",
|
||||
|
||||
"rezombie": "Re-Zombie",
|
||||
"rezombie_desc": "Po śmierci odradzasz się jako zombie z większym zdrowiem i bez broni",
|
||||
|
||||
"reactivearmor": "Pancerz Reaktywny",
|
||||
"reactivearmor_desc": "Pancerz pochłania pierwsze otrzymane obrażenia",
|
||||
|
||||
"regeneration": "Regeneracja",
|
||||
"regeneration_desc": "Co kilka sekund odnawiasz zdrowie",
|
||||
|
||||
"replicator": "Replikator",
|
||||
"replicator_desc": "Kliknij [css_useSkill], aby stworzyć swoją replikę, która zadaje obrażenia po trafieniu",
|
||||
|
||||
"retreat": "Odwrót",
|
||||
"retreat_desc": "Kliknij [css_useSkill], aby powrócić na resp",
|
||||
|
||||
"returntosender": "Zwrot do Nadawcy",
|
||||
"returntosender_desc": "Pierwsze trafienie wroga powoduje, że wraca on na swój resp",
|
||||
|
||||
"richboy": "Bogacz",
|
||||
"richboy_desc": "Na początku rundy otrzymujesz losową kwotę gotówki",
|
||||
|
||||
"robinhood": "Robin Hood",
|
||||
"robinhood_desc": "Zadanie obrażeń przeciwnikowi powoduje kradzież jego pieniędzy",
|
||||
|
||||
"rubber": "Gumowe Kule",
|
||||
"rubber_desc": "Twoje pociski znacznie spowalniają graczy",
|
||||
|
||||
"saper": "Saper",
|
||||
"saper_desc": "Możesz szybciej podłożyć bombę i ją rozbroić",
|
||||
|
||||
"secondlife": "Druga Szansa",
|
||||
"secondlife_desc": "Po śmierci odradzasz się z taką samą ilością zdrowia",
|
||||
|
||||
"shade": "Cień",
|
||||
"shade_desc": "Teleportujesz się za plecy trafionego wroga",
|
||||
"shade_nospace": "Brak miejsca",
|
||||
|
||||
"shortbomb": "Krótka Bomba",
|
||||
"shortbomb_desc": "Bomba wybucha znacznie szybciej",
|
||||
|
||||
"silent": "Cichociemny",
|
||||
"silent_desc": "Twoje kroki i skoki są niesłyszalne dla INNYCH graczy",
|
||||
|
||||
"sniperelite": "SzeliS",
|
||||
"sniperelite_desc": "Kliknij [css_useSkill], aby zamienić aktualną broń na AWP",
|
||||
|
||||
"soldier": "Żołnierz {0}%",
|
||||
"soldier_desc": "Masz losowy mnożnik obrażeń",
|
||||
"soldier_desc2": "A AAAAAAAAAAAAAAAAAAAAAA",
|
||||
|
||||
"soundmaker": "Dźwiękowiec",
|
||||
"soundmaker_desc": "Kliknij [css_useSkill], aby wywołać dzwięk u każdego przeciwnika",
|
||||
|
||||
"spectator": "Obserwator",
|
||||
"spectator_desc": "Kliknij [css_useSkill], aby obserwować losowego przeciwnika",
|
||||
|
||||
"swapposition": "Zamiana Miejsc",
|
||||
"swapposition_desc": "Kliknij [css_useSkill], aby zamienić się miejscami z losowym przeciwnikiem",
|
||||
|
||||
"teleporter": "Teleporter",
|
||||
"teleporter_desc": "Zamieniasz się miejscami z trafionym przeciwnikiem",
|
||||
|
||||
"thief": "Złodziej",
|
||||
"thief_desc": "Możesz ukraść supermoc wybranemu graczowi",
|
||||
"thief_enemy_info": "Twoja supermoc została skradziona.",
|
||||
"thief_player_info": "Moc gracza '{0}' została skradziona.",
|
||||
"thief_select_info": "Ukradnij moc gracza:",
|
||||
"thief_incorrect_skill": "Tej umiejętności nie można wybrać!",
|
||||
|
||||
"thirdeye": "Trzecie Oko",
|
||||
"thirdeye_desc": "Kliknij [css_useSkill], aby aktywować trzecią osobę",
|
||||
|
||||
"thorns": "Ciernie",
|
||||
"thorns_desc": "Twój przeciwnik otrzymuje część obrażeń, które zadał ci",
|
||||
|
||||
"toxicsmoke": "Toksyczny Dym",
|
||||
"toxicsmoke_desc": "Twoje granaty dymny zadają obrażenia",
|
||||
|
||||
"wallhack": "Wallhack",
|
||||
"wallhack_desc": "Widzisz wrogów przez ściany",
|
||||
|
||||
"watchmaker": "Zegarmistrz",
|
||||
"watchmaker_desc": "Każdy rzut granatem zmienia czas rundy",
|
||||
"watchmaker_ct": "Czas rundy został skrócony o {0} sekund.",
|
||||
"watchmaker_tt": "Czas rundy został wydłużony o {0} sekund",
|
||||
|
||||
"weaponsswap": "Zamiana Broni",
|
||||
"weaponsswap_desc": "Kliknij [css_useSkill], aby zamienić się bronią z losowym przeciwnikiem",
|
||||
"weaponsswap_hud_info2": "Nie posiadasz broni na zamiane",
|
||||
|
||||
"zeus": "Zeus",
|
||||
"zeus_desc": "Zeus x27 natychmiastowo się odnawia",
|
||||
|
||||
"your_skill": "",
|
||||
"enemy_skill": "Supermoc przeciwnika",
|
||||
"observer_skill": "Moc gracza",
|
||||
"welcome_message": "Witaj {PLAYER} na serwerze {SERVER_NAME}!\nAktualna wersja jRandomSkills: {VERSION} ({SKILLS_COUNT} supermocy).\n\nPierwotnie plugin stworzona przez:\n{AUTHOR1}\nZmodyfikowany i ulepszony przez:\n{AUTHOR2}\nOficjalny discord: https://discord.gg/9H8EZYBpPF",
|
||||
"drawing_skill": "",
|
||||
"disabled_weapon": "Nie możesz używać tej broni",
|
||||
|
||||
"hud_info": "Poczekaj jeszcze {0} sekund",
|
||||
"hud_info_no_enemy": "Nie znaleziono przeciwnika",
|
||||
"active_hud_info": "Działa jeszcze przez {0} milisekund",
|
||||
|
||||
"skills_menu": "Lista Super Mocy",
|
||||
"no_player": "Nie znaleziono pasującego gracza.",
|
||||
"duplicate_player": "Znaleziono więcej niż jednego gracza o tej samej nazwie.",
|
||||
"selectplayerskill_command": "Wpisz /t",
|
||||
"selectplayerskill_incorrect_enemy_index": "Nie znaleziono graczy do wyboru.",
|
||||
|
||||
"skill_not_found_setskill": "Nie znaleziono takiej CHATCOLORS.REDsupermocy",
|
||||
"player_not_found_setskill": "Nie znaleziono takiego CHATCOLORS.REDgracza",
|
||||
"correct_form_setskill": "Poprawne użycie: CHATCOLORS.RED!setskill <nick> <supermoc>",
|
||||
"correct_form_setscore": "Poprawne użycie: CHATCOLORS.RED!setscore <CT> <TT>",
|
||||
"done_setskill": "Ustawiono Supermoc",
|
||||
"error_setskill": "Nie udało się ustawić CHATCOLORS.REDsupermocy",
|
||||
"for_setskill": "dla",
|
||||
|
||||
"invalid_map": "Nazwa mapy została wprowadzona nieprawidłowo!",
|
||||
"loading_map": "Ładowanie nowej mapy",
|
||||
|
||||
"pause": "Mecz został wstrzymany.",
|
||||
"unpause": "Mecz został wznowiony.",
|
||||
"healed": "Zostałeś uleczony.",
|
||||
"game_start": "Gra rozpoczęta!",
|
||||
"reload": "Tłumaczenia i konfigi zostały ponownie załadowane.",
|
||||
|
||||
"vote_started": "Głosowanie rozpoczęte: '{0}'",
|
||||
"vote_timeout": "Głosowanie '{0}' przekroczyło limit czasu!",
|
||||
"vote_wait": "Musisz poczekać, zanim rozpoczniesz kolejne głosowanie!",
|
||||
"vote_same_wait": "Musisz poczekać, zanim ponownie rozpoczniesz to samo głosowanie!",
|
||||
"vote_not_enough_players": "Za mało graczy, aby rozpocząć głosowanie!",
|
||||
"vote_alredy_voted": "Już zagłosowałeś!",
|
||||
"vote_vote": "Głosowanie",
|
||||
|
||||
"bombsite_a": "Strefa detonacji A",
|
||||
"bombsite_b": "Strefa detonacji B",
|
||||
|
||||
"teammate_skills": "Supermoce twoich sojuszników",
|
||||
"summary_start": "======PODSUMOWANIE=Z=OSTATNIEJ=RUNDY======",
|
||||
"summary_end": "============================================",
|
||||
|
||||
"menu_controlls_scroll": "W/S - Scroll",
|
||||
"menu_controlls_padding": " | ",
|
||||
"menu_controlls_select": "E - Select"
|
||||
}
|
||||
|
|
@ -345,7 +345,8 @@
|
|||
"secondlife_desc": "死亡后你会以相同生命值复活",
|
||||
|
||||
"shade": "阴影",
|
||||
"shade_desc": "你会传送到被击中敌人的背后",
|
||||
"shade_desc": "你存在随机几率将被击中的敌人传送至其身后",
|
||||
"shade_desc2": "你传送至击中敌人身后的概率为:{0}%",
|
||||
"shade_nospace": "无可用空间",
|
||||
|
||||
"shortbomb": "短引信",
|
||||
|
|
|
|||
15
readme.md
15
readme.md
|
|
@ -312,8 +312,12 @@ This plugin uses content from the following projects:
|
|||
- #### Skill improvements:
|
||||
- ##### Long Knife:
|
||||
- ###### A secondary knife attack also deals damage.
|
||||
- ###### Fixed a mistake where the player's skill was shown as `None` after death.
|
||||
- ##### Wallhack:
|
||||
- ###### Glows are created just once, instead of being created again for each player.
|
||||
- ###### Fixed a mistake where the player's skill was shown as `None` after death.
|
||||
- ##### Jackal:
|
||||
- ###### Fixed a mistake where the player's skill was shown as `None` after death.
|
||||
- ##### Position Swap:
|
||||
- ###### Added a configurable cooldown at the start of the round.
|
||||
- ##### Spectator:
|
||||
|
|
@ -338,12 +342,23 @@ This plugin uses content from the following projects:
|
|||
- ##### Chicken:
|
||||
- ###### The method used to attach the chicken has changed.
|
||||
- ###### Player with skill can see a model of your chicken.
|
||||
- ###### Fixed hitboxes after returning to normal model.
|
||||
- ###### Fixed a bug that added extra health after deactivating skill.
|
||||
- ##### C4 Camouflage:
|
||||
- ###### Fixed an issue with weapons not being visible after death.
|
||||
- ##### Blade Master:
|
||||
- ###### Movement speed with a knife has been reduced by 10% (configurable).
|
||||
- ##### AntyFlash:
|
||||
- ###### Added the option in config to change the flash duration of your flashes.
|
||||
- ##### Jester:
|
||||
- ###### Fixed an issue where you could take damage from other skills or bombs.
|
||||
- ###### Fixed a bug where the player was always purple.
|
||||
- ##### Shade:
|
||||
- ###### Added an option to set the chance of teleportation after hitting an enemy in the config.
|
||||
- ##### Impostor:
|
||||
- ###### Setting the player model after deactivating the skill.
|
||||
- ###### The default model for terrorists has been changed.
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue