Esempio n. 1
0
        public static bool PlayerShoot(Player player, UseableGun gun)
        {
            PlayerShootEventArgs evt = new PlayerShootEventArgs();

            evt.Player = new PlayerTag(player.channel.owner);
            // TODO: make GunTag/WeaponTag/EquipmentTag/WhateverTag to store this more accurately?
            evt.Gun = new ItemAssetTag(player.equipment.asset);
            UnturnedFreneticEvents.OnPlayerShoot.Fire(evt);
            return(evt.Cancelled);
        }
Esempio n. 2
0
        internal void InvokePlayerShootEvent(Player player, Player target, Vector3 targetpos, SynapseItem weapon, out bool allow)
        {
            var ev = new PlayerShootEventArgs
            {
                Player         = player,
                Allow          = true,
                Target         = target,
                TargetPosition = targetpos,
                Weapon         = weapon,
            };

            PlayerShootEvent?.Invoke(ev);

            allow = ev.Allow;
        }
Esempio n. 3
0
        internal bool OnPlayerShootDynamicObject(int playerid, int weaponid, int objectid, float x, float y, float z)
        {
            var @object = DynamicObject.Find(objectid);

            if (@object == null)
            {
                return(false);
            }

            var args = new PlayerShootEventArgs(BasePlayer.FindOrCreate(playerid), (Weapon)weaponid, new Vector3(x, y, z));

            OnPlayerShootDynamicObject(@object, args);

            return(!args.PreventDamage);
        }
Esempio n. 4
0
        //Used by:
        //Tranquilizer
        //GrenadLauncher
        //MedkitGun
        //VaccinePistole
        private void OnShoot(PlayerShootEventArgs ev)
        {
            if (ev.Player.GetComponent <TranquilizerPlayerScript>().Stuned)
            {
                ev.Allow = false;
                return;
            }

            switch (ev.Weapon?.ID)
            {
            case (int)CustomItemType.Tranquilizer:

                ev.Player.PlayerInteract.OnInteract();
                ev.Allow = false;
                ev.Weapon.Durabillity--;

                if (ev.Target != null)
                {
                    ev.Target.GetComponent <TranquilizerPlayerScript>().Stun();
                    Hitmarker.SendHitmarker(ev.Player.Connection, 1f);
                }
                break;

            case (int)CustomItemType.MedkitGun:
                ev.Player.PlayerInteract.OnInteract();
                ev.Allow = false;
                ev.Weapon.Durabillity--;

                if (ev.Target != null)
                {
                    ev.Target.Heal(PluginClass.MedkitGunConfig.HealAmount);
                    Hitmarker.SendHitmarker(ev.Player.Connection, 1f);
                }
                break;

            case (int)CustomItemType.GrenadeLauncher:
                ev.Player.PlayerInteract.OnInteract();
                ev.Allow = false;
                ev.Weapon.Durabillity--;

                var defaultItem = InventoryItemLoader.AvailableItems[ItemType.GrenadeHE] as ThrowableItem;
                var settings    = defaultItem.FullThrowSettings;
                var reference   = ev.Player.CameraReference;
                var a2          = reference.forward + (reference.up * settings.UpwardsFactor) *
                                  (1f - Mathf.Abs(Vector3.Dot(reference.forward, Vector3.up)));
                var velocity = ev.Player.PlayerMovementSync.PlayerVelocity + a2 * 20 * PluginClass.GLConfig.ForceMultiplier;

                var grenade = Map.Get.SpawnGrenade(ev.Player.CameraReference.position, velocity, PluginClass.GLConfig.GrenadeFuseTime, GrenadeType.Grenade, ev.Player);

                if (PluginClass.GLConfig.ExplodeOnCollison)
                {
                    var script = grenade.Throwable.ThrowableItem.gameObject.AddComponent <ExplodeScript>();
                    script.owner = ev.Player.gameObject;
                }
                break;

            case (int)CustomItemType.VaccinePistole:
                ev.Player.PlayerInteract.OnInteract();
                ev.Allow = false;
                ev.Weapon.Durabillity--;

                if (ev.Target != null)
                {
                    Hitmarker.SendHitmarker(ev.Player.Connection, 1f);

                    if (ev.Target.RoleID == (int)RoleType.Scp0492)
                    {
                        var pos = ev.Target.Position;
                        ev.Target.ChangeRoleAtPosition(PluginClass.VPConfig.ReplaceRoles.ElementAt(UnityEngine.Random.Range(0, PluginClass.VPConfig.ReplaceRoles.Count)));
                        ev.Target.Position = pos;
                    }
                    else
                    {
                        ev.Target.Hurt(PluginClass.VPConfig.Heal);
                        ev.Target.PlayerEffectsController.UseMedicalItem(ItemType.SCP500);
                    }
                }
                break;

            case (int)CustomItemType.Sniper:
                ev.Player.PlayerInteract.OnInteract();
                ev.Allow = false;
                ev.Weapon.Durabillity--;

                if (ev.Target != null)
                {
                    Hitmarker.SendHitmarker(ev.Player.Connection, 1f);

                    ev.Target.Hurt((int)(ev.Target.RoleType == RoleType.Scp106 ? PluginClass.SnConfig.Damage / 10f : PluginClass.SnConfig.Damage));
                }
                break;
            }
        }
 public virtual void OnShot(PlayerShootEventArgs e)
 {
     AssertNotDisposed();
     Shot?.Invoke(this, e);
 }
Esempio n. 6
0
 public void PlayerShoot(PlayerShootEventArgs e) => OnPlayerShoot?.Invoke(this, e);
Esempio n. 7
0
 protected virtual void OnPlayerShootDynamicObject(DynamicObject @object, PlayerShootEventArgs e)
 {
     PlayerShootDynamicObject?.Invoke(@object, e);
 }