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); }
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); } } }
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); }