v1.2.2.b4
- #### General:
- ###### Updated the GitHub source code to implement the changes introduced in merge request (https://github.com/Juzlus/jRandomSkills/pull/32).
- #### Skill improvements:
- ###### Ninja:
- ###### Removed debug chat messages that were used for testing.
This commit is contained in:
parent
36bd85ef06
commit
42e5453fd4
25 changed files with 212 additions and 268 deletions
12
.github/en.md
vendored
12
.github/en.md
vendored
|
|
@ -357,6 +357,18 @@ This plugin uses content from the following projects:
|
||||||
|
|
||||||
## 📋 Changelog
|
## 📋 Changelog
|
||||||
|
|
||||||
|
<details>
|
||||||
|
<summary><b>v1.2.2.b4</b></summary>
|
||||||
|
|
||||||
|
- #### General:
|
||||||
|
- ###### Updated the GitHub source code to implement the changes introduced in merge request (https://github.com/Juzlus/jRandomSkills/pull/32).
|
||||||
|
|
||||||
|
- #### Skill improvements:
|
||||||
|
- ###### Ninja:
|
||||||
|
- ###### Removed debug chat messages that were used for testing.
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary><b>v1.2.2.b3</b></summary>
|
<summary><b>v1.2.2.b3</b></summary>
|
||||||
|
|
||||||
|
|
|
||||||
12
.github/pl.md
vendored
12
.github/pl.md
vendored
|
|
@ -355,6 +355,18 @@ Plugin korzysta z zawartości następujących projektów:
|
||||||
|
|
||||||
## 📋 Lista Zmian
|
## 📋 Lista Zmian
|
||||||
|
|
||||||
|
<details>
|
||||||
|
<summary><b>v1.2.2.b4</b></summary>
|
||||||
|
|
||||||
|
- #### General:
|
||||||
|
- Ogólne Uaktualizowano kod źródłowy na GitHubie, aby uwzględniał zmiany wprowadzone w merge request: https://github.com/Juzlus/jRandomSkills/pull/32.
|
||||||
|
|
||||||
|
- #### Poprawki mocy:
|
||||||
|
- ###### Ninja:
|
||||||
|
- ###### Usunięto wiadomości z czatu używane do celów testowych.
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary><b>v1.2.2.b3</b></summary>
|
<summary><b>v1.2.2.b3</b></summary>
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -12,9 +12,6 @@
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Compile Remove="tools\**" />
|
<Compile Remove="tools\**" />
|
||||||
<None Remove="tools\**" />
|
<None Remove="tools\**" />
|
||||||
<None Remove="src\command\Command.cs~RF4f34d1e7.TMP" />
|
|
||||||
<None Remove="src\player\PlayerOnTick.cs~RF38b6229.TMP" />
|
|
||||||
<None Remove="src\player\skills\RespWroga.cs~RF528d210.TMP" />
|
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
|
@ -53,7 +50,7 @@
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<SourceLangDir>$(MSBuildProjectDirectory)\src\lang</SourceLangDir>
|
<SourceLangDir>$(MSBuildProjectDirectory)\src\lang</SourceLangDir>
|
||||||
<ServerLangDir>$(MSBuildProjectDirectory)\..\jRandomSkills - Server Files\plugins\jRandomSkills\languages</ServerLangDir>
|
<ServerLangDir>$(MSBuildProjectDirectory)\..\jRandomSkills - Server Files\plugins\jRandomSkills\languages</ServerLangDir>
|
||||||
<SourceDLL>$(MSBuildProjectDirectory)\bin\Debug\net10.0</SourceDLL>
|
<SourceDLL>$(MSBuildProjectDirectory)\bin\$(Configuration)\$(TargetFramework)</SourceDLL>
|
||||||
<ServerDLL>$(MSBuildProjectDirectory)\..\jRandomSkills - Server Files\plugins\jRandomSkills</ServerDLL>
|
<ServerDLL>$(MSBuildProjectDirectory)\..\jRandomSkills - Server Files\plugins\jRandomSkills</ServerDLL>
|
||||||
<SourceGamedataDir>$(MSBuildProjectDirectory)\src\gamedata</SourceGamedataDir>
|
<SourceGamedataDir>$(MSBuildProjectDirectory)\src\gamedata</SourceGamedataDir>
|
||||||
<ServerGamedataDir>$(MSBuildProjectDirectory)\..\jRandomSkills - Server Files\gamedata</ServerGamedataDir>
|
<ServerGamedataDir>$(MSBuildProjectDirectory)\..\jRandomSkills - Server Files\gamedata</ServerGamedataDir>
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,6 @@ using CounterStrikeSharp.API;
|
||||||
using CounterStrikeSharp.API.Core;
|
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.Commands.Targeting;
|
|
||||||
using CounterStrikeSharp.API.Modules.Entities.Constants;
|
using CounterStrikeSharp.API.Modules.Entities.Constants;
|
||||||
using CounterStrikeSharp.API.Modules.Utils;
|
using CounterStrikeSharp.API.Modules.Utils;
|
||||||
using src.menu;
|
using src.menu;
|
||||||
|
|
@ -24,7 +23,7 @@ namespace src.command
|
||||||
public static void Load()
|
public static void Load()
|
||||||
{
|
{
|
||||||
config = Config.LoadedConfig;
|
config = Config.LoadedConfig;
|
||||||
if (config == null || config == null) return;
|
if (config == null) return;
|
||||||
|
|
||||||
lock (setLock)
|
lock (setLock)
|
||||||
{
|
{
|
||||||
|
|
@ -201,7 +200,7 @@ namespace src.command
|
||||||
|
|
||||||
private static void ChangeMap(CommandInfo command)
|
private static void ChangeMap(CommandInfo command)
|
||||||
{
|
{
|
||||||
string map = command.GetArg(1).ToLower();
|
string map = command.GetArg(1).ToLowerInvariant();
|
||||||
|
|
||||||
if (string.IsNullOrEmpty(map))
|
if (string.IsNullOrEmpty(map))
|
||||||
{
|
{
|
||||||
|
|
@ -549,7 +548,7 @@ namespace src.command
|
||||||
if (langInfo.IsoCodes.Contains(newLangCode))
|
if (langInfo.IsoCodes.Contains(newLangCode))
|
||||||
fileName = langInfo.FileName;
|
fileName = langInfo.FileName;
|
||||||
if (Localization.HasTranslation(newLangCode))
|
if (Localization.HasTranslation(newLangCode))
|
||||||
fileName = newLangCode.ToLower();
|
fileName = newLangCode.ToLowerInvariant();
|
||||||
Localization.ChangePlayerLanguage(player, fileName);
|
Localization.ChangePlayerLanguage(player, fileName);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -28,7 +28,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.2.2.b2";
|
public override string ModuleVersion => "1.2.2.b4";
|
||||||
|
|
||||||
public override void Load(bool hotReload)
|
public override void Load(bool hotReload)
|
||||||
{
|
{
|
||||||
|
|
@ -78,43 +78,38 @@ namespace src
|
||||||
Debug.WriteToDebug($"Loaded: {skill.Skill}");
|
Debug.WriteToDebug($"Loaded: {skill.Skill}");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static readonly ConcurrentDictionary<(string Skill, string Method), MethodInfo?> _skillMethodCache = new();
|
||||||
|
|
||||||
internal object? SkillAction(string skill, string methodName, object[]? param = null)
|
internal object? SkillAction(string skill, string methodName, object[]? param = null)
|
||||||
{
|
{
|
||||||
if (string.IsNullOrEmpty(skill))
|
if (string.IsNullOrEmpty(skill))
|
||||||
return null;
|
return null;
|
||||||
|
|
||||||
string className = $"src.player.skills.{skill}";
|
var method = _skillMethodCache.GetOrAdd((skill, methodName), key =>
|
||||||
|
|
||||||
Type? type = Type.GetType(className)
|
|
||||||
?? Assembly.GetExecutingAssembly().GetType(className)
|
|
||||||
?? AppDomain.CurrentDomain.GetAssemblies()
|
|
||||||
.SelectMany(a =>
|
|
||||||
{
|
|
||||||
try { return a.GetTypes(); }
|
|
||||||
catch (ReflectionTypeLoadException ex) { return ex.Types.Where(t => t!= null)!; }
|
|
||||||
catch { return []; }
|
|
||||||
})
|
|
||||||
.FirstOrDefault(t => t != null && string.Equals(t.FullName, className, StringComparison.Ordinal));
|
|
||||||
|
|
||||||
if (type != null && typeof(ISkill).IsAssignableFrom(type))
|
|
||||||
{
|
{
|
||||||
MethodInfo? method = type.GetMethod(methodName, BindingFlags.Static | BindingFlags.Public);
|
string className = $"src.player.skills.{key.Skill}";
|
||||||
return method?.Invoke(null, param);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
Server.PrintToConsole($"Could not find or load {className}");
|
|
||||||
|
|
||||||
return null;
|
Type? type = Type.GetType(className)
|
||||||
}
|
?? Assembly.GetExecutingAssembly().GetType(className)
|
||||||
|
?? AppDomain.CurrentDomain.GetAssemblies()
|
||||||
|
.SelectMany(a =>
|
||||||
|
{
|
||||||
|
try { return a.GetTypes(); }
|
||||||
|
catch (ReflectionTypeLoadException ex) { return ex.Types.Where(t => t != null)!; }
|
||||||
|
catch { return []; }
|
||||||
|
})
|
||||||
|
.FirstOrDefault(t => t != null && string.Equals(t.FullName, className, StringComparison.Ordinal));
|
||||||
|
|
||||||
internal void RegisterListener<T>(Action onTick, HookMode pre)
|
if (type == null || !typeof(ISkill).IsAssignableFrom(type))
|
||||||
{
|
{
|
||||||
throw new NotImplementedException();
|
Server.PrintToConsole($"Could not find or load {className}");
|
||||||
}
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
internal void RegisterListener<T>(Action<object, object> value, HookMode pre)
|
return type.GetMethod(key.Method, BindingFlags.Static | BindingFlags.Public);
|
||||||
{
|
});
|
||||||
throw new NotImplementedException();
|
|
||||||
|
return method?.Invoke(null, param);
|
||||||
}
|
}
|
||||||
|
|
||||||
internal new void AddCommand(string name, string description, CommandInfo.CommandCallback handler)
|
internal new void AddCommand(string name, string description, CommandInfo.CommandCallback handler)
|
||||||
|
|
@ -328,10 +323,7 @@ namespace src
|
||||||
public string Color { get; set; } = color;
|
public string Color { get; set; } = color;
|
||||||
public bool Display { get; } = display;
|
public bool Display { get; } = display;
|
||||||
|
|
||||||
public static implicit operator Skills(jSkill_SkillInfo v)
|
public static implicit operator Skills(jSkill_SkillInfo v) => v?.Skill ?? Skills.None;
|
||||||
{
|
|
||||||
throw new NotImplementedException();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class SkillData
|
public static class SkillData
|
||||||
|
|
|
||||||
|
|
@ -24,6 +24,7 @@
|
||||||
"areareaper_select_info": "Kapatılacak bomba alanını seç:",
|
"areareaper_select_info": "Kapatılacak bomba alanını seç:",
|
||||||
"areareaper_site_disabled": "{0} alanı mühürlendi - artık buraya bomba kurulamaz!",
|
"areareaper_site_disabled": "{0} alanı mühürlendi - artık buraya bomba kurulamaz!",
|
||||||
"areareaper_used_info": "Yeteneğini zaten kullandın, açgözlülük yapma",
|
"areareaper_used_info": "Yeteneğini zaten kullandın, açgözlülük yapma",
|
||||||
|
"areareaper_teammates_info": "{0} Bölgesi bomba kurmaya kapatıldı.",
|
||||||
"areareaper_bombsite_disabled": "Bu bomba alanı kullanıma kapatıldı!",
|
"areareaper_bombsite_disabled": "Bu bomba alanı kullanıma kapatıldı!",
|
||||||
|
|
||||||
"armored": "Zırhlı",
|
"armored": "Zırhlı",
|
||||||
|
|
@ -62,6 +63,7 @@
|
||||||
"carefulbullets": "Dikkatli Mermiler",
|
"carefulbullets": "Dikkatli Mermiler",
|
||||||
"carefulbullets_desc": "Düşman mermi kaçırırsa hasar alır",
|
"carefulbullets_desc": "Düşman mermi kaçırırsa hasar alır",
|
||||||
"carefulbullets_enemy_info": "Mermi kaçırmak canını yakacak",
|
"carefulbullets_enemy_info": "Mermi kaçırmak canını yakacak",
|
||||||
|
"carefulbullets_disable_info": "Artık mermi kaçırmak can yakmayacak.",
|
||||||
"carefulbullets_player_info": "'{0}' artık mermi sıkarken iki kere düşünecek",
|
"carefulbullets_player_info": "'{0}' artık mermi sıkarken iki kere düşünecek",
|
||||||
"carefulbullets_select_info": "İsabetsiz atışların hasar vereceği oyuncu:",
|
"carefulbullets_select_info": "İsabetsiz atışların hasar vereceği oyuncu:",
|
||||||
|
|
||||||
|
|
@ -85,6 +87,7 @@
|
||||||
"darkness": "Karanlık",
|
"darkness": "Karanlık",
|
||||||
"darkness_desc": "Bir düşmanın ekranını karart",
|
"darkness_desc": "Bir düşmanın ekranını karart",
|
||||||
"darkness_enemy_info": "Işıklar sönsün",
|
"darkness_enemy_info": "Işıklar sönsün",
|
||||||
|
"darkness_disable_info": "Işıklar geldi.",
|
||||||
"darkness_player_info": "'{0}' isimli oyuncunun dünyasını kararttın",
|
"darkness_player_info": "'{0}' isimli oyuncunun dünyasını kararttın",
|
||||||
"darkness_select_info": "Karanlık bir oyuncuyu seç:",
|
"darkness_select_info": "Karanlık bir oyuncuyu seç:",
|
||||||
|
|
||||||
|
|
@ -97,6 +100,7 @@
|
||||||
"deaf": "Sağır",
|
"deaf": "Sağır",
|
||||||
"deaf_desc": "Bir düşmanın kulağını kapat ve sesleri duymaz hale getir",
|
"deaf_desc": "Bir düşmanın kulağını kapat ve sesleri duymaz hale getir",
|
||||||
"deaf_enemy_info": "Kulaklıkların tıkandı",
|
"deaf_enemy_info": "Kulaklıkların tıkandı",
|
||||||
|
"deaf_disable_info": "Kulakların açıldı.",
|
||||||
"deaf_player_info": "'{0}' isimli oyuncu için sesler kapatıldı.",
|
"deaf_player_info": "'{0}' isimli oyuncu için sesler kapatıldı.",
|
||||||
"deaf_select_info": "Sağır bir oyuncuyu seç:",
|
"deaf_select_info": "Sağır bir oyuncuyu seç:",
|
||||||
|
|
||||||
|
|
@ -167,6 +171,7 @@
|
||||||
"glitch": "Glitç",
|
"glitch": "Glitç",
|
||||||
"glitch_desc": "Seçilen bir düşmanın radarını kapatır",
|
"glitch_desc": "Seçilen bir düşmanın radarını kapatır",
|
||||||
"glitch_enemy_info": "Radarın kapandı",
|
"glitch_enemy_info": "Radarın kapandı",
|
||||||
|
"glitch_disable_info": "Radarın açıldı",
|
||||||
"glitch_player_info": "'{0}' isimli oyuncunun radarı devre dışı bırakıldı.",
|
"glitch_player_info": "'{0}' isimli oyuncunun radarı devre dışı bırakıldı.",
|
||||||
"glitch_select_info": "Radarı kapatılacak oyuncuyu seç:",
|
"glitch_select_info": "Radarı kapatılacak oyuncuyu seç:",
|
||||||
|
|
||||||
|
|
@ -219,6 +224,7 @@
|
||||||
"jammer": "Sinyal Kesici",
|
"jammer": "Sinyal Kesici",
|
||||||
"jammer_desc": "Bir oyuncunun nişangahını (crosshair) kapatmak için seç",
|
"jammer_desc": "Bir oyuncunun nişangahını (crosshair) kapatmak için seç",
|
||||||
"jammer_enemy_info": "Nişangahın kapatıldı.",
|
"jammer_enemy_info": "Nişangahın kapatıldı.",
|
||||||
|
"jammer_disable_info": "Nişangahın açıldı",
|
||||||
"jammer_player_info": "'{0}' isimli oyuncunun nişangahı kapatıldı.",
|
"jammer_player_info": "'{0}' isimli oyuncunun nişangahı kapatıldı.",
|
||||||
"jammer_select_info": "Nişangahı kapatılacak oyuncuyu seç:",
|
"jammer_select_info": "Nişangahı kapatılacak oyuncuyu seç:",
|
||||||
|
|
||||||
|
|
@ -231,6 +237,7 @@
|
||||||
"jumpban": "Bacaksız",
|
"jumpban": "Bacaksız",
|
||||||
"jumpban_desc": "Zıplayamayacak bir oyuncu seç",
|
"jumpban_desc": "Zıplayamayacak bir oyuncu seç",
|
||||||
"jumpban_enemy_info": "Bacakların kesildi",
|
"jumpban_enemy_info": "Bacakların kesildi",
|
||||||
|
"jumpban_disable_info": "Bacaklarına kavuştun",
|
||||||
"jumpban_player_info": "'{0}' artık zıplayamaz.",
|
"jumpban_player_info": "'{0}' artık zıplayamaz.",
|
||||||
"jumpban_select_info": "Zıplaması yasaklanacak oyuncu:",
|
"jumpban_select_info": "Zıplaması yasaklanacak oyuncu:",
|
||||||
|
|
||||||
|
|
@ -261,6 +268,7 @@
|
||||||
"magnifier": "Büyüteç",
|
"magnifier": "Büyüteç",
|
||||||
"magnifier_desc": "Düşmanın ekranını yakınlaştırarak görüş alanını daraltır",
|
"magnifier_desc": "Düşmanın ekranını yakınlaştırarak görüş alanını daraltır",
|
||||||
"magnifier_enemy_info": "Görüşün bozuldu!",
|
"magnifier_enemy_info": "Görüşün bozuldu!",
|
||||||
|
"magnifier_disable_info": "Görüşün düzeldi",
|
||||||
"magnifier_player_info": "'{0}' isimli oyuncunun ekranı yakınlaştırıldı.",
|
"magnifier_player_info": "'{0}' isimli oyuncunun ekranı yakınlaştırıldı.",
|
||||||
"magnifier_select_info": "Ekranı büyütülecek oyuncuyu seç:",
|
"magnifier_select_info": "Ekranı büyütülecek oyuncuyu seç:",
|
||||||
|
|
||||||
|
|
@ -322,12 +330,14 @@
|
||||||
"poison": "Zehir",
|
"poison": "Zehir",
|
||||||
"poison_desc": "Birkaç saniyede bir hasar alacak bir oyuncu seç",
|
"poison_desc": "Birkaç saniyede bir hasar alacak bir oyuncu seç",
|
||||||
"poison_enemy_info": "Zehirlendin.",
|
"poison_enemy_info": "Zehirlendin.",
|
||||||
|
"poison_disable_info": "Zehire bağışıklık kazandın",
|
||||||
"poison_player_info": "'{0}' isimli oyuncu zehirlendi.",
|
"poison_player_info": "'{0}' isimli oyuncu zehirlendi.",
|
||||||
"poison_select_info": "Zehirlenecek oyuncuyu seç:",
|
"poison_select_info": "Zehirlenecek oyuncuyu seç:",
|
||||||
|
|
||||||
"primaryban": "Tüfek Yasak",
|
"primaryban": "Tüfek Yasak",
|
||||||
"primaryban_desc": "Tüfek kullanamayacak bir oyuncu seç",
|
"primaryban_desc": "Tüfek kullanamayacak bir oyuncu seç",
|
||||||
"primaryban_enemy_info": "Tüfek kullanmayı unuttun",
|
"primaryban_enemy_info": "Tüfek kullanmayı unuttun",
|
||||||
|
"primaryban_disable_info": "Tüfek kullanabilirsin",
|
||||||
"primaryban_player_info": "'{0}' artık tüfek kullanamaz.",
|
"primaryban_player_info": "'{0}' artık tüfek kullanamaz.",
|
||||||
"primaryban_select_info": "Tüfek kullanımı yasaklanacak oyuncu:",
|
"primaryban_select_info": "Tüfek kullanımı yasaklanacak oyuncu:",
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -46,7 +46,7 @@ namespace src.player
|
||||||
Instance.RegisterEventHandler<EventPlayerSpawned>(PlayerSpawned);
|
Instance.RegisterEventHandler<EventPlayerSpawned>(PlayerSpawned);
|
||||||
Instance.RegisterEventHandler<EventRoundStart>(RoundStart);
|
Instance.RegisterEventHandler<EventRoundStart>(RoundStart);
|
||||||
Instance.RegisterEventHandler<EventRoundEnd>(RoundEnd);
|
Instance.RegisterEventHandler<EventRoundEnd>(RoundEnd);
|
||||||
|
|
||||||
Instance.RegisterEventHandler<EventPlayerDeath>(PlayerDeath);
|
Instance.RegisterEventHandler<EventPlayerDeath>(PlayerDeath);
|
||||||
Instance.RegisterEventHandler<EventPlayerBlind>(PlayerBlind);
|
Instance.RegisterEventHandler<EventPlayerBlind>(PlayerBlind);
|
||||||
Instance.RegisterEventHandler<EventPlayerHurt>(PlayerHurt);
|
Instance.RegisterEventHandler<EventPlayerHurt>(PlayerHurt);
|
||||||
|
|
@ -138,17 +138,21 @@ namespace src.player
|
||||||
return candidates[Random.Shared.Next(candidates.Count)];
|
return candidates[Random.Shared.Next(candidates.Count)];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static void DispatchToActiveSkills(string methodName, params object[] args)
|
||||||
|
{
|
||||||
|
var seen = new HashSet<Skills>();
|
||||||
|
foreach (var p in Instance.SkillPlayer)
|
||||||
|
{
|
||||||
|
if (p.IsDrawing || !seen.Add(p.Skill)) continue;
|
||||||
|
Instance.SkillAction(p.Skill.ToString(), methodName, args);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private static HookResult PlayerMakeSound(UserMessage um)
|
private static HookResult PlayerMakeSound(UserMessage um)
|
||||||
{
|
{
|
||||||
lock (setLock)
|
lock (setLock)
|
||||||
{
|
{
|
||||||
var activeSkills = Instance.SkillPlayer
|
DispatchToActiveSkills("PlayerMakeSound", um);
|
||||||
.Where(p => !p.IsDrawing)
|
|
||||||
.Select(p => p.Skill.ToString())
|
|
||||||
.Distinct();
|
|
||||||
|
|
||||||
foreach (string skillName in activeSkills)
|
|
||||||
Instance.SkillAction(skillName, "PlayerMakeSound", [um]);
|
|
||||||
return HookResult.Continue;
|
return HookResult.Continue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -157,13 +161,7 @@ namespace src.player
|
||||||
{
|
{
|
||||||
lock (setLock)
|
lock (setLock)
|
||||||
{
|
{
|
||||||
var activeSkills = Instance.SkillPlayer
|
DispatchToActiveSkills("WeaponFire", @event);
|
||||||
.Where(p => !p.IsDrawing)
|
|
||||||
.Select(p => p.Skill.ToString())
|
|
||||||
.Distinct();
|
|
||||||
|
|
||||||
foreach (string skillName in activeSkills)
|
|
||||||
Instance.SkillAction(skillName, "WeaponFire", [@event]);
|
|
||||||
return HookResult.Continue;
|
return HookResult.Continue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -172,13 +170,7 @@ namespace src.player
|
||||||
{
|
{
|
||||||
lock (setLock)
|
lock (setLock)
|
||||||
{
|
{
|
||||||
var activeSkills = Instance.SkillPlayer
|
DispatchToActiveSkills("WeaponEquip", @event);
|
||||||
.Where(p => !p.IsDrawing)
|
|
||||||
.Select(p => p.Skill.ToString())
|
|
||||||
.Distinct();
|
|
||||||
|
|
||||||
foreach (string skillName in activeSkills)
|
|
||||||
Instance.SkillAction(skillName, "WeaponEquip", [@event]);
|
|
||||||
return HookResult.Continue;
|
return HookResult.Continue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -187,13 +179,7 @@ namespace src.player
|
||||||
{
|
{
|
||||||
lock (setLock)
|
lock (setLock)
|
||||||
{
|
{
|
||||||
var activeSkills = Instance.SkillPlayer
|
DispatchToActiveSkills("WeaponPickup", @event);
|
||||||
.Where(p => !p.IsDrawing)
|
|
||||||
.Select(p => p.Skill.ToString())
|
|
||||||
.Distinct();
|
|
||||||
|
|
||||||
foreach (string skillName in activeSkills)
|
|
||||||
Instance.SkillAction(skillName, "WeaponPickup", [@event]);
|
|
||||||
return HookResult.Continue;
|
return HookResult.Continue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -202,13 +188,7 @@ namespace src.player
|
||||||
{
|
{
|
||||||
lock (setLock)
|
lock (setLock)
|
||||||
{
|
{
|
||||||
var activeSkills = Instance.SkillPlayer
|
DispatchToActiveSkills("WeaponReload", @event);
|
||||||
.Where(p => !p.IsDrawing)
|
|
||||||
.Select(p => p.Skill.ToString())
|
|
||||||
.Distinct();
|
|
||||||
|
|
||||||
foreach (string skillName in activeSkills)
|
|
||||||
Instance.SkillAction(skillName, "WeaponReload", [@event]);
|
|
||||||
return HookResult.Continue;
|
return HookResult.Continue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -217,13 +197,7 @@ namespace src.player
|
||||||
{
|
{
|
||||||
lock (setLock)
|
lock (setLock)
|
||||||
{
|
{
|
||||||
var activeSkills = Instance.SkillPlayer
|
DispatchToActiveSkills("GrenadeThrown", @event);
|
||||||
.Where(p => !p.IsDrawing)
|
|
||||||
.Select(p => p.Skill.ToString())
|
|
||||||
.Distinct();
|
|
||||||
|
|
||||||
foreach (string skillName in activeSkills)
|
|
||||||
Instance.SkillAction(skillName, "GrenadeThrown", [@event]);
|
|
||||||
return HookResult.Continue;
|
return HookResult.Continue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -232,13 +206,7 @@ namespace src.player
|
||||||
{
|
{
|
||||||
lock (setLock)
|
lock (setLock)
|
||||||
{
|
{
|
||||||
var activeSkills = Instance.SkillPlayer
|
DispatchToActiveSkills("BombBeginplant", @event);
|
||||||
.Where(p => !p.IsDrawing)
|
|
||||||
.Select(p => p.Skill.ToString())
|
|
||||||
.Distinct();
|
|
||||||
|
|
||||||
foreach (string skillName in activeSkills)
|
|
||||||
Instance.SkillAction(skillName, "BombBeginplant", [@event]);
|
|
||||||
return HookResult.Continue;
|
return HookResult.Continue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -247,13 +215,7 @@ namespace src.player
|
||||||
{
|
{
|
||||||
lock (setLock)
|
lock (setLock)
|
||||||
{
|
{
|
||||||
var activeSkills = Instance.SkillPlayer
|
DispatchToActiveSkills("BombAbortplant", @event);
|
||||||
.Where(p => !p.IsDrawing)
|
|
||||||
.Select(p => p.Skill.ToString())
|
|
||||||
.Distinct();
|
|
||||||
|
|
||||||
foreach (string skillName in activeSkills)
|
|
||||||
Instance.SkillAction(skillName, "BombAbortplant", [@event]);
|
|
||||||
return HookResult.Continue;
|
return HookResult.Continue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -262,13 +224,7 @@ namespace src.player
|
||||||
{
|
{
|
||||||
lock (setLock)
|
lock (setLock)
|
||||||
{
|
{
|
||||||
var activeSkills = Instance.SkillPlayer
|
DispatchToActiveSkills("BombPlanted", @event);
|
||||||
.Where(p => !p.IsDrawing)
|
|
||||||
.Select(p => p.Skill.ToString())
|
|
||||||
.Distinct();
|
|
||||||
|
|
||||||
foreach (string skillName in activeSkills)
|
|
||||||
Instance.SkillAction(skillName, "BombPlanted", [@event]);
|
|
||||||
return HookResult.Continue;
|
return HookResult.Continue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -277,13 +233,7 @@ namespace src.player
|
||||||
{
|
{
|
||||||
lock (setLock)
|
lock (setLock)
|
||||||
{
|
{
|
||||||
var activeSkills = Instance.SkillPlayer
|
DispatchToActiveSkills("BombBegindefuse", @event);
|
||||||
.Where(p => !p.IsDrawing)
|
|
||||||
.Select(p => p.Skill.ToString())
|
|
||||||
.Distinct();
|
|
||||||
|
|
||||||
foreach (string skillName in activeSkills)
|
|
||||||
Instance.SkillAction(skillName, "BombBegindefuse", [@event]);
|
|
||||||
return HookResult.Continue;
|
return HookResult.Continue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -292,13 +242,7 @@ namespace src.player
|
||||||
{
|
{
|
||||||
lock (setLock)
|
lock (setLock)
|
||||||
{
|
{
|
||||||
var activeSkills = Instance.SkillPlayer
|
DispatchToActiveSkills("DecoyStarted", @event);
|
||||||
.Where(p => !p.IsDrawing)
|
|
||||||
.Select(p => p.Skill.ToString())
|
|
||||||
.Distinct();
|
|
||||||
|
|
||||||
foreach (string skillName in activeSkills)
|
|
||||||
Instance.SkillAction(skillName, "DecoyStarted", [@event]);
|
|
||||||
return HookResult.Continue;
|
return HookResult.Continue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -307,13 +251,7 @@ namespace src.player
|
||||||
{
|
{
|
||||||
lock (setLock)
|
lock (setLock)
|
||||||
{
|
{
|
||||||
var activeSkills = Instance.SkillPlayer
|
DispatchToActiveSkills("DecoyDetonate", @event);
|
||||||
.Where(p => !p.IsDrawing)
|
|
||||||
.Select(p => p.Skill.ToString())
|
|
||||||
.Distinct();
|
|
||||||
|
|
||||||
foreach (string skillName in activeSkills)
|
|
||||||
Instance.SkillAction(skillName, "DecoyDetonate", [@event]);
|
|
||||||
return HookResult.Continue;
|
return HookResult.Continue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -322,13 +260,7 @@ namespace src.player
|
||||||
{
|
{
|
||||||
lock (setLock)
|
lock (setLock)
|
||||||
{
|
{
|
||||||
var activeSkills = Instance.SkillPlayer
|
DispatchToActiveSkills("SmokegrenadeDetonate", @event);
|
||||||
.Where(p => !p.IsDrawing)
|
|
||||||
.Select(p => p.Skill.ToString())
|
|
||||||
.Distinct();
|
|
||||||
|
|
||||||
foreach (string skillName in activeSkills)
|
|
||||||
Instance.SkillAction(skillName, "SmokegrenadeDetonate", [@event]);
|
|
||||||
return HookResult.Continue;
|
return HookResult.Continue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -337,13 +269,7 @@ namespace src.player
|
||||||
{
|
{
|
||||||
lock (setLock)
|
lock (setLock)
|
||||||
{
|
{
|
||||||
var activeSkills = Instance.SkillPlayer
|
DispatchToActiveSkills("SmokegrenadeExpired", @event);
|
||||||
.Where(p => !p.IsDrawing)
|
|
||||||
.Select(p => p.Skill.ToString())
|
|
||||||
.Distinct();
|
|
||||||
|
|
||||||
foreach (string skillName in activeSkills)
|
|
||||||
Instance.SkillAction(skillName, "SmokegrenadeExpired", [@event]);
|
|
||||||
return HookResult.Continue;
|
return HookResult.Continue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -352,13 +278,7 @@ namespace src.player
|
||||||
{
|
{
|
||||||
lock (setLock)
|
lock (setLock)
|
||||||
{
|
{
|
||||||
var activeSkills = Instance.SkillPlayer
|
DispatchToActiveSkills("PlayerHurt", @event);
|
||||||
.Where(p => !p.IsDrawing)
|
|
||||||
.Select(p => p.Skill.ToString())
|
|
||||||
.Distinct();
|
|
||||||
|
|
||||||
foreach (string skillName in activeSkills)
|
|
||||||
Instance.SkillAction(skillName, "PlayerHurt", [@event]);
|
|
||||||
return HookResult.Continue;
|
return HookResult.Continue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -367,13 +287,7 @@ namespace src.player
|
||||||
{
|
{
|
||||||
lock (setLock)
|
lock (setLock)
|
||||||
{
|
{
|
||||||
var activeSkills = Instance.SkillPlayer
|
DispatchToActiveSkills("PlayerJump", @event);
|
||||||
.Where(p => !p.IsDrawing)
|
|
||||||
.Select(p => p.Skill.ToString())
|
|
||||||
.Distinct();
|
|
||||||
|
|
||||||
foreach (string skillName in activeSkills)
|
|
||||||
Instance.SkillAction(skillName, "PlayerJump", [@event]);
|
|
||||||
return HookResult.Continue;
|
return HookResult.Continue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -391,13 +305,7 @@ namespace src.player
|
||||||
{
|
{
|
||||||
lock (setLock)
|
lock (setLock)
|
||||||
{
|
{
|
||||||
var activeSkills = Instance.SkillPlayer
|
DispatchToActiveSkills("PlayerBlind", @event);
|
||||||
.Where(p => !p.IsDrawing)
|
|
||||||
.Select(p => p.Skill.ToString())
|
|
||||||
.Distinct();
|
|
||||||
|
|
||||||
foreach (string skillName in activeSkills)
|
|
||||||
Instance.SkillAction(skillName, "PlayerBlind", [@event]);
|
|
||||||
return HookResult.Continue;
|
return HookResult.Continue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -406,15 +314,10 @@ namespace src.player
|
||||||
{
|
{
|
||||||
lock (setLock)
|
lock (setLock)
|
||||||
{
|
{
|
||||||
var activeSkills = Instance.SkillPlayer
|
DispatchToActiveSkills("OnTakeDamage", h);
|
||||||
.Where(p => !p.IsDrawing)
|
|
||||||
.Select(p => p.Skill.ToString())
|
|
||||||
.Distinct();
|
|
||||||
|
|
||||||
foreach (string skillName in activeSkills)
|
if (Fortnite.skillInThisRound == true &&
|
||||||
Instance.SkillAction(skillName, "OnTakeDamage", [h]);
|
!Instance.SkillPlayer.Any(p => !p.IsDrawing && p.Skill == Skills.Fortnite))
|
||||||
|
|
||||||
if (Fortnite.skillInThisRound == true && !activeSkills.Any(s => s == "Fortnite"))
|
|
||||||
Instance.SkillAction("Fortnite", "OnTakeDamage", [h]);
|
Instance.SkillAction("Fortnite", "OnTakeDamage", [h]);
|
||||||
|
|
||||||
return HookResult.Continue;
|
return HookResult.Continue;
|
||||||
|
|
@ -428,13 +331,7 @@ namespace src.player
|
||||||
CBaseTrigger trigger = hook.GetParam<CBaseTrigger>(0);
|
CBaseTrigger trigger = hook.GetParam<CBaseTrigger>(0);
|
||||||
CBaseEntity entity = hook.GetParam<CBaseEntity>(1);
|
CBaseEntity entity = hook.GetParam<CBaseEntity>(1);
|
||||||
|
|
||||||
var activeSkills = Instance.SkillPlayer
|
DispatchToActiveSkills("OnTriggerEnter", trigger, entity);
|
||||||
.Where(p => !p.IsDrawing)
|
|
||||||
.Select(p => p.Skill.ToString())
|
|
||||||
.Distinct();
|
|
||||||
|
|
||||||
foreach (string skillName in activeSkills)
|
|
||||||
Instance.SkillAction(skillName, "OnTriggerEnter", [trigger, entity]);
|
|
||||||
return HookResult.Continue;
|
return HookResult.Continue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -446,13 +343,7 @@ namespace src.player
|
||||||
CBaseTrigger trigger = hook.GetParam<CBaseTrigger>(0);
|
CBaseTrigger trigger = hook.GetParam<CBaseTrigger>(0);
|
||||||
CBaseEntity entity = hook.GetParam<CBaseEntity>(1);
|
CBaseEntity entity = hook.GetParam<CBaseEntity>(1);
|
||||||
|
|
||||||
var activeSkills = Instance.SkillPlayer
|
DispatchToActiveSkills("OnTriggerExit", trigger, entity);
|
||||||
.Where(p => !p.IsDrawing)
|
|
||||||
.Select(p => p.Skill.ToString())
|
|
||||||
.Distinct();
|
|
||||||
|
|
||||||
foreach (string skillName in activeSkills)
|
|
||||||
Instance.SkillAction(skillName, "OnTriggerExit", [trigger, entity]);
|
|
||||||
return HookResult.Continue;
|
return HookResult.Continue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -539,9 +430,9 @@ namespace src.player
|
||||||
|
|
||||||
foreach (var skill in activeSkills)
|
foreach (var skill in activeSkills)
|
||||||
if (SkillsInfo.GetValue<bool>(skill, "disableOnFreezeTime") && SkillUtils.IsFreezeTime())
|
if (SkillsInfo.GetValue<bool>(skill, "disableOnFreezeTime") && SkillUtils.IsFreezeTime())
|
||||||
continue;
|
continue;
|
||||||
else
|
else
|
||||||
Instance.SkillAction(skill.ToString(), "OnTick");
|
Instance.SkillAction(skill.ToString(), "OnTick");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -555,6 +446,13 @@ namespace src.player
|
||||||
if (player.IsBot && !Config.LoadedConfig.EnableBotSkills)
|
if (player.IsBot && !Config.LoadedConfig.EnableBotSkills)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
var existing = Instance.SkillPlayer.FirstOrDefault(p => p.PlayerIndex == player.Index);
|
||||||
|
if (existing != null)
|
||||||
|
{
|
||||||
|
PlayerManager.Register(existing);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
var playerInfo = new jSkill_PlayerInfo
|
var playerInfo = new jSkill_PlayerInfo
|
||||||
{
|
{
|
||||||
IsBot = player.IsBot,
|
IsBot = player.IsBot,
|
||||||
|
|
@ -617,11 +515,11 @@ namespace src.player
|
||||||
{
|
{
|
||||||
var userID = @event.Userid;
|
var userID = @event.Userid;
|
||||||
if (userID == 0 || string.IsNullOrEmpty(@event.Text)) return HookResult.Continue;
|
if (userID == 0 || string.IsNullOrEmpty(@event.Text)) return HookResult.Continue;
|
||||||
|
|
||||||
string text = @event.Text.Split(' ')[0].Trim();
|
string text = @event.Text.Split(' ')[0].Trim();
|
||||||
|
|
||||||
string commandName = text.StartsWith('!') || text.StartsWith('/') ? text[1..] : text;
|
string commandName = text.StartsWith('!') || text.StartsWith('/') ? text[1..] : text;
|
||||||
|
|
||||||
var player = Utilities.GetPlayerFromUserid(userID);
|
var player = Utilities.GetPlayerFromUserid(userID);
|
||||||
if (player == null || !player.IsValid) return HookResult.Continue;
|
if (player == null || !player.IsValid) return HookResult.Continue;
|
||||||
|
|
||||||
|
|
@ -630,7 +528,7 @@ namespace src.player
|
||||||
|
|
||||||
var temp = skillPlayer.SkillHudExpired;
|
var temp = skillPlayer.SkillHudExpired;
|
||||||
skillPlayer.SkillHudExpired = DateTime.MinValue;
|
skillPlayer.SkillHudExpired = DateTime.MinValue;
|
||||||
;
|
;
|
||||||
Instance.AddTimer(5f, () =>
|
Instance.AddTimer(5f, () =>
|
||||||
{
|
{
|
||||||
if (skillPlayer.SkillHudExpired == DateTime.MinValue)
|
if (skillPlayer.SkillHudExpired == DateTime.MinValue)
|
||||||
|
|
@ -709,7 +607,6 @@ namespace src.player
|
||||||
if (playerInfo == null) continue;
|
if (playerInfo == null) continue;
|
||||||
|
|
||||||
Instance.SkillAction(playerInfo.Skill.ToString(), "DisableSkill", [player]);
|
Instance.SkillAction(playerInfo.Skill.ToString(), "DisableSkill", [player]);
|
||||||
Instance.SkillAction(playerInfo.Skill.ToString(), "NewRound");
|
|
||||||
|
|
||||||
playerInfo.Skill = noneSkill.Skill;
|
playerInfo.Skill = noneSkill.Skill;
|
||||||
playerInfo.SpecialSkill = noneSkill.Skill;
|
playerInfo.SpecialSkill = noneSkill.Skill;
|
||||||
|
|
@ -719,6 +616,9 @@ namespace src.player
|
||||||
|
|
||||||
RestorePlayer(player);
|
RestorePlayer(player);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
foreach (var skill in SkillData.Skills)
|
||||||
|
Instance.SkillAction(skill.Skill.ToString(), "NewRound");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -743,23 +643,24 @@ namespace src.player
|
||||||
lock (setLock)
|
lock (setLock)
|
||||||
{
|
{
|
||||||
isTransmitRegistered = false;
|
isTransmitRegistered = false;
|
||||||
|
|
||||||
Instance.AddTimer(.1f, () => {
|
|
||||||
DisableAll();
|
|
||||||
ConVar.Find("sv_legacy_jump")?.SetValue("1");
|
|
||||||
|
|
||||||
}, CounterStrikeSharp.API.Modules.Timers.TimerFlags.STOP_ON_MAPCHANGE);
|
|
||||||
|
|
||||||
Instance.RemoveListener<CheckTransmit>(CheckTransmit);
|
Instance.RemoveListener<CheckTransmit>(CheckTransmit);
|
||||||
|
|
||||||
|
Fortnite.skillInThisRound = false;
|
||||||
|
EntityManager.DestroyAllTracked();
|
||||||
|
foreach (var skill in SkillData.Skills)
|
||||||
|
Instance.SkillAction(skill.Skill.ToString(), "NewRound");
|
||||||
|
|
||||||
playersSkills.Clear();
|
playersSkills.Clear();
|
||||||
staticSkills.Clear();
|
staticSkills.Clear();
|
||||||
|
|
||||||
ctSkill = noneSkill;
|
ctSkill = noneSkill;
|
||||||
tSkill = noneSkill;
|
tSkill = noneSkill;
|
||||||
allSkill = noneSkill;
|
allSkill = noneSkill;
|
||||||
|
|
||||||
|
Instance.SkillPlayer.Clear();
|
||||||
PlayerManager.Clear();
|
PlayerManager.Clear();
|
||||||
|
|
||||||
|
ConVar.Find("sv_legacy_jump")?.SetValue("1");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -813,13 +714,7 @@ namespace src.player
|
||||||
{
|
{
|
||||||
lock (setLock)
|
lock (setLock)
|
||||||
{
|
{
|
||||||
var activeSkills = Instance.SkillPlayer
|
DispatchToActiveSkills("PlayerDeath", @event);
|
||||||
.Where(p => !p.IsDrawing)
|
|
||||||
.Select(p => p.Skill.ToString())
|
|
||||||
.Distinct();
|
|
||||||
|
|
||||||
foreach (string skillName in activeSkills)
|
|
||||||
Instance.SkillAction(skillName, "PlayerDeath", [@event]);
|
|
||||||
|
|
||||||
var victim = PlayerManager.GetPlayerEvent(@event.Userid);
|
var victim = PlayerManager.GetPlayerEvent(@event.Userid);
|
||||||
var attacker = PlayerManager.GetPlayerEvent(@event.Attacker);
|
var attacker = PlayerManager.GetPlayerEvent(@event.Attacker);
|
||||||
|
|
@ -840,7 +735,7 @@ namespace src.player
|
||||||
if (skillData == null || specialSkillData == null) return HookResult.Continue;
|
if (skillData == null || specialSkillData == null) return HookResult.Continue;
|
||||||
string skillDesc = victim.GetSkillDescription(skillData.Skill);
|
string skillDesc = victim.GetSkillDescription(skillData.Skill);
|
||||||
|
|
||||||
SkillUtils.PrintToChat(victim,
|
SkillUtils.PrintToChat(victim,
|
||||||
$"{ChatColors.DarkRed}{(attackerInfo.SpecialSkill == Skills.None ? victim.GetSkillName(skillData.Skill) : $"{victim.GetSkillName(specialSkillData.Skill)} -> {victim.GetSkillName(skillData.Skill)}")}{ChatColors.Lime} - {skillDesc}",
|
$"{ChatColors.DarkRed}{(attackerInfo.SpecialSkill == Skills.None ? victim.GetSkillName(skillData.Skill) : $"{victim.GetSkillName(specialSkillData.Skill)} -> {victim.GetSkillName(skillData.Skill)}")}{ChatColors.Lime} - {skillDesc}",
|
||||||
title: $"{victim.GetTranslation("enemy_skill")} {ChatColors.DarkRed}\u202A{attacker.PlayerName}\u202C{ChatColors.Lime}");
|
title: $"{victim.GetTranslation("enemy_skill")} {ChatColors.DarkRed}\u202A{attacker.PlayerName}\u202C{ChatColors.Lime}");
|
||||||
}
|
}
|
||||||
|
|
@ -858,11 +753,13 @@ namespace src.player
|
||||||
string? button = Config.LoadedConfig.AlternativeSkillButton;
|
string? button = Config.LoadedConfig.AlternativeSkillButton;
|
||||||
if (string.IsNullOrEmpty(button) || button.Length < 2) return;
|
if (string.IsNullOrEmpty(button) || button.Length < 2) return;
|
||||||
|
|
||||||
string buttonName = $"{char.ToUpper(button[0])}{button[1..].ToLower()}";
|
string buttonName = $"{char.ToUpperInvariant(button[0])}{button[1..].ToLowerInvariant()}";
|
||||||
if (!Enum.TryParse<PlayerButtons>(buttonName, out var skillButton)) return;
|
if (!Enum.TryParse<PlayerButtons>(buttonName, out var skillButton)) return;
|
||||||
|
|
||||||
if ((pressed & skillButton) == 0) return;
|
if ((pressed & skillButton) == 0) return;
|
||||||
|
|
||||||
|
if (SkillUtils.HasMenu(player)) return;
|
||||||
|
|
||||||
var playerInfo = PlayerManager.GetPlayerByIndex(player!.Index);
|
var playerInfo = PlayerManager.GetPlayerByIndex(player!.Index);
|
||||||
if (playerInfo == null || playerInfo.IsDrawing) return;
|
if (playerInfo == null || playerInfo.IsDrawing) return;
|
||||||
|
|
||||||
|
|
@ -903,13 +800,7 @@ namespace src.player
|
||||||
{
|
{
|
||||||
lock (setLock)
|
lock (setLock)
|
||||||
{
|
{
|
||||||
var activeSkills = Instance.SkillPlayer
|
DispatchToActiveSkills("OnEntitySpawned", entity);
|
||||||
.Where(p => !p.IsDrawing)
|
|
||||||
.Select(p => p.Skill.ToString())
|
|
||||||
.Distinct();
|
|
||||||
|
|
||||||
foreach (string skillName in activeSkills)
|
|
||||||
Instance.SkillAction(skillName, "OnEntitySpawned", [entity]);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -917,13 +808,7 @@ namespace src.player
|
||||||
{
|
{
|
||||||
lock (setLock)
|
lock (setLock)
|
||||||
{
|
{
|
||||||
var activeSkills = Instance.SkillPlayer
|
DispatchToActiveSkills("BulletImpact", @event);
|
||||||
.Where(p => !p.IsDrawing)
|
|
||||||
.Select(p => p.Skill.ToString())
|
|
||||||
.Distinct();
|
|
||||||
|
|
||||||
foreach (string skillName in activeSkills)
|
|
||||||
Instance.SkillAction(skillName, "BulletImpact", [@event]);
|
|
||||||
return HookResult.Continue;
|
return HookResult.Continue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -1059,7 +944,7 @@ namespace src.player
|
||||||
|
|
||||||
Instance?.AddTimer(.2f, () =>
|
Instance?.AddTimer(.2f, () =>
|
||||||
{
|
{
|
||||||
if(player == null || !player.IsValid) return;
|
if (player == null || !player.IsValid) return;
|
||||||
|
|
||||||
if (randomSkill.Display)
|
if (randomSkill.Display)
|
||||||
SkillUtils.PrintToChat(player, $"{ChatColors.DarkRed}{player.GetSkillName(randomSkill.Skill)}{ChatColors.Lime}: {player.GetSkillDescription(randomSkill.Skill)}",
|
SkillUtils.PrintToChat(player, $"{ChatColors.DarkRed}{player.GetSkillName(randomSkill.Skill)}{ChatColors.Lime}: {player.GetSkillDescription(randomSkill.Skill)}",
|
||||||
|
|
@ -1084,7 +969,7 @@ namespace src.player
|
||||||
|
|
||||||
float descriptionHudExpired = Config.LoadedConfig.SkillDescriptionDuration;
|
float descriptionHudExpired = Config.LoadedConfig.SkillDescriptionDuration;
|
||||||
skillPlayer.SkillDescriptionHudExpired = descriptionHudExpired == -1 ? DateTime.MaxValue : DateTime.Now.AddSeconds(descriptionHudExpired);
|
skillPlayer.SkillDescriptionHudExpired = descriptionHudExpired == -1 ? DateTime.MaxValue : DateTime.Now.AddSeconds(descriptionHudExpired);
|
||||||
|
|
||||||
if (Config.LoadedConfig.TeamMateSkillChatInfo)
|
if (Config.LoadedConfig.TeamMateSkillChatInfo)
|
||||||
{
|
{
|
||||||
Instance?.AddTimer(.6f, () =>
|
Instance?.AddTimer(.6f, () =>
|
||||||
|
|
@ -1200,6 +1085,7 @@ namespace src.player
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Instance?.SkillAction(skillPlayer.Skill.ToString(), "DisableSkill", [player]);
|
||||||
skillPlayer.Skill = randomSkill.Skill;
|
skillPlayer.Skill = randomSkill.Skill;
|
||||||
skillPlayer.SpecialSkill = Skills.None;
|
skillPlayer.SpecialSkill = Skills.None;
|
||||||
|
|
||||||
|
|
@ -1231,13 +1117,7 @@ namespace src.player
|
||||||
{
|
{
|
||||||
lock (setLock)
|
lock (setLock)
|
||||||
{
|
{
|
||||||
var activeSkills = Instance.SkillPlayer
|
DispatchToActiveSkills("CheckTransmit", infoList);
|
||||||
.Where(p => !p.IsDrawing)
|
|
||||||
.Select(p => p.Skill.ToString())
|
|
||||||
.Distinct();
|
|
||||||
|
|
||||||
foreach (string skillName in activeSkills)
|
|
||||||
Instance.SkillAction(skillName, "CheckTransmit", [infoList]);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1285,4 +1165,4 @@ namespace src.player
|
||||||
|
|
||||||
public static DateTime GetFreezeTimeEnd() => freezeTimeEnd;
|
public static DateTime GetFreezeTimeEnd() => freezeTimeEnd;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -63,6 +63,10 @@ namespace src.player.skills
|
||||||
playerInfo.SkillUsed = true;
|
playerInfo.SkillUsed = true;
|
||||||
|
|
||||||
playersToTarget[player.Index] = targetSite.Index;
|
playersToTarget[player.Index] = targetSite.Index;
|
||||||
|
|
||||||
|
string siteLetter = site == 0 ? "A" : "B";
|
||||||
|
foreach (var ct in Utilities.GetPlayers().Where(p => p != null && p.IsValid && !p.IsHLTV && p.Team == CsTeam.CounterTerrorist))
|
||||||
|
ct.PrintToChat($" {ChatColors.Green}" + ct.GetTranslation("areareaper_teammates_info", siteLetter));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -133,7 +133,11 @@ namespace src.player.skills
|
||||||
{
|
{
|
||||||
var target = PlayerManager.GetPlayerFromEvent(Utilities.GetPlayerFromIndex((int)targetIndex));
|
var target = PlayerManager.GetPlayerFromEvent(Utilities.GetPlayerFromIndex((int)targetIndex));
|
||||||
if (target != null && target.IsValid)
|
if (target != null && target.IsValid)
|
||||||
|
{
|
||||||
SetUpPostProcessing(target, true);
|
SetUpPostProcessing(target, true);
|
||||||
|
if (target.PawnIsAlive && !SkillUtils.IsFreezeTime())
|
||||||
|
target.PrintToChat($" {ChatColors.Green}" + target.GetTranslation("darkness_disable_info"));
|
||||||
|
}
|
||||||
playersInDark.TryRemove(targetIndex, out _);
|
playersInDark.TryRemove(targetIndex, out _);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -123,6 +123,7 @@ namespace src.player.skills
|
||||||
public static void DisableSkill(CCSPlayerController player)
|
public static void DisableSkill(CCSPlayerController player)
|
||||||
{
|
{
|
||||||
if (playersToTarget.TryRemove(player.Index, out uint targetIndex))
|
if (playersToTarget.TryRemove(player.Index, out uint targetIndex))
|
||||||
|
{
|
||||||
deafPlayers.TryRemove(targetIndex, out _);
|
deafPlayers.TryRemove(targetIndex, out _);
|
||||||
|
|
||||||
var target = PlayerManager.GetPlayerFromEvent(Utilities.GetPlayerFromIndex((int)targetIndex));
|
var target = PlayerManager.GetPlayerFromEvent(Utilities.GetPlayerFromIndex((int)targetIndex));
|
||||||
|
|
|
||||||
|
|
@ -130,7 +130,11 @@ namespace src.player.skills
|
||||||
{
|
{
|
||||||
var target = PlayerManager.GetPlayerFromEvent(Utilities.GetPlayerFromIndex((int)targetIndex));
|
var target = PlayerManager.GetPlayerFromEvent(Utilities.GetPlayerFromIndex((int)targetIndex));
|
||||||
if (target != null && target.IsValid)
|
if (target != null && target.IsValid)
|
||||||
|
{
|
||||||
target.ReplicateConVar("sv_disable_radar", "0");
|
target.ReplicateConVar("sv_disable_radar", "0");
|
||||||
|
if (target.PawnIsAlive && !SkillUtils.IsFreezeTime())
|
||||||
|
target.PrintToChat($" {ChatColors.Green}" + target.GetTranslation("glitch_disable_info"));
|
||||||
|
}
|
||||||
glitchedPlayers.TryRemove(targetIndex, out _);
|
glitchedPlayers.TryRemove(targetIndex, out _);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -131,6 +131,7 @@ namespace src.player.skills
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (playersToTarget.TryRemove(player.Index, out uint targetIndex))
|
if (playersToTarget.TryRemove(player.Index, out uint targetIndex))
|
||||||
|
{
|
||||||
bannedPlayers.TryRemove(targetIndex, out _);
|
bannedPlayers.TryRemove(targetIndex, out _);
|
||||||
|
|
||||||
var target = PlayerManager.GetPlayerFromEvent(Utilities.GetPlayerFromIndex((int)targetIndex));
|
var target = PlayerManager.GetPlayerFromEvent(Utilities.GetPlayerFromIndex((int)targetIndex));
|
||||||
|
|
|
||||||
|
|
@ -134,11 +134,16 @@ namespace src.player.skills
|
||||||
{
|
{
|
||||||
var target = PlayerManager.GetPlayerFromEvent(Utilities.GetPlayerFromIndex((int)targetIndex));
|
var target = PlayerManager.GetPlayerFromEvent(Utilities.GetPlayerFromIndex((int)targetIndex));
|
||||||
if (target != null && target.IsValid)
|
if (target != null && target.IsValid)
|
||||||
|
{
|
||||||
if (playersFOV.TryGetValue(targetIndex, out uint fov))
|
if (playersFOV.TryGetValue(targetIndex, out uint fov))
|
||||||
{
|
{
|
||||||
target.DesiredFOV = fov;
|
target.DesiredFOV = fov;
|
||||||
Utilities.SetStateChanged(target, "CBasePlayerController", "m_iDesiredFOV");
|
Utilities.SetStateChanged(target, "CBasePlayerController", "m_iDesiredFOV");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (target.PawnIsAlive && !SkillUtils.IsFreezeTime())
|
||||||
|
target.PrintToChat($" {ChatColors.Green}" + target.GetTranslation("magnifier_disable_info"));
|
||||||
|
}
|
||||||
playersFOV.TryRemove(targetIndex, out _);
|
playersFOV.TryRemove(targetIndex, out _);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -184,8 +184,6 @@ namespace src.player.skills
|
||||||
if (player.PlayerPawn?.Value?.Health <= 0)
|
if (player.PlayerPawn?.Value?.Health <= 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
Server.PrintToChatAll($"Update ninja for {player.PlayerName}");
|
|
||||||
|
|
||||||
var playerEvent = PlayerManager.GetPlayerEvent(player);
|
var playerEvent = PlayerManager.GetPlayerEvent(player);
|
||||||
if (playerEvent == null || !playerEvent.IsValid) return;
|
if (playerEvent == null || !playerEvent.IsValid) return;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -130,6 +130,7 @@ namespace src.player.skills
|
||||||
public static void DisableSkill(CCSPlayerController player)
|
public static void DisableSkill(CCSPlayerController player)
|
||||||
{
|
{
|
||||||
if (playersToTarget.TryRemove(player.Index, out uint targetIndex))
|
if (playersToTarget.TryRemove(player.Index, out uint targetIndex))
|
||||||
|
{
|
||||||
poisonedPlayers.TryRemove(targetIndex, out _);
|
poisonedPlayers.TryRemove(targetIndex, out _);
|
||||||
|
|
||||||
var target = PlayerManager.GetPlayerFromEvent(Utilities.GetPlayerFromIndex((int)targetIndex));
|
var target = PlayerManager.GetPlayerFromEvent(Utilities.GetPlayerFromIndex((int)targetIndex));
|
||||||
|
|
|
||||||
|
|
@ -132,6 +132,7 @@ namespace src.player.skills
|
||||||
public static void DisableSkill(CCSPlayerController player)
|
public static void DisableSkill(CCSPlayerController player)
|
||||||
{
|
{
|
||||||
if (playersToTarget.TryRemove(player.Index, out uint targetIndex))
|
if (playersToTarget.TryRemove(player.Index, out uint targetIndex))
|
||||||
|
{
|
||||||
bannedPlayers.TryRemove(targetIndex, out _);
|
bannedPlayers.TryRemove(targetIndex, out _);
|
||||||
|
|
||||||
var target = PlayerManager.GetPlayerFromEvent(Utilities.GetPlayerFromIndex((int)targetIndex));
|
var target = PlayerManager.GetPlayerFromEvent(Utilities.GetPlayerFromIndex((int)targetIndex));
|
||||||
|
|
|
||||||
|
|
@ -112,7 +112,10 @@ namespace src.player.skills
|
||||||
playersInAction.TryRemove(player.Index, out _);
|
playersInAction.TryRemove(player.Index, out _);
|
||||||
|
|
||||||
if (playersInAction.IsEmpty)
|
if (playersInAction.IsEmpty)
|
||||||
|
{
|
||||||
NewRound();
|
NewRound();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
SkillUtils.ForceFullUpdateToAll();
|
SkillUtils.ForceFullUpdateToAll();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -71,9 +71,6 @@ namespace src.utils
|
||||||
|
|
||||||
public class SettingsModel
|
public class SettingsModel
|
||||||
{
|
{
|
||||||
[DisplayName("Game Mode")]
|
|
||||||
[Description("TESTfafw..")]
|
|
||||||
[Range(0, 5)]
|
|
||||||
public string ConfigName { get; set; }
|
public string ConfigName { get; set; }
|
||||||
public int GameMode { get; set; }
|
public int GameMode { get; set; }
|
||||||
public bool YourSkillChatInfo { get; set; }
|
public bool YourSkillChatInfo { get; set; }
|
||||||
|
|
|
||||||
|
|
@ -50,7 +50,7 @@ namespace src.utils
|
||||||
if (!File.Exists(langPath))
|
if (!File.Exists(langPath))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
var code = Path.GetFileNameWithoutExtension(langPath).ToLower();
|
var code = Path.GetFileNameWithoutExtension(langPath).ToLowerInvariant();
|
||||||
var jsonText = File.ReadAllText(langPath);
|
var jsonText = File.ReadAllText(langPath);
|
||||||
var translations = JsonConvert.DeserializeObject<ConcurrentDictionary<string, string>>(jsonText);
|
var translations = JsonConvert.DeserializeObject<ConcurrentDictionary<string, string>>(jsonText);
|
||||||
|
|
||||||
|
|
@ -60,7 +60,7 @@ namespace src.utils
|
||||||
|
|
||||||
public static bool HasTranslation(string code)
|
public static bool HasTranslation(string code)
|
||||||
{
|
{
|
||||||
return _translations.ContainsKey(code.ToLower());
|
return _translations.ContainsKey(code.ToLowerInvariant());
|
||||||
}
|
}
|
||||||
|
|
||||||
public static string GetSkillName(this CCSPlayerController player, Skills skill, float? chance = null)
|
public static string GetSkillName(this CCSPlayerController player, Skills skill, float? chance = null)
|
||||||
|
|
@ -68,7 +68,7 @@ namespace src.utils
|
||||||
string langCode = GetLangCode(player);
|
string langCode = GetLangCode(player);
|
||||||
if (chance == null)
|
if (chance == null)
|
||||||
{
|
{
|
||||||
var translation = GetTranslation(skill.ToString().ToLower(), langCode);
|
var translation = GetTranslation(skill.ToString().ToLowerInvariant(), langCode);
|
||||||
if (!translation.Contains("{0}"))
|
if (!translation.Contains("{0}"))
|
||||||
return translation;
|
return translation;
|
||||||
|
|
||||||
|
|
@ -81,7 +81,7 @@ namespace src.utils
|
||||||
}
|
}
|
||||||
|
|
||||||
var value = Math.Round((double)(chance ?? 1), 2);
|
var value = Math.Round((double)(chance ?? 1), 2);
|
||||||
var skillNameText = GetTranslation(skill.ToString().ToLower(), langCode, player, value);
|
var skillNameText = GetTranslation(skill.ToString().ToLowerInvariant(), langCode, player, value);
|
||||||
if (skillNameText.Contains('%')) skillNameText = skillNameText.Replace(value.ToString(), Math.Round(value * 100, 0).ToString());
|
if (skillNameText.Contains('%')) skillNameText = skillNameText.Replace(value.ToString(), Math.Round(value * 100, 0).ToString());
|
||||||
return skillNameText;
|
return skillNameText;
|
||||||
}
|
}
|
||||||
|
|
@ -91,7 +91,7 @@ namespace src.utils
|
||||||
string langCode = GetLangCode(player);
|
string langCode = GetLangCode(player);
|
||||||
if (chance == null)
|
if (chance == null)
|
||||||
{
|
{
|
||||||
var translation = GetTranslation($"{skill.ToString().ToLower()}_desc", langCode);
|
var translation = GetTranslation($"{skill.ToString().ToLowerInvariant()}_desc", langCode);
|
||||||
if (!translation.Contains("{0}"))
|
if (!translation.Contains("{0}"))
|
||||||
return translation;
|
return translation;
|
||||||
|
|
||||||
|
|
@ -103,12 +103,12 @@ namespace src.utils
|
||||||
return string.Join(' ', filtered);
|
return string.Join(' ', filtered);
|
||||||
}
|
}
|
||||||
|
|
||||||
var skillName = $"{skill.ToString().ToLower()}_desc2";
|
var skillName = $"{skill.ToString().ToLowerInvariant()}_desc2";
|
||||||
var value = Math.Round((double)(chance ?? 1), 2);
|
var value = Math.Round((double)(chance ?? 1), 2);
|
||||||
var desc2 = GetTranslation(skillName, langCode, player, value);
|
var desc2 = GetTranslation(skillName, langCode, player, value);
|
||||||
|
|
||||||
var skilLDescription = desc2 == skillName
|
var skilLDescription = desc2 == skillName
|
||||||
? player.GetTranslation($"{skill.ToString().ToLower()}_desc")
|
? player.GetTranslation($"{skill.ToString().ToLowerInvariant()}_desc")
|
||||||
: desc2.Contains('%') ? desc2.Replace(value.ToString(), Math.Round(value * 100, 0).ToString()) : desc2;
|
: desc2.Contains('%') ? desc2.Replace(value.ToString(), Math.Round(value * 100, 0).ToString()) : desc2;
|
||||||
return skilLDescription;
|
return skilLDescription;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -28,7 +28,10 @@ namespace src.utils
|
||||||
playerPawn.CBodyComponent?.SceneNode == null)
|
playerPawn.CBodyComponent?.SceneNode == null)
|
||||||
return null;
|
return null;
|
||||||
|
|
||||||
var rayTrace = RayTraceInterface.Get();
|
CRayTraceInterface? rayTrace;
|
||||||
|
try { rayTrace = RayTraceInterface.Get(); }
|
||||||
|
catch { return null; }
|
||||||
|
|
||||||
if (rayTrace == null)
|
if (rayTrace == null)
|
||||||
return null;
|
return null;
|
||||||
|
|
||||||
|
|
@ -111,7 +114,10 @@ namespace src.utils
|
||||||
playerPawn.CBodyComponent?.SceneNode == null)
|
playerPawn.CBodyComponent?.SceneNode == null)
|
||||||
return null;
|
return null;
|
||||||
|
|
||||||
var rayTrace = RayTraceInterface.Get();
|
CRayTraceInterface? rayTrace;
|
||||||
|
try { rayTrace = RayTraceInterface.Get(); }
|
||||||
|
catch { return null; }
|
||||||
|
|
||||||
if (rayTrace == null)
|
if (rayTrace == null)
|
||||||
return null;
|
return null;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -524,7 +524,7 @@ namespace src.utils
|
||||||
? $"<font class='fontWeight-Bold fontSize-{config.SkillLineSize}'>\u202A{Illiterate.GetRandomText(player.GetSkillName(skillData.Skill))}\u202C</font><br>"
|
? $"<font class='fontWeight-Bold fontSize-{config.SkillLineSize}'>\u202A{Illiterate.GetRandomText(player.GetSkillName(skillData.Skill))}\u202C</font><br>"
|
||||||
: $"<font class='fontWeight-Bold fontSize-{config.SkillLineSize}' color='{skillData.Color}'>\u202A{player.GetSkillName(skillData.Skill)}\u202C</font><br>";
|
: $"<font class='fontWeight-Bold fontSize-{config.SkillLineSize}' color='{skillData.Color}'>\u202A{player.GetSkillName(skillData.Skill)}\u202C</font><br>";
|
||||||
|
|
||||||
var skill_select_info = player.GetTranslation($"{playerInfo.Skill.ToString().ToLower()}_select_info");
|
var skill_select_info = player.GetTranslation($"{playerInfo.Skill.ToString().ToLowerInvariant()}_select_info");
|
||||||
string remainingLine = string.IsNullOrWhiteSpace(skill_select_info)
|
string remainingLine = string.IsNullOrWhiteSpace(skill_select_info)
|
||||||
? ""
|
? ""
|
||||||
: $"<font class='fontSize-{config.WSADMenuSelectInfoLineSize}' color='{config.WSADMenuSelectInfoLineColor}'>{skill_select_info}</font><br>";
|
: $"<font class='fontSize-{config.WSADMenuSelectInfoLineSize}' color='{config.WSADMenuSelectInfoLineColor}'>{skill_select_info}</font><br>";
|
||||||
|
|
@ -585,8 +585,8 @@ namespace src.utils
|
||||||
{
|
{
|
||||||
if (jRandomSkills.Instance == null || jRandomSkills.Instance.GameRules == null) return;
|
if (jRandomSkills.Instance == null || jRandomSkills.Instance.GameRules == null) return;
|
||||||
var teams = Utilities.FindAllEntitiesByDesignerName<CCSTeam>("cs_team_manager");
|
var teams = Utilities.FindAllEntitiesByDesignerName<CCSTeam>("cs_team_manager");
|
||||||
var ctTeam = teams.First(t => t.IsValid && (CsTeam)t.TeamNum == CsTeam.CounterTerrorist);
|
var ctTeam = teams.FirstOrDefault(t => t.IsValid && (CsTeam)t.TeamNum == CsTeam.CounterTerrorist);
|
||||||
var tTeams = teams.First(t => t.IsValid && (CsTeam)t.TeamNum == CsTeam.Terrorist);
|
var tTeams = teams.FirstOrDefault(t => t.IsValid && (CsTeam)t.TeamNum == CsTeam.Terrorist);
|
||||||
if (ctTeam == null || tTeams == null) return;
|
if (ctTeam == null || tTeams == null) return;
|
||||||
|
|
||||||
short ctScore = (short)(winnerTeam == CsTeam.CounterTerrorist ? ctTeam.Score + 1 : ctTeam.Score);
|
short ctScore = (short)(winnerTeam == CsTeam.CounterTerrorist ? ctTeam.Score + 1 : ctTeam.Score);
|
||||||
|
|
@ -686,8 +686,8 @@ namespace src.utils
|
||||||
private static void UpdateClientTeamScores(MCCSMatch match)
|
private static void UpdateClientTeamScores(MCCSMatch match)
|
||||||
{
|
{
|
||||||
var teams = Utilities.FindAllEntitiesByDesignerName<CCSTeam>("cs_team_manager");
|
var teams = Utilities.FindAllEntitiesByDesignerName<CCSTeam>("cs_team_manager");
|
||||||
var ctTeam = teams.First(t => t.IsValid && (CsTeam)t.TeamNum == CsTeam.CounterTerrorist);
|
var ctTeam = teams.FirstOrDefault(t => t.IsValid && (CsTeam)t.TeamNum == CsTeam.CounterTerrorist);
|
||||||
var tTeams = teams.First(t => t.IsValid && (CsTeam)t.TeamNum == CsTeam.Terrorist);
|
var tTeams = teams.FirstOrDefault(t => t.IsValid && (CsTeam)t.TeamNum == CsTeam.Terrorist);
|
||||||
|
|
||||||
if (ctTeam != null && tTeams != null)
|
if (ctTeam != null && tTeams != null)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -18,6 +18,10 @@ namespace src.utils
|
||||||
private static SkillsInfoModel config = LoadSkillsInfo();
|
private static SkillsInfoModel config = LoadSkillsInfo();
|
||||||
public static SkillsInfoModel LoadedConfig => config;
|
public static SkillsInfoModel LoadedConfig => config;
|
||||||
|
|
||||||
|
private static SkillsInfoModel? _indexedConfig;
|
||||||
|
private static ConcurrentDictionary<string, DefaultSkillInfo> _byName = new();
|
||||||
|
private static readonly ConcurrentDictionary<(Type Type, string Key), MemberInfo?> _memberCache = new();
|
||||||
|
|
||||||
public static SkillsInfoModel LoadSkillsInfo()
|
public static SkillsInfoModel LoadSkillsInfo()
|
||||||
{
|
{
|
||||||
lock (fileLock)
|
lock (fileLock)
|
||||||
|
|
@ -84,26 +88,39 @@ namespace src.utils
|
||||||
{
|
{
|
||||||
if (config == null) return default!;
|
if (config == null) return default!;
|
||||||
|
|
||||||
var skillConfig = LoadedConfig.FirstOrDefault(s => s.Name == skill.ToString());
|
EnsureIndex();
|
||||||
if (skillConfig == null) return default!;
|
if (!_byName.TryGetValue(skill.ToString()!, out var skillConfig) || skillConfig == null)
|
||||||
|
return default!;
|
||||||
|
|
||||||
var prop = skillConfig.GetType().GetProperty(key, BindingFlags.Public | BindingFlags.Instance | BindingFlags.IgnoreCase);
|
var member = _memberCache.GetOrAdd((skillConfig.GetType(), key), k =>
|
||||||
if (prop != null)
|
|
||||||
{
|
{
|
||||||
var value = prop.GetValue(skillConfig);
|
MemberInfo? m = k.Type.GetProperty(k.Key, BindingFlags.Public | BindingFlags.Instance | BindingFlags.IgnoreCase);
|
||||||
if (value == null) return default!;
|
m ??= k.Type.GetField(k.Key, BindingFlags.Public | BindingFlags.Instance | BindingFlags.IgnoreCase);
|
||||||
else return (T)Convert.ChangeType(value, typeof(T));
|
return m;
|
||||||
}
|
});
|
||||||
|
|
||||||
var field = skillConfig.GetType().GetField(key, BindingFlags.Public | BindingFlags.Instance | BindingFlags.IgnoreCase);
|
object? value = member switch
|
||||||
if (field != null)
|
|
||||||
{
|
{
|
||||||
var value = field.GetValue(skillConfig);
|
PropertyInfo p => p.GetValue(skillConfig),
|
||||||
if (value == null) return default!;
|
FieldInfo f => f.GetValue(skillConfig),
|
||||||
else return (T)Convert.ChangeType(value, typeof(T));
|
_ => null
|
||||||
}
|
};
|
||||||
|
|
||||||
return default!;
|
if (value == null) return default!;
|
||||||
|
return (T)Convert.ChangeType(value, typeof(T));
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void EnsureIndex()
|
||||||
|
{
|
||||||
|
if (ReferenceEquals(_indexedConfig, config)) return;
|
||||||
|
|
||||||
|
var dict = new ConcurrentDictionary<string, DefaultSkillInfo>();
|
||||||
|
foreach (var s in config)
|
||||||
|
dict[s.Name] = s;
|
||||||
|
|
||||||
|
_byName = dict;
|
||||||
|
_indexedConfig = config;
|
||||||
|
_memberCache.Clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
public class SkillsInfoModel : ConcurrentBag<DefaultSkillInfo>
|
public class SkillsInfoModel : ConcurrentBag<DefaultSkillInfo>
|
||||||
|
|
@ -124,7 +141,7 @@ namespace src.utils
|
||||||
.Where(instance => instance != null)
|
.Where(instance => instance != null)
|
||||||
.Cast<DefaultSkillInfo>())
|
.Cast<DefaultSkillInfo>())
|
||||||
Add(skill);
|
Add(skill);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public class DefaultSkillInfo(Skills skill, bool active = true, string color = "#ffffff", CsTeam onlyTeam = CsTeam.None, bool disableOnFreezeTime = false, bool needsTeammates = false, string requiredPermission = "", int maxPerServer = -1, Rarity rarity = Rarity.Common)
|
public class DefaultSkillInfo(Skills skill, bool active = true, string color = "#ffffff", CsTeam onlyTeam = CsTeam.None, bool disableOnFreezeTime = false, bool needsTeammates = false, string requiredPermission = "", int maxPerServer = -1, Rarity rarity = Rarity.Common)
|
||||||
|
|
|
||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Loading…
Add table
Add a link
Reference in a new issue