This commit is contained in:
Juzlus 2025-09-25 04:06:00 +02:00
parent 555fc45d08
commit d68896f181
22 changed files with 338 additions and 106 deletions

View file

@ -40,6 +40,7 @@ namespace src.command
{ SplitCommands(config.NormalCommands.UseSkillCommand.Alias), ("Use/Type skill", Command_UseTypeSkill) },
{ SplitCommands(config.NormalCommands.ConsoleCommand.Alias), ("Console command", Command_CustomCommand) },
{ SplitCommands(config.NormalCommands.HealCommand.Alias), ("Heal", Command_Heal) },
{ SplitCommands(config.NormalCommands.HudCommand.Alias), ("Enable/Disable HUD", Command_HUD) },
{ SplitCommands(config.NormalCommands.SetStaticSkillCommand.Alias), ("Set static skill", Command_SetStaticSkill) },
{ SplitCommands(config.NormalCommands.ChangeLanguageCommand.Alias), ("Change language", Command_ChangeLanguage) },
{ SplitCommands(config.NormalCommands.ReloadCommand.Alias), ("Reaload configs", Command_Reload) },
@ -324,6 +325,21 @@ namespace src.command
player.PrintToChat($" {ChatColors.Green}{player.GetTranslation("healed")}");
}
[CommandHelper(minArgs: 0, whoCanExecute: CommandUsage.CLIENT_ONLY)]
private static void Command_HUD(CCSPlayerController? player, CommandInfo command)
{
Debug.WriteToDebug($"Player {player?.PlayerPawn} used the css_hud {command.ArgString} command.");
if (player == null || !player.IsValid || player.PlayerPawn.Value == null || !player.PlayerPawn.Value.IsValid) return;
if (!AdminManager.PlayerHasPermissions(player, config.NormalCommands.HudCommand.Permissions)) return;
var playerInfo = Instance.SkillPlayer.FirstOrDefault(p => p.SteamID == player.SteamID);
if (playerInfo == null) return;
playerInfo.DisplayHUD = !playerInfo.DisplayHUD;
SkillUtils.CloseMenu(player);
player.PrintToChat($" {(playerInfo.DisplayHUD ? ChatColors.Green : ChatColors.Red)}{player.GetTranslation(playerInfo.DisplayHUD ? "hud_on" : "hud_off")}");
}
[CommandHelper(minArgs: 2, whoCanExecute: CommandUsage.CLIENT_AND_SERVER)]
private static void Command_SetScore(CCSPlayerController? player, CommandInfo command)
{
@ -485,13 +501,23 @@ namespace src.command
Localization.Load();
Load();
foreach (var skill in SkillData.Skills)
skill.Color = SkillsInfo.GetValue<string>(skill.Skill, "color");
SkillData.Skills.Clear();
foreach (var skill in Enum.GetValues(typeof(Skills)))
if (SkillsInfo.GetValue<bool>(skill, "active"))
Instance.SkillAction(skill.ToString()!, "LoadSkill");
if (player != null && player.IsValid)
player.PrintToChat($" {ChatColors.Green}{player.GetTranslation("reload")}");
else
Server.PrintToConsole($" {ChatColors.Green}{Localization.GetTranslation("reload")}");
foreach (var target in Instance.SkillPlayer)
{
if (SkillsInfo.GetValue<bool>(target.Skill, "active") == false)
target.Skill = Event.noneSkill.Skill;
if (SkillsInfo.GetValue<bool>(target.SpecialSkill, "active") == false)
target.SpecialSkill = Event.noneSkill.Skill;
}
}
}
}

View file

@ -25,7 +25,7 @@ namespace src
public override string ModuleName => "[CS2] [ jRandomSkills ]";
public override string ModuleAuthor => "D3X, Juzlus";
public override string ModuleDescription => "Plugin adds random skills every round for CS2 by D3X. Modified by Juzlus.";
public override string ModuleVersion => "1.1.7";
public override string ModuleVersion => "1.1.8";
public override void Load(bool hotReload)
{
@ -104,6 +104,7 @@ namespace src
public bool IsDrawing { get; set; }
public DateTime SkillDescriptionHudExpired { get; set; }
public string? PrintHTML { get; set; }
public bool DisplayHUD { get; set; }
}
public class jSkill_SkillInfo(Skills skill, string color, bool display)

View file

@ -438,6 +438,8 @@
"healed": "You have been healed.",
"game_start": "Game started!",
"reload": "Languages and configs have been reloaded.",
"hud_on": "HUD has been enabled.",
"hud_off": "HUD has been disabled.",
"vote_started": "Vote started: '{0}'",
"vote_timeout": "Vote '{0}' timed out!",

View file

@ -438,6 +438,8 @@
"healed": "Vous avez été soigné.",
"game_start": "La partie a commencé !",
"reload": "Les langues et configurations ont été rechargées.",
"hud_on": "Le HUD a été activé.",
"hud_off": "Le HUD a été désactivé.",
"vote_started": "Vote lancé : « {0} »",
"vote_timeout": "Le vote « {0} » a expiré !",

View file

@ -438,6 +438,8 @@
"healed": "Zostałeś uleczony.",
"game_start": "Gra rozpoczęta!",
"reload": "Tłumaczenia i konfigi zostały ponownie załadowane.",
"hud_on": "HUD został włączony.",
"hud_off": "HUD został wyłączony.",
"vote_started": "Głosowanie rozpoczęte: '{0}'",
"vote_timeout": "Głosowanie '{0}' przekroczyło limit czasu!",

View file

@ -438,6 +438,8 @@
"healed": "Você foi curado.",
"game_start": "Jogo iniciado!",
"reload": "Os idiomas e as configurações foram recarregados.",
"hud_on": "O HUD foi ativado.",
"hud_off": "O HUD foi desativado.",
"vote_started": "Votação iniciada: '{0}'",
"vote_timeout": "Votação '{0}' expirou!",

View file

@ -438,6 +438,8 @@
"healed": "你已被治疗。",
"game_start": "游戏开始!",
"reload": "语言和配置已重新加载。",
"hud_on": "HUD已启用。",
"hud_off": "HUD已禁用。",
"vote_started": "投票开始:'{0}'",
"vote_timeout": "投票'{0}'超时!",

View file

@ -283,6 +283,8 @@ namespace src.player
SpecialSkill = Skills.None,
IsDrawing = false,
SkillChance = 1,
PrintHTML = null,
DisplayHUD = true,
});
string welcomeMsg = player.GetTranslation("welcome_message", "welcome");
@ -385,6 +387,24 @@ namespace src.player
}
});
}
if (Config.LoadedConfig.DisableSkillsOnRoundEnd)
{
isTransmitRegistered = false;
Instance.AddTimer(1f, () =>
{
DisableAll();
foreach (var player in Utilities.GetPlayers().Where(p => p.IsValid && !p.IsBot && !p.IsHLTV && p.Team is CsTeam.CounterTerrorist or CsTeam.Terrorist))
{
var skillPlayer = Instance.SkillPlayer.FirstOrDefault(p => p.SteamID == player.SteamID);
if (skillPlayer == null) continue;
skillPlayer.Skill = noneSkill.Skill;
skillPlayer.SpecialSkill = noneSkill.Skill;
skillPlayer.PrintHTML = null;
}
});
Instance.RemoveListener<CheckTransmit>(CheckTransmit);
}
return HookResult.Continue;
}
}
@ -559,6 +579,7 @@ namespace src.player
if (randomSkill.Display)
SkillUtils.PrintToChat(player, $"{ChatColors.DarkRed}{player.GetSkillName(randomSkill.Skill)}{ChatColors.Lime}: {player.GetSkillDescription(randomSkill.Skill)}", false);
Instance?.SkillAction(skillPlayer.Skill.ToString(), "DisableSkill", [player]);
skillPlayer.Skill = randomSkill.Skill;
skillPlayer.SpecialSkill = Skills.None;

View file

@ -1,5 +1,6 @@
using CounterStrikeSharp.API;
using CounterStrikeSharp.API.Core;
using CounterStrikeSharp.API.Modules.Admin;
using CounterStrikeSharp.API.Modules.Utils;
using src.utils;
using static CounterStrikeSharp.API.Core.Listeners;
@ -48,7 +49,7 @@ namespace src.player
{
if (player == null) return;
var skillPlayer = Instance.SkillPlayer.FirstOrDefault(p => p.SteamID == player.SteamID);
if (skillPlayer == null) return;
if (skillPlayer == null || !skillPlayer.DisplayHUD) return;
string infoLine = "";
string skillLine = "";
@ -86,7 +87,7 @@ namespace src.player
}
} else if (player?.IsValid == true)
{
if (player.Team is CsTeam.Spectator or CsTeam.None && Config.LoadedConfig.DisableSpectateHUD)
if ((player.Team is CsTeam.Spectator or CsTeam.None && Config.LoadedConfig.DisableSpectateHUD) || AdminManager.PlayerHasPermissions(player, Config.LoadedConfig.DisableHUDOnDeathPermission))
return;
var pawn = player.Pawn.Value;

View file

@ -112,7 +112,7 @@ namespace src.player.skills
{
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);

View file

@ -93,7 +93,7 @@ namespace src.player.skills
private static void CreateReplica(CCSPlayerController player)
{
var playerPawn = player.PlayerPawn.Value;
var replica = Utilities.CreateEntityByName<CDynamicProp>("prop_dynamic");
var replica = Utilities.CreateEntityByName<CDynamicProp>("prop_dynamic_override");
if (replica == null || playerPawn == null || !playerPawn.IsValid || playerPawn.AbsOrigin == null || playerPawn.AbsRotation == null)
return;
@ -105,12 +105,12 @@ namespace src.player.skills
replica.Flags = playerPawn.Flags;
replica.Flags |= (uint)Flags_t.FL_DUCKING;
replica.Collision.SolidType = SolidType_t.SOLID_VPHYSICS;
replica.CBodyComponent!.SceneNode!.Owner!.Entity!.Flags = (uint)(replica.CBodyComponent!.SceneNode!.Owner!.Entity!.Flags & ~(1 << 2));
replica.SetModel(playerPawn!.CBodyComponent!.SceneNode!.GetSkeletonInstance().ModelState.ModelName);
replica.Entity!.Name = replica.Globalname = $"Replica_{Server.TickCount}_{(player.Team == CsTeam.CounterTerrorist ? "CT" : "TT")}";
replica.Teleport(pos, playerPawn.AbsRotation, null);
replica.DispatchSpawn();
replica.AcceptInput("EnableCollision");
}
public static void OnTakeDamage(DynamicHook h)
@ -121,18 +121,21 @@ namespace src.player.skills
if (param == null || param.Entity == null || param2 == null || param2.Attacker == null || param2.Attacker.Value == null)
return;
CCSPlayerPawn attackerPawn = new(param2.Attacker.Value.Handle);
if (string.IsNullOrEmpty(param.Entity.Name)) return;
if (!param.Entity.Name.StartsWith("Replica_")) return;
var replica = param.As<CPhysicsPropMultiplayer>();
if (replica == null || !replica.IsValid) return;
replica.EmitSound("GlassBottle.BulletImpact", volume: 1f);
replica.AcceptInput("Kill");
CCSPlayerPawn attackerPawn = new(param2.Attacker.Value.Handle);
if (attackerPawn.DesignerName != "player")
return;
var attackerTeam = attackerPawn.TeamNum;
var replicaTeam = replica.Globalname.EndsWith("CT") ? 3 : 2;
SkillUtils.TakeHealth(attackerPawn, attackerTeam != replicaTeam ? 15 : 5);
replica.AcceptInput("Kill");
}
public class PlayerSkillInfo

View file

@ -81,6 +81,8 @@ namespace src.utils
public bool DisableSpectateHUD { get; set; }
public bool FlashingHtmlHudFix { get; set; }
public bool CS2TraceRayDebug { get; set; }
public string DisableHUDOnDeathPermission { get; set; }
public bool DisableSkillsOnRoundEnd { get; set; }
public LanguageSystem LanguageSystem { get; set; }
public HtmlHudCustomisation HtmlHudCustomisation { get; set; }
public NormalCommands NormalCommands { get; set; }
@ -100,6 +102,8 @@ namespace src.utils
FlashingHtmlHudFix = true;
CS2TraceRayDebug = false;
DisableSpectateHUD = false;
DisableHUDOnDeathPermission = "@jRandmosSkills/death";
DisableSkillsOnRoundEnd = false;
LanguageSystem = new LanguageSystem
{
@ -141,7 +145,8 @@ namespace src.utils
SkillsListCommand = new NormalCommand("supermoc, skille, listamocy, supermoce, skills, listaHabilidades, habilidades, 技能列表, 超能力列表", "@jRandmosSkills/admin"),
UseSkillCommand = new NormalCommand("t, useSkill, usarHabilidade, 技能使用, 使用技能", "@jRandmosSkills/admin"),
HealCommand = new NormalCommand("heal, ulecz, curar, tratar, 治疗, 治愈", "@jRandmosSkills/admin"),
ConsoleCommand = new NormalCommand("console, sv, 控制台, 服务器", "@jRandmosSkills/root"),
ConsoleCommand = new NormalCommand("console, sv, 控制台, 服务器", "@jRandmosSkills/owner"),
HudCommand = new NormalCommand("hud, hood", ""),
SetStaticSkillCommand = new NormalCommand("ustawstatycznyskill, ustaw_statyczny_skill, setstaticskill, set_static_skill", "@jRandmosSkills/admin"),
ChangeLanguageCommand = new NormalCommand("lang, language, changelang, change_lang, jezyk, język", ""),
ReloadCommand = new NormalCommand("reload, refresh", "@jRandmosSkills/admin"),
@ -154,7 +159,7 @@ namespace src.utils
SwapCommand = new VotingCommand(true, "swap, zmiana, trocar, 交换, 切换", "@jRandmosSkills/admin", 15, 90, 15, 20, 2),
ShuffleCommand = new VotingCommand(true, "shuffle, embaralhar, 随机排序, 洗牌", "@jRandmosSkills/admin", 15, 90, 15, 20, 2),
PauseCommand = new VotingCommand(true, "pause, unpause, pausar, despausar, 暂停, 恢复", "@jRandmosSkills/admin", 15, 60, 15, 2, 2),
SetScoreCommand = new VotingCommand(true, "setscore, wynik, definirPontuacao, configurarPontos, 设置分数, 调整分数", "@jRandmosSkills/root", 15, 90, 15, 90, 2),
SetScoreCommand = new VotingCommand(true, "setscore, wynik, definirPontuacao, configurarPontos, 设置分数, 调整分数", "@jRandmosSkills/owner", 15, 90, 15, 90, 2),
};
}
}
@ -205,6 +210,7 @@ namespace src.utils
public required NormalCommand UseSkillCommand { get; set; }
public required NormalCommand HealCommand { get; set; }
public required NormalCommand ConsoleCommand { get; set; }
public required NormalCommand HudCommand { get; set; }
public required NormalCommand SetStaticSkillCommand { get; set; }
public required NormalCommand ChangeLanguageCommand { get; set; }
public required NormalCommand ReloadCommand { get; set; }

View file

@ -201,7 +201,7 @@ namespace src.utils
if (player == null || !player.IsValid) return;
var playerInfo = jRandomSkills.Instance.SkillPlayer.FirstOrDefault(p => p.SteamID == player.SteamID);
if (playerInfo == null) return;
if (playerInfo == null || !playerInfo.DisplayHUD) return;
var skillData = SkillData.Skills.FirstOrDefault(s => s.Skill == playerInfo.Skill);
if (skillData == null) return;