v1.1.9 BETA
This commit is contained in:
parent
d68896f181
commit
4c333f5d15
31 changed files with 182 additions and 149 deletions
|
|
@ -14,10 +14,10 @@
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="CounterStrikeSharp.API" Version="1.0.340" />
|
<PackageReference Include="CounterStrikeSharp.API" Version="1.0.342" />
|
||||||
<PackageReference Include="CS2TraceRay" Version="1.0.8" />
|
<PackageReference Include="CS2TraceRay" Version="1.0.8" />
|
||||||
<PackageReference Include="MaxMind.Db" Version="4.2.0" />
|
<PackageReference Include="MaxMind.Db" Version="4.2.0" />
|
||||||
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
|
<PackageReference Include="Newtonsoft.Json" Version="13.0.4" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
|
|
||||||
|
|
@ -89,7 +89,7 @@ namespace src.command
|
||||||
[CommandHelper(minArgs: 0, whoCanExecute: CommandUsage.CLIENT_AND_SERVER)]
|
[CommandHelper(minArgs: 0, whoCanExecute: CommandUsage.CLIENT_AND_SERVER)]
|
||||||
private static void Command_SetSkill(CCSPlayerController? player, CommandInfo command)
|
private static void Command_SetSkill(CCSPlayerController? player, CommandInfo command)
|
||||||
{
|
{
|
||||||
Debug.WriteToDebug($"Player {player?.PlayerPawn} used the css_setskill {command.ArgString} command.");
|
Debug.WriteToDebug($"Player {player?.PlayerName} used the css_setskill {command.ArgString} command.");
|
||||||
if (!AdminManager.PlayerHasPermissions(player, config.NormalCommands.SetSkillCommand.Permissions)) return;
|
if (!AdminManager.PlayerHasPermissions(player, config.NormalCommands.SetSkillCommand.Permissions)) return;
|
||||||
var targetPlayer = Utilities.GetPlayers().FirstOrDefault(p => !p.IsBot
|
var targetPlayer = Utilities.GetPlayers().FirstOrDefault(p => !p.IsBot
|
||||||
&& (p.SteamID.ToString().Equals(command.GetArg(1), StringComparison.CurrentCultureIgnoreCase)
|
&& (p.SteamID.ToString().Equals(command.GetArg(1), StringComparison.CurrentCultureIgnoreCase)
|
||||||
|
|
@ -176,7 +176,7 @@ namespace src.command
|
||||||
[CommandHelper(minArgs: 0, whoCanExecute: CommandUsage.CLIENT_ONLY)]
|
[CommandHelper(minArgs: 0, whoCanExecute: CommandUsage.CLIENT_ONLY)]
|
||||||
private static void Command_SkillsListMenu(CCSPlayerController? player, CommandInfo command)
|
private static void Command_SkillsListMenu(CCSPlayerController? player, CommandInfo command)
|
||||||
{
|
{
|
||||||
Debug.WriteToDebug($"Player {player?.PlayerPawn} used the css_skills {command.ArgString} command.");
|
Debug.WriteToDebug($"Player {player?.PlayerName} used the css_skills {command.ArgString} command.");
|
||||||
if (player == null || !AdminManager.PlayerHasPermissions(player, config.NormalCommands.SkillsListCommand.Permissions)) return;
|
if (player == null || !AdminManager.PlayerHasPermissions(player, config.NormalCommands.SkillsListCommand.Permissions)) return;
|
||||||
Menu.DisplaySkillsList(player);
|
Menu.DisplaySkillsList(player);
|
||||||
}
|
}
|
||||||
|
|
@ -184,7 +184,7 @@ namespace src.command
|
||||||
[CommandHelper(minArgs: 1, whoCanExecute: CommandUsage.CLIENT_AND_SERVER)]
|
[CommandHelper(minArgs: 1, whoCanExecute: CommandUsage.CLIENT_AND_SERVER)]
|
||||||
private static void Command_ChangeMap(CCSPlayerController? player, CommandInfo command)
|
private static void Command_ChangeMap(CCSPlayerController? player, CommandInfo command)
|
||||||
{
|
{
|
||||||
Debug.WriteToDebug($"Player {player?.PlayerPawn} used the css_map {command.ArgString} command.");
|
Debug.WriteToDebug($"Player {player?.PlayerName} used the css_map {command.ArgString} command.");
|
||||||
if (player != null && player.IsValid && !AdminManager.PlayerHasPermissions(player, config.VotingCommands.ChangeMapCommand.Permissions))
|
if (player != null && player.IsValid && !AdminManager.PlayerHasPermissions(player, config.VotingCommands.ChangeMapCommand.Permissions))
|
||||||
{
|
{
|
||||||
if (!config.VotingCommands.ChangeMapCommand.EnableVoting) return;
|
if (!config.VotingCommands.ChangeMapCommand.EnableVoting) return;
|
||||||
|
|
@ -196,7 +196,7 @@ namespace src.command
|
||||||
|
|
||||||
private static void ChangeMap(CommandInfo command)
|
private static void ChangeMap(CommandInfo command)
|
||||||
{
|
{
|
||||||
string map = command.GetArg(1);
|
string map = command.GetArg(1).ToLower();
|
||||||
|
|
||||||
if (string.IsNullOrEmpty(map))
|
if (string.IsNullOrEmpty(map))
|
||||||
{
|
{
|
||||||
|
|
@ -217,7 +217,7 @@ namespace src.command
|
||||||
[CommandHelper(minArgs: 0, whoCanExecute: CommandUsage.CLIENT_AND_SERVER)]
|
[CommandHelper(minArgs: 0, whoCanExecute: CommandUsage.CLIENT_AND_SERVER)]
|
||||||
private static void Command_StartGame(CCSPlayerController? player, CommandInfo command)
|
private static void Command_StartGame(CCSPlayerController? player, CommandInfo command)
|
||||||
{
|
{
|
||||||
Debug.WriteToDebug($"Player {player?.PlayerPawn} used the css_start {command.ArgString} command.");
|
Debug.WriteToDebug($"Player {player?.PlayerName} used the css_start {command.ArgString} command.");
|
||||||
if (player != null && player.IsValid && !AdminManager.PlayerHasPermissions(player, config.VotingCommands.StartGameCommand.Permissions))
|
if (player != null && player.IsValid && !AdminManager.PlayerHasPermissions(player, config.VotingCommands.StartGameCommand.Permissions))
|
||||||
{
|
{
|
||||||
if (!config.VotingCommands.StartGameCommand.EnableVoting) return;
|
if (!config.VotingCommands.StartGameCommand.EnableVoting) return;
|
||||||
|
|
@ -251,7 +251,7 @@ namespace src.command
|
||||||
[CommandHelper(minArgs: 0, whoCanExecute: CommandUsage.CLIENT_AND_SERVER)]
|
[CommandHelper(minArgs: 0, whoCanExecute: CommandUsage.CLIENT_AND_SERVER)]
|
||||||
private static void Command_Swap(CCSPlayerController? player, CommandInfo command)
|
private static void Command_Swap(CCSPlayerController? player, CommandInfo command)
|
||||||
{
|
{
|
||||||
Debug.WriteToDebug($"Player {player?.PlayerPawn} used the css_swap {command.ArgString} command.");
|
Debug.WriteToDebug($"Player {player?.PlayerName} used the css_swap {command.ArgString} command.");
|
||||||
if (player != null && player.IsValid && !AdminManager.PlayerHasPermissions(player, config.VotingCommands.SwapCommand.Permissions))
|
if (player != null && player.IsValid && !AdminManager.PlayerHasPermissions(player, config.VotingCommands.SwapCommand.Permissions))
|
||||||
{
|
{
|
||||||
if (!config.VotingCommands.SwapCommand.EnableVoting) return;
|
if (!config.VotingCommands.SwapCommand.EnableVoting) return;
|
||||||
|
|
@ -272,7 +272,7 @@ namespace src.command
|
||||||
[CommandHelper(minArgs: 0, whoCanExecute: CommandUsage.CLIENT_AND_SERVER)]
|
[CommandHelper(minArgs: 0, whoCanExecute: CommandUsage.CLIENT_AND_SERVER)]
|
||||||
private static void Command_Shuffle(CCSPlayerController? player, CommandInfo command)
|
private static void Command_Shuffle(CCSPlayerController? player, CommandInfo command)
|
||||||
{
|
{
|
||||||
Debug.WriteToDebug($"Player {player?.PlayerPawn} used the css_shuffle {command.ArgString} command.");
|
Debug.WriteToDebug($"Player {player?.PlayerName} used the css_shuffle {command.ArgString} command.");
|
||||||
if (player != null && player.IsValid && !AdminManager.PlayerHasPermissions(player, config.VotingCommands.ShuffleCommand.Permissions))
|
if (player != null && player.IsValid && !AdminManager.PlayerHasPermissions(player, config.VotingCommands.ShuffleCommand.Permissions))
|
||||||
{
|
{
|
||||||
if (!config.VotingCommands.ShuffleCommand.EnableVoting) return;
|
if (!config.VotingCommands.ShuffleCommand.EnableVoting) return;
|
||||||
|
|
@ -298,7 +298,7 @@ namespace src.command
|
||||||
[CommandHelper(minArgs: 0, whoCanExecute: CommandUsage.CLIENT_AND_SERVER)]
|
[CommandHelper(minArgs: 0, whoCanExecute: CommandUsage.CLIENT_AND_SERVER)]
|
||||||
private static void Command_Pause(CCSPlayerController? player, CommandInfo command)
|
private static void Command_Pause(CCSPlayerController? player, CommandInfo command)
|
||||||
{
|
{
|
||||||
Debug.WriteToDebug($"Player {player?.PlayerPawn} used the css_pause {command.ArgString} command.");
|
Debug.WriteToDebug($"Player {player?.PlayerName} used the css_pause {command.ArgString} command.");
|
||||||
if (player != null && player.IsValid && !AdminManager.PlayerHasPermissions(player, config.VotingCommands.PauseCommand.Permissions))
|
if (player != null && player.IsValid && !AdminManager.PlayerHasPermissions(player, config.VotingCommands.PauseCommand.Permissions))
|
||||||
{
|
{
|
||||||
if (!config.VotingCommands.PauseCommand.EnableVoting) return;
|
if (!config.VotingCommands.PauseCommand.EnableVoting) return;
|
||||||
|
|
@ -318,7 +318,7 @@ namespace src.command
|
||||||
[CommandHelper(minArgs: 0, whoCanExecute: CommandUsage.CLIENT_AND_SERVER)]
|
[CommandHelper(minArgs: 0, whoCanExecute: CommandUsage.CLIENT_AND_SERVER)]
|
||||||
private static void Command_Heal(CCSPlayerController? player, CommandInfo command)
|
private static void Command_Heal(CCSPlayerController? player, CommandInfo command)
|
||||||
{
|
{
|
||||||
Debug.WriteToDebug($"Player {player?.PlayerPawn} used the css_heal {command.ArgString} command.");
|
Debug.WriteToDebug($"Player {player?.PlayerName} used the css_heal {command.ArgString} command.");
|
||||||
if (player == null || !player.IsValid || player.PlayerPawn.Value == null || !player.PlayerPawn.Value.IsValid || player.LifeState != (byte)LifeState_t.LIFE_ALIVE) return;
|
if (player == null || !player.IsValid || player.PlayerPawn.Value == null || !player.PlayerPawn.Value.IsValid || player.LifeState != (byte)LifeState_t.LIFE_ALIVE) return;
|
||||||
if (!AdminManager.PlayerHasPermissions(player, config.NormalCommands.HealCommand.Permissions)) return;
|
if (!AdminManager.PlayerHasPermissions(player, config.NormalCommands.HealCommand.Permissions)) return;
|
||||||
SkillUtils.AddHealth(player.PlayerPawn.Value, 100);
|
SkillUtils.AddHealth(player.PlayerPawn.Value, 100);
|
||||||
|
|
@ -328,7 +328,7 @@ namespace src.command
|
||||||
[CommandHelper(minArgs: 0, whoCanExecute: CommandUsage.CLIENT_ONLY)]
|
[CommandHelper(minArgs: 0, whoCanExecute: CommandUsage.CLIENT_ONLY)]
|
||||||
private static void Command_HUD(CCSPlayerController? player, CommandInfo command)
|
private static void Command_HUD(CCSPlayerController? player, CommandInfo command)
|
||||||
{
|
{
|
||||||
Debug.WriteToDebug($"Player {player?.PlayerPawn} used the css_hud {command.ArgString} command.");
|
Debug.WriteToDebug($"Player {player?.PlayerName} used the css_hud {command.ArgString} command.");
|
||||||
if (player == null || !player.IsValid || player.PlayerPawn.Value == null || !player.PlayerPawn.Value.IsValid) return;
|
if (player == null || !player.IsValid || player.PlayerPawn.Value == null || !player.PlayerPawn.Value.IsValid) return;
|
||||||
if (!AdminManager.PlayerHasPermissions(player, config.NormalCommands.HudCommand.Permissions)) return;
|
if (!AdminManager.PlayerHasPermissions(player, config.NormalCommands.HudCommand.Permissions)) return;
|
||||||
|
|
||||||
|
|
@ -343,7 +343,7 @@ namespace src.command
|
||||||
[CommandHelper(minArgs: 2, whoCanExecute: CommandUsage.CLIENT_AND_SERVER)]
|
[CommandHelper(minArgs: 2, whoCanExecute: CommandUsage.CLIENT_AND_SERVER)]
|
||||||
private static void Command_SetScore(CCSPlayerController? player, CommandInfo command)
|
private static void Command_SetScore(CCSPlayerController? player, CommandInfo command)
|
||||||
{
|
{
|
||||||
Debug.WriteToDebug($"Player {player?.PlayerPawn} used the css_setscore {command.ArgString} command.");
|
Debug.WriteToDebug($"Player {player?.PlayerName} used the css_setscore {command.ArgString} command.");
|
||||||
if (player != null && player.IsValid && !AdminManager.PlayerHasPermissions(player, config.VotingCommands.SetScoreCommand.Permissions))
|
if (player != null && player.IsValid && !AdminManager.PlayerHasPermissions(player, config.VotingCommands.SetScoreCommand.Permissions))
|
||||||
{
|
{
|
||||||
if (!config.VotingCommands.SetScoreCommand.EnableVoting) return;
|
if (!config.VotingCommands.SetScoreCommand.EnableVoting) return;
|
||||||
|
|
@ -368,7 +368,7 @@ namespace src.command
|
||||||
[CommandHelper(minArgs: 1, whoCanExecute: CommandUsage.CLIENT_AND_SERVER)]
|
[CommandHelper(minArgs: 1, whoCanExecute: CommandUsage.CLIENT_AND_SERVER)]
|
||||||
private static void Command_CustomCommand(CCSPlayerController? player, CommandInfo command)
|
private static void Command_CustomCommand(CCSPlayerController? player, CommandInfo command)
|
||||||
{
|
{
|
||||||
Debug.WriteToDebug($"Player {player?.PlayerPawn} used the css_console {command.ArgString} command.");
|
Debug.WriteToDebug($"Player {player?.PlayerName} used the css_console {command.ArgString} command.");
|
||||||
if (player == null || !AdminManager.PlayerHasPermissions(player, config.NormalCommands.ConsoleCommand.Permissions)) return;
|
if (player == null || !AdminManager.PlayerHasPermissions(player, config.NormalCommands.ConsoleCommand.Permissions)) return;
|
||||||
string param = command.ArgString;
|
string param = command.ArgString;
|
||||||
Server.ExecuteCommand(param);
|
Server.ExecuteCommand(param);
|
||||||
|
|
@ -377,7 +377,7 @@ namespace src.command
|
||||||
[CommandHelper(minArgs: 0, whoCanExecute: CommandUsage.CLIENT_AND_SERVER)]
|
[CommandHelper(minArgs: 0, whoCanExecute: CommandUsage.CLIENT_AND_SERVER)]
|
||||||
private static void Command_SetStaticSkill(CCSPlayerController? player, CommandInfo command)
|
private static void Command_SetStaticSkill(CCSPlayerController? player, CommandInfo command)
|
||||||
{
|
{
|
||||||
Debug.WriteToDebug($"Player {player?.PlayerPawn} used the css_setstaticskill {command.ArgString} command.");
|
Debug.WriteToDebug($"Player {player?.PlayerName} used the css_setstaticskill {command.ArgString} command.");
|
||||||
if (!AdminManager.PlayerHasPermissions(player, config.NormalCommands.SetStaticSkillCommand.Permissions)) return;
|
if (!AdminManager.PlayerHasPermissions(player, config.NormalCommands.SetStaticSkillCommand.Permissions)) return;
|
||||||
var targetPlayer = Utilities.GetPlayers().FirstOrDefault(p => !p.IsBot
|
var targetPlayer = Utilities.GetPlayers().FirstOrDefault(p => !p.IsBot
|
||||||
&& (p.SteamID.ToString().Equals(command.GetArg(1), StringComparison.CurrentCultureIgnoreCase)
|
&& (p.SteamID.ToString().Equals(command.GetArg(1), StringComparison.CurrentCultureIgnoreCase)
|
||||||
|
|
@ -472,7 +472,7 @@ namespace src.command
|
||||||
[CommandHelper(minArgs: 1, whoCanExecute: CommandUsage.CLIENT_ONLY)]
|
[CommandHelper(minArgs: 1, whoCanExecute: CommandUsage.CLIENT_ONLY)]
|
||||||
private static void Command_ChangeLanguage(CCSPlayerController? player, CommandInfo command)
|
private static void Command_ChangeLanguage(CCSPlayerController? player, CommandInfo command)
|
||||||
{
|
{
|
||||||
Debug.WriteToDebug($"Player {player?.PlayerPawn} used the css_lang {command.ArgString} command.");
|
Debug.WriteToDebug($"Player {player?.PlayerName} used the css_lang {command.ArgString} command.");
|
||||||
if (player == null || !player.IsValid) return;
|
if (player == null || !player.IsValid) return;
|
||||||
if (!AdminManager.PlayerHasPermissions(player, config.NormalCommands.ChangeLanguageCommand.Permissions)) return;
|
if (!AdminManager.PlayerHasPermissions(player, config.NormalCommands.ChangeLanguageCommand.Permissions)) return;
|
||||||
|
|
||||||
|
|
@ -491,7 +491,7 @@ namespace src.command
|
||||||
[CommandHelper(minArgs: 0, whoCanExecute: CommandUsage.CLIENT_AND_SERVER)]
|
[CommandHelper(minArgs: 0, whoCanExecute: CommandUsage.CLIENT_AND_SERVER)]
|
||||||
private static void Command_Reload(CCSPlayerController? player, CommandInfo command)
|
private static void Command_Reload(CCSPlayerController? player, CommandInfo command)
|
||||||
{
|
{
|
||||||
Debug.WriteToDebug($"Player {player?.PlayerPawn} used the css_lang {command.ArgString} command.");
|
Debug.WriteToDebug($"Player {player?.PlayerName} used the css_lang {command.ArgString} command.");
|
||||||
if (!AdminManager.PlayerHasPermissions(player, config.NormalCommands.ReloadCommand.Permissions)) return;
|
if (!AdminManager.PlayerHasPermissions(player, config.NormalCommands.ReloadCommand.Permissions)) return;
|
||||||
|
|
||||||
lock (setLock)
|
lock (setLock)
|
||||||
|
|
|
||||||
|
|
@ -2,12 +2,14 @@
|
||||||
using CounterStrikeSharp.API.Core;
|
using CounterStrikeSharp.API.Core;
|
||||||
using CounterStrikeSharp.API.Core.Commands;
|
using CounterStrikeSharp.API.Core.Commands;
|
||||||
using CounterStrikeSharp.API.Modules.Commands;
|
using CounterStrikeSharp.API.Modules.Commands;
|
||||||
|
using CounterStrikeSharp.API.Modules.Utils;
|
||||||
using src.command;
|
using src.command;
|
||||||
using src.player;
|
using src.player;
|
||||||
using src.utils;
|
using src.utils;
|
||||||
using System.Collections.Concurrent;
|
using System.Collections.Concurrent;
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
using WASDSharedAPI;
|
using WASDSharedAPI;
|
||||||
|
using static CounterStrikeSharp.API.Core.Listeners;
|
||||||
|
|
||||||
namespace src
|
namespace src
|
||||||
{
|
{
|
||||||
|
|
@ -25,7 +27,7 @@ namespace src
|
||||||
public override string ModuleName => "[CS2] [ jRandomSkills ]";
|
public override string ModuleName => "[CS2] [ jRandomSkills ]";
|
||||||
public override string ModuleAuthor => "D3X, Juzlus";
|
public override string ModuleAuthor => "D3X, Juzlus";
|
||||||
public override string ModuleDescription => "Plugin adds random skills every round for CS2 by D3X. Modified by Juzlus.";
|
public override string ModuleDescription => "Plugin adds random skills every round for CS2 by D3X. Modified by Juzlus.";
|
||||||
public override string ModuleVersion => "1.1.8";
|
public override string ModuleVersion => "1.1.9 BETA";
|
||||||
|
|
||||||
public override void Load(bool hotReload)
|
public override void Load(bool hotReload)
|
||||||
{
|
{
|
||||||
|
|
@ -40,6 +42,8 @@ namespace src
|
||||||
Command.Load();
|
Command.Load();
|
||||||
WASDMenuAPI.WASDMenuAPI.LoadPlugin(Instance, hotReload);
|
WASDMenuAPI.WASDMenuAPI.LoadPlugin(Instance, hotReload);
|
||||||
LoadAllSkills();
|
LoadAllSkills();
|
||||||
|
|
||||||
|
Instance.RegisterListener<OnServerPrecacheResources>((ResourceManifest manifest) => manifest.AddResource("models/actors/ghost_speaker.vmdl"));
|
||||||
}
|
}
|
||||||
|
|
||||||
internal void LoadAllSkills()
|
internal void LoadAllSkills()
|
||||||
|
|
@ -105,6 +109,7 @@ namespace src
|
||||||
public DateTime SkillDescriptionHudExpired { get; set; }
|
public DateTime SkillDescriptionHudExpired { get; set; }
|
||||||
public string? PrintHTML { get; set; }
|
public string? PrintHTML { get; set; }
|
||||||
public bool DisplayHUD { get; set; }
|
public bool DisplayHUD { get; set; }
|
||||||
|
public bool SkillUsed = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public class jSkill_SkillInfo(Skills skill, string color, bool display)
|
public class jSkill_SkillInfo(Skills skill, string color, bool display)
|
||||||
|
|
|
||||||
|
|
@ -285,6 +285,7 @@ namespace src.player
|
||||||
SkillChance = 1,
|
SkillChance = 1,
|
||||||
PrintHTML = null,
|
PrintHTML = null,
|
||||||
DisplayHUD = true,
|
DisplayHUD = true,
|
||||||
|
SkillUsed = false,
|
||||||
});
|
});
|
||||||
|
|
||||||
string welcomeMsg = player.GetTranslation("welcome_message", "welcome");
|
string welcomeMsg = player.GetTranslation("welcome_message", "welcome");
|
||||||
|
|
@ -342,16 +343,38 @@ namespace src.player
|
||||||
{
|
{
|
||||||
lock (setLock)
|
lock (setLock)
|
||||||
{
|
{
|
||||||
foreach (var player in Utilities.GetPlayers().Where(p => !p.IsBot))
|
foreach (var player in Utilities.GetPlayers().Where(p => p != null && !p.IsBot && p.IsValid))
|
||||||
{
|
{
|
||||||
var playerInfo = Instance.SkillPlayer.FirstOrDefault(p => p.SteamID == player.SteamID);
|
var playerInfo = Instance.SkillPlayer.FirstOrDefault(p => p.SteamID == player.SteamID);
|
||||||
if (playerInfo == null) return;
|
if (playerInfo == null) continue;
|
||||||
|
|
||||||
Instance.SkillAction(playerInfo.Skill.ToString(), "DisableSkill", [player]);
|
Instance.SkillAction(playerInfo.Skill.ToString(), "DisableSkill", [player]);
|
||||||
Instance.SkillAction(playerInfo.Skill.ToString(), "NewRound");
|
Instance.SkillAction(playerInfo.Skill.ToString(), "NewRound");
|
||||||
|
|
||||||
|
playerInfo.Skill = noneSkill.Skill;
|
||||||
|
playerInfo.SpecialSkill = noneSkill.Skill;
|
||||||
|
playerInfo.PrintHTML = null;
|
||||||
|
playerInfo.SkillChance = 1;
|
||||||
|
playerInfo.SkillUsed = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void OnMapChange()
|
||||||
|
{
|
||||||
|
lock (setLock)
|
||||||
|
{
|
||||||
|
isTransmitRegistered = false;
|
||||||
|
Instance.AddTimer(.1f, () => DisableAll());
|
||||||
|
Instance.RemoveListener<CheckTransmit>(CheckTransmit);
|
||||||
|
playersSkills.Clear();
|
||||||
|
staticSkills.Clear();
|
||||||
|
ctSkill = noneSkill;
|
||||||
|
tSkill = noneSkill;
|
||||||
|
allSkill = noneSkill;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private static HookResult RoundEnd(EventRoundEnd @event, GameEventInfo info)
|
private static HookResult RoundEnd(EventRoundEnd @event, GameEventInfo info)
|
||||||
{
|
{
|
||||||
lock (setLock)
|
lock (setLock)
|
||||||
|
|
@ -391,18 +414,7 @@ namespace src.player
|
||||||
if (Config.LoadedConfig.DisableSkillsOnRoundEnd)
|
if (Config.LoadedConfig.DisableSkillsOnRoundEnd)
|
||||||
{
|
{
|
||||||
isTransmitRegistered = false;
|
isTransmitRegistered = false;
|
||||||
Instance.AddTimer(1f, () =>
|
Instance.AddTimer(1f, () => DisableAll());
|
||||||
{
|
|
||||||
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);
|
Instance.RemoveListener<CheckTransmit>(CheckTransmit);
|
||||||
}
|
}
|
||||||
return HookResult.Continue;
|
return HookResult.Continue;
|
||||||
|
|
@ -426,7 +438,7 @@ namespace src.player
|
||||||
Instance.SkillAction(playerInfo.Skill.ToString(), "DisableSkill", [victim]);
|
Instance.SkillAction(playerInfo.Skill.ToString(), "DisableSkill", [victim]);
|
||||||
|
|
||||||
if (victim == attacker) return HookResult.Continue;
|
if (victim == attacker) return HookResult.Continue;
|
||||||
if (Config.LoadedConfig.KillerSkillInfo)
|
if (Config.LoadedConfig.KillerSkillChatInfo)
|
||||||
{
|
{
|
||||||
var attackerInfo = Instance.SkillPlayer.FirstOrDefault(p => p.SteamID == attacker.SteamID);
|
var attackerInfo = Instance.SkillPlayer.FirstOrDefault(p => p.SteamID == attacker.SteamID);
|
||||||
if (attackerInfo != null)
|
if (attackerInfo != null)
|
||||||
|
|
@ -517,13 +529,13 @@ namespace src.player
|
||||||
var skillPlayer = Instance?.SkillPlayer.FirstOrDefault(p => p.SteamID == player.SteamID);
|
var skillPlayer = Instance?.SkillPlayer.FirstOrDefault(p => p.SteamID == player.SteamID);
|
||||||
if (skillPlayer == null) continue;
|
if (skillPlayer == null) continue;
|
||||||
|
|
||||||
|
skillPlayer.IsDrawing = false;
|
||||||
if (player.PlayerPawn.Value == null || !player.PlayerPawn.IsValid)
|
if (player.PlayerPawn.Value == null || !player.PlayerPawn.IsValid)
|
||||||
{
|
{
|
||||||
skillPlayer.Skill = Skills.None;
|
skillPlayer.Skill = Skills.None;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
skillPlayer.IsDrawing = false;
|
|
||||||
jSkill_SkillInfo randomSkill = noneSkill;
|
jSkill_SkillInfo randomSkill = noneSkill;
|
||||||
|
|
||||||
if (Instance?.GameRules != null && Instance?.GameRules.WarmupPeriod == false)
|
if (Instance?.GameRules != null && Instance?.GameRules.WarmupPeriod == false)
|
||||||
|
|
@ -595,7 +607,7 @@ namespace src.player
|
||||||
Debug.WriteToDebug($"Player {skillPlayer.PlayerName} has got the skill \"{player.GetSkillName(randomSkill.Skill)}\".");
|
Debug.WriteToDebug($"Player {skillPlayer.PlayerName} has got the skill \"{player.GetSkillName(randomSkill.Skill)}\".");
|
||||||
skillPlayer.SkillDescriptionHudExpired = DateTime.Now.AddSeconds(Config.LoadedConfig.SkillDescriptionDuration);
|
skillPlayer.SkillDescriptionHudExpired = DateTime.Now.AddSeconds(Config.LoadedConfig.SkillDescriptionDuration);
|
||||||
|
|
||||||
if (Config.LoadedConfig.TeamMateSkillInfo)
|
if (Config.LoadedConfig.TeamMateSkillChatInfo)
|
||||||
{
|
{
|
||||||
Instance?.AddTimer(.5f, () =>
|
Instance?.AddTimer(.5f, () =>
|
||||||
{
|
{
|
||||||
|
|
@ -692,7 +704,7 @@ namespace src.player
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (randomSkill.Display)
|
if (randomSkill.Display && Config.LoadedConfig.YourSkillChatInfo)
|
||||||
SkillUtils.PrintToChat(player, $"{ChatColors.DarkRed}{player.GetSkillName(randomSkill.Skill)}{ChatColors.Lime}: {player.GetSkillDescription(randomSkill.Skill)}", false);
|
SkillUtils.PrintToChat(player, $"{ChatColors.DarkRed}{player.GetSkillName(randomSkill.Skill)}{ChatColors.Lime}: {player.GetSkillDescription(randomSkill.Skill)}", false);
|
||||||
|
|
||||||
skillPlayer.Skill = randomSkill.Skill;
|
skillPlayer.Skill = randomSkill.Skill;
|
||||||
|
|
|
||||||
|
|
@ -26,7 +26,7 @@ namespace src.player
|
||||||
private static void OnMapStart(string mapName)
|
private static void OnMapStart(string mapName)
|
||||||
{
|
{
|
||||||
Instance.GameRules = null;
|
Instance.GameRules = null;
|
||||||
Event.staticSkills.Clear();
|
Event.OnMapChange();
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void InitializeGameRules()
|
private static void InitializeGameRules()
|
||||||
|
|
@ -41,7 +41,7 @@ namespace src.player
|
||||||
{
|
{
|
||||||
if (Instance?.GameRules == null || Instance?.GameRules?.Handle == IntPtr.Zero)
|
if (Instance?.GameRules == null || Instance?.GameRules?.Handle == IntPtr.Zero)
|
||||||
InitializeGameRules();
|
InitializeGameRules();
|
||||||
else if (Instance != null && Config.LoadedConfig.FlashingHtmlHudFix)
|
else if (Instance != null && Config.LoadedConfig.FlashingHtmlHudFix && !Instance.GameRules.WarmupPeriod)
|
||||||
Instance.GameRules.GameRestart = Instance.GameRules?.RestartRoundTime < Server.CurrentTime;
|
Instance.GameRules.GameRestart = Instance.GameRules?.RestartRoundTime < Server.CurrentTime;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -29,7 +29,7 @@ namespace src.player.skills
|
||||||
var playerInfo = Instance.SkillPlayer.FirstOrDefault(p => p.SteamID == player.SteamID);
|
var playerInfo = Instance.SkillPlayer.FirstOrDefault(p => p.SteamID == player.SteamID);
|
||||||
if (playerInfo?.Skill != skillName) return;
|
if (playerInfo?.Skill != skillName) return;
|
||||||
|
|
||||||
if (playerInfo.SkillChance == 1)
|
if (playerInfo.SkillUsed)
|
||||||
{
|
{
|
||||||
player.PrintToChat($" {ChatColors.Red}{player.GetTranslation("areareaper_used_info")}");
|
player.PrintToChat($" {ChatColors.Red}{player.GetTranslation("areareaper_used_info")}");
|
||||||
return;
|
return;
|
||||||
|
|
@ -45,7 +45,7 @@ namespace src.player.skills
|
||||||
if (bombTargets.Length == 2)
|
if (bombTargets.Length == 2)
|
||||||
{
|
{
|
||||||
bombTargets[site].AcceptInput("Disable");
|
bombTargets[site].AcceptInput("Disable");
|
||||||
playerInfo.SkillChance = 1;
|
playerInfo.SkillUsed = true;
|
||||||
player.PrintToChat($" {ChatColors.Green}{player.GetTranslation("areareaper_site_disabled", (site == 0 ? 'A' : 'B'))}");
|
player.PrintToChat($" {ChatColors.Green}{player.GetTranslation("areareaper_site_disabled", (site == 0 ? 'A' : 'B'))}");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|
@ -56,7 +56,7 @@ namespace src.player.skills
|
||||||
{
|
{
|
||||||
var playerInfo = Instance.SkillPlayer.FirstOrDefault(p => p.SteamID == player.SteamID);
|
var playerInfo = Instance.SkillPlayer.FirstOrDefault(p => p.SteamID == player.SteamID);
|
||||||
if (playerInfo == null) return;
|
if (playerInfo == null) return;
|
||||||
playerInfo.SkillChance = 0;
|
playerInfo.SkillUsed = false;
|
||||||
SkillUtils.CreateMenu(player, [(player.GetTranslation("bombsite_a"), "a")], (player.GetTranslation("bombsite_b"), "b"));
|
SkillUtils.CreateMenu(player, [(player.GetTranslation("bombsite_a"), "a")], (player.GetTranslation("bombsite_b"), "b"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -44,7 +44,7 @@ namespace src.player.skills
|
||||||
var playerInfo = Instance.SkillPlayer.FirstOrDefault(p => p.SteamID == player.SteamID);
|
var playerInfo = Instance.SkillPlayer.FirstOrDefault(p => p.SteamID == player.SteamID);
|
||||||
if (playerInfo?.Skill != skillName) return;
|
if (playerInfo?.Skill != skillName) return;
|
||||||
|
|
||||||
if (playerInfo.SkillChance == 1)
|
if (playerInfo.SkillUsed)
|
||||||
{
|
{
|
||||||
player.PrintToChat($" {ChatColors.Red}{player.GetTranslation("areareaper_used_info")}");
|
player.PrintToChat($" {ChatColors.Red}{player.GetTranslation("areareaper_used_info")}");
|
||||||
return;
|
return;
|
||||||
|
|
@ -60,7 +60,7 @@ namespace src.player.skills
|
||||||
}
|
}
|
||||||
|
|
||||||
ResetMoney(enemy);
|
ResetMoney(enemy);
|
||||||
playerInfo.SkillChance = 1;
|
playerInfo.SkillUsed = true;
|
||||||
player.PrintToChat($" {ChatColors.Green}" + player.GetTranslation("bankrupt_player_info", enemy.PlayerName));
|
player.PrintToChat($" {ChatColors.Green}" + player.GetTranslation("bankrupt_player_info", enemy.PlayerName));
|
||||||
enemy.PrintToChat($" {ChatColors.Red}" + player.GetTranslation("bankrupt_enemy_info"));
|
enemy.PrintToChat($" {ChatColors.Red}" + player.GetTranslation("bankrupt_enemy_info"));
|
||||||
}
|
}
|
||||||
|
|
@ -69,7 +69,7 @@ namespace src.player.skills
|
||||||
{
|
{
|
||||||
var playerInfo = Instance.SkillPlayer.FirstOrDefault(p => p.SteamID == player.SteamID);
|
var playerInfo = Instance.SkillPlayer.FirstOrDefault(p => p.SteamID == player.SteamID);
|
||||||
if (playerInfo == null) return;
|
if (playerInfo == null) return;
|
||||||
playerInfo.SkillChance = 0;
|
playerInfo.SkillUsed = false;
|
||||||
|
|
||||||
var enemies = Utilities.GetPlayers().Where(p => p.PawnIsAlive && p.Team != player.Team && p.IsValid && !p.IsBot && !p.IsHLTV && p.Team != CsTeam.Spectator && p.Team != CsTeam.None).ToArray();
|
var enemies = Utilities.GetPlayers().Where(p => p.PawnIsAlive && p.Team != player.Team && p.IsValid && !p.IsBot && !p.IsHLTV && p.Team != CsTeam.Spectator && p.Team != CsTeam.None).ToArray();
|
||||||
if (enemies.Length > 0)
|
if (enemies.Length > 0)
|
||||||
|
|
|
||||||
|
|
@ -63,7 +63,7 @@ namespace src.player.skills
|
||||||
var playerInfo = Instance.SkillPlayer.FirstOrDefault(p => p.SteamID == player.SteamID);
|
var playerInfo = Instance.SkillPlayer.FirstOrDefault(p => p.SteamID == player.SteamID);
|
||||||
if (playerInfo?.Skill != skillName) return;
|
if (playerInfo?.Skill != skillName) return;
|
||||||
|
|
||||||
if (playerInfo.SkillChance == 1)
|
if (playerInfo.SkillUsed)
|
||||||
{
|
{
|
||||||
player.PrintToChat($" {ChatColors.Red}{player.GetTranslation("areareaper_used_info")}");
|
player.PrintToChat($" {ChatColors.Red}{player.GetTranslation("areareaper_used_info")}");
|
||||||
return;
|
return;
|
||||||
|
|
@ -79,7 +79,7 @@ namespace src.player.skills
|
||||||
}
|
}
|
||||||
|
|
||||||
SetUpPostProcessing(enemy);
|
SetUpPostProcessing(enemy);
|
||||||
playerInfo.SkillChance = 1;
|
playerInfo.SkillUsed = true;
|
||||||
player.PrintToChat($" {ChatColors.Green}" + player.GetTranslation("darkness_player_info", enemy.PlayerName));
|
player.PrintToChat($" {ChatColors.Green}" + player.GetTranslation("darkness_player_info", enemy.PlayerName));
|
||||||
enemy.PrintToChat($" {ChatColors.Red}" + player.GetTranslation("darkness_enemy_info"));
|
enemy.PrintToChat($" {ChatColors.Red}" + player.GetTranslation("darkness_enemy_info"));
|
||||||
}
|
}
|
||||||
|
|
@ -88,7 +88,7 @@ namespace src.player.skills
|
||||||
{
|
{
|
||||||
var playerInfo = Instance.SkillPlayer.FirstOrDefault(p => p.SteamID == player.SteamID);
|
var playerInfo = Instance.SkillPlayer.FirstOrDefault(p => p.SteamID == player.SteamID);
|
||||||
if (playerInfo == null) return;
|
if (playerInfo == null) return;
|
||||||
playerInfo.SkillChance = 0;
|
playerInfo.SkillUsed = false;
|
||||||
|
|
||||||
var enemies = Utilities.GetPlayers().Where(p => p.PawnIsAlive && p.Team != player.Team && p.IsValid && !p.IsBot && !p.IsHLTV && p.Team != CsTeam.Spectator && p.Team != CsTeam.None).ToArray();
|
var enemies = Utilities.GetPlayers().Where(p => p.PawnIsAlive && p.Team != player.Team && p.IsValid && !p.IsBot && !p.IsHLTV && p.Team != CsTeam.Spectator && p.Team != CsTeam.None).ToArray();
|
||||||
if (enemies.Length > 0)
|
if (enemies.Length > 0)
|
||||||
|
|
|
||||||
|
|
@ -55,7 +55,7 @@ namespace src.player.skills
|
||||||
var playerInfo = Instance.SkillPlayer.FirstOrDefault(p => p.SteamID == player.SteamID);
|
var playerInfo = Instance.SkillPlayer.FirstOrDefault(p => p.SteamID == player.SteamID);
|
||||||
if (playerInfo?.Skill != skillName) return;
|
if (playerInfo?.Skill != skillName) return;
|
||||||
|
|
||||||
if (playerInfo.SkillChance == 1)
|
if (playerInfo.SkillUsed)
|
||||||
{
|
{
|
||||||
player.PrintToChat($" {ChatColors.Red}{player.GetTranslation("areareaper_used_info")}");
|
player.PrintToChat($" {ChatColors.Red}{player.GetTranslation("areareaper_used_info")}");
|
||||||
return;
|
return;
|
||||||
|
|
@ -71,7 +71,7 @@ namespace src.player.skills
|
||||||
}
|
}
|
||||||
|
|
||||||
deafPlayers.TryAdd(enemy, 0);
|
deafPlayers.TryAdd(enemy, 0);
|
||||||
playerInfo.SkillChance = 1;
|
playerInfo.SkillUsed = true;
|
||||||
player.PrintToChat($" {ChatColors.Green}" + player.GetTranslation("deaf_player_info", enemy.PlayerName));
|
player.PrintToChat($" {ChatColors.Green}" + player.GetTranslation("deaf_player_info", enemy.PlayerName));
|
||||||
enemy.PrintToChat($" {ChatColors.Red}" + player.GetTranslation("deaf_enemy_info"));
|
enemy.PrintToChat($" {ChatColors.Red}" + player.GetTranslation("deaf_enemy_info"));
|
||||||
}
|
}
|
||||||
|
|
@ -80,7 +80,7 @@ namespace src.player.skills
|
||||||
{
|
{
|
||||||
var playerInfo = Instance.SkillPlayer.FirstOrDefault(p => p.SteamID == player.SteamID);
|
var playerInfo = Instance.SkillPlayer.FirstOrDefault(p => p.SteamID == player.SteamID);
|
||||||
if (playerInfo == null) return;
|
if (playerInfo == null) return;
|
||||||
playerInfo.SkillChance = 0;
|
playerInfo.SkillUsed = false;
|
||||||
|
|
||||||
var enemies = Utilities.GetPlayers().Where(p => p.PawnIsAlive && p.Team != player.Team && p.IsValid && !p.IsBot && !p.IsHLTV && p.Team != CsTeam.Spectator && p.Team != CsTeam.None).ToArray();
|
var enemies = Utilities.GetPlayers().Where(p => p.PawnIsAlive && p.Team != player.Team && p.IsValid && !p.IsBot && !p.IsHLTV && p.Team != CsTeam.Spectator && p.Team != CsTeam.None).ToArray();
|
||||||
if (enemies.Length > 0)
|
if (enemies.Length > 0)
|
||||||
|
|
|
||||||
|
|
@ -29,11 +29,11 @@ namespace src.player.skills
|
||||||
foreach (var player in distancerPlayers.Keys)
|
foreach (var player in distancerPlayers.Keys)
|
||||||
{
|
{
|
||||||
var playerInfo = jRandomSkills.Instance.SkillPlayer.FirstOrDefault(s => s.SteamID == player?.SteamID);
|
var playerInfo = jRandomSkills.Instance.SkillPlayer.FirstOrDefault(s => s.SteamID == player?.SteamID);
|
||||||
if (playerInfo == null) return;
|
if (playerInfo == null) continue;
|
||||||
|
|
||||||
var playerPawn = player.PlayerPawn.Value;
|
var playerPawn = player.PlayerPawn.Value;
|
||||||
if (playerPawn == null || !playerPawn.IsValid) return;
|
if (playerPawn == null || !playerPawn.IsValid) continue;
|
||||||
if (playerPawn.LifeState != (byte)LifeState_t.LIFE_ALIVE) return;
|
if (playerPawn.LifeState != (byte)LifeState_t.LIFE_ALIVE) continue;
|
||||||
|
|
||||||
string closetEnemy = "Bot";
|
string closetEnemy = "Bot";
|
||||||
double closetDistance = double.MaxValue;
|
double closetDistance = double.MaxValue;
|
||||||
|
|
|
||||||
|
|
@ -106,9 +106,14 @@ namespace src.player.skills
|
||||||
if (pawn == null || !pawn.IsValid || pawn.AbsOrigin == null) return 0;
|
if (pawn == null || !pawn.IsValid || pawn.AbsOrigin == null) return 0;
|
||||||
Vector pos = new(pawn.AbsOrigin.X, pawn.AbsOrigin.Y, pawn.AbsOrigin.Z + SkillsInfo.GetValue<float>(skillName, "distance"));
|
Vector pos = new(pawn.AbsOrigin.X, pawn.AbsOrigin.Y, pawn.AbsOrigin.Z + SkillsInfo.GetValue<float>(skillName, "distance"));
|
||||||
|
|
||||||
|
Server.NextFrame(() =>
|
||||||
|
{
|
||||||
|
camera.SetModel("models/actors/ghost_speaker.vmdl");
|
||||||
camera.Render = Color.FromArgb(0, 255, 255, 255);
|
camera.Render = Color.FromArgb(0, 255, 255, 255);
|
||||||
camera.Teleport(pos, new QAngle(90, 0, 0));
|
camera.Teleport(pos, new QAngle(90, 0, 0));
|
||||||
camera.DispatchSpawn();
|
camera.DispatchSpawn();
|
||||||
|
});
|
||||||
|
|
||||||
cameras.AddOrUpdate(player.SteamID, (pawn.CameraServices!.ViewEntity.Raw, camera), (k, v) => (pawn.CameraServices!.ViewEntity.Raw, camera));
|
cameras.AddOrUpdate(player.SteamID, (pawn.CameraServices!.ViewEntity.Raw, camera), (k, v) => (pawn.CameraServices!.ViewEntity.Raw, camera));
|
||||||
return camera.EntityHandle.Raw;
|
return camera.EntityHandle.Raw;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -28,7 +28,7 @@ namespace src.player.skills
|
||||||
var playerInfo = Instance.SkillPlayer.FirstOrDefault(p => p.SteamID == player.SteamID);
|
var playerInfo = Instance.SkillPlayer.FirstOrDefault(p => p.SteamID == player.SteamID);
|
||||||
if (playerInfo?.Skill != skillName) return;
|
if (playerInfo?.Skill != skillName) return;
|
||||||
|
|
||||||
if (playerInfo.SkillChance == 1)
|
if (playerInfo.SkillUsed)
|
||||||
{
|
{
|
||||||
player.PrintToChat($" {ChatColors.Red}{player.GetTranslation("areareaper_used_info")}");
|
player.PrintToChat($" {ChatColors.Red}{player.GetTranslation("areareaper_used_info")}");
|
||||||
return;
|
return;
|
||||||
|
|
@ -48,7 +48,7 @@ namespace src.player.skills
|
||||||
playerInfo.Skill = skill.Skill;
|
playerInfo.Skill = skill.Skill;
|
||||||
if (skill.Skill != skillName)
|
if (skill.Skill != skillName)
|
||||||
playerInfo.SpecialSkill = skillName;
|
playerInfo.SpecialSkill = skillName;
|
||||||
playerInfo.SkillChance = 1;
|
playerInfo.SkillUsed = true;
|
||||||
|
|
||||||
if (SkillsInfo.GetValue<bool>(skill.Skill, "disableOnFreezeTime") && SkillUtils.IsFreezeTime())
|
if (SkillsInfo.GetValue<bool>(skill.Skill, "disableOnFreezeTime") && SkillUtils.IsFreezeTime())
|
||||||
Instance?.AddTimer(Math.Max((float)(Event.GetFreezeTimeEnd() - DateTime.Now).TotalSeconds, 0), () => {
|
Instance?.AddTimer(Math.Max((float)(Event.GetFreezeTimeEnd() - DateTime.Now).TotalSeconds, 0), () => {
|
||||||
|
|
@ -72,7 +72,7 @@ namespace src.player.skills
|
||||||
{
|
{
|
||||||
var playerInfo = Instance.SkillPlayer.FirstOrDefault(p => p.SteamID == player.SteamID);
|
var playerInfo = Instance.SkillPlayer.FirstOrDefault(p => p.SteamID == player.SteamID);
|
||||||
if (playerInfo == null) return;
|
if (playerInfo == null) return;
|
||||||
playerInfo.SkillChance = 0;
|
playerInfo.SkillUsed = false;
|
||||||
|
|
||||||
var skills = GetSkills(player);
|
var skills = GetSkills(player);
|
||||||
var firstSkill = skills[Instance.Random.Next(skills.Count)];
|
var firstSkill = skills[Instance.Random.Next(skills.Count)];
|
||||||
|
|
|
||||||
|
|
@ -57,7 +57,7 @@ namespace src.player.skills
|
||||||
var playerInfo = Instance.SkillPlayer.FirstOrDefault(p => p.SteamID == player.SteamID);
|
var playerInfo = Instance.SkillPlayer.FirstOrDefault(p => p.SteamID == player.SteamID);
|
||||||
if (playerInfo?.Skill != skillName) return;
|
if (playerInfo?.Skill != skillName) return;
|
||||||
|
|
||||||
if (playerInfo.SkillChance == 1)
|
if (playerInfo.SkillUsed)
|
||||||
{
|
{
|
||||||
player.PrintToChat($" {ChatColors.Red}{player.GetTranslation("areareaper_used_info")}");
|
player.PrintToChat($" {ChatColors.Red}{player.GetTranslation("areareaper_used_info")}");
|
||||||
return;
|
return;
|
||||||
|
|
@ -74,7 +74,7 @@ namespace src.player.skills
|
||||||
|
|
||||||
glitchedPlayers.TryAdd(enemy, 0);
|
glitchedPlayers.TryAdd(enemy, 0);
|
||||||
enemy.ReplicateConVar("sv_disable_radar", "1");
|
enemy.ReplicateConVar("sv_disable_radar", "1");
|
||||||
playerInfo.SkillChance = 1;
|
playerInfo.SkillUsed = true;
|
||||||
player.PrintToChat($" {ChatColors.Green}" + player.GetTranslation("glitch_player_info", enemy.PlayerName));
|
player.PrintToChat($" {ChatColors.Green}" + player.GetTranslation("glitch_player_info", enemy.PlayerName));
|
||||||
enemy.PrintToChat($" {ChatColors.Red}" + player.GetTranslation("glitch_enemy_info"));
|
enemy.PrintToChat($" {ChatColors.Red}" + player.GetTranslation("glitch_enemy_info"));
|
||||||
}
|
}
|
||||||
|
|
@ -83,7 +83,7 @@ namespace src.player.skills
|
||||||
{
|
{
|
||||||
var playerInfo = Instance.SkillPlayer.FirstOrDefault(p => p.SteamID == player.SteamID);
|
var playerInfo = Instance.SkillPlayer.FirstOrDefault(p => p.SteamID == player.SteamID);
|
||||||
if (playerInfo == null) return;
|
if (playerInfo == null) return;
|
||||||
playerInfo.SkillChance = 0;
|
playerInfo.SkillUsed = false;
|
||||||
|
|
||||||
var enemies = Utilities.GetPlayers().Where(p => p.PawnIsAlive && p.Team != player.Team && p.IsValid && !p.IsBot && !p.IsHLTV && p.Team != CsTeam.Spectator && p.Team != CsTeam.None).ToArray();
|
var enemies = Utilities.GetPlayers().Where(p => p.PawnIsAlive && p.Team != player.Team && p.IsValid && !p.IsBot && !p.IsHLTV && p.Team != CsTeam.Spectator && p.Team != CsTeam.None).ToArray();
|
||||||
if (enemies.Length > 0)
|
if (enemies.Length > 0)
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,6 @@
|
||||||
using CounterStrikeSharp.API.Core;
|
using CounterStrikeSharp.API.Core;
|
||||||
using CounterStrikeSharp.API.Core.Attributes;
|
using CounterStrikeSharp.API.Core.Attributes;
|
||||||
using CounterStrikeSharp.API.Modules.Utils;
|
using CounterStrikeSharp.API.Modules.Utils;
|
||||||
using System.Drawing;
|
|
||||||
using static src.jRandomSkills;
|
using static src.jRandomSkills;
|
||||||
using System.Collections.Concurrent;
|
using System.Collections.Concurrent;
|
||||||
using src.utils;
|
using src.utils;
|
||||||
|
|
@ -14,10 +13,12 @@ namespace src.player.skills
|
||||||
private const Skills skillName = Skills.Jackal;
|
private const Skills skillName = Skills.Jackal;
|
||||||
private static readonly ConcurrentDictionary<ulong, byte> playersInAction = [];
|
private static readonly ConcurrentDictionary<ulong, byte> playersInAction = [];
|
||||||
private static readonly ConcurrentDictionary<CCSPlayerController, ConcurrentQueue<CBeam>> stepBeams = [];
|
private static readonly ConcurrentDictionary<CCSPlayerController, ConcurrentQueue<CBeam>> stepBeams = [];
|
||||||
|
private static readonly string particleName = "particles/ui/hud/ui_map_def_utility_trail.vpcf";
|
||||||
|
|
||||||
public static void LoadSkill()
|
public static void LoadSkill()
|
||||||
{
|
{
|
||||||
SkillUtils.RegisterSkill(skillName, SkillsInfo.GetValue<string>(skillName, "color"));
|
SkillUtils.RegisterSkill(skillName, SkillsInfo.GetValue<string>(skillName, "color"));
|
||||||
|
Instance.RegisterListener<Listeners.OnServerPrecacheResources>((ResourceManifest manifest) => manifest.AddResource(particleName));
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void NewRound()
|
public static void NewRound()
|
||||||
|
|
@ -30,38 +31,6 @@ namespace src.player.skills
|
||||||
playersInAction.Clear();
|
playersInAction.Clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void OnTick()
|
|
||||||
{
|
|
||||||
if (Server.TickCount % 8 != 0) return;
|
|
||||||
foreach (var step in stepBeams.ToList())
|
|
||||||
{
|
|
||||||
var player = step.Key;
|
|
||||||
if (!player.IsValid)
|
|
||||||
{
|
|
||||||
stepBeams.TryRemove(player, out _);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
var pawn = player.PlayerPawn.Value;
|
|
||||||
if (pawn == null || !pawn.IsValid || pawn.LifeState != (byte)LifeState_t.LIFE_ALIVE || pawn.AbsOrigin == null) continue;
|
|
||||||
|
|
||||||
var beams = step.Value;
|
|
||||||
Vector lastBeamVector = (beams != null && beams.Count > 0 && beams.Last() != null)
|
|
||||||
? beams.Last().EndPos : pawn.AbsOrigin;
|
|
||||||
|
|
||||||
var newBeam = CreateBeamStep(step.Key.Team, lastBeamVector, pawn.AbsOrigin);
|
|
||||||
if (newBeam != null)
|
|
||||||
step.Value.Enqueue(newBeam);
|
|
||||||
|
|
||||||
if (beams?.Count >= SkillsInfo.GetValue<int>(skillName, "maxStepBeam"))
|
|
||||||
{
|
|
||||||
if (beams.TryPeek(out var beam))
|
|
||||||
beam.AcceptInput("Kill");
|
|
||||||
step.Value.TryDequeue(out _);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void CheckTransmit([CastFrom(typeof(nint))] CCheckTransmitInfoList infoList)
|
public static void CheckTransmit([CastFrom(typeof(nint))] CCheckTransmitInfoList infoList)
|
||||||
{
|
{
|
||||||
foreach( var (info, player) in infoList)
|
foreach( var (info, player) in infoList)
|
||||||
|
|
@ -85,23 +54,27 @@ namespace src.player.skills
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static CBeam? CreateBeamStep(CsTeam team, Vector start, Vector stop)
|
public static void CreatePlayerTrail(CCSPlayerPawn playerPawn)
|
||||||
{
|
{
|
||||||
CBeam beam = Utilities.CreateEntityByName<CBeam>("beam")!;
|
if (playerPawn == null || !playerPawn.IsValid || playerPawn.AbsOrigin == null) return;
|
||||||
if (beam == null) return null;
|
|
||||||
|
|
||||||
beam.DispatchSpawn();
|
CParticleSystem particle = Utilities.CreateEntityByName<CParticleSystem>("info_particle_system")!;
|
||||||
if (!beam.IsValid) return null;
|
if (particle == null) return;
|
||||||
|
|
||||||
beam.Render = team == CsTeam.Terrorist ? Color.FromArgb(100, 255, 165, 0) : Color.FromArgb(100, 173, 216, 230);
|
particle.EffectName = particleName;
|
||||||
beam.Width = 2.0f;
|
particle.StartActive = true;
|
||||||
beam.EndWidth = 2.0f;
|
|
||||||
beam.Teleport(start);
|
|
||||||
|
|
||||||
beam.EndPos.X = stop.X;
|
particle.Teleport(playerPawn.AbsOrigin);
|
||||||
beam.EndPos.Y = stop.Y;
|
particle.DispatchSpawn();
|
||||||
beam.EndPos.Z = stop.Z;
|
|
||||||
return beam;
|
particle.AcceptInput("SetParent", playerPawn, particle, "!activator");
|
||||||
|
particle.AcceptInput("Start");
|
||||||
|
|
||||||
|
Instance.AddTimer(3f, () => {
|
||||||
|
if (particle != null && particle.IsValid)
|
||||||
|
particle.AcceptInput("Kill");
|
||||||
|
CreatePlayerTrail(playerPawn);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void EnableSkill(CCSPlayerController player)
|
public static void EnableSkill(CCSPlayerController player)
|
||||||
|
|
@ -110,7 +83,10 @@ namespace src.player.skills
|
||||||
playersInAction.TryAdd(player.SteamID, 0);
|
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))
|
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))
|
if (!stepBeams.ContainsKey(_player))
|
||||||
|
{
|
||||||
stepBeams.TryAdd(_player, []);
|
stepBeams.TryAdd(_player, []);
|
||||||
|
CreatePlayerTrail(player.PlayerPawn.Value);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void DisableSkill(CCSPlayerController player)
|
public static void DisableSkill(CCSPlayerController player)
|
||||||
|
|
|
||||||
|
|
@ -52,7 +52,7 @@ namespace src.player.skills
|
||||||
var playerInfo = Instance.SkillPlayer.FirstOrDefault(p => p.SteamID == player.SteamID);
|
var playerInfo = Instance.SkillPlayer.FirstOrDefault(p => p.SteamID == player.SteamID);
|
||||||
if (playerInfo?.Skill != skillName) return;
|
if (playerInfo?.Skill != skillName) return;
|
||||||
|
|
||||||
if (playerInfo.SkillChance == 1)
|
if (playerInfo.SkillUsed)
|
||||||
{
|
{
|
||||||
player.PrintToChat($" {ChatColors.Red}{player.GetTranslation("areareaper_used_info")}");
|
player.PrintToChat($" {ChatColors.Red}{player.GetTranslation("areareaper_used_info")}");
|
||||||
return;
|
return;
|
||||||
|
|
@ -69,7 +69,7 @@ namespace src.player.skills
|
||||||
|
|
||||||
jammedPlayers.TryAdd(enemy, 0);
|
jammedPlayers.TryAdd(enemy, 0);
|
||||||
SetCrosshair(enemy, false);
|
SetCrosshair(enemy, false);
|
||||||
playerInfo.SkillChance = 1;
|
playerInfo.SkillUsed = true;
|
||||||
player.PrintToChat($" {ChatColors.Green}" + player.GetTranslation("jammer_player_info", enemy.PlayerName));
|
player.PrintToChat($" {ChatColors.Green}" + player.GetTranslation("jammer_player_info", enemy.PlayerName));
|
||||||
enemy.PrintToChat($" {ChatColors.Red}" + player.GetTranslation("jammer_enemy_info"));
|
enemy.PrintToChat($" {ChatColors.Red}" + player.GetTranslation("jammer_enemy_info"));
|
||||||
}
|
}
|
||||||
|
|
@ -88,7 +88,7 @@ namespace src.player.skills
|
||||||
{
|
{
|
||||||
var playerInfo = Instance.SkillPlayer.FirstOrDefault(p => p.SteamID == player.SteamID);
|
var playerInfo = Instance.SkillPlayer.FirstOrDefault(p => p.SteamID == player.SteamID);
|
||||||
if (playerInfo == null) return;
|
if (playerInfo == null) return;
|
||||||
playerInfo.SkillChance = 0;
|
playerInfo.SkillUsed = false;
|
||||||
|
|
||||||
var enemies = Utilities.GetPlayers().Where(p => p.PawnIsAlive && p.Team != player.Team && p.IsValid && !p.IsBot && !p.IsHLTV && p.Team != CsTeam.Spectator && p.Team != CsTeam.None).ToArray();
|
var enemies = Utilities.GetPlayers().Where(p => p.PawnIsAlive && p.Team != player.Team && p.IsValid && !p.IsBot && !p.IsHLTV && p.Team != CsTeam.Spectator && p.Team != CsTeam.None).ToArray();
|
||||||
if (enemies.Length > 0)
|
if (enemies.Length > 0)
|
||||||
|
|
|
||||||
|
|
@ -63,7 +63,7 @@ namespace src.player.skills
|
||||||
var playerInfo = Instance.SkillPlayer.FirstOrDefault(p => p.SteamID == player.SteamID);
|
var playerInfo = Instance.SkillPlayer.FirstOrDefault(p => p.SteamID == player.SteamID);
|
||||||
if (playerInfo?.Skill != skillName) return;
|
if (playerInfo?.Skill != skillName) return;
|
||||||
|
|
||||||
if (playerInfo.SkillChance == 1)
|
if (playerInfo.SkillUsed)
|
||||||
{
|
{
|
||||||
player.PrintToChat($" {ChatColors.Red}{player.GetTranslation("areareaper_used_info")}");
|
player.PrintToChat($" {ChatColors.Red}{player.GetTranslation("areareaper_used_info")}");
|
||||||
return;
|
return;
|
||||||
|
|
@ -79,7 +79,7 @@ namespace src.player.skills
|
||||||
}
|
}
|
||||||
|
|
||||||
bannedPlayers.AddOrUpdate(enemy.PlayerPawn.Value, 0, (k, v) => 0);
|
bannedPlayers.AddOrUpdate(enemy.PlayerPawn.Value, 0, (k, v) => 0);
|
||||||
playerInfo.SkillChance = 1;
|
playerInfo.SkillUsed = true;
|
||||||
player.PrintToChat($" {ChatColors.Green}" + player.GetTranslation("jumpban_player_info", enemy.PlayerName));
|
player.PrintToChat($" {ChatColors.Green}" + player.GetTranslation("jumpban_player_info", enemy.PlayerName));
|
||||||
enemy.PrintToChat($" {ChatColors.Red}" + player.GetTranslation("jumpban_enemy_info"));
|
enemy.PrintToChat($" {ChatColors.Red}" + player.GetTranslation("jumpban_enemy_info"));
|
||||||
}
|
}
|
||||||
|
|
@ -88,7 +88,7 @@ namespace src.player.skills
|
||||||
{
|
{
|
||||||
var playerInfo = Instance.SkillPlayer.FirstOrDefault(p => p.SteamID == player.SteamID);
|
var playerInfo = Instance.SkillPlayer.FirstOrDefault(p => p.SteamID == player.SteamID);
|
||||||
if (playerInfo == null) return;
|
if (playerInfo == null) return;
|
||||||
playerInfo.SkillChance = 0;
|
playerInfo.SkillUsed = false;
|
||||||
|
|
||||||
var enemies = Utilities.GetPlayers().Where(p => p.PawnIsAlive && p.Team != player.Team && p.IsValid && !p.IsBot && !p.IsHLTV && p.Team != CsTeam.Spectator && p.Team != CsTeam.None).ToArray();
|
var enemies = Utilities.GetPlayers().Where(p => p.PawnIsAlive && p.Team != player.Team && p.IsValid && !p.IsBot && !p.IsHLTV && p.Team != CsTeam.Spectator && p.Team != CsTeam.None).ToArray();
|
||||||
if (enemies.Length > 0)
|
if (enemies.Length > 0)
|
||||||
|
|
|
||||||
|
|
@ -44,7 +44,7 @@ namespace src.player.skills
|
||||||
var playerInfo = Instance.SkillPlayer.FirstOrDefault(p => p.SteamID == player.SteamID);
|
var playerInfo = Instance.SkillPlayer.FirstOrDefault(p => p.SteamID == player.SteamID);
|
||||||
if (playerInfo?.Skill != skillName) return;
|
if (playerInfo?.Skill != skillName) return;
|
||||||
|
|
||||||
if (playerInfo.SkillChance == 1)
|
if (playerInfo.SkillUsed)
|
||||||
{
|
{
|
||||||
player.PrintToChat($" {ChatColors.Red}{player.GetTranslation("areareaper_used_info")}");
|
player.PrintToChat($" {ChatColors.Red}{player.GetTranslation("areareaper_used_info")}");
|
||||||
return;
|
return;
|
||||||
|
|
@ -60,7 +60,7 @@ namespace src.player.skills
|
||||||
}
|
}
|
||||||
|
|
||||||
SwapHealth(player, enemy);
|
SwapHealth(player, enemy);
|
||||||
playerInfo.SkillChance = 1;
|
playerInfo.SkillUsed = true;
|
||||||
player.PrintToChat($" {ChatColors.Green}" + player.GetTranslation("lifeswap_player_info", enemy.PlayerName));
|
player.PrintToChat($" {ChatColors.Green}" + player.GetTranslation("lifeswap_player_info", enemy.PlayerName));
|
||||||
enemy.PrintToChat($" {ChatColors.Red}" + player.GetTranslation("lifeswap_enemy_info"));
|
enemy.PrintToChat($" {ChatColors.Red}" + player.GetTranslation("lifeswap_enemy_info"));
|
||||||
}
|
}
|
||||||
|
|
@ -69,7 +69,7 @@ namespace src.player.skills
|
||||||
{
|
{
|
||||||
var playerInfo = Instance.SkillPlayer.FirstOrDefault(p => p.SteamID == player.SteamID);
|
var playerInfo = Instance.SkillPlayer.FirstOrDefault(p => p.SteamID == player.SteamID);
|
||||||
if (playerInfo == null) return;
|
if (playerInfo == null) return;
|
||||||
playerInfo.SkillChance = 0;
|
playerInfo.SkillUsed = false;
|
||||||
|
|
||||||
var enemies = Utilities.GetPlayers().Where(p => p.PawnIsAlive && p.Team != player.Team && p.IsValid && !p.IsBot && !p.IsHLTV && p.Team != CsTeam.Spectator && p.Team != CsTeam.None).ToArray();
|
var enemies = Utilities.GetPlayers().Where(p => p.PawnIsAlive && p.Team != player.Team && p.IsValid && !p.IsBot && !p.IsHLTV && p.Team != CsTeam.Spectator && p.Team != CsTeam.None).ToArray();
|
||||||
if (enemies.Length > 0)
|
if (enemies.Length > 0)
|
||||||
|
|
|
||||||
|
|
@ -55,7 +55,7 @@ namespace src.player.skills
|
||||||
var playerInfo = Instance.SkillPlayer.FirstOrDefault(p => p.SteamID == player.SteamID);
|
var playerInfo = Instance.SkillPlayer.FirstOrDefault(p => p.SteamID == player.SteamID);
|
||||||
if (playerInfo?.Skill != skillName) return;
|
if (playerInfo?.Skill != skillName) return;
|
||||||
|
|
||||||
if (playerInfo.SkillChance == 1)
|
if (playerInfo.SkillUsed)
|
||||||
{
|
{
|
||||||
player.PrintToChat($" {ChatColors.Red}{player.GetTranslation("areareaper_used_info")}");
|
player.PrintToChat($" {ChatColors.Red}{player.GetTranslation("areareaper_used_info")}");
|
||||||
return;
|
return;
|
||||||
|
|
@ -75,7 +75,7 @@ namespace src.player.skills
|
||||||
enemy.DesiredFOV = SkillsInfo.GetValue<uint>(skillName, "customFOV");
|
enemy.DesiredFOV = SkillsInfo.GetValue<uint>(skillName, "customFOV");
|
||||||
Utilities.SetStateChanged(enemy, "CBasePlayerController", "m_iDesiredFOV");
|
Utilities.SetStateChanged(enemy, "CBasePlayerController", "m_iDesiredFOV");
|
||||||
|
|
||||||
playerInfo.SkillChance = 1;
|
playerInfo.SkillUsed = true;
|
||||||
player.PrintToChat($" {ChatColors.Green}" + player.GetTranslation("magnifier_player_info", enemy.PlayerName));
|
player.PrintToChat($" {ChatColors.Green}" + player.GetTranslation("magnifier_player_info", enemy.PlayerName));
|
||||||
enemy.PrintToChat($" {ChatColors.Red}" + player.GetTranslation("magnifier_enemy_info"));
|
enemy.PrintToChat($" {ChatColors.Red}" + player.GetTranslation("magnifier_enemy_info"));
|
||||||
}
|
}
|
||||||
|
|
@ -84,7 +84,7 @@ namespace src.player.skills
|
||||||
{
|
{
|
||||||
var playerInfo = Instance.SkillPlayer.FirstOrDefault(p => p.SteamID == player.SteamID);
|
var playerInfo = Instance.SkillPlayer.FirstOrDefault(p => p.SteamID == player.SteamID);
|
||||||
if (playerInfo == null) return;
|
if (playerInfo == null) return;
|
||||||
playerInfo.SkillChance = 0;
|
playerInfo.SkillUsed = false;
|
||||||
|
|
||||||
var enemies = Utilities.GetPlayers().Where(p => p.PawnIsAlive && p.Team != player.Team && p.IsValid && !p.IsBot && !p.IsHLTV && p.Team != CsTeam.Spectator && p.Team != CsTeam.None).ToArray();
|
var enemies = Utilities.GetPlayers().Where(p => p.PawnIsAlive && p.Team != player.Team && p.IsValid && !p.IsBot && !p.IsHLTV && p.Team != CsTeam.Spectator && p.Team != CsTeam.None).ToArray();
|
||||||
if (enemies.Length > 0)
|
if (enemies.Length > 0)
|
||||||
|
|
|
||||||
|
|
@ -44,7 +44,7 @@ namespace src.player.skills
|
||||||
var playerInfo = Instance.SkillPlayer.FirstOrDefault(p => p.SteamID == player.SteamID);
|
var playerInfo = Instance.SkillPlayer.FirstOrDefault(p => p.SteamID == player.SteamID);
|
||||||
if (playerInfo?.Skill != skillName) return;
|
if (playerInfo?.Skill != skillName) return;
|
||||||
|
|
||||||
if (playerInfo.SkillChance == 1)
|
if (playerInfo.SkillUsed)
|
||||||
{
|
{
|
||||||
player.PrintToChat($" {ChatColors.Red}{player.GetTranslation("areareaper_used_info")}");
|
player.PrintToChat($" {ChatColors.Red}{player.GetTranslation("areareaper_used_info")}");
|
||||||
return;
|
return;
|
||||||
|
|
@ -60,7 +60,7 @@ namespace src.player.skills
|
||||||
}
|
}
|
||||||
|
|
||||||
SwapMoney(player, enemy);
|
SwapMoney(player, enemy);
|
||||||
playerInfo.SkillChance = 1;
|
playerInfo.SkillUsed = true;
|
||||||
player.PrintToChat($" {ChatColors.Green}" + player.GetTranslation("moneyswap_player_info", enemy.PlayerName));
|
player.PrintToChat($" {ChatColors.Green}" + player.GetTranslation("moneyswap_player_info", enemy.PlayerName));
|
||||||
enemy.PrintToChat($" {ChatColors.Red}" + player.GetTranslation("moneyswap_enemy_info"));
|
enemy.PrintToChat($" {ChatColors.Red}" + player.GetTranslation("moneyswap_enemy_info"));
|
||||||
}
|
}
|
||||||
|
|
@ -69,7 +69,7 @@ namespace src.player.skills
|
||||||
{
|
{
|
||||||
var playerInfo = Instance.SkillPlayer.FirstOrDefault(p => p.SteamID == player.SteamID);
|
var playerInfo = Instance.SkillPlayer.FirstOrDefault(p => p.SteamID == player.SteamID);
|
||||||
if (playerInfo == null) return;
|
if (playerInfo == null) return;
|
||||||
playerInfo.SkillChance = 0;
|
playerInfo.SkillUsed = false;
|
||||||
|
|
||||||
var enemies = Utilities.GetPlayers().Where(p => p.PawnIsAlive && p.Team != player.Team && p.IsValid && !p.IsBot && !p.IsHLTV && p.Team != CsTeam.Spectator && p.Team != CsTeam.None).ToArray();
|
var enemies = Utilities.GetPlayers().Where(p => p.PawnIsAlive && p.Team != player.Team && p.IsValid && !p.IsBot && !p.IsHLTV && p.Team != CsTeam.Spectator && p.Team != CsTeam.None).ToArray();
|
||||||
if (enemies.Length > 0)
|
if (enemies.Length > 0)
|
||||||
|
|
|
||||||
|
|
@ -56,7 +56,7 @@ namespace src.player.skills
|
||||||
var playerInfo = Instance.SkillPlayer.FirstOrDefault(p => p.SteamID == player.SteamID);
|
var playerInfo = Instance.SkillPlayer.FirstOrDefault(p => p.SteamID == player.SteamID);
|
||||||
if (playerInfo?.Skill != skillName) return;
|
if (playerInfo?.Skill != skillName) return;
|
||||||
|
|
||||||
if (playerInfo.SkillChance == 1)
|
if (playerInfo.SkillUsed)
|
||||||
{
|
{
|
||||||
player.PrintToChat($" {ChatColors.Red}{player.GetTranslation("areareaper_used_info")}");
|
player.PrintToChat($" {ChatColors.Red}{player.GetTranslation("areareaper_used_info")}");
|
||||||
return;
|
return;
|
||||||
|
|
@ -72,7 +72,7 @@ namespace src.player.skills
|
||||||
}
|
}
|
||||||
|
|
||||||
poisonedPlayers.TryAdd(enemy, 0);
|
poisonedPlayers.TryAdd(enemy, 0);
|
||||||
playerInfo.SkillChance = 1;
|
playerInfo.SkillUsed = true;
|
||||||
player.PrintToChat($" {ChatColors.Green}" + player.GetTranslation("poison_player_info", enemy.PlayerName));
|
player.PrintToChat($" {ChatColors.Green}" + player.GetTranslation("poison_player_info", enemy.PlayerName));
|
||||||
enemy.PrintToChat($" {ChatColors.Red}" + player.GetTranslation("poison_enemy_info"));
|
enemy.PrintToChat($" {ChatColors.Red}" + player.GetTranslation("poison_enemy_info"));
|
||||||
}
|
}
|
||||||
|
|
@ -81,7 +81,7 @@ namespace src.player.skills
|
||||||
{
|
{
|
||||||
var playerInfo = Instance.SkillPlayer.FirstOrDefault(p => p.SteamID == player.SteamID);
|
var playerInfo = Instance.SkillPlayer.FirstOrDefault(p => p.SteamID == player.SteamID);
|
||||||
if (playerInfo == null) return;
|
if (playerInfo == null) return;
|
||||||
playerInfo.SkillChance = 0;
|
playerInfo.SkillUsed = false;
|
||||||
|
|
||||||
var enemies = Utilities.GetPlayers().Where(p => p.PawnIsAlive && p.Team != player.Team && p.IsValid && !p.IsBot && !p.IsHLTV && p.Team != CsTeam.Spectator && p.Team != CsTeam.None).ToArray();
|
var enemies = Utilities.GetPlayers().Where(p => p.PawnIsAlive && p.Team != player.Team && p.IsValid && !p.IsBot && !p.IsHLTV && p.Team != CsTeam.Spectator && p.Team != CsTeam.None).ToArray();
|
||||||
if (enemies.Length > 0)
|
if (enemies.Length > 0)
|
||||||
|
|
|
||||||
|
|
@ -64,7 +64,7 @@ namespace src.player.skills
|
||||||
var playerInfo = Instance.SkillPlayer.FirstOrDefault(p => p.SteamID == player.SteamID);
|
var playerInfo = Instance.SkillPlayer.FirstOrDefault(p => p.SteamID == player.SteamID);
|
||||||
if (playerInfo?.Skill != skillName) return;
|
if (playerInfo?.Skill != skillName) return;
|
||||||
|
|
||||||
if (playerInfo.SkillChance == 1)
|
if (playerInfo.SkillUsed)
|
||||||
{
|
{
|
||||||
player.PrintToChat($" {ChatColors.Red}{player.GetTranslation("areareaper_used_info")}");
|
player.PrintToChat($" {ChatColors.Red}{player.GetTranslation("areareaper_used_info")}");
|
||||||
return;
|
return;
|
||||||
|
|
@ -81,7 +81,7 @@ namespace src.player.skills
|
||||||
|
|
||||||
bannedPlayers.TryAdd(enemy.SteamID, 0);
|
bannedPlayers.TryAdd(enemy.SteamID, 0);
|
||||||
CheckWeapon(enemy);
|
CheckWeapon(enemy);
|
||||||
playerInfo.SkillChance = 1;
|
playerInfo.SkillUsed = true;
|
||||||
player.PrintToChat($" {ChatColors.Green}" + player.GetTranslation("primaryban_player_info", enemy.PlayerName));
|
player.PrintToChat($" {ChatColors.Green}" + player.GetTranslation("primaryban_player_info", enemy.PlayerName));
|
||||||
enemy.PrintToChat($" {ChatColors.Red}" + player.GetTranslation("primaryban_enemy_info"));
|
enemy.PrintToChat($" {ChatColors.Red}" + player.GetTranslation("primaryban_enemy_info"));
|
||||||
}
|
}
|
||||||
|
|
@ -100,7 +100,7 @@ namespace src.player.skills
|
||||||
{
|
{
|
||||||
var playerInfo = Instance.SkillPlayer.FirstOrDefault(p => p.SteamID == player.SteamID);
|
var playerInfo = Instance.SkillPlayer.FirstOrDefault(p => p.SteamID == player.SteamID);
|
||||||
if (playerInfo == null) return;
|
if (playerInfo == null) return;
|
||||||
playerInfo.SkillChance = 0;
|
playerInfo.SkillUsed = false;
|
||||||
|
|
||||||
var enemies = Utilities.GetPlayers().Where(p => p.PawnIsAlive && p.Team != player.Team && p.IsValid && !p.IsBot && !p.IsHLTV && p.Team != CsTeam.Spectator && p.Team != CsTeam.None).ToArray();
|
var enemies = Utilities.GetPlayers().Where(p => p.PawnIsAlive && p.Team != player.Team && p.IsValid && !p.IsBot && !p.IsHLTV && p.Team != CsTeam.Spectator && p.Team != CsTeam.None).ToArray();
|
||||||
if (enemies.Length > 0)
|
if (enemies.Length > 0)
|
||||||
|
|
|
||||||
|
|
@ -29,7 +29,6 @@ namespace src.player.skills
|
||||||
var playerInfo = Instance.SkillPlayer.FirstOrDefault(p => p.SteamID == player.SteamID);
|
var playerInfo = Instance.SkillPlayer.FirstOrDefault(p => p.SteamID == player.SteamID);
|
||||||
if (playerInfo == null) return;
|
if (playerInfo == null) return;
|
||||||
AddMoney(player, -(int)(playerInfo.SkillChance ?? 0));
|
AddMoney(player, -(int)(playerInfo.SkillChance ?? 0));
|
||||||
playerInfo.SkillChance = 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void AddMoney(CCSPlayerController player, int money)
|
private static void AddMoney(CCSPlayerController player, int money)
|
||||||
|
|
|
||||||
|
|
@ -104,10 +104,14 @@ namespace src.player.skills
|
||||||
var pos = pawn.AbsOrigin - SkillUtils.GetForwardVector(pawn.EyeAngles) * SkillsInfo.GetValue<float>(skillName, "distance");
|
var pos = pawn.AbsOrigin - SkillUtils.GetForwardVector(pawn.EyeAngles) * SkillsInfo.GetValue<float>(skillName, "distance");
|
||||||
pos.Z += pawn.ViewOffset.Z;
|
pos.Z += pawn.ViewOffset.Z;
|
||||||
|
|
||||||
|
Server.NextFrame(() =>
|
||||||
|
{
|
||||||
|
camera.SetModel("models/actors/ghost_speaker.vmdl");
|
||||||
camera.Render = Color.FromArgb(0, 255, 255, 255);
|
camera.Render = Color.FromArgb(0, 255, 255, 255);
|
||||||
camera.Teleport(pos, new QAngle(0, pawn.EyeAngles.Y, 0));
|
camera.Teleport(pos, new QAngle(0, pawn.EyeAngles.Y, 0));
|
||||||
camera.DispatchSpawn();
|
camera.DispatchSpawn();
|
||||||
camera.AcceptInput("SetParent", pawn, pawn, "!activator");
|
camera.AcceptInput("SetParent", pawn, pawn, "!activator");
|
||||||
|
});
|
||||||
|
|
||||||
if (cameras.TryGetValue(player.SteamID, out var cameraInfo))
|
if (cameras.TryGetValue(player.SteamID, out var cameraInfo))
|
||||||
cameras.AddOrUpdate(player.SteamID, (cameraInfo.Item1, camera, pawn), (k, v) => (cameraInfo.Item1, camera, pawn));
|
cameras.AddOrUpdate(player.SteamID, (cameraInfo.Item1, camera, pawn), (k, v) => (cameraInfo.Item1, camera, pawn));
|
||||||
|
|
|
||||||
|
|
@ -70,7 +70,8 @@ namespace src.player.skills
|
||||||
{
|
{
|
||||||
orginalCameraRaw = cameraInfo.Item1;
|
orginalCameraRaw = cameraInfo.Item1;
|
||||||
newCameraRaw = cameraInfo.Item2.EntityHandle.Raw;
|
newCameraRaw = cameraInfo.Item2.EntityHandle.Raw;
|
||||||
} else
|
}
|
||||||
|
else
|
||||||
{
|
{
|
||||||
orginalCameraRaw = pawn!.CameraServices!.ViewEntity.Raw;
|
orginalCameraRaw = pawn!.CameraServices!.ViewEntity.Raw;
|
||||||
newCameraRaw = CreateCamera(player);
|
newCameraRaw = CreateCamera(player);
|
||||||
|
|
@ -95,9 +96,13 @@ namespace src.player.skills
|
||||||
if (camera == null || !camera.IsValid) return 0;
|
if (camera == null || !camera.IsValid) return 0;
|
||||||
|
|
||||||
var pawn = player.PlayerPawn.Value;
|
var pawn = player.PlayerPawn.Value;
|
||||||
|
Server.NextFrame(() =>
|
||||||
|
{
|
||||||
|
camera.SetModel("models/actors/ghost_speaker.vmdl");
|
||||||
camera.Render = Color.FromArgb(0, 255, 255, 255);
|
camera.Render = Color.FromArgb(0, 255, 255, 255);
|
||||||
camera.Teleport(pawn!.AbsOrigin, pawn.EyeAngles);
|
camera.Teleport(pawn!.AbsOrigin, pawn.EyeAngles);
|
||||||
camera.DispatchSpawn();
|
camera.DispatchSpawn();
|
||||||
|
});
|
||||||
|
|
||||||
cameras.AddOrUpdate(player.SteamID, (pawn.CameraServices!.ViewEntity.Raw, camera), (v, k) => (pawn.CameraServices!.ViewEntity.Raw, camera));
|
cameras.AddOrUpdate(player.SteamID, (pawn.CameraServices!.ViewEntity.Raw, camera), (v, k) => (pawn.CameraServices!.ViewEntity.Raw, camera));
|
||||||
return camera.EntityHandle.Raw;
|
return camera.EntityHandle.Raw;
|
||||||
|
|
|
||||||
|
|
@ -70,8 +70,9 @@ namespace src.utils
|
||||||
public class SettingsModel
|
public class SettingsModel
|
||||||
{
|
{
|
||||||
public int GameMode { get; set; }
|
public int GameMode { get; set; }
|
||||||
public bool KillerSkillInfo { get; set; }
|
public bool YourSkillChatInfo { get; set; }
|
||||||
public bool TeamMateSkillInfo { get; set; }
|
public bool KillerSkillChatInfo { get; set; }
|
||||||
|
public bool TeamMateSkillChatInfo { get; set; }
|
||||||
public bool SummaryAfterTheRound { get; set; }
|
public bool SummaryAfterTheRound { get; set; }
|
||||||
public bool DebugMode { get; set; }
|
public bool DebugMode { get; set; }
|
||||||
public string? AlternativeSkillButton { get; set; }
|
public string? AlternativeSkillButton { get; set; }
|
||||||
|
|
@ -91,8 +92,9 @@ namespace src.utils
|
||||||
public SettingsModel()
|
public SettingsModel()
|
||||||
{
|
{
|
||||||
GameMode = (int)GameModes.NoRepeat;
|
GameMode = (int)GameModes.NoRepeat;
|
||||||
KillerSkillInfo = true;
|
YourSkillChatInfo = true;
|
||||||
TeamMateSkillInfo = true;
|
KillerSkillChatInfo = true;
|
||||||
|
TeamMateSkillChatInfo = true;
|
||||||
SummaryAfterTheRound = true;
|
SummaryAfterTheRound = true;
|
||||||
DebugMode = true;
|
DebugMode = true;
|
||||||
AlternativeSkillButton = null;
|
AlternativeSkillButton = null;
|
||||||
|
|
|
||||||
|
|
@ -81,10 +81,11 @@ namespace src.utils
|
||||||
if (player == null || !player.IsValid) return;
|
if (player == null || !player.IsValid) return;
|
||||||
var playerPawn = player.PlayerPawn.Value;
|
var playerPawn = player.PlayerPawn.Value;
|
||||||
if (playerPawn == null || !playerPawn.IsValid || playerPawn.CBodyComponent == null || playerPawn.CBodyComponent.SceneNode == null) return;
|
if (playerPawn == null || !playerPawn.IsValid || playerPawn.CBodyComponent == null || playerPawn.CBodyComponent.SceneNode == null) return;
|
||||||
|
if (scale <= 0) return;
|
||||||
|
|
||||||
playerPawn.CBodyComponent.SceneNode.GetSkeletonInstance().Scale = scale;
|
playerPawn.CBodyComponent.SceneNode.GetSkeletonInstance().Scale = scale;
|
||||||
Utilities.SetStateChanged(playerPawn, "CBaseEntity", "m_CBodyComponent");
|
Utilities.SetStateChanged(playerPawn, "CBaseEntity", "m_CBodyComponent");
|
||||||
Server.NextFrame(() => playerPawn.AcceptInput("SetScale", playerPawn, playerPawn, scale.ToString()));
|
Server.NextFrame(() => playerPawn.AcceptInput("SetScale", null, null, scale.ToString()));
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void CreateHEGrenadeProjectile(Vector pos, QAngle angle, Vector vel, int teamNum)
|
public static void CreateHEGrenadeProjectile(Vector pos, QAngle angle, Vector vel, int teamNum)
|
||||||
|
|
|
||||||
|
|
@ -2,8 +2,8 @@
|
||||||
"HEGrenadeProjectile_CreateFunc": {
|
"HEGrenadeProjectile_CreateFunc": {
|
||||||
"signatures": {
|
"signatures": {
|
||||||
"library": "server",
|
"library": "server",
|
||||||
"windows": "48 89 5C 24 ? 48 89 6C 24 ? 48 89 74 24 ? 57 48 83 EC 40 48 8B 6C 24",
|
"windows": "48 89 5C 24 ? 48 89 6C 24 ? 48 89 74 24 ? 57 48 83 EC ? 48 8B AC 24 ? ? ? ? 49 8B F8",
|
||||||
"linux": "55 4C 89 C1 48 89 E5 41 57 49 89 FF 41 56 49 89"
|
"linux": "55 4C 89 C1 48 89 E5 41 57 49 89 D7"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"Shoot_Secondary": {
|
"Shoot_Secondary": {
|
||||||
|
|
|
||||||
Binary file not shown.
|
|
@ -1,7 +1,8 @@
|
||||||
{
|
{
|
||||||
"GameMode": 3,
|
"GameMode": 3,
|
||||||
"KillerSkillInfo": true,
|
"YourSkillChatInfo": true,
|
||||||
"TeamMateSkillInfo": true,
|
"KillerSkillChatInfo": true,
|
||||||
|
"TeamMateSkillChatInfo": true,
|
||||||
"SummaryAfterTheRound": true,
|
"SummaryAfterTheRound": true,
|
||||||
"DebugMode": true,
|
"DebugMode": true,
|
||||||
"AlternativeSkillButton": null,
|
"AlternativeSkillButton": null,
|
||||||
|
|
|
||||||
|
|
@ -558,7 +558,7 @@
|
||||||
"DisableOnFreezeTime": false,
|
"DisableOnFreezeTime": false,
|
||||||
"OnlyTeam": 0,
|
"OnlyTeam": 0,
|
||||||
"Color": "#f542ef",
|
"Color": "#f542ef",
|
||||||
"Active": true,
|
"Active": false,
|
||||||
"Name": "Jackal"
|
"Name": "Jackal"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|
|
||||||
23
readme.md
23
readme.md
|
|
@ -316,6 +316,29 @@ This plugin uses content from the following projects:
|
||||||
|
|
||||||
## 📋 Changelog
|
## 📋 Changelog
|
||||||
|
|
||||||
|
<details>
|
||||||
|
<summary><b>v1.1.9 BETA</b></summary>
|
||||||
|
|
||||||
|
- #### General:
|
||||||
|
- ###### Update the dependency to the latest version.
|
||||||
|
- ###### Signature update (jRandomSkills.gamedata.json).
|
||||||
|
- ###### FlashingHtmlHudFix is disabled during warm-up.
|
||||||
|
- ###### Fixed incorrect debug text display when using the command.
|
||||||
|
- ###### Improved the functionality of the !map command.
|
||||||
|
- ###### Added the `YourSkillChatInfo` option to the configuration to disable the description of your skill in chat.
|
||||||
|
- ###### Disabling player skill when changing maps.
|
||||||
|
- ###### More coming soon
|
||||||
|
- #### Skill improvements:
|
||||||
|
- ##### Third Eye:
|
||||||
|
- ###### Model added to camera.
|
||||||
|
- ##### Spectator:
|
||||||
|
- ###### Model added to camera.
|
||||||
|
- ##### Falcon Eye:
|
||||||
|
- ###### Model added to camera.
|
||||||
|
- ##### Jackal:
|
||||||
|
- ###### Temporarily disabled for rewrite.
|
||||||
|
</details>
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary><b>v1.1.8</b></summary>
|
<summary><b>v1.1.8</b></summary>
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue