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": "Tiro Explosivo",
"blastshot_desc": "Pressione Attack2 com a MP5 para disparar uma granada HE",
"bounty": "Recompensa",
"bounty_desc": "Coloque um preço na cabeça de um inimigo; quem o matar leva o dinheiro",
"bounty_select_info": "Escolha um jogador:",
"bounty_player_info": "Você colocou {1}$ de recompensa em '{0}'.",
"bounty_enemy_info": "Puseram {0}$ de recompensa na sua cabeça.",
"bounty_claimed_info": "Você matou '{0}' e levou {1}$.",
"bunnyhop": "Coelho",
"bunnyhop_desc": "Você ganha \"BunnyHop\" automático",
@ -144,6 +151,10 @@
"dwarf_desc": "Sua altura agora é aleatória",
"dwarf_desc2": "Seu multiplicador de altura é: {0}x",
"empgrenade": "Granada EMP",
"empgrenade_desc": "Quem se ferir com sua granada perde o radar e a mira por um tempo",
"empgrenade_enemy_info": "Uma granada EMP derrubou seu radar e sua mira.",
"enemyspawn": "Spawn Inimigo",
"enemyspawn_desc": "Clique em [css_useSkill] para se teletransportar para a base inimiga",
@ -230,6 +241,9 @@
"grapple_no_anchor_info": "Nenhuma superfície para prender o gancho.",
"grapple_pulling_info": "PUXANDO",
"gravitydecoy": "Chamariz Gravitacional",
"gravitydecoy_desc": "Seu chamariz muda a gravidade de todos que estão por perto",
"grenadier": "Bomberman",
"grenadier_desc": "Você tem HEs infinitas",
@ -239,6 +253,9 @@
"healingchicken": "Galinha Curadora",
"healingchicken_desc": "Suas galinhas curam você enquanto você estiver por perto",
"heavyweight": "Peso Pesado",
"heavyweight_desc": "Habilidades que empurram ou te deixam lento não fazem efeito em você",
"hermit": "Sanguessuga",
"hermit_desc": "Matar restaura munição e uma parte da sua vida",
@ -360,6 +377,12 @@
"moneyswap_player_info": "Você trocou dinheiro com o jogador '{0}'.",
"moneyswap_select_info": "Trocar dinheiro c/ jogador:",
"nemesis": "Nêmesis",
"nemesis_desc": "O jogador que você marcar recebe dano extra",
"nemesis_select_info": "Escolha um jogador:",
"nemesis_player_info": "Você marcou '{0}'.",
"nemesis_enemy_info": "Você foi marcado como nêmesis, agora recebe dano extra de todos.",
"nightmare": "Pesadelo",
"nightmare_desc": "Faça um inimigo escolhido ter uma visão aterrorizante",
"nightmare_disable_info": "O pesadelo desapareceu.",
@ -423,6 +446,10 @@
"prosthesis": "Prótese",
"prosthesis_desc": "Braços e pernas são à prova de balas",
"punisher": "Punidor",
"punisher_desc": "Você guarda parte do dano recebido e soma no seu próximo tiro",
"punisher_released_info": "Você causou {0} de dano extra e recuperou a mesma vida.",
"push": "Empurrão",
"push_desc": "Você tem uma chance aleatória de empurrar um inimigo ao acertá-lo",
"push_desc2": "Suas chances de empurrar o inimigo são: {0}%",
@ -460,6 +487,10 @@
"returntosender": "Devolução ao Remetente",
"returntosender_desc": "O primeiro tiro em um inimigo o envia de volta a sua base",
"rewind": "Retroceder",
"rewind_desc": "Clique em [css_useSkill] para deixar uma marca aqui e voltar a ela logo depois",
"rewind_pending_info": "RETORNO: {0}",
"richboy": "Filhinho de Papai",
"richboy_desc": "Você recebe uma quantidade aleatória de dinheiro no início da rodada",
@ -549,6 +580,14 @@
"tripwire_placed_info": "Fio de armadilha colocado.",
"tripwire_triggered_info": "'{0}' acionou seu fio.",
"truearmor": "Armadura Real",
"truearmor_desc": "Parte do dano que você recebe sai do colete em vez da vida",
"voodoo": "Vodu",
"voodoo_desc": "O inimigo que você marcar também recebe parte do dano que você leva",
"voodoo_select_info": "Escolha um jogador:",
"voodoo_player_info": "Você ligou '{0}' ao seu vodu.",
"wallhack": "Wallhack",
"wallhack_desc": "Você pode ver inimigos através das paredes",