combat/WeaponComboRessource.cs
using System.Collections.Generic;
using Sandbox;

[GameResource( "Weapon Combo Profile", "combo", "Définit les enchaînements, attaques, offsets de socket et l'identité sonore d'une arme.", Icon = "sports_martial_arts" )]
public sealed class WeaponComboResource : GameResource
{
    [Property, Group( "1. Identité" )]
    public string WeaponName { get; set; } = "Nouvelle Arme";

    [Property, Group( "1. Identité" )]
    public WeaponType Type { get; set; } = WeaponType.Glaive;

    // =========================================================================
    // AJUSTEMENT DE LA PRISE EN MAIN (SOCKET OFFSET)
    // =========================================================================
    [Property, Group( "1. Identité" )]
    [Description( "Décalage de position relatif au socket d'attache (en cm)." )]
    public Vector3 GripPositionOffset { get; set; } = Vector3.Zero;

    [Property, Group( "1. Identité" )]
    [Description( "Décalage d'angle en degrés dans la main ou sur l'avant-bras." )]
    public Angles GripAnglesOffset { get; set; } = Angles.Zero;

    // =========================================================================
    // IDENTITÉ AUDIO & IMPACTS MATÉRIAUX
    // =========================================================================
    [Property, Group( "Audio - Réactions Matériaux" )] public SoundEvent HitFleshSound { get; set; }
    [Property, Group( "Audio - Réactions Matériaux" )] public SoundEvent HitWorldSound { get; set; }
    [Property, Group( "Audio - Réactions Matériaux" )] public SoundEvent ParrySound { get; set; }
    [Property, Group( "Audio - Réactions Matériaux" )] public SoundEvent BlockSound { get; set; }
    [Property, Group( "Audio - Réactions Matériaux" )] public SoundEvent ImpaleSound { get; set; }

    // =========================================================================
    // PROFILS D'ATTAQUE
    // =========================================================================
    [Property, Group( "2. Enchaînement Principal (Clic Gauche Charge & Release)" )]
    public List<AttackProfile> PrimaryCombo { get; set; } = new();

    [Property, Group( "3. Attaque Sautée" )]
    public AttackProfile JumpAttack { get; set; }

    [Property, Group( "4. Profil de Jet / Propulsion" )]
    [Description( "Définit les dégâts, le type et le comportement quand l'arme est projetée." )]
    public AttackProfile ThrownProfile { get; set; } = new()
    {
        Name = "Weapon Throw",
        Damage = 35f,
        BalanceDamage = 50f,
        Type = DamageType.Pierce,
        IsHeavy = true,
        FighterKnockbackForce = 120f,
        PropPhysicsImpulse = 15000f,
        CausesKnockdownOnStagger = true
    };
}