Attachment component definitions for Facepunch weapons ported into this package. Each class (USP silencer, USP red dot, M700 scope) sets bodygroup choices, icons, sounds, particles and aim/scope stats on the SWB base attachment types.
using SWB.Base;
using SWB.Base.Attachments;
namespace HorizonRP;
// Les accessoires des armes de Facepunch : leurs modèles les portent déjà, en groupes
// de corps (bodygroups). Ces composants SWB les montrent ou les cachent, comme le font
// ceux de la démo SWB pour ses armes (DemoAttachments.cs).
[Title( "Silencieux (USP)" )]
public class UspSilencer : SilencerAttachment
{
public override string Name => "Silencieux de pistolet";
public override string IconPath => "attachments/swb/muzzle/silencer_pistol/ui/icon.png";
public override string BodyGroup { get; set; } = "muzzle";
public override int BodyGroupChoice { get; set; } = 2;
public override int BodyGroupDefault { get; set; } = 0;
// Le modèle de Facepunch n'a pas de point « muzzle_silenced » : la flamme reste au bout du canon.
[Property, Group( "Silencer" )] public override string EffectAttachmentOrBone { get; set; } = "muzzle";
public override PrefabScene MuzzleFlashParticle { get; set; } = SceneUtility.GetPrefabScene( ResourceLibrary.Get<PrefabFile>( "prefabs/particles/muzzle/muzzleflash.prefab" ) );
[Property, Group( "Silencer" )] public override SoundEvent ShootSound { get; set; } = ResourceLibrary.Get<SoundEvent>( "sounds/swb/attachments/silencer/swb_pistol.silenced.fire.sound" );
}
[Title( "Viseur point rouge (USP)" )]
public class UspRedDot : SightAttachment
{
public override string Name => "Viseur point rouge";
public override string IconPath => "attachments/swb/sight/reflex/ui/icon.png";
public override string BodyGroup { get; set; } = "sights";
public override int BodyGroupChoice { get; set; } = 2;
public override int BodyGroupDefault { get; set; } = 0;
[Property]
public override AimInfo AimInfo { get; set; } = new AimInfo()
{
SpreadModifier = -1f,
AimInFOVSpeed = -1f,
AimOutFOVSpeed = -1f,
Sensitivity = 0.6f,
PlayerFOVZoom = 1.1f,
};
}
[Title( "Lunette (M700)" )]
public class M700Scope : Scope2DAttachment
{
public override string Name => "Lunette x12";
public override string IconPath => "attachments/swb/sight/scope_hunter/ui/icon.png";
public override string BodyGroup { get; set; } = "top_rail";
public override int BodyGroupChoice { get; set; } = 0;
public override int BodyGroupDefault { get; set; } = 1;
[Property]
public override ScopeInfo ScopeInfo { get; set; } = new()
{
LensTexture = "materials/swb/scopes/swb_lens_hunter.png",
ScopeTexture = "materials/swb/scopes/swb_scope_hunter.png",
ScopeInDelay = 0.2f,
ScopeInSound = ResourceLibrary.Get<SoundEvent>( "sounds/swb/scope/swb_sniper.zoom_in.sound" ),
FOV = 8f,
Sensitivity = 0.25f,
Spread = 0f,
};
}