Example Grenade

using InventorySystem;
using InventorySystem.Items.Firearms;
using InventorySystem.Items.ThrowableProjectiles;
using LabApi.Events.Arguments.ServerEvents;
using LabApi.Features.Wrappers;
using UncomplicatedCustomItems.API.Attributes;
using UncomplicatedCustomItems.API.Features;
using UncomplicatedCustomItems.API.Features.CustomItemAPI;
using UncomplicatedCustomItems.API.Interfaces.FlagSettings;
using UncomplicatedCustomItems.Events;
using UnityEngine;
using UnityEngine.UIElements;

namespace UncomplicatedCustomItems.Examples
{
    /// <summary>
    /// Example of how to make a <see cref="CustomItem"/> in C#
    /// You could also use the <see cref="API.ToolGun.ToolGun"/> as a example.
    /// </summary>
    [PluginCustomItem]
    public class ExampleCustomGrenade : CustomExplosiveGrenade
    {
        /// <inheritdoc/>
        public override uint Id { get; set; } = 1;

        /// <inheritdoc/>
        public override string Name { get; set; } = "The Grenade";

        /// <inheritdoc/>
        public override string Description { get; set; } = ":D";

        /// <inheritdoc/>
        public override float Weight { get; set; } = 1.5f;

        /// <inheritdoc/>
        public override ItemType Item { get; set; } = ItemType.GrenadeHE;

        /// <inheritdoc/>
        public override Vector3 Scale { get; set; } = new Vector3(1.2f, 1.2f, 1.2f);

        /// <inheritdoc/>
        public override bool Spawn { get; set; } = false;

        /// <inheritdoc/>
        public override float MaxRadius { get; set; } = 10f;

        /// <inheritdoc/>
        public override float ScpDamageMultiplier { get; set; } = 10f;

        /// <inheritdoc/>
        public override float BurnDuration { get; set; } = 10f;

        /// <inheritdoc/>
        public override float DeafenDuration { get; set; } = 16f;

        /// <inheritdoc/>
        public override float ConcussDuration { get; set; } = 5.6f;

        /// <inheritdoc/>
        public override float FuseTime { get; set; } = 10f;

        /// <inheritdoc/>
        public override bool ExplodeOnImpact { get; set; } = false;

        /// <inheritdoc/>
        public override float PinPullTime { get; set; } = 1.5f;

        /// <inheritdoc/>
        public override bool Repickable { get; set; } = true;

        /// <inheritdoc/>
        public override float PlayerDamageMultiplier { get; set; } = 3f;

        /// <inheritdoc/>
        public override float DoorDamageMultiplier { get; set; } = 10f;

        protected override void OnDetonating(ProjectileExplodingEventArgs ev)
        {
            if (!Check(ev.TimedGrenade))
                return;

            for (int i = 0; i <= 5; i++)
            {
                Vector3 position = ServerHandler.ClusterOffset(ev.Position);
                ExplosiveGrenadeProjectile grenade = (ExplosiveGrenadeProjectile)ExplosiveGrenadeProjectile.Create(ItemType.GrenadeHE, position, default, Scale/2);
                grenade.RemainingTime = 1.3f;
                grenade.MaxRadius = 4f;
                grenade.Spawn();
            }

            base.OnDetonating(ev);
        }
    }
}

Last updated

Was this helpful?