Пример #1
0
        private object OnPlayerRecover(BasePlayer aPlayer)
        {
            ShockedController theController = aPlayer.GetComponent <ShockedController>();

            if (theController)
            {
                if (aPlayer.IsNpc)
                {
                    if (aPlayer.inventory.containerBelt.IsLocked())
                    {
                        aPlayer.inventory.containerBelt.SetLocked(false);
                    }
                    if (aPlayer.inventory.containerWear.IsLocked())
                    {
                        aPlayer.inventory.containerWear.SetLocked(false);
                    }
                }
                theController.IsShocked = false;
            }
            return(null);
        }
Пример #2
0
        private void Unload()
        {
            OnServerSave();

            foreach (BaseProjectile eachProjectile in BaseNetworkable.serverEntities.OfType <BaseProjectile>())
            {
                if (eachProjectile.GetComponent <TaserController>())
                {
                    DisableTaserBehaviour(eachProjectile);
                }
            }

            foreach (BasePlayer eachProjectile in BaseNetworkable.serverEntities.OfType <BasePlayer>())
            {
                ShockedController theController = eachProjectile.GetComponent <ShockedController>();
                if (theController)
                {
                    UnityEngine.Object.Destroy(theController);
                }
            }
        }
Пример #3
0
        private object OnEntityTakeDamage(BaseCombatEntity anEntity, HitInfo aHitInfo)
        {
            if (!aHitInfo?.Weapon?.GetComponent <TaserController>())
            {
                return(null);
            }

            aHitInfo.damageTypes.Clear();
            aHitInfo.DoHitEffects = false;
            aHitInfo.DoDecals     = false;

            if (aHitInfo.InitiatorPlayer && !permission.UserHasPermission(aHitInfo.InitiatorPlayer.UserIDString, PERMISSION_USETASER))
            {
                return(true);
            }

            float theDistance = !aHitInfo.IsProjectile() ? Vector3.Distance(aHitInfo.PointStart, aHitInfo.HitPositionWorld) : aHitInfo.ProjectileDistance;

            if (config.TaserDistance > 0f && theDistance > config.TaserDistance)
            {
                aHitInfo.DidHit = false;
                return(true);
            }
            Effect.server.Run(config.PrefabShock, anEntity, aHitInfo.HitBone, aHitInfo.HitPositionLocal, aHitInfo.HitNormalLocal);
            aHitInfo.damageTypes.Add(DamageType.ElectricShock, config.TaserDamage);
            BasePlayer thePlayer = anEntity?.GetComponent <BasePlayer>();

            if (thePlayer)
            {
                if (thePlayer.IsNpc)
                {
                    if (aHitInfo.InitiatorPlayer && !permission.UserHasPermission(aHitInfo.InitiatorPlayer.UserIDString, PERMISSION_TASENPC))
                    {
                        return(null);
                    }

                    if (config.InstantKillsNPCs)
                    {
                        thePlayer.Die(aHitInfo);
                        return(null);
                    }

                    if (config.NPCBeltLocked)
                    {
                        thePlayer.inventory.containerBelt.SetLocked(true);
                    }
                    if (config.NPCWearLocked)
                    {
                        thePlayer.inventory.containerWear.SetLocked(true);
                    }
                }

                ShockedController theController = thePlayer.GetComponent <ShockedController>();
                if (!theController)
                {
                    theController        = thePlayer.gameObject.AddComponent <ShockedController>();
                    theController.Config = config;
                }
                NextFrame(() => theController.Shock(aHitInfo));
            }
            return(null);
        }