QoE Update — 2

## Added

- **`Spectator` use cooldown** (`UseCooldown` in skillsInfo.json, default 0.5s) — every press destroyed and recreated the camera prop, with no rate limit.
- **`SkillUtils.ClearCursesFor(playerIndex)`** — clears a leaving player's curse bookkeeping from both sides (as curser and as victim).
- **`SkillUtils.AnyCurseCapacity(player)`** — reports whether a player still has  any enemy left that is under the curse limit.
- **`Spectator.PlayerDisconnect`** handler.
- **`Thief`** added to the curse skill set.

## Changed

- **`CurseSkillPerPlayer` is ignored in GameMode 1 (TeamSkills), 2 (SameSkills) and 5 (Debug).**
- **Curse target menus no longer go empty.** When every living enemy is already at the limit, the menu falls back to the unfiltered list and the claim is forced through.
- `C4Camouflage` `MaxPerServer` -1 -> 1
This commit is contained in:
ByDexter 2026-07-31 01:38:50 +03:00
parent b0b50a224f
commit 7292ab1787
9 changed files with 101 additions and 35 deletions

View file

@ -25,21 +25,7 @@ namespace src.player.skills
var playerInfo = PlayerManager.GetPlayerByIndex(player!.Index);
if (playerInfo?.Skill != skillName) continue;
var enemies = PlayerManager.GetTickPlayers().Where(p =>
p != null &&
p.IsValid)
.Select(p => PlayerManager.GetPlayerEvent(p))
.Where(p =>
p != null &&
p.IsValid &&
p.Team != player.Team &&
p.PlayerPawn?.Value != null &&
p.PlayerPawn.Value.IsValid &&
p.PlayerPawn.Value.Health > 0 &&
!p.IsHLTV &&
p.Team != CsTeam.Spectator
&& p.Team != CsTeam.None
).ToArray();
var enemies = SkillUtils.GetSelectableEnemies(player, true);
ConcurrentBag<(string, string)> menuItems = [];
foreach (var enemy in enemies)
@ -106,14 +92,7 @@ namespace src.player.skills
var playerEvent = PlayerManager.GetPlayerFromEvent(player);
if (playerEvent == null || !playerEvent.IsValid) return;
var enemies = PlayerManager.GetTickPlayers()
.Where(p => p != null
&& p.IsValid
&& p.Team != player.Team
&& p.PlayerPawn?.Value?.Health > 0
&& p.Team != CsTeam.Spectator
&& p.Team != CsTeam.None)
.ToArray();
var enemies = SkillUtils.GetSelectableEnemies(player, true);
if (enemies.Length > 0)
{