v1.2.2.b6

Performance & stability pass (issue #34 + audit)

General:
- DisableAll resets only skills active in the previous round instead of all loaded skills (~89ms -> ~5ms)
- Removed per-tick LINQ/allocations, O(1) HUD skill lookups, translation substitutions moved to load time
- ForceFullUpdate creates the network service once per broadcast; view-angle guard only skips a genuine (0,0,0) placeholder
- Debug hooks/logging only active when DebugMode is enabled (single reused writer)
- Player skill state unified to a single collection (fixes a rare disconnect race)
- Gamedata signatures resolved lazily/isolated; hardened tick/transmit paths against invalid handles
- Description HUD honours always-show / -1 duration consistently across all assignment paths

Skills:
- Jester: fixed the no-damage effect leaking after a mid-round skill change (Thief/Deactivator)
- Jackal: fixed trail entities accumulating over a round
- Falcon Eye / Third Eye / Spectator: camera state cleared on disable

Also: added missing translation keys as untranslated markers across language files.

Fixes #34
This commit is contained in:
ByDexter 2026-07-05 21:48:29 +03:00
parent a0f37ba1a1
commit 25cd8eb989
31 changed files with 202 additions and 79 deletions

View file

@ -55,7 +55,18 @@ namespace src.utils
var translations = JsonConvert.DeserializeObject<ConcurrentDictionary<string, string>>(jsonText);
if (translations != null)
{
string redColor = ChatColors.Red.ToString();
string? altButton = Config.LoadedConfig.AlternativeSkillButton;
foreach (var tkey in translations.Keys.ToList())
{
var val = translations[tkey].Replace("CHATCOLORS.RED", redColor);
if (!string.IsNullOrEmpty(altButton))
val = val.Replace("css_useSkill", $"css_useSkill/{altButton}");
translations[tkey] = val;
}
_translations.AddOrUpdate(code, translations, (k, v) => translations);
}
}
public static bool HasTranslation(string code)
@ -150,9 +161,6 @@ namespace src.utils
else
{
string output = args.Length == 0 ? translation : string.Format(translation, args);
output = output.Replace("CHATCOLORS.RED", ChatColors.Red.ToString());
if (Config.LoadedConfig.AlternativeSkillButton != null)
output = output.Replace("css_useSkill", $"css_useSkill/{Config.LoadedConfig.AlternativeSkillButton}");
if (Illiterate.CheckIlliterateSkill(player))
return Illiterate.GetRandomText(output)!;