User Tools

Site Tools


custom_weaponry

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
custom_weaponry [2023/08/21 23:12] frank_lee_smithcustom_weaponry [2026/05/01 23:26] (current) frank_lee_smith
Line 1: Line 1:
-====== Custom Weaponry ====== +coming soon when facepunch lets us do addons
-You can create custom weaponry from deriving from one of the following classes: +
-  * Gun (Gun provides common useful methods such as ShootBullet that gun like weapons would find useful, it is derived from Weapon) +
-  * Melee (Melee has an Attack method, it is derived from Weapon) +
-  * Weapon (Weapon provides reload and ammo system and no more, it is derived from Carriable) +
-  * Carriable (Carriable provides nothing, its a bare bones thing that goes into your inventory and has a viewmodel) +
- +
- +
- +
-heres an example weapon you might find helpful +
-<code csharp> +
-using Editor; +
-using Sandbox; +
-using TerrorTown; +
- +
-[Library("ttt_weapon_overpowered"), HammerEntity] +
-[Title("Overpowered Weapon"), Category("Weapons")] +
-public class OverpoweredWeapon : Gun, ISecondaryWeapon, IRandomWeapon +
-+
- public override string ViewModelPath => "weapons/rust_pistol/v_rust_pistol.vmdl"; +
- public override string WorldModelPath => "weapons/rust_pistol/rust_pistol.vmdl"; +
- public override float PrimaryAttackDelay => 0.000f; +
- public override float PrimaryReloadDelay => 0.000f; +
- public override int MaxPrimaryAmmo => 100000; +
- public override AmmoType PrimaryAmmoType => AmmoType.Spare; +
- public override float HeadshotMultiplier => 10.00f; +
- public override bool Automatic => true; +
- public override void PrimaryAttack() +
-+
- PrimaryAmmo -= 1; +
- ShootBullet(1000, 0.0f, 1000); +
- PlaySound("rust_pistol.shoot"); +
- (Owner as AnimatedEntity)?.SetAnimParameter("b_attack", true); +
- ShootEffects(); +
-+
- public override void ReloadPrimary() +
-+
- base.ReloadPrimary(); +
-+
-+
- +
-</code> +
- +
-if you would like to make a scope similar to the one on the m24, you can use this code snippet taken from the m24 +
-<code csharp> +
- public override void SecondaryAttack() +
-+
- base.SecondaryAttack(); +
- if ( Game.IsClient ) +
-+
- if ( !Scoped ) +
-+
- ScopeIn(); +
-+
- else if ( Scoped ) +
-+
- ScopeOut(); +
-+
-+
-+
- ScopeOverlay ScopeOverlay; +
- void ScopeIn() +
-+
- Scoped = true; +
- (Owner as Player).CameraController.SensitivityMultiplier = 25 / Game.Preferences.FieldOfView; +
- (Owner as Player).CameraController.FOVMultiplier = 25 / Game.Preferences.FieldOfView; +
- if ( Game.IsClient ) +
-+
- ViewModelEntity.EnableDrawing = false; +
- ScopeOverlay = new ScopeOverlay(); +
- HUDRootPanel.Current.AddChild( ScopeOverlay ); +
- PlaySound( "sniper.scope" ); +
-+
-+
- void ScopeOut() +
-+
- Scoped = false; +
- (Owner as Player).CameraController.SensitivityMultiplier = 1; +
- (Owner as Player).CameraController.FOVMultiplier = 1; +
- if ( Game.IsClient ) +
-+
- ViewModelEntity.EnableDrawing = true; +
- ScopeOverlay?.Delete(); +
- PlaySound( "sniper.scope" ); +
-+
-+
- public override void OnActiveEnd() +
-+
- ScopeOverlay?.Delete(); +
- if ( Owner is Player player ) +
-+
- player.CameraController.SensitivityMultiplier = 1; +
- player.CameraController.FOVMultiplier = 1; +
-+
- base.OnActiveEnd(); +
- +
-+
-</code> +
- +
-Smoke Grenade Code +
- +
-<code csharp> +
- +
-using Editor; +
-using Sandbox; +
-namespace TerrorTown; +
- +
-[Library( "ttt_grenade_smoke" ), HammerEntity] +
-[Title( "Smoke Grenade" ), Category( "Grenades" )] +
-[EditorModel( "models/weapons/w_smokegrenade.vmdl" )] +
-public class SmokeGrenade : Throwable, IGrenade, IRandomGrenade +
-+
-    public override string ViewModelPath => "models/weapons/v_smokegrenade.vmdl"; +
-    public override string WorldModelPath => "models/weapons/w_smokegrenade.vmdl"; +
-    public override void Throw() +
-    { +
-        if ( Game.IsServer ) +
-        { +
-            var Nade = new SmokeGrenadeThrown(); +
-            Nade.SetModel( WorldModelPath ); +
-            Nade.SetupPhysicsFromModel( PhysicsMotionType.Dynamic ); +
-            Nade.Position = Owner.AimRay.Position + (Owner.AimRay.Forward * 24) + (Vector3.Down * 5); +
-            Nade.PhysicsBody.Velocity = (Owner.AimRay.Forward * 900) + (Owner.AimRay.Forward.EulerAngles.ToRotation().Up * 80); +
-            Nade.PhysicsBody.Velocity += Owner.Velocity * 1f; +
-            Nade.PhysicsBody.AngularVelocity = Vector3.Random * 20; +
-            Nade.TimeOffset = TimeSinceClicked.Relative; +
-        } +
-    } +
-+
- +
-public class SmokeGrenadeThrown : BasePhysics +
-+
-    public float TimeOffset; +
-    public override void Spawn() +
-    { +
-        base.Spawn(); +
-        SetModel( "models/weapons/w_smokegrenade.vmdl" ); +
-        SetupPhysicsFromModel( PhysicsMotionType.Dynamic ); +
-        TimeSinceSpawned = 0; +
-    } +
-    TimeSince TimeSinceSpawned; +
-    Particles Particle; +
-    [GameEvent.Tick.Server] +
-    void tick() +
-    { +
-        if ( TimeSinceSpawned > (5 - TimeOffset) ) +
-        { +
-            if ( Particle == null ) +
-            { +
-                Particle = Particles.Create( "particles/smokegrenade.vpcf", this ); +
-                ParticleCleanupSystem.RegisterForCleanup( Particle ); +
-            } +
-        } +
-        if ( TimeSinceSpawned > (65 - TimeOffset) ) +
-        { +
-            Particle.Destroy(); +
-        } +
-    } +
-+
- +
-</code>+
custom_weaponry.txt · Last modified: 2026/05/01 23:26 by frank_lee_smith

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki