Refactor skill spawn logic and HUD expiration, Gambler fix, Auto Lang System fix
This commit is contained in:
parent
4c333f5d15
commit
4b2bff91b1
37 changed files with 324 additions and 164 deletions
|
|
@ -17,7 +17,7 @@
|
||||||
<PackageReference Include="CounterStrikeSharp.API" Version="1.0.342" />
|
<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.4" />
|
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
|
|
||||||
|
|
@ -3,6 +3,7 @@ using CounterStrikeSharp.API.Core;
|
||||||
using CounterStrikeSharp.API.Modules.Admin;
|
using CounterStrikeSharp.API.Modules.Admin;
|
||||||
using CounterStrikeSharp.API.Modules.Commands;
|
using CounterStrikeSharp.API.Modules.Commands;
|
||||||
using CounterStrikeSharp.API.Modules.Entities.Constants;
|
using CounterStrikeSharp.API.Modules.Entities.Constants;
|
||||||
|
using CounterStrikeSharp.API.Modules.Memory.DynamicFunctions;
|
||||||
using CounterStrikeSharp.API.Modules.Utils;
|
using CounterStrikeSharp.API.Modules.Utils;
|
||||||
using src.menu;
|
using src.menu;
|
||||||
using src.player;
|
using src.player;
|
||||||
|
|
@ -51,6 +52,8 @@ namespace src.command
|
||||||
{ SplitCommands(config.VotingCommands.ShuffleCommand.Alias), ("Shuffle team", Command_Shuffle) },
|
{ SplitCommands(config.VotingCommands.ShuffleCommand.Alias), ("Shuffle team", Command_Shuffle) },
|
||||||
{ SplitCommands(config.VotingCommands.PauseCommand.Alias), ("Pause game", Command_Pause) },
|
{ SplitCommands(config.VotingCommands.PauseCommand.Alias), ("Pause game", Command_Pause) },
|
||||||
{ SplitCommands(config.VotingCommands.SetScoreCommand.Alias), ("Set teams score", Command_SetScore) },
|
{ SplitCommands(config.VotingCommands.SetScoreCommand.Alias), ("Set teams score", Command_SetScore) },
|
||||||
|
|
||||||
|
{ new []{ "show" }, ("Show layout", Command_Show) },
|
||||||
};
|
};
|
||||||
|
|
||||||
foreach (var commandPair in commands)
|
foreach (var commandPair in commands)
|
||||||
|
|
@ -90,7 +93,7 @@ namespace src.command
|
||||||
private static void Command_SetSkill(CCSPlayerController? player, CommandInfo command)
|
private static void Command_SetSkill(CCSPlayerController? player, CommandInfo command)
|
||||||
{
|
{
|
||||||
Debug.WriteToDebug($"Player {player?.PlayerName} 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 (!string.IsNullOrEmpty(config.NormalCommands.SetSkillCommand.Permissions) && !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)
|
||||||
|| p.PlayerName.Equals(command.GetArg(1), StringComparison.CurrentCultureIgnoreCase)));
|
|| p.PlayerName.Equals(command.GetArg(1), StringComparison.CurrentCultureIgnoreCase)));
|
||||||
|
|
@ -177,7 +180,8 @@ namespace src.command
|
||||||
private static void Command_SkillsListMenu(CCSPlayerController? player, CommandInfo command)
|
private static void Command_SkillsListMenu(CCSPlayerController? player, CommandInfo command)
|
||||||
{
|
{
|
||||||
Debug.WriteToDebug($"Player {player?.PlayerName} 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) return;
|
||||||
|
if (!string.IsNullOrEmpty(config.NormalCommands.SkillsListCommand.Permissions) && !AdminManager.PlayerHasPermissions(player, config.NormalCommands.SkillsListCommand.Permissions)) return;
|
||||||
Menu.DisplaySkillsList(player);
|
Menu.DisplaySkillsList(player);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -185,12 +189,13 @@ namespace src.command
|
||||||
private static void Command_ChangeMap(CCSPlayerController? player, CommandInfo command)
|
private static void Command_ChangeMap(CCSPlayerController? player, CommandInfo command)
|
||||||
{
|
{
|
||||||
Debug.WriteToDebug($"Player {player?.PlayerName} 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)
|
||||||
{
|
if (!string.IsNullOrEmpty(config.VotingCommands.ChangeMapCommand.Permissions) && !AdminManager.PlayerHasPermissions(player, config.VotingCommands.ChangeMapCommand.Permissions))
|
||||||
if (!config.VotingCommands.ChangeMapCommand.EnableVoting) return;
|
{
|
||||||
player.Vote(VoteType.ChangeMap, command.ArgString);
|
if (!config.VotingCommands.ChangeMapCommand.EnableVoting) return;
|
||||||
return;
|
player.Vote(VoteType.ChangeMap, command.ArgString);
|
||||||
}
|
return;
|
||||||
|
}
|
||||||
ChangeMap(command);
|
ChangeMap(command);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -218,12 +223,13 @@ namespace src.command
|
||||||
private static void Command_StartGame(CCSPlayerController? player, CommandInfo command)
|
private static void Command_StartGame(CCSPlayerController? player, CommandInfo command)
|
||||||
{
|
{
|
||||||
Debug.WriteToDebug($"Player {player?.PlayerName} 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)
|
||||||
{
|
if (!string.IsNullOrEmpty(config.VotingCommands.StartGameCommand.Permissions) && !AdminManager.PlayerHasPermissions(player, config.VotingCommands.StartGameCommand.Permissions))
|
||||||
if (!config.VotingCommands.StartGameCommand.EnableVoting) return;
|
{
|
||||||
player.Vote(VoteType.StartGame);
|
if (!config.VotingCommands.StartGameCommand.EnableVoting) return;
|
||||||
return;
|
player.Vote(VoteType.StartGame);
|
||||||
}
|
return;
|
||||||
|
}
|
||||||
StartGame(command);
|
StartGame(command);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -252,12 +258,13 @@ namespace src.command
|
||||||
private static void Command_Swap(CCSPlayerController? player, CommandInfo command)
|
private static void Command_Swap(CCSPlayerController? player, CommandInfo command)
|
||||||
{
|
{
|
||||||
Debug.WriteToDebug($"Player {player?.PlayerName} 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)
|
||||||
{
|
if (!string.IsNullOrEmpty(config.VotingCommands.SwapCommand.Permissions) && !AdminManager.PlayerHasPermissions(player, config.VotingCommands.SwapCommand.Permissions))
|
||||||
if (!config.VotingCommands.SwapCommand.EnableVoting) return;
|
{
|
||||||
player.Vote(VoteType.SwapTeam);
|
if (!config.VotingCommands.SwapCommand.EnableVoting) return;
|
||||||
return;
|
player.Vote(VoteType.SwapTeam);
|
||||||
}
|
return;
|
||||||
|
}
|
||||||
Swap();
|
Swap();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -273,12 +280,13 @@ namespace src.command
|
||||||
private static void Command_Shuffle(CCSPlayerController? player, CommandInfo command)
|
private static void Command_Shuffle(CCSPlayerController? player, CommandInfo command)
|
||||||
{
|
{
|
||||||
Debug.WriteToDebug($"Player {player?.PlayerName} 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)
|
||||||
{
|
if (!string.IsNullOrEmpty(config.VotingCommands.ShuffleCommand.Permissions) && !AdminManager.PlayerHasPermissions(player, config.VotingCommands.ShuffleCommand.Permissions))
|
||||||
if (!config.VotingCommands.ShuffleCommand.EnableVoting) return;
|
{
|
||||||
player.Vote(VoteType.ShuffleTeam);
|
if (!config.VotingCommands.ShuffleCommand.EnableVoting) return;
|
||||||
return;
|
player.Vote(VoteType.ShuffleTeam);
|
||||||
}
|
return;
|
||||||
|
}
|
||||||
Shuffle();
|
Shuffle();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -299,12 +307,13 @@ namespace src.command
|
||||||
private static void Command_Pause(CCSPlayerController? player, CommandInfo command)
|
private static void Command_Pause(CCSPlayerController? player, CommandInfo command)
|
||||||
{
|
{
|
||||||
Debug.WriteToDebug($"Player {player?.PlayerName} 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)
|
||||||
{
|
if (!string.IsNullOrEmpty(config.VotingCommands.PauseCommand.Permissions) && !AdminManager.PlayerHasPermissions(player, config.VotingCommands.PauseCommand.Permissions))
|
||||||
if (!config.VotingCommands.PauseCommand.EnableVoting) return;
|
{
|
||||||
player.Vote(VoteType.PauseGame);
|
if (!config.VotingCommands.PauseCommand.EnableVoting) return;
|
||||||
return;
|
player.Vote(VoteType.PauseGame);
|
||||||
}
|
return;
|
||||||
|
}
|
||||||
Pause();
|
Pause();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -320,7 +329,7 @@ namespace src.command
|
||||||
{
|
{
|
||||||
Debug.WriteToDebug($"Player {player?.PlayerName} 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 (!string.IsNullOrEmpty(config.NormalCommands.HealCommand.Permissions) && !AdminManager.PlayerHasPermissions(player, config.NormalCommands.HealCommand.Permissions)) return;
|
||||||
SkillUtils.AddHealth(player.PlayerPawn.Value, 100);
|
SkillUtils.AddHealth(player.PlayerPawn.Value, 100);
|
||||||
player.PrintToChat($" {ChatColors.Green}{player.GetTranslation("healed")}");
|
player.PrintToChat($" {ChatColors.Green}{player.GetTranslation("healed")}");
|
||||||
}
|
}
|
||||||
|
|
@ -330,7 +339,7 @@ namespace src.command
|
||||||
{
|
{
|
||||||
Debug.WriteToDebug($"Player {player?.PlayerName} 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 (!string.IsNullOrEmpty(config.NormalCommands.HudCommand.Permissions) && !AdminManager.PlayerHasPermissions(player, config.NormalCommands.HudCommand.Permissions)) return;
|
||||||
|
|
||||||
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;
|
||||||
|
|
@ -344,12 +353,13 @@ namespace src.command
|
||||||
private static void Command_SetScore(CCSPlayerController? player, CommandInfo command)
|
private static void Command_SetScore(CCSPlayerController? player, CommandInfo command)
|
||||||
{
|
{
|
||||||
Debug.WriteToDebug($"Player {player?.PlayerName} 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)
|
||||||
{
|
if (!string.IsNullOrEmpty(config.VotingCommands.SetScoreCommand.Permissions) && !AdminManager.PlayerHasPermissions(player, config.VotingCommands.SetScoreCommand.Permissions))
|
||||||
if (!config.VotingCommands.SetScoreCommand.EnableVoting) return;
|
{
|
||||||
player.Vote(VoteType.SetScore, command.ArgString);
|
if (!config.VotingCommands.SetScoreCommand.EnableVoting) return;
|
||||||
return;
|
player.Vote(VoteType.SetScore, command.ArgString);
|
||||||
}
|
return;
|
||||||
|
}
|
||||||
SetScore(player, command);
|
SetScore(player, command);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -369,7 +379,8 @@ namespace src.command
|
||||||
private static void Command_CustomCommand(CCSPlayerController? player, CommandInfo command)
|
private static void Command_CustomCommand(CCSPlayerController? player, CommandInfo command)
|
||||||
{
|
{
|
||||||
Debug.WriteToDebug($"Player {player?.PlayerName} 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) return;
|
||||||
|
if (!string.IsNullOrEmpty(config.NormalCommands.ConsoleCommand.Permissions) && !AdminManager.PlayerHasPermissions(player, config.NormalCommands.ConsoleCommand.Permissions)) return;
|
||||||
string param = command.ArgString;
|
string param = command.ArgString;
|
||||||
Server.ExecuteCommand(param);
|
Server.ExecuteCommand(param);
|
||||||
}
|
}
|
||||||
|
|
@ -378,7 +389,7 @@ namespace src.command
|
||||||
private static void Command_SetStaticSkill(CCSPlayerController? player, CommandInfo command)
|
private static void Command_SetStaticSkill(CCSPlayerController? player, CommandInfo command)
|
||||||
{
|
{
|
||||||
Debug.WriteToDebug($"Player {player?.PlayerName} 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 (!string.IsNullOrEmpty(config.NormalCommands.SetStaticSkillCommand.Permissions) && !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)
|
||||||
|| p.PlayerName.Equals(command.GetArg(1), StringComparison.CurrentCultureIgnoreCase)));
|
|| p.PlayerName.Equals(command.GetArg(1), StringComparison.CurrentCultureIgnoreCase)));
|
||||||
|
|
@ -474,7 +485,7 @@ namespace src.command
|
||||||
{
|
{
|
||||||
Debug.WriteToDebug($"Player {player?.PlayerName} 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 (!string.IsNullOrEmpty(config.NormalCommands.ChangeLanguageCommand.Permissions) && !AdminManager.PlayerHasPermissions(player, config.NormalCommands.ChangeLanguageCommand.Permissions)) return;
|
||||||
|
|
||||||
string fileName;
|
string fileName;
|
||||||
string newLangCode = command.GetArg(1).ToUpper();
|
string newLangCode = command.GetArg(1).ToUpper();
|
||||||
|
|
@ -491,8 +502,8 @@ 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?.PlayerName} used the css_lang {command.ArgString} command.");
|
Debug.WriteToDebug($"Player {player?.PlayerName} used the css_reload {command.ArgString} command.");
|
||||||
if (!AdminManager.PlayerHasPermissions(player, config.NormalCommands.ReloadCommand.Permissions)) return;
|
if (!string.IsNullOrEmpty(config.NormalCommands.ReloadCommand.Permissions) && !AdminManager.PlayerHasPermissions(player, config.NormalCommands.ReloadCommand.Permissions)) return;
|
||||||
|
|
||||||
lock (setLock)
|
lock (setLock)
|
||||||
{
|
{
|
||||||
|
|
@ -520,5 +531,24 @@ namespace src.command
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
[CommandHelper(minArgs: 0, whoCanExecute: CommandUsage.CLIENT_AND_SERVER)]
|
||||||
|
private static void Command_Show(CCSPlayerController? player, CommandInfo command)
|
||||||
|
{
|
||||||
|
MemoryFunctionVoid show_layout = new("55 48 89 E5 41 57 41 56 41 55 41 54 53 48 83 EC 58 80 3D ? ? ? ? 00 75 ? 0F 28 05 ? ? ? ? C6 05 ? ? ? ? 01 0F 29 05 ? ? ? ? 80 3D ? ? ? ? 00 75 ? 66 0F EF C0 C6 05 ? ? ? ? 01 0F 29 05 ? ? ? ? 80 3D ? ? ? ? 00 0F 84 ? ? ? ? 80 3D ? ? ? ? 00 75 ? 31 D2 C6 05 ? ? ? ? 01 48 89 15 ? ? ? ? 48 89 15 ? ? ? ? C6 05 ? ? ? ? 00 80 3D ? ? ? ? 00 0F 85 ? ? ? ? C6 05 ? ? ? ? 01 4C 8D 3D ? ? ? ? 49 8D 9F ? ? ? ? 49 C7 47 ? 00 00 00 00 BE 00 04 00 00 4C 89 FF 45 31 F6 41 C7 47 ? 00 00 00 00 41 C7 47 ? 00 00 00 00 41 C7 07 00 00 00 00 E8 ? ? ? ? EB ? ? ? ? ? ? ? ? 74 ? 41 C7 45 00 00 00 00 00 4D 8B 6F ? 4D 01 F5 41 81 65 ? 00 00 00 C0 49 83 C6 18 49 81 FE 00 60 00 00 0F 84 ? ? ? ? 4D 8B 6F ? 4D 01 F5 45 8B 65 00 45 85 E4 79 ? 41 8B 7D ? 85 FF 0F 88 ? ? ? ? 49 8B 45 ? 49 63 D4 44 89 E6 41 C7 45 00 00 00 00 00 48 8D 14 ? F7 DE 48 C1 E2 03 48 01 D0 48 C7 40 ? 00 00 00 00 48 C7 40 ? 00 00 00 00 48 C7 40 ? 00 00 00 00 41 83 FC FF 74 ? 48 83 C2 28 B9 01 00 00 00 66 66 2E 0F 1F 84 ? 00 00 00 00 66 66 2E 0F 1F 84 ? 00 00 00 00 66 0F 1F 44 ? 00 49 8B 45 ? 83 C1 01 48 01 D0 48 83 C2 28 48 C7 40 ? 00 00 00 00 48 C7 40 ? 00 00 00 00 48 C7 40 ? 00 00 00 00 39 CE 7F ? E9 ? ? ? ? ? 41 8B 75 ? 81 FE FF FF FF 3F 76 ? 89 F0 25 00 00 00 C0 3D 00 00 00 80 0F 85 ? ? ? ? 81 E6 FF FF FF 3F 31 D2 B9 28 00 00 00 E8 ? ? ? ? 49 63 55 ? 66 0F EF C9 31 F6 66 0F 6E C0 49 8B 7D ? 66 0F 38 3D C1 66 0F 7E C0 66 0F 7E 45 ? 48 8D 0C ? 48 98 48 8D 14 ? 48 C1 E1 03 48 C1 E2 03 41 81 7D ? FF FF FF 3F 40 0F 96 C6 E8 ? ? ? ? 41 8B 55 ? 66 0F 6E 45 ? 49 89 45 ? 81 FA FF FF FF 3F 76 ? 81 E2 FF FF FF 3F 41 89 55 ? 66 41 0F 7E 45 ? E9 ? ? ? ? ? ? ? 4D 8D 6F ? 31 C0 41 C6 47 ? 01 41 C7 47 ? FF 03 00 00 4C 89 EF 49 C7 47 ? 00 00 00 00 66 41 89 47 ? 41 C6 47 ? 00 49 C7 47 ? 00 00 00 00 E8 ? ? ? ? BE 01 00 00 00 4C 89 EF E8 ? ? ? ? 49 8D 7F ? 4C 89 EE 49 83 C7 68 E8 ? ? ? ? 4C 39 FB 0F 85 ? ? ? ? 48 8D 05 ? ? ? ? 49 89 DF 48 39 C3 0F 85 ? ? ? ? 48 8D 15 ? ? ? ? 31 F6 48 8D 3D ? ? ? ? E8 ? ? ? ? 80 3D ? ? ? ? 00 4C 8D 65");
|
||||||
|
show_layout.Invoke();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -106,6 +106,7 @@ namespace src
|
||||||
public Skills SpecialSkill { get; set; }
|
public Skills SpecialSkill { get; set; }
|
||||||
public float? SkillChance { get; set; }
|
public float? SkillChance { get; set; }
|
||||||
public bool IsDrawing { get; set; }
|
public bool IsDrawing { get; set; }
|
||||||
|
public DateTime SkillHudExpired { get; set; }
|
||||||
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; }
|
||||||
|
|
|
||||||
|
|
@ -41,6 +41,9 @@ public interface ISkill
|
||||||
public static void SmokegrenadeDetonate(EventSmokegrenadeDetonate _) { }
|
public static void SmokegrenadeDetonate(EventSmokegrenadeDetonate _) { }
|
||||||
public static void SmokegrenadeExpired(EventSmokegrenadeExpired _) { }
|
public static void SmokegrenadeExpired(EventSmokegrenadeExpired _) { }
|
||||||
|
|
||||||
|
public static void OnTriggerEnter(CBaseTrigger _, CBaseEntity __) { }
|
||||||
|
public static void OnTriggerExit(CBaseTrigger _, CBaseEntity __) { }
|
||||||
|
|
||||||
public class SkillConfig { }
|
public class SkillConfig { }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -2,14 +2,15 @@ using CounterStrikeSharp.API;
|
||||||
using CounterStrikeSharp.API.Core;
|
using CounterStrikeSharp.API.Core;
|
||||||
using CounterStrikeSharp.API.Core.Attributes;
|
using CounterStrikeSharp.API.Core.Attributes;
|
||||||
using CounterStrikeSharp.API.Modules.Cvars;
|
using CounterStrikeSharp.API.Modules.Cvars;
|
||||||
|
using CounterStrikeSharp.API.Modules.Entities;
|
||||||
using CounterStrikeSharp.API.Modules.Memory;
|
using CounterStrikeSharp.API.Modules.Memory;
|
||||||
using CounterStrikeSharp.API.Modules.Memory.DynamicFunctions;
|
using CounterStrikeSharp.API.Modules.Memory.DynamicFunctions;
|
||||||
using CounterStrikeSharp.API.Modules.UserMessages;
|
using CounterStrikeSharp.API.Modules.UserMessages;
|
||||||
using CounterStrikeSharp.API.Modules.Utils;
|
using CounterStrikeSharp.API.Modules.Utils;
|
||||||
|
using src.utils;
|
||||||
|
using System.Collections.Concurrent;
|
||||||
using static CounterStrikeSharp.API.Core.Listeners;
|
using static CounterStrikeSharp.API.Core.Listeners;
|
||||||
using static src.jRandomSkills;
|
using static src.jRandomSkills;
|
||||||
using System.Collections.Concurrent;
|
|
||||||
using src.utils;
|
|
||||||
|
|
||||||
namespace src.player
|
namespace src.player
|
||||||
{
|
{
|
||||||
|
|
@ -66,6 +67,9 @@ namespace src.player
|
||||||
|
|
||||||
Instance.HookUserMessage(208, PlayerMakeSound);
|
Instance.HookUserMessage(208, PlayerMakeSound);
|
||||||
VirtualFunctions.CBaseEntity_TakeDamageOldFunc.Hook(OnTakeDamage, HookMode.Pre);
|
VirtualFunctions.CBaseEntity_TakeDamageOldFunc.Hook(OnTakeDamage, HookMode.Pre);
|
||||||
|
|
||||||
|
VirtualFunctions.CBaseTrigger_StartTouchFunc.Hook(OnTriggerEnter, HookMode.Post);
|
||||||
|
VirtualFunctions.CBaseTrigger_EndTouchFunc.Hook(OnTriggerExit, HookMode.Post);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static HookResult PlayerMakeSound(UserMessage um)
|
private static HookResult PlayerMakeSound(UserMessage um)
|
||||||
|
|
@ -255,6 +259,34 @@ namespace src.player
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static HookResult OnTriggerEnter(DynamicHook hook)
|
||||||
|
{
|
||||||
|
lock (setLock)
|
||||||
|
{
|
||||||
|
CBaseTrigger trigger = hook.GetParam<CBaseTrigger>(0);
|
||||||
|
CBaseEntity entity = hook.GetParam<CBaseEntity>(1);
|
||||||
|
|
||||||
|
foreach (var playerSkill in Instance.SkillPlayer)
|
||||||
|
if (!playerSkill.IsDrawing)
|
||||||
|
Instance.SkillAction(playerSkill.Skill.ToString(), "OnTriggerEnter", [trigger, entity]);
|
||||||
|
return HookResult.Continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static HookResult OnTriggerExit(DynamicHook hook)
|
||||||
|
{
|
||||||
|
lock (setLock)
|
||||||
|
{
|
||||||
|
CBaseTrigger trigger = hook.GetParam<CBaseTrigger>(0);
|
||||||
|
CBaseEntity entity = hook.GetParam<CBaseEntity>(1);
|
||||||
|
|
||||||
|
foreach (var playerSkill in Instance.SkillPlayer)
|
||||||
|
if (!playerSkill.IsDrawing)
|
||||||
|
Instance.SkillAction(playerSkill.Skill.ToString(), "OnTriggerExit", [trigger, entity]);
|
||||||
|
return HookResult.Continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private static void OnTick()
|
private static void OnTick()
|
||||||
{
|
{
|
||||||
lock (setLock)
|
lock (setLock)
|
||||||
|
|
@ -461,9 +493,10 @@ namespace src.player
|
||||||
lock (setLock)
|
lock (setLock)
|
||||||
{
|
{
|
||||||
string? button = Config.LoadedConfig.AlternativeSkillButton;
|
string? button = Config.LoadedConfig.AlternativeSkillButton;
|
||||||
if (string.IsNullOrEmpty(button)) return;
|
if (string.IsNullOrEmpty(button) || button.Length < 2) return;
|
||||||
|
string buttonName = $"{char.ToUpper(button[0])}{button[1..].ToLower()}";
|
||||||
|
|
||||||
if (Enum.TryParse<PlayerButtons>(button, out var skillButton))
|
if (Enum.TryParse<PlayerButtons>(buttonName, out var skillButton))
|
||||||
{
|
{
|
||||||
if (pressed != skillButton) return;
|
if (pressed != skillButton) return;
|
||||||
}
|
}
|
||||||
|
|
@ -605,6 +638,7 @@ namespace src.player
|
||||||
Instance?.SkillAction(randomSkill.Skill.ToString(), "EnableSkill", [player]);
|
Instance?.SkillAction(randomSkill.Skill.ToString(), "EnableSkill", [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.SkillHudExpired = DateTime.Now.AddSeconds(Config.LoadedConfig.SkillHudDuration);
|
||||||
skillPlayer.SkillDescriptionHudExpired = DateTime.Now.AddSeconds(Config.LoadedConfig.SkillDescriptionDuration);
|
skillPlayer.SkillDescriptionHudExpired = DateTime.Now.AddSeconds(Config.LoadedConfig.SkillDescriptionDuration);
|
||||||
|
|
||||||
if (Config.LoadedConfig.TeamMateSkillChatInfo)
|
if (Config.LoadedConfig.TeamMateSkillChatInfo)
|
||||||
|
|
|
||||||
|
|
@ -49,7 +49,7 @@ namespace src.player
|
||||||
{
|
{
|
||||||
if (player == null) return;
|
if (player == null) return;
|
||||||
var skillPlayer = Instance.SkillPlayer.FirstOrDefault(p => p.SteamID == player.SteamID);
|
var skillPlayer = Instance.SkillPlayer.FirstOrDefault(p => p.SteamID == player.SteamID);
|
||||||
if (skillPlayer == null || !skillPlayer.DisplayHUD) return;
|
if (skillPlayer == null || !skillPlayer.DisplayHUD || (player.PawnIsAlive && skillPlayer.SkillHudExpired < DateTime.Now)) return;
|
||||||
|
|
||||||
string infoLine = "";
|
string infoLine = "";
|
||||||
string skillLine = "";
|
string skillLine = "";
|
||||||
|
|
|
||||||
|
|
@ -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 == null) return;
|
if (playerInfo == null) return;
|
||||||
playerInfo.SkillUsed = false;
|
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", true));
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void DisableSkill(CCSPlayerController player)
|
public static void DisableSkill(CCSPlayerController player)
|
||||||
|
|
|
||||||
|
|
@ -62,7 +62,7 @@ namespace src.player.skills
|
||||||
ResetMoney(enemy);
|
ResetMoney(enemy);
|
||||||
playerInfo.SkillUsed = true;
|
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}" + enemy.GetTranslation("bankrupt_enemy_info"));
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void EnableSkill(CCSPlayerController player)
|
public static void EnableSkill(CCSPlayerController player)
|
||||||
|
|
|
||||||
|
|
@ -66,8 +66,12 @@ namespace src.player.skills
|
||||||
if (player == null) continue;
|
if (player == null) continue;
|
||||||
foreach ((var playerId, var itemList) in invisibleEntities)
|
foreach ((var playerId, var itemList) in invisibleEntities)
|
||||||
if (player.SteamID != playerId)
|
if (player.SteamID != playerId)
|
||||||
foreach (var item in itemList)
|
foreach (var entityIndex in itemList)
|
||||||
info.TransmitEntities.Remove(item);
|
{
|
||||||
|
var entity = Utilities.GetEntityFromIndex<CBaseEntity>((int)entityIndex);
|
||||||
|
if (entity == null || !entity.IsValid) continue;
|
||||||
|
info.TransmitEntities.Remove(entity.Index);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -81,7 +81,7 @@ namespace src.player.skills
|
||||||
SetUpPostProcessing(enemy);
|
SetUpPostProcessing(enemy);
|
||||||
playerInfo.SkillUsed = true;
|
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}" + enemy.GetTranslation("darkness_enemy_info"));
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void EnableSkill(CCSPlayerController player)
|
public static void EnableSkill(CCSPlayerController player)
|
||||||
|
|
|
||||||
|
|
@ -114,7 +114,7 @@ namespace src.player.skills
|
||||||
Instance.SkillAction(enemyInfo.Skill.ToString(), "DisableSkill", [enemy]);
|
Instance.SkillAction(enemyInfo.Skill.ToString(), "DisableSkill", [enemy]);
|
||||||
enemyInfo.SpecialSkill = enemyInfo.Skill;
|
enemyInfo.SpecialSkill = enemyInfo.Skill;
|
||||||
enemyInfo.Skill = Skills.None;
|
enemyInfo.Skill = Skills.None;
|
||||||
enemy.PrintToChat($" {ChatColors.Red}" + player.GetTranslation("deactivator_enemy_info"));
|
enemy.PrintToChat($" {ChatColors.Red}" + enemy.GetTranslation("deactivator_enemy_info"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -73,7 +73,7 @@ namespace src.player.skills
|
||||||
deafPlayers.TryAdd(enemy, 0);
|
deafPlayers.TryAdd(enemy, 0);
|
||||||
playerInfo.SkillUsed = true;
|
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}" + enemy.GetTranslation("deaf_enemy_info"));
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void EnableSkill(CCSPlayerController player)
|
public static void EnableSkill(CCSPlayerController player)
|
||||||
|
|
|
||||||
|
|
@ -86,24 +86,14 @@ namespace src.player.skills
|
||||||
{
|
{
|
||||||
skillInfo.CanUse = false;
|
skillInfo.CanUse = false;
|
||||||
skillInfo.Cooldown = DateTime.Now;
|
skillInfo.Cooldown = DateTime.Now;
|
||||||
playerPawn.Teleport(GetEnemySpawnVector(player));
|
|
||||||
|
var spawnpoint = SkillUtils.GetSpawnPointVector(player, true);
|
||||||
|
if (spawnpoint == null) return;
|
||||||
|
playerPawn.Teleport(spawnpoint);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static Vector GetEnemySpawnVector(CCSPlayerController player)
|
|
||||||
{
|
|
||||||
var abs = player!.PlayerPawn!.Value?.AbsOrigin;
|
|
||||||
var spawns = Utilities.FindAllEntitiesByDesignerName<SpawnPoint>(player.Team == CsTeam.CounterTerrorist ? "info_player_terrorist" : "info_player_counterterrorist").ToList();
|
|
||||||
if (spawns.Count != 0)
|
|
||||||
{
|
|
||||||
var randomSpawn = spawns[Instance.Random.Next(spawns.Count)];
|
|
||||||
if (randomSpawn.AbsOrigin != null)
|
|
||||||
return randomSpawn.AbsOrigin;
|
|
||||||
}
|
|
||||||
return abs == null ? new Vector(0, 0, 0) : new Vector(abs.X, abs.Y, abs.Z);
|
|
||||||
}
|
|
||||||
|
|
||||||
public class PlayerSkillInfo
|
public class PlayerSkillInfo
|
||||||
{
|
{
|
||||||
public ulong SteamID { get; set; }
|
public ulong SteamID { get; set; }
|
||||||
|
|
|
||||||
|
|
@ -41,8 +41,12 @@ namespace src.player.skills
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (skill.Skill == skillName)
|
if (skill.Skill == skillName && !TakeMoney(player))
|
||||||
TakeMoney(player);
|
{
|
||||||
|
player.PrintToChat($" {ChatColors.Red}" + player.GetTranslation("gambler_no_money"));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
Instance.AddTimer(.1f, () =>
|
Instance.AddTimer(.1f, () =>
|
||||||
{
|
{
|
||||||
playerInfo.Skill = skill.Skill;
|
playerInfo.Skill = skill.Skill;
|
||||||
|
|
@ -60,12 +64,19 @@ namespace src.player.skills
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void TakeMoney(CCSPlayerController player)
|
private static bool TakeMoney(CCSPlayerController player)
|
||||||
{
|
{
|
||||||
if (player == null || !player.IsValid || player.InGameMoneyServices == null) return;
|
if (player == null || !player.IsValid || player.InGameMoneyServices == null) return false;
|
||||||
var account = player.InGameMoneyServices.Account;
|
int account = player.InGameMoneyServices.Account;
|
||||||
player.InGameMoneyServices.Account = Math.Max(0, account - SkillsInfo.GetValue<int>(skillName, "refreshPrice"));
|
int refreshPrice = SkillsInfo.GetValue<int>(skillName, "refreshPrice");
|
||||||
|
|
||||||
|
int remainingMoney = account - refreshPrice;
|
||||||
|
if (remainingMoney < 0)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
player.InGameMoneyServices.Account = remainingMoney;
|
||||||
Utilities.SetStateChanged(player, "CCSPlayerController", "m_pInGameMoneyServices");
|
Utilities.SetStateChanged(player, "CCSPlayerController", "m_pInGameMoneyServices");
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void EnableSkill(CCSPlayerController player)
|
public static void EnableSkill(CCSPlayerController player)
|
||||||
|
|
@ -81,7 +92,7 @@ namespace src.player.skills
|
||||||
|
|
||||||
ConcurrentBag<(string, string)> menuItems = [(player.GetSkillName(firstSkill.Skill), firstSkill.Skill.ToString()),
|
ConcurrentBag<(string, string)> menuItems = [(player.GetSkillName(firstSkill.Skill), firstSkill.Skill.ToString()),
|
||||||
(player.GetSkillName(secondSkill.Skill), secondSkill.Skill.ToString())];
|
(player.GetSkillName(secondSkill.Skill), secondSkill.Skill.ToString())];
|
||||||
SkillUtils.CreateMenu(player, menuItems, (player.GetTranslation("gambler_more", SkillsInfo.GetValue<int>(skillName, "refreshPrice")), skillName.ToString()));
|
SkillUtils.CreateMenu(player, menuItems, (player.GetTranslation("gambler_more", SkillsInfo.GetValue<int>(skillName, "refreshPrice")), skillName.ToString(), false));
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void DisableSkill(CCSPlayerController player)
|
public static void DisableSkill(CCSPlayerController player)
|
||||||
|
|
|
||||||
|
|
@ -70,8 +70,12 @@ namespace src.player.skills
|
||||||
if (player == null) continue;
|
if (player == null) continue;
|
||||||
foreach ((var playerId, var itemList) in invisibleEntities)
|
foreach ((var playerId, var itemList) in invisibleEntities)
|
||||||
if (player.SteamID != playerId)
|
if (player.SteamID != playerId)
|
||||||
foreach (var item in itemList)
|
foreach (var entityIndex in itemList)
|
||||||
info.TransmitEntities.Remove(item);
|
{
|
||||||
|
var entity = Utilities.GetEntityFromIndex<CBaseEntity>((int)entityIndex);
|
||||||
|
if (entity == null || !entity.IsValid) continue;
|
||||||
|
info.TransmitEntities.Remove(entity.Index);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -47,8 +47,12 @@ namespace src.player.skills
|
||||||
var observerInfo = Instance.SkillPlayer.FirstOrDefault(p => p.SteamID == observedPlayer?.SteamID);
|
var observerInfo = Instance.SkillPlayer.FirstOrDefault(p => p.SteamID == observedPlayer?.SteamID);
|
||||||
|
|
||||||
if (playerInfo?.Skill != skillName && observerInfo?.Skill != skillName) continue;
|
if (playerInfo?.Skill != skillName && observerInfo?.Skill != skillName) continue;
|
||||||
foreach (var smoke in smokes.Keys)
|
foreach (var entityIndex in smokes.Keys)
|
||||||
info.TransmitEntities.Remove(smoke);
|
{
|
||||||
|
var entity = Utilities.GetEntityFromIndex<CBaseEntity>((int)entityIndex);
|
||||||
|
if (entity == null || !entity.IsValid) continue;
|
||||||
|
info.TransmitEntities.Remove(entity.Index);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -76,7 +76,7 @@ namespace src.player.skills
|
||||||
enemy.ReplicateConVar("sv_disable_radar", "1");
|
enemy.ReplicateConVar("sv_disable_radar", "1");
|
||||||
playerInfo.SkillUsed = true;
|
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}" + enemy.GetTranslation("glitch_enemy_info"));
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void EnableSkill(CCSPlayerController player)
|
public static void EnableSkill(CCSPlayerController player)
|
||||||
|
|
|
||||||
|
|
@ -46,10 +46,15 @@ namespace src.player.skills
|
||||||
var observerInfo = Instance.SkillPlayer.FirstOrDefault(p => p.SteamID == observedPlayer?.SteamID);
|
var observerInfo = Instance.SkillPlayer.FirstOrDefault(p => p.SteamID == observedPlayer?.SteamID);
|
||||||
|
|
||||||
foreach (var beam in beams)
|
foreach (var beam in beams)
|
||||||
|
{
|
||||||
|
var entity = Utilities.GetEntityFromIndex<CBaseEntity>((int)beam.Index);
|
||||||
|
if (entity == null || !entity.IsValid) continue;
|
||||||
|
|
||||||
if (playerInfo?.Skill != skillName && observerInfo?.Skill != skillName)
|
if (playerInfo?.Skill != skillName && observerInfo?.Skill != skillName)
|
||||||
info.TransmitEntities.Remove(beam);
|
info.TransmitEntities.Remove(entity.Index);
|
||||||
else if (enemy.Team == player.Team)
|
else if (enemy.Team == player.Team)
|
||||||
info.TransmitEntities.Remove(beam);
|
info.TransmitEntities.Remove(beam.Index);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -71,7 +71,7 @@ namespace src.player.skills
|
||||||
SetCrosshair(enemy, false);
|
SetCrosshair(enemy, false);
|
||||||
playerInfo.SkillUsed = true;
|
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}" + enemy.GetTranslation("jammer_enemy_info"));
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void SetCrosshair(CCSPlayerController player, bool enabled)
|
private static void SetCrosshair(CCSPlayerController player, bool enabled)
|
||||||
|
|
|
||||||
|
|
@ -81,7 +81,7 @@ namespace src.player.skills
|
||||||
bannedPlayers.AddOrUpdate(enemy.PlayerPawn.Value, 0, (k, v) => 0);
|
bannedPlayers.AddOrUpdate(enemy.PlayerPawn.Value, 0, (k, v) => 0);
|
||||||
playerInfo.SkillUsed = true;
|
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}" + enemy.GetTranslation("jumpban_enemy_info"));
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void EnableSkill(CCSPlayerController player)
|
public static void EnableSkill(CCSPlayerController player)
|
||||||
|
|
|
||||||
|
|
@ -62,7 +62,7 @@ namespace src.player.skills
|
||||||
SwapHealth(player, enemy);
|
SwapHealth(player, enemy);
|
||||||
playerInfo.SkillUsed = true;
|
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}" + enemy.GetTranslation("lifeswap_enemy_info"));
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void EnableSkill(CCSPlayerController player)
|
public static void EnableSkill(CCSPlayerController player)
|
||||||
|
|
|
||||||
|
|
@ -77,7 +77,7 @@ namespace src.player.skills
|
||||||
|
|
||||||
playerInfo.SkillUsed = true;
|
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}" + enemy.GetTranslation("magnifier_enemy_info"));
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void EnableSkill(CCSPlayerController player)
|
public static void EnableSkill(CCSPlayerController player)
|
||||||
|
|
|
||||||
|
|
@ -62,7 +62,7 @@ namespace src.player.skills
|
||||||
SwapMoney(player, enemy);
|
SwapMoney(player, enemy);
|
||||||
playerInfo.SkillUsed = true;
|
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}" + enemy.GetTranslation("moneyswap_enemy_info"));
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void EnableSkill(CCSPlayerController player)
|
public static void EnableSkill(CCSPlayerController player)
|
||||||
|
|
|
||||||
|
|
@ -54,8 +54,12 @@ namespace src.player.skills
|
||||||
if (player == null) continue;
|
if (player == null) continue;
|
||||||
foreach ((var playerId, var itemList) in invisibleEntities)
|
foreach ((var playerId, var itemList) in invisibleEntities)
|
||||||
if (player.SteamID != playerId)
|
if (player.SteamID != playerId)
|
||||||
foreach (var item in itemList)
|
foreach (var entityIndex in itemList)
|
||||||
info.TransmitEntities.Remove(item);
|
{
|
||||||
|
var entity = Utilities.GetEntityFromIndex<CBaseEntity>((int)entityIndex);
|
||||||
|
if (entity == null || !entity.IsValid) continue;
|
||||||
|
info.TransmitEntities.Remove(entity.Index);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -74,7 +74,7 @@ namespace src.player.skills
|
||||||
poisonedPlayers.TryAdd(enemy, 0);
|
poisonedPlayers.TryAdd(enemy, 0);
|
||||||
playerInfo.SkillUsed = true;
|
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}" + enemy.GetTranslation("poison_enemy_info"));
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void EnableSkill(CCSPlayerController player)
|
public static void EnableSkill(CCSPlayerController player)
|
||||||
|
|
|
||||||
|
|
@ -83,7 +83,7 @@ namespace src.player.skills
|
||||||
CheckWeapon(enemy);
|
CheckWeapon(enemy);
|
||||||
playerInfo.SkillUsed = true;
|
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}" + enemy.GetTranslation("primaryban_enemy_info"));
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void CheckWeapon(CCSPlayerController player)
|
private static void CheckWeapon(CCSPlayerController player)
|
||||||
|
|
|
||||||
|
|
@ -84,22 +84,14 @@ namespace src.player.skills
|
||||||
{
|
{
|
||||||
skillInfo.CanUse = false;
|
skillInfo.CanUse = false;
|
||||||
skillInfo.Cooldown = DateTime.Now;
|
skillInfo.Cooldown = DateTime.Now;
|
||||||
playerPawn.Teleport(GetSpawnVector(player));
|
|
||||||
|
var spawnpoint = SkillUtils.GetSpawnPointVector(player);
|
||||||
|
if (spawnpoint == null) return;
|
||||||
|
playerPawn.Teleport(spawnpoint);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static Vector? GetSpawnVector(CCSPlayerController player)
|
|
||||||
{
|
|
||||||
var spawns = Utilities.FindAllEntitiesByDesignerName<SpawnPoint>(player.Team == CsTeam.Terrorist ? "info_player_terrorist" : "info_player_counterterrorist").ToList();
|
|
||||||
if (spawns.Count != 0)
|
|
||||||
{
|
|
||||||
var randomSpawn = spawns[Instance.Random.Next(spawns.Count)];
|
|
||||||
return randomSpawn.AbsOrigin;
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
public class PlayerSkillInfo
|
public class PlayerSkillInfo
|
||||||
{
|
{
|
||||||
public ulong SteamID { get; set; }
|
public ulong SteamID { get; set; }
|
||||||
|
|
|
||||||
|
|
@ -35,9 +35,10 @@ namespace src.player.skills
|
||||||
if (playersToSender.ContainsKey(victim!.Handle))
|
if (playersToSender.ContainsKey(victim!.Handle))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
var spawn = GetSpawnVector(victim);
|
var spawnpoint = SkillUtils.GetSpawnPointVector(victim);
|
||||||
if (spawn == null) return;
|
if (spawnpoint == null) return;
|
||||||
victim!.PlayerPawn!.Value!.Teleport(spawn);
|
|
||||||
|
victim!.PlayerPawn!.Value!.Teleport(spawnpoint);
|
||||||
playersToSender.TryAdd(victim.Handle, 0);
|
playersToSender.TryAdd(victim.Handle, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -46,17 +47,6 @@ namespace src.player.skills
|
||||||
playersToSender.TryRemove(player.Handle, out _);
|
playersToSender.TryRemove(player.Handle, out _);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static Vector? GetSpawnVector(CCSPlayerController player)
|
|
||||||
{
|
|
||||||
var spawns = Utilities.FindAllEntitiesByDesignerName<SpawnPoint>(player.Team == CsTeam.Terrorist ? "info_player_terrorist" : "info_player_counterterrorist").ToList();
|
|
||||||
if (spawns.Count != 0)
|
|
||||||
{
|
|
||||||
var randomSpawn = spawns[Instance.Random.Next(spawns.Count)];
|
|
||||||
return randomSpawn.AbsOrigin;
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
public class SkillConfig(Skills skill = skillName, bool active = true, string color = "#a68132", CsTeam onlyTeam = CsTeam.None, bool disableOnFreezeTime = false, bool needsTeammates = false) : SkillsInfo.DefaultSkillInfo(skill, active, color, onlyTeam, disableOnFreezeTime, needsTeammates)
|
public class SkillConfig(Skills skill = skillName, bool active = true, string color = "#a68132", CsTeam onlyTeam = CsTeam.None, bool disableOnFreezeTime = false, bool needsTeammates = false) : SkillsInfo.DefaultSkillInfo(skill, active, color, onlyTeam, disableOnFreezeTime, needsTeammates)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -40,9 +40,10 @@ namespace src.player.skills
|
||||||
{
|
{
|
||||||
secondLifePlayers.TryAdd(victim.Handle, 0);
|
secondLifePlayers.TryAdd(victim.Handle, 0);
|
||||||
SetHealth(victim, SkillsInfo.GetValue<int>(skillName, "startHealth"));
|
SetHealth(victim, SkillsInfo.GetValue<int>(skillName, "startHealth"));
|
||||||
var spawn = GetSpawnVector(victim);
|
|
||||||
if (spawn != null)
|
var spawnpoint = SkillUtils.GetSpawnPointVector(victim);
|
||||||
victimPawn.Teleport(spawn, victimPawn.AbsRotation, null);
|
if (spawnpoint == null) return;
|
||||||
|
victimPawn.Teleport(spawnpoint, victimPawn.AbsRotation, null);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -70,21 +71,6 @@ namespace src.player.skills
|
||||||
Utilities.SetStateChanged(pawn, "CCSPlayerPawn", "m_ArmorValue");
|
Utilities.SetStateChanged(pawn, "CCSPlayerPawn", "m_ArmorValue");
|
||||||
}
|
}
|
||||||
|
|
||||||
private static Vector? GetSpawnVector(CCSPlayerController player)
|
|
||||||
{
|
|
||||||
var pawn = player.PlayerPawn.Value;
|
|
||||||
if (pawn == null || !pawn.IsValid) return null;
|
|
||||||
|
|
||||||
var abs = pawn.AbsOrigin;
|
|
||||||
var spawns = Utilities.FindAllEntitiesByDesignerName<SpawnPoint>(player.Team == CsTeam.Terrorist ? "info_player_terrorist" : "info_player_counterterrorist").ToList();
|
|
||||||
if (spawns.Count != 0)
|
|
||||||
{
|
|
||||||
var randomSpawn = spawns[Instance.Random.Next(spawns.Count)];
|
|
||||||
return randomSpawn.AbsOrigin;
|
|
||||||
}
|
|
||||||
return abs == null ? null : new Vector(abs.X, abs.Y, abs.Z);
|
|
||||||
}
|
|
||||||
|
|
||||||
public class SkillConfig(Skills skill = skillName, bool active = true, string color = "#d41c1c", CsTeam onlyTeam = CsTeam.None, bool disableOnFreezeTime = false, bool needsTeammates = false, int startHealth = 50) : SkillsInfo.DefaultSkillInfo(skill, active, color, onlyTeam, disableOnFreezeTime, needsTeammates)
|
public class SkillConfig(Skills skill = skillName, bool active = true, string color = "#d41c1c", CsTeam onlyTeam = CsTeam.None, bool disableOnFreezeTime = false, bool needsTeammates = false, int startHealth = 50) : SkillsInfo.DefaultSkillInfo(skill, active, color, onlyTeam, disableOnFreezeTime, needsTeammates)
|
||||||
{
|
{
|
||||||
public int StartHealth { get; set; } = startHealth;
|
public int StartHealth { get; set; } = startHealth;
|
||||||
|
|
|
||||||
|
|
@ -102,7 +102,11 @@ namespace src.player.skills
|
||||||
{
|
{
|
||||||
foreach (var enemy in Utilities.GetPlayers().Where(p => p.Team != player.Team))
|
foreach (var enemy in Utilities.GetPlayers().Where(p => p.Team != player.Team))
|
||||||
if (enemy != null && enemy.IsValid && enemy.PawnIsAlive && enemy.PlayerPawn.Value != null && enemy.PlayerPawn.Value.IsValid)
|
if (enemy != null && enemy.IsValid && enemy.PawnIsAlive && enemy.PlayerPawn.Value != null && enemy.PlayerPawn.Value.IsValid)
|
||||||
enemy.PlayerPawn.Value.EmitSound($"C4.PlantSoundB", volume: 1f);
|
enemy.PlayerPawn.Value.EmitSound(
|
||||||
|
enemy.Team == CsTeam.CounterTerrorist
|
||||||
|
? SkillsInfo.GetValue<string>(skillName, "CTSoundEvent")
|
||||||
|
: SkillsInfo.GetValue<string>(skillName, "TSoundEvent")
|
||||||
|
, volume: 1f);
|
||||||
}
|
}
|
||||||
|
|
||||||
public class PlayerSkillInfo
|
public class PlayerSkillInfo
|
||||||
|
|
@ -112,9 +116,11 @@ namespace src.player.skills
|
||||||
public DateTime Cooldown { get; set; }
|
public DateTime Cooldown { get; set; }
|
||||||
}
|
}
|
||||||
|
|
||||||
public class SkillConfig(Skills skill = skillName, bool active = true, string color = "#e3ed8c", CsTeam onlyTeam = CsTeam.None, bool disableOnFreezeTime = false, bool needsTeammates = false, float cooldown = 5f) : SkillsInfo.DefaultSkillInfo(skill, active, color, onlyTeam, disableOnFreezeTime, needsTeammates)
|
public class SkillConfig(Skills skill = skillName, bool active = true, string color = "#e3ed8c", CsTeam onlyTeam = CsTeam.None, bool disableOnFreezeTime = false, bool needsTeammates = false, float cooldown = 5f, string ctSoundEvent = "c4.disarmstart", string tSoundEvent = "C4.PlantSoundB") : SkillsInfo.DefaultSkillInfo(skill, active, color, onlyTeam, disableOnFreezeTime, needsTeammates)
|
||||||
{
|
{
|
||||||
public float Cooldown { get; set; } = cooldown;
|
public float Cooldown { get; set; } = cooldown;
|
||||||
|
public string CTSoundEvent { get; set; } = ctSoundEvent;
|
||||||
|
public string TSoundEvent { get; set; } = tSoundEvent;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -152,7 +152,7 @@ namespace src.player.skills
|
||||||
Instance.SkillAction(enemySkill.ToString(), "DisableSkill", [enemy]);
|
Instance.SkillAction(enemySkill.ToString(), "DisableSkill", [enemy]);
|
||||||
enemyInfo.SpecialSkill = enemySkill;
|
enemyInfo.SpecialSkill = enemySkill;
|
||||||
enemyInfo.Skill = Skills.None;
|
enemyInfo.Skill = Skills.None;
|
||||||
enemy.PrintToChat($" {ChatColors.Red}" + player.GetTranslation("thief_enemy_info"));
|
enemy.PrintToChat($" {ChatColors.Red}" + enemy.GetTranslation("thief_enemy_info"));
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,11 @@
|
||||||
using CounterStrikeSharp.API;
|
using CounterStrikeSharp.API;
|
||||||
using CounterStrikeSharp.API.Core;
|
using CounterStrikeSharp.API.Core;
|
||||||
using CounterStrikeSharp.API.Modules.Entities.Constants;
|
using CounterStrikeSharp.API.Modules.Entities.Constants;
|
||||||
|
using CounterStrikeSharp.API.Modules.Memory;
|
||||||
using CounterStrikeSharp.API.Modules.Utils;
|
using CounterStrikeSharp.API.Modules.Utils;
|
||||||
using src.utils;
|
using src.utils;
|
||||||
using System.Collections.Concurrent;
|
using System.Collections.Concurrent;
|
||||||
|
using System.Reflection.Metadata;
|
||||||
using static src.jRandomSkills;
|
using static src.jRandomSkills;
|
||||||
|
|
||||||
namespace src.player.skills
|
namespace src.player.skills
|
||||||
|
|
@ -11,7 +13,10 @@ namespace src.player.skills
|
||||||
public class ToxicSmoke : ISkill
|
public class ToxicSmoke : ISkill
|
||||||
{
|
{
|
||||||
private const Skills skillName = Skills.ToxicSmoke;
|
private const Skills skillName = Skills.ToxicSmoke;
|
||||||
private static readonly ConcurrentDictionary<Vector, byte> smokes = [];
|
private static readonly ConcurrentDictionary<CCSPlayerController, byte> players = [];
|
||||||
|
private static readonly ConcurrentDictionary<CTriggerMultiple, byte> triggers = [];
|
||||||
|
|
||||||
|
private const string triggerName = "toxic_smoke";
|
||||||
|
|
||||||
public static void LoadSkill()
|
public static void LoadSkill()
|
||||||
{
|
{
|
||||||
|
|
@ -20,7 +25,8 @@ namespace src.player.skills
|
||||||
|
|
||||||
public static void NewRound()
|
public static void NewRound()
|
||||||
{
|
{
|
||||||
smokes.Clear();
|
players.Clear();
|
||||||
|
triggers.Clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void EnableSkill(CCSPlayerController player)
|
public static void EnableSkill(CCSPlayerController player)
|
||||||
|
|
@ -28,6 +34,28 @@ namespace src.player.skills
|
||||||
SkillUtils.TryGiveWeapon(player, CsItem.SmokeGrenade);
|
SkillUtils.TryGiveWeapon(player, CsItem.SmokeGrenade);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void OnTriggerEnter(CBaseTrigger trigger, CBaseEntity entity)
|
||||||
|
{
|
||||||
|
if (!trigger.Globalname.StartsWith(triggerName) || entity.DesignerName != "player") return;
|
||||||
|
|
||||||
|
CCSPlayerPawn playerPawn = new(entity.Handle);
|
||||||
|
if (playerPawn == null || playerPawn.Controller?.Value == null)return;
|
||||||
|
CCSPlayerController player = playerPawn.Controller.Value.As<CCSPlayerController>();
|
||||||
|
if (player == null) return;
|
||||||
|
|
||||||
|
players.TryAdd(player, 0);
|
||||||
|
Server.PrintToChatAll($"Enter: {player?.PlayerName}");
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void OnTriggerExit(CBaseTrigger trigger, CBaseEntity entity)
|
||||||
|
{
|
||||||
|
if (!trigger.Globalname.StartsWith(triggerName) || entity.DesignerName != "player") return;
|
||||||
|
var player = entity.As<CCSPlayerController>();
|
||||||
|
if (player == null) return;
|
||||||
|
players.TryRemove(player, out _);
|
||||||
|
Server.PrintToChatAll($"Exit: {player?.PlayerName}");
|
||||||
|
}
|
||||||
|
|
||||||
public static void OnEntitySpawned(CEntityInstance entity)
|
public static void OnEntitySpawned(CEntityInstance entity)
|
||||||
{
|
{
|
||||||
var name = entity.DesignerName;
|
var name = entity.DesignerName;
|
||||||
|
|
@ -60,7 +88,14 @@ namespace src.player.skills
|
||||||
if (player == null || !player.IsValid) return;
|
if (player == null || !player.IsValid) return;
|
||||||
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;
|
||||||
smokes.TryAdd(new Vector(@event.X, @event.Y, @event.Z), 0);
|
|
||||||
|
var trigger = SkillUtils.CreateTrigger(triggerName, SkillsInfo.GetValue<float>(skillName, "smokeRadius"), new Vector(@event.X, @event.Y, @event.Z));
|
||||||
|
if (trigger == null) return;
|
||||||
|
triggers.TryAdd(trigger, 0);
|
||||||
|
|
||||||
|
new VirtualFunctionVoid<CBaseEntity>(trigger.Handle, 153);
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void SmokegrenadeExpired(EventSmokegrenadeExpired @event)
|
public static void SmokegrenadeExpired(EventSmokegrenadeExpired @event)
|
||||||
|
|
@ -69,8 +104,12 @@ namespace src.player.skills
|
||||||
if (player == null || !player.IsValid) return;
|
if (player == null || !player.IsValid) return;
|
||||||
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;
|
||||||
foreach (var smoke in smokes.Keys.Where(v => v.X == @event.X && v.Y == @event.Y && v.Z == @event.Z))
|
|
||||||
smokes.TryRemove(smoke, out _);
|
foreach (var trigger in triggers.Keys.Where(t => t.AbsOrigin?.X == @event.X && t.AbsOrigin?.Y == @event.Y && t.AbsOrigin?.Z == @event.Z))
|
||||||
|
{
|
||||||
|
triggers.TryRemove(trigger, out _);
|
||||||
|
trigger.AcceptInput("Kill");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void AddHealth(CCSPlayerPawn player, int health)
|
private static void AddHealth(CCSPlayerPawn player, int health)
|
||||||
|
|
@ -88,13 +127,12 @@ namespace src.player.skills
|
||||||
|
|
||||||
public static void OnTick()
|
public static void OnTick()
|
||||||
{
|
{
|
||||||
foreach (Vector smokePos in smokes.Keys)
|
if (Server.TickCount % 17 != 0) return;
|
||||||
foreach (var player in Utilities.GetPlayers())
|
foreach (var player in players.Keys)
|
||||||
if (Server.TickCount % 17 == 0)
|
{
|
||||||
if (player != null && player.IsValid && player.PlayerPawn.Value != null && player.PlayerPawn.Value.IsValid)
|
if (player == null || !player.IsValid || player.PlayerPawn.Value == null || !player.PlayerPawn.Value.IsValid || !player.PawnIsAlive) return;
|
||||||
if (player.PlayerPawn.Value.LifeState == (byte)LifeState_t.LIFE_ALIVE && player.PlayerPawn.Value.AbsOrigin != null)
|
AddHealth(player.PlayerPawn.Value, -SkillsInfo.GetValue<int>(skillName, "smokeDamage"));
|
||||||
if (SkillUtils.GetDistance(smokePos, player.PlayerPawn.Value.AbsOrigin) <= SkillsInfo.GetValue<float>(skillName, "smokeRadius"))
|
}
|
||||||
AddHealth(player.PlayerPawn.Value, -SkillsInfo.GetValue<int>(skillName, "smokeDamage"));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public class SkillConfig(Skills skill = skillName, bool active = true, string color = "#507529", CsTeam onlyTeam = CsTeam.None, bool disableOnFreezeTime = false, bool needsTeammates = false, int smokeDamage = 2, float smokeRadius = 180) : SkillsInfo.DefaultSkillInfo(skill, active, color, onlyTeam, disableOnFreezeTime, needsTeammates)
|
public class SkillConfig(Skills skill = skillName, bool active = true, string color = "#507529", CsTeam onlyTeam = CsTeam.None, bool disableOnFreezeTime = false, bool needsTeammates = false, int smokeDamage = 2, float smokeRadius = 180) : SkillsInfo.DefaultSkillInfo(skill, active, color, onlyTeam, disableOnFreezeTime, needsTeammates)
|
||||||
|
|
|
||||||
|
|
@ -35,8 +35,14 @@ namespace src.player.skills
|
||||||
if (glow.Item3 != player.Team && (playerInfo?.Skill == skillName || (observerInfo != null && observerInfo?.Skill == skillName)))
|
if (glow.Item3 != player.Team && (playerInfo?.Skill == skillName || (observerInfo != null && observerInfo?.Skill == skillName)))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
info.TransmitEntities.Remove(glow.Item1);
|
var glowEntity1 = Utilities.GetEntityFromIndex<CBaseEntity>((int)glow.Item1.Index);
|
||||||
info.TransmitEntities.Remove(glow.Item2);
|
if (glowEntity1 == null || !glowEntity1.IsValid) continue;
|
||||||
|
|
||||||
|
var glowEntity2 = Utilities.GetEntityFromIndex<CBaseEntity>((int)glow.Item2.Index);
|
||||||
|
if (glowEntity2 == null || !glowEntity2.IsValid) continue;
|
||||||
|
|
||||||
|
info.TransmitEntities.Remove(glowEntity1.Index);
|
||||||
|
info.TransmitEntities.Remove(glowEntity2.Index);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -50,10 +50,12 @@ namespace src.player.skills
|
||||||
|
|
||||||
var roundTime = SkillsInfo.GetValue<int>(skillName, "changeRoundTime");
|
var roundTime = SkillsInfo.GetValue<int>(skillName, "changeRoundTime");
|
||||||
Instance.GameRules.RoundTime += player.Team == CsTeam.Terrorist ? roundTime : -roundTime;
|
Instance.GameRules.RoundTime += player.Team == CsTeam.Terrorist ? roundTime : -roundTime;
|
||||||
|
|
||||||
if (player.Team == CsTeam.Terrorist)
|
if (player.Team == CsTeam.Terrorist)
|
||||||
Localization.PrintTranslationToChatAll($" {ChatColors.Orange}{{0}}", ["watchmaker_tt"], [roundTime]);
|
Localization.PrintTranslationToChatAll($" {ChatColors.Orange}{{0}}", ["watchmaker_tt"], [roundTime]);
|
||||||
else
|
else
|
||||||
Localization.PrintTranslationToChatAll($" {ChatColors.LightBlue}{{0}}", ["watchmaker_ct"], [roundTime]);
|
Localization.PrintTranslationToChatAll($" {ChatColors.LightBlue}{{0}}", ["watchmaker_ct"], [roundTime]);
|
||||||
|
player.EmitSound(SkillsInfo.GetValue<string>(skillName, "SoundEvent"));
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void OnTick()
|
public static void OnTick()
|
||||||
|
|
@ -80,9 +82,10 @@ namespace src.player.skills
|
||||||
playerInfo.PrintHTML = SkillUtils.SecondsToTimer(seconds);
|
playerInfo.PrintHTML = SkillUtils.SecondsToTimer(seconds);
|
||||||
}
|
}
|
||||||
|
|
||||||
public class SkillConfig(Skills skill = skillName, bool active = true, string color = "#ff462e", CsTeam onlyTeam = CsTeam.None, bool disableOnFreezeTime = false, bool needsTeammates = false, int changeRoundTime = 10) : SkillsInfo.DefaultSkillInfo(skill, active, color, onlyTeam, disableOnFreezeTime, needsTeammates)
|
public class SkillConfig(Skills skill = skillName, bool active = true, string color = "#ff462e", CsTeam onlyTeam = CsTeam.None, bool disableOnFreezeTime = false, bool needsTeammates = false, int changeRoundTime = 10, string soundEvent = "UIPanorama.sidemenu_select") : SkillsInfo.DefaultSkillInfo(skill, active, color, onlyTeam, disableOnFreezeTime, needsTeammates)
|
||||||
{
|
{
|
||||||
public int ChangeRoundTime { get; set; } = changeRoundTime;
|
public int ChangeRoundTime { get; set; } = changeRoundTime;
|
||||||
|
public string SoundEvent { get; set; } = soundEvent;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -77,6 +77,7 @@ namespace src.utils
|
||||||
public bool DebugMode { get; set; }
|
public bool DebugMode { get; set; }
|
||||||
public string? AlternativeSkillButton { get; set; }
|
public string? AlternativeSkillButton { get; set; }
|
||||||
public float SkillTimeBeforeStart { get; set; }
|
public float SkillTimeBeforeStart { get; set; }
|
||||||
|
public float SkillHudDuration { get; set; }
|
||||||
public float SkillDescriptionDuration { get; set; }
|
public float SkillDescriptionDuration { get; set; }
|
||||||
public bool DisplayAlwaysDescription { get; set; }
|
public bool DisplayAlwaysDescription { get; set; }
|
||||||
public bool DisableSpectateHUD { get; set; }
|
public bool DisableSpectateHUD { get; set; }
|
||||||
|
|
@ -99,6 +100,7 @@ namespace src.utils
|
||||||
DebugMode = true;
|
DebugMode = true;
|
||||||
AlternativeSkillButton = null;
|
AlternativeSkillButton = null;
|
||||||
SkillTimeBeforeStart = 7;
|
SkillTimeBeforeStart = 7;
|
||||||
|
SkillHudDuration = 999;
|
||||||
SkillDescriptionDuration = 7;
|
SkillDescriptionDuration = 7;
|
||||||
DisplayAlwaysDescription = false;
|
DisplayAlwaysDescription = false;
|
||||||
FlashingHtmlHudFix = true;
|
FlashingHtmlHudFix = true;
|
||||||
|
|
|
||||||
|
|
@ -192,7 +192,7 @@ namespace src.utils
|
||||||
var data = reader.Find<ConcurrentDictionary<string, object>>(ip);
|
var data = reader.Find<ConcurrentDictionary<string, object>>(ip);
|
||||||
if (data == null || data.IsEmpty) return null;
|
if (data == null || data.IsEmpty) return null;
|
||||||
|
|
||||||
if (data.TryGetValue("country", out var _country) && _country is ConcurrentDictionary<string, object> country)
|
if (data.TryGetValue("country", out var _country) && _country is Dictionary<string, object> country)
|
||||||
if (country.TryGetValue("iso_code", out var _isoCode) && _isoCode is string isoCode)
|
if (country.TryGetValue("iso_code", out var _isoCode) && _isoCode is string isoCode)
|
||||||
{
|
{
|
||||||
string fileName = Config.LoadedConfig.LanguageSystem.DefaultLangCode;
|
string fileName = Config.LoadedConfig.LanguageSystem.DefaultLangCode;
|
||||||
|
|
|
||||||
|
|
@ -81,11 +81,25 @@ 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;
|
var skeleton = playerPawn.CBodyComponent.SceneNode.GetSkeletonInstance();
|
||||||
|
if (scale <= 0 || skeleton == null) return;
|
||||||
|
|
||||||
playerPawn.CBodyComponent.SceneNode.GetSkeletonInstance().Scale = scale;
|
skeleton.Scale = scale;
|
||||||
Utilities.SetStateChanged(playerPawn, "CBaseEntity", "m_CBodyComponent");
|
playerPawn.AcceptInput("SetScale", null, null, scale.ToString());
|
||||||
Server.NextFrame(() => playerPawn.AcceptInput("SetScale", null, null, scale.ToString()));
|
Server.NextFrame(() => Utilities.SetStateChanged(playerPawn, "CBaseEntity", "m_CBodyComponent"));
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Vector? GetSpawnPointVector(CCSPlayerController player, bool enemySpawn = false)
|
||||||
|
{
|
||||||
|
var spawns = Utilities.FindAllEntitiesByDesignerName<SpawnPoint>(player.Team == CsTeam.Terrorist && !enemySpawn
|
||||||
|
? "info_player_terrorist" : "info_player_counterterrorist").ToList();
|
||||||
|
if (spawns.Count != 0)
|
||||||
|
{
|
||||||
|
var randomSpawn = spawns[jRandomSkills.Instance.Random.Next(spawns.Count)];
|
||||||
|
if (randomSpawn != null && randomSpawn.IsValid && randomSpawn.AbsOrigin != null)
|
||||||
|
return randomSpawn.AbsOrigin;
|
||||||
|
}
|
||||||
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void CreateHEGrenadeProjectile(Vector pos, QAngle angle, Vector vel, int teamNum)
|
public static void CreateHEGrenadeProjectile(Vector pos, QAngle angle, Vector vel, int teamNum)
|
||||||
|
|
@ -124,6 +138,38 @@ namespace src.utils
|
||||||
playerInfo.PrintHTML = null;
|
playerInfo.PrintHTML = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static CTriggerMultiple? CreateTrigger(string name, float radius, Vector pos)
|
||||||
|
{
|
||||||
|
if (pos == null) return null;
|
||||||
|
|
||||||
|
var trigger = Utilities.CreateEntityByName<CTriggerMultiple>("trigger_multiple");
|
||||||
|
if (trigger == null || trigger.AbsOrigin == null) return null;
|
||||||
|
|
||||||
|
trigger.Collision.SolidType = SolidType_t.SOLID_CAPSULE;
|
||||||
|
trigger.Collision.SolidFlags = 0;
|
||||||
|
trigger.Spawnflags = 1;
|
||||||
|
trigger.Globalname = $"{name}_{trigger.Index}";
|
||||||
|
trigger.Collision.SolidFlags = 1;
|
||||||
|
|
||||||
|
trigger.AbsOrigin.X = pos.X;
|
||||||
|
trigger.AbsOrigin.Y = pos.Y;
|
||||||
|
trigger.AbsOrigin.Z = pos.Z;
|
||||||
|
|
||||||
|
trigger.Collision.CapsuleRadius = radius;
|
||||||
|
trigger.Collision.BoundingRadius = radius;
|
||||||
|
|
||||||
|
trigger.Collision.CollisionGroup = (byte)CollisionGroup.COLLISION_GROUP_TRIGGER;
|
||||||
|
trigger.Collision.EnablePhysics = 1;
|
||||||
|
trigger.Collision.TriggerBloat = 0;
|
||||||
|
|
||||||
|
trigger.Collision.SurroundType = SurroundingBoundsType_t.USE_OBB_COLLISION_BOUNDS;
|
||||||
|
trigger.Collision.CollisionAttribute.CollisionFunctionMask = 39;
|
||||||
|
trigger.Collision.CollisionAttribute.CollisionGroup = 2;
|
||||||
|
|
||||||
|
trigger.DispatchSpawn();
|
||||||
|
return trigger;
|
||||||
|
}
|
||||||
|
|
||||||
public static void AddHealth(CCSPlayerPawn? pawn, int extraHealth, int maxHealth = 100)
|
public static void AddHealth(CCSPlayerPawn? pawn, int extraHealth, int maxHealth = 100)
|
||||||
{
|
{
|
||||||
if (pawn == null || !pawn.IsValid || pawn.LifeState != (byte)LifeState_t.LIFE_ALIVE)
|
if (pawn == null || !pawn.IsValid || pawn.LifeState != (byte)LifeState_t.LIFE_ALIVE)
|
||||||
|
|
@ -197,7 +243,7 @@ namespace src.utils
|
||||||
manager.UpdateActiveMenu(player, list);
|
manager.UpdateActiveMenu(player, list);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void CreateMenu(CCSPlayerController? player, ConcurrentBag<(string, string)> enemies, (string, string)? lastElement = null)
|
public static void CreateMenu(CCSPlayerController? player, ConcurrentBag<(string, string)> enemies, (string, string, bool)? lastElement = null)
|
||||||
{
|
{
|
||||||
if (player == null || !player.IsValid) return;
|
if (player == null || !player.IsValid) return;
|
||||||
|
|
||||||
|
|
@ -246,7 +292,8 @@ namespace src.utils
|
||||||
menu.Add(lastElement.Value.Item1, (p, option) =>
|
menu.Add(lastElement.Value.Item1, (p, option) =>
|
||||||
{
|
{
|
||||||
jRandomSkills.Instance.SkillAction(playerInfo.Skill.ToString(), "TypeSkill", [p, new[] { lastElement.Value.Item2 }]);
|
jRandomSkills.Instance.SkillAction(playerInfo.Skill.ToString(), "TypeSkill", [p, new[] { lastElement.Value.Item2 }]);
|
||||||
manager.CloseMenu(p);
|
if (lastElement.Value.Item3)
|
||||||
|
manager.CloseMenu(p);
|
||||||
});
|
});
|
||||||
manager.OpenMainMenu(player, menu);
|
manager.OpenMainMenu(player, menu);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue