v1.2.3.b6

New skills (9)
- Bounty: put a cash price on an enemy's head, the killer collects it.
- EmpGrenade: grenade victims lose radar and crosshair for a while.
- GravityDecoy: the decoy alters gravity for everyone in its radius.
- Heavyweight: immune to push and slow effects from other skills.
- Nemesis: the marked player takes extra damage from everyone.
- Punisher: banks part of the damage you take and releases it on your next hit.
- Rewind: drop a marker and teleport back to it shortly after.
- TrueArmor: armor absorbs part of incoming damage instead of health.
- Voodoo: the marked enemy shares the damage you take.

Shared systems
- DecoyRing: reusable ground ring so decoy skills show their real area of effect. Adopted by FireRain, FrozenDecoy, GravityDecoy and MagneticDecoy.
- WeaponPool: single cached weapon classification (rifle/pistol/grenade) with a normalizing lookup, backed by the new config Weapons section. Replaces the duplicated hardcoded arrays in Assassin, Chicken, Ghost, NoNades, PrimaryBan, RandomWeapon, SniperElite and WeaponsSwap. [because of compatibility with WeaponRestrict]
- HUD suppression registry in SkillUtils: crosshair and radar hiding is now refcounted per owner, so overlapping skills (Glitch, Jammer, EmpGrenade) cannot restore each other's state early.
- SkillUtils.ResolveHiddenPawns: shared invisible-pawn resolution for C4Camouflage, Ghost and Ninja.
- Config gained a Weapons section with automatic migration for existing installs, plus a per-skill DisableOnPistolRound switch honoured by both the round draw and css_setskill.

Sound
- Volume rebalance
- Add SkillUtils.EmitSoundToPlayer with a private RecipientFilter. A null filter had been broadcasting every skill sound to all clients. Migrated 16 call sites: Poison, DemonEye, ToxicSmoke, CarefulBullets, Thorns, HotBomb, LastGasp, LongKnife, Nightmare, Jester, Tripwire, Medic, HealingSmoke, Rewind, Watchmaker.
- New effects: LongKnife knife-hit feedback (Weapon_Knife.Hit.Heavy/Light), Grapple hook impact, Fortnite barricade placement, Ricochet bounce, Nightmare cursed tone, Replicator/Illusionist spawn, PsychicDefusing defuse cue, TakeAmmo pickup, Tripwire and Jammer trigger tones.
- 29 skills gained a configurable SoundVolume, LongKnife also HitSoundVolume.
- Grapple: emit the hook impact at the hook entity instead of at the owner so the enemy team can locate it.
- PawelJumper: the engine already plays the first jump, only extra jumps emit.

Models and visuals
- Grapple: real hook model with configurable hookScale and hookEmbed so the hook sits in the surface it hit.
- Pilot: glowing exhaust trail parented to the pawn, active only while airborne.

Performance
- SkillsInfo.GetValue now resolves through a ConcurrentDictionary cache instead of reflecting on every call; invalidated on config reload.
- HUD render cache keyed on player, config, description flag and the three source lines; identical frames skip the rebuild.
- Glaz.CheckTransmit: hoist smoke index resolution out of the per-viewer loop and build the pawn-owner map lazily.
- playersSkills switched from ConcurrentBag to HashSet<Skills>, turning the NoRepeat filter from an O(n) scan into a set lookup.

Fixes
- NoRepeat could hand a player two or three skills in one round because the history bag was never deduplicated; the HashSet rewrite closes it.
- SniperElite: restore the saved weapon after the halftime team swap instead of dropping it on the pistol round.
- Illiterate: the holder alert now reaches chat and is exempt from its own scrambler via PrintToChat(ignoreIlliterate).
- EntityManager.DestroyBeam: zero out width and render colour before the kill so beams cannot linger visibly, with a next-frame Remove fallback.
- Ricochet: drop all 18 diagnostic Trace calls and the Trace helper; the skill measured stable over 48h and the tracing dominated the debug log.

Debug
- Tag round start, round end and freeze-time-end lines with [WARMUP] so warmup load is separable from live rounds.
This commit is contained in:
ByDexter 2026-08-09 00:37:02 +03:00
parent 615c55b2da
commit b2d2c5bf9a
93 changed files with 3414 additions and 329 deletions

View file

@ -60,6 +60,13 @@
"blastshot": "Blast Shot",
"blastshot_desc": "Press Attack2 with the MP5 to fire an HE grenade",
"bounty": "Bounty",
"bounty_desc": "Put a price on an enemy's head; whoever kills them takes the money",
"bounty_select_info": "Choose a player:",
"bounty_player_info": "You put a {1}$ bounty on '{0}'.",
"bounty_enemy_info": "A {0}$ bounty was placed on your head.",
"bounty_claimed_info": "You killed '{0}' and claimed {1}$.",
"bunnyhop": "Bunny",
"bunnyhop_desc": "You get auto \"BunnyHop\"",
@ -137,6 +144,10 @@
"dwarf_desc": "Random character size at the start of the round",
"dwarf_desc2": "Your size multiplier is: {0}x",
"empgrenade": "EMP Grenade",
"empgrenade_desc": "Anyone hurt by your grenade loses their radar and crosshair for a while",
"empgrenade_enemy_info": "An EMP grenade knocked out your radar and crosshair.",
"enemyspawn": "Enemy Spawn",
"enemyspawn_desc": "Click [css_useSkill] to teleport to the enemy spawn",
@ -223,6 +234,9 @@
"grapple_no_anchor_info": "No surface to hook onto.",
"grapple_pulling_info": "PULLING",
"gravitydecoy": "Gravity Decoy",
"gravitydecoy_desc": "Your decoy changes the gravity of everyone nearby",
"grenadier": "Grenadier",
"grenadier_desc": "You have infinite hegrenade",
@ -232,6 +246,9 @@
"healingsmoke": "Healing Smoke",
"healingsmoke_desc": "Your smoke grenades heal",
"heavyweight": "Heavyweight",
"heavyweight_desc": "Skills that push or slow you down have no effect on you",
"hermit": "Hermit",
"hermit_desc": "Killing restores ammo and a portion of health",
@ -360,6 +377,12 @@
"demoneye": "Demon Eye",
"demoneye_desc": "You deal damage to every enemy you are looking at",
"nemesis": "Nemesis",
"nemesis_desc": "The player you mark takes extra damage",
"nemesis_select_info": "Choose a player:",
"nemesis_player_info": "You marked '{0}'.",
"nemesis_enemy_info": "You have been marked as a nemesis, you now take extra damage from everyone.",
"nightmare": "Nightmare",
"nightmare_desc": "Force a chosen enemy to experience a terrifying vision",
"nightmare_disable_info": "The nightmare has faded.",
@ -423,6 +446,10 @@
"prosthesis": "Prosthesis",
"prosthesis_desc": "Arms and legs are bulletproof",
"punisher": "Punisher",
"punisher_desc": "You bank part of the damage you take and add it to your next hit",
"punisher_released_info": "You dealt {0} extra damage and healed for the same amount.",
"push": "Pusher",
"push_desc": "You have a random chance to push an enemy back when hitting them",
"push_desc2": "Your chances of pushing back the enemy are: {0}%",
@ -460,6 +487,10 @@
"returntosender": "Return to Sender",
"returntosender_desc": "The first hit on an enemy sends them back to their spawn",
"rewind": "Rewind",
"rewind_desc": "Click [css_useSkill] to drop a marker where you stand and return to it shortly after",
"rewind_pending_info": "RETURN: {0}",
"richboy": "Rich Boy",
"richboy_desc": "You receive a random amount of money at the start of the round",
@ -549,6 +580,14 @@
"tripwire_placed_info": "Tripwire placed.",
"tripwire_triggered_info": "'{0}' triggered your tripwire.",
"truearmor": "True Armor",
"truearmor_desc": "Part of the damage you take is paid by your armor instead of your health",
"voodoo": "Voodoo",
"voodoo_desc": "The enemy you mark also takes part of the damage you take",
"voodoo_select_info": "Choose a player:",
"voodoo_player_info": "You bound '{0}' to your voodoo.",
"wallhack": "Wallhack",
"wallhack_desc": "You can see enemies through walls",