예제 #1
0
 /// <summary>
 /// Initializes a new instance of the <see cref="ChangingCameraEventArgs"/> class.
 /// </summary>
 /// <param name="player"><inheritdoc cref="Player"/></param>
 /// <param name="camera"><inheritdoc cref="Camera"/></param>
 /// <param name="auxiliaryPowerCost"><inheritdoc cref="AuxiliaryPowerCost"/></param>
 /// <param name="isAllowed"><inheritdoc cref="IsAllowed"/></param>
 public ChangingCameraEventArgs(Player player, Camera079 camera, float auxiliaryPowerCost, bool isAllowed = true)
 {
     Player             = player;
     Camera             = API.Features.Camera.Get(camera);
     AuxiliaryPowerCost = auxiliaryPowerCost;
     IsAllowed          = isAllowed;
 }
예제 #2
0
 /// <summary>
 /// Initializes a new instance of the <see cref="ElevatorTeleportEventArgs"/> class.
 /// </summary>
 /// <param name="player"><inheritdoc cref="Player"/></param>
 /// <param name="camera"><inheritdoc cref="Camera"/></param>
 /// <param name="apCost"><inheritdoc cref="APCost"/></param>
 /// <param name="isAllowed"><inheritdoc cref="IsAllowed"/></param>
 public ElevatorTeleportEventArgs(Player player, Camera079 camera, float apCost, bool isAllowed = true)
 {
     Player    = player;
     Camera    = camera;
     APCost    = apCost;
     IsAllowed = isAllowed;
 }
예제 #3
0
        /// <summary>
        /// Gets all the <see cref="CameraType"/> and <see cref="Room"/> values for for the <see cref="Camera079"/> instances using <see cref="Camera079.cameraId"/> and <see cref="UnityEngine.GameObject"/> name.
        /// </summary>
        internal static void RegisterCameraInfoOnLevelLoad()
        {
            OrderedCameraTypes.Clear();

            ReadOnlyCollection <Camera079> cameras = Map.Cameras;

            int cameraCount = cameras.Count;

            for (int i = 0; i < cameraCount; i++)
            {
                Camera079 camera   = cameras[i];
                int       cameraID = camera.GetInstanceID();

                CameraType cameraType = (CameraType)cameraID;
                Room       room       = Map.FindParentRoom(camera.gameObject);

                if (OrderedCameraTypes.ContainsKey(cameraID))
                {
                    OrderedCameraTypes.Remove(cameraID);
                }
                if (OrderedCameraRooms.ContainsKey(cameraID))
                {
                    OrderedCameraRooms.Remove(cameraID);
                }

                OrderedCameraTypes.Add(cameraID, cameraType);
                OrderedCameraRooms.Add(cameraID, room);
            }
        }
예제 #4
0
 /// <summary>
 /// Initializes a new instance of the <see cref="ChangingCameraEventArgs"/> class.
 /// </summary>
 /// <param name="player"><inheritdoc cref="Player"/></param>
 /// <param name="camera"><inheritdoc cref="Camera"/></param>
 /// <param name="auxiliaryPowerCost"><inheritdoc cref="AuxiliaryPowerCost"/></param>
 /// <param name="isAllowed"><inheritdoc cref="IsAllowed"/></param>
 public ChangingCameraEventArgs(Player player, Camera079 camera, float auxiliaryPowerCost, bool isAllowed = true)
 {
     Player             = player;
     Camera             = camera;
     AuxiliaryPowerCost = auxiliaryPowerCost;
     IsAllowed          = isAllowed;
 }
예제 #5
0
 /// <summary>
 /// Initializes a new instance of the <see cref="ElevatorTeleportingEventArgs"/> class.
 /// </summary>
 /// <param name="player"><inheritdoc cref="Player"/></param>
 /// <param name="camera"><inheritdoc cref="Camera"/></param>
 /// <param name="auxiliaryPowerCost"><inheritdoc cref="AuxiliaryPowerCost"/></param>
 /// <param name="isAllowed"><inheritdoc cref="IsAllowed"/></param>
 public ElevatorTeleportingEventArgs(Player player, Camera079 camera, float auxiliaryPowerCost, bool isAllowed = true)
 {
     Player             = player;
     Camera             = camera;
     AuxiliaryPowerCost = auxiliaryPowerCost;
     IsAllowed          = isAllowed;
 }
예제 #6
0
 /// <summary>
 /// Initializes a new instance of the <see cref="ChangingCameraEventArgs"/> class.
 /// </summary>
 /// <param name="player"><inheritdoc cref="Player"/></param>
 /// <param name="newCamera"><inheritdoc cref="Camera"/></param>
 /// <param name="manaCost"><inheritdoc cref="APCost"/></param>
 /// <param name="isAllowed"><inheritdoc cref="IsAllowed"/></param>
 public ChangingCameraEventArgs(Player player, Camera079 newCamera, float manaCost, bool isAllowed = true)
 {
     Player    = player;
     Camera    = newCamera;
     APCost    = manaCost;
     IsAllowed = isAllowed;
 }
예제 #7
0
        private static List <Camera079> FindCameras(GameObject gameObject)
        {
            List <Camera079> cameraList = new List <Camera079>();

            foreach (Scp079Interactable scp079Interactable in Interface079.singleton.allInteractables)
            {
                foreach (Scp079Interactable.ZoneAndRoom zoneAndRoom in scp079Interactable.currentZonesAndRooms)
                {
                    if (zoneAndRoom.currentRoom != gameObject.name ||
                        zoneAndRoom.currentZone != gameObject.transform.parent.name)
                    {
                        continue;
                    }

                    if (scp079Interactable.type != Scp079Interactable.InteractableType.Camera)
                    {
                        continue;
                    }

                    Camera079 camera079 = scp079Interactable.GetComponent <Camera079>();
                    if (!cameraList.Contains(camera079))
                    {
                        cameraList.Add(camera079);
                    }
                }
            }

            return(cameraList);
        }
예제 #8
0
        public static bool CanLookToPlayer(this Camera079 camera, Player player)
        {
            if (player.Role == RoleType.Spectator || player.Role == RoleType.Scp079 || player.Role == RoleType.None)
            {
                return(false);
            }

            float num = Vector3.Dot(camera.head.transform.forward, player.Position - camera.transform.position);

            return((num >= 0f && num * num / (player.Position - camera.transform.position).sqrMagnitude > 0.4225f) &&
                   Physics.Raycast(camera.transform.position, player.Position - camera.transform.position, out RaycastHit raycastHit, 100f, -117407543) &&
                   raycastHit.transform.name == player.GameObject.name);
        }
예제 #9
0
        private static bool Prefix(Scp079PlayerScript __instance, ushort cameraId, bool lookatRotation)
        {
            try
            {
                if (!__instance._interactRateLimit.CanExecute(true))
                {
                    return(false);
                }

                if (!__instance.iAm079)
                {
                    return(false);
                }

                Camera079 camera = API.Features.Map.GetCameraById(cameraId);

                if (camera == null)
                {
                    return(false);
                }

                float num                  = __instance.CalculateCameraSwitchCost(camera.transform.position);
                bool  isAllowed            = num <= __instance.curMana;
                ChangingCameraEventArgs ev = new ChangingCameraEventArgs(API.Features.Player.Get(__instance.gameObject), camera, num, isAllowed);
                Scp079.OnChangingCamera(ev);
                if (ev.IsAllowed)
                {
                    __instance.RpcSwitchCamera(ev.Camera.cameraId, lookatRotation);
                    __instance.Mana          = Mathf.Clamp(__instance.Mana - ev.APCost, 0, __instance.maxMana);
                    __instance.currentCamera = ev.Camera;
                }
                else if (ev.APCost > __instance.curMana)
                {
                    __instance.RpcNotEnoughMana(ev.APCost, __instance.curMana);
                }

                return(false);
            }
            catch (Exception e)
            {
                Exiled.API.Features.Log.Error($"{typeof(ChangingCamera).FullName}.{nameof(Prefix)}:\n{e}");

                return(true);
            }
        }
        private void Check079Spot()
        {
            if (!SanyaPlugin.Instance.Config.Scp079ScanRoom || player.Role != RoleType.Scp079 || player.CurrentRoom == null || player.Camera == _lastcam)
            {
                return;
            }

            string message = string.Empty;

            if (player.CurrentRoom.GetComponentsInChildren <Scp079Generator>().Any(x => x.Activating))
            {
                message = $"<color=#bbee00><size=25>発電機が起動を開始している\n場所:{player.CurrentRoom.Type}</color></size>\n";
            }
            else
            {
                var target = player.CurrentRoom.Players.FirstOrDefault(x => x.Team != Team.SCP && x.Team != Team.RIP && x.Team != Team.CHI);
                if (target != null)
                {
                    if (player.CurrentRoom.Zone == Exiled.API.Enums.ZoneType.Surface)
                    {
                        message = $"<color=#bbee00><size=25>SCP-079が{target.ReferenceHub.characterClassManager.CurRole.fullName}を発見した\n場所:{Methods.TranslateZoneName(player.CurrentRoom.Zone)}</color></size>\n";
                    }
                    else
                    {
                        message = $"<color=#bbee00><size=25>SCP-079が{target.ReferenceHub.characterClassManager.CurRole.fullName}を発見した\n場所:{Methods.TranslateZoneName(player.CurrentRoom.Zone)}の{Methods.TranslateRoomName(player.CurrentRoom.Type)}</color></size>\n";
                    }
                }
            }

            if (!string.IsNullOrEmpty(message))
            {
                foreach (var scp in Player.Get(Team.SCP))
                {
                    scp.ReferenceHub.GetComponent <SanyaPluginComponent>().AddHudCenterDownText(message, 5);
                }
            }

            _lastcam = player.Camera;
        }
예제 #11
0
        public bool Execute(ArraySegment <string> arguments, ICommandSender sender, out string response)
        {
            if (sender is PlayerCommandSender)
            {
                var plr = sender as PlayerCommandSender;
                if (plr.RH.characterClassManager.NetworkCurClass == RoleType.Scp079)
                {
                    var plugin = Better079Plugin.instance;
                    var args   = arguments.Array;
                    {
                        if (args.Length == 1)
                        {
                            if (args[1].ToLower().Equals("help") || args[1].ToLower().Equals("commands") || args[1].ToLower().Equals("?"))
                            {
                                response = plugin.Config.b079_help_title + "\n" +
                                           "\"." + plugin.Config.b079_prefix + " a1\" - " + plugin.Config.b079_help_a1 + " - " + plugin.Config.b079_a1_power + "+ AP - Tier " + (plugin.Config.b079_a1_tier + 1) + "+\n" +
                                           "\"." + plugin.Config.b079_prefix + " a2\" - " + plugin.Config.b079_help_a2 + " - " + plugin.Config.b079_a2_power + "+ AP - Tier " + (plugin.Config.b079_a2_tier + 1) + "+\n" +
                                           "\"." + plugin.Config.b079_prefix + " a3\" - " + plugin.Config.b079_help_a3 + " - " + plugin.Config.b079_a3_power + "+ AP - Tier " + (plugin.Config.b079_a3_tier + 1) + "+\n" +
                                           "\"." + plugin.Config.b079_prefix + " a4\" - " + plugin.Config.b079_help_a4 + " - " + plugin.Config.b079_a4_power + "+ AP - Tier " + (plugin.Config.b079_a4_tier + 1) + "+\n";
                                return(true);
                            }

                            if (args[1].ToLower().Equals("a1"))
                            {
                                if (plr.RH.scp079PlayerScript.NetworkcurLvl < plugin.Config.b079_a1_tier)
                                {
                                    response = plugin.Config.b079_msg_tier_required.Replace("$tier", "" + (plugin.Config.b079_a1_tier + 1));
                                    return(true);
                                }
                                if (plr.RH.scp079PlayerScript.NetworkcurMana >= plugin.Config.b079_a1_power)
                                {
                                    plr.RH.scp079PlayerScript.NetworkcurMana -= plugin.Config.b079_a1_power;
                                }
                                else
                                {
                                    response = plugin.Config.b079_msg_no_power;
                                    return(true);
                                }
                                var cams = PluginEvents.GetSCPCameras();
                                if (cams.Count > 0)
                                {
                                    Camera079 cam = cams[UnityEngine.Random.Range(0, cams.Count)];
                                    plr.RH.scp079PlayerScript.CmdSwitchCamera(cam.cameraId, false);
                                    response = plugin.Config.b079_msg_a1_run;
                                    return(true);
                                }
                                else
                                {
                                    plr.RH.scp079PlayerScript.NetworkcurMana += plugin.Config.b079_a1_power;
                                    response = plugin.Config.b079_msg_a1_fail;
                                    return(true);
                                }
                            }

                            if (args[1].ToLower().Equals("a2"))
                            {
                                if (plr.RH.scp079PlayerScript.NetworkcurLvl < plugin.Config.b079_a2_tier)
                                {
                                    response = plugin.Config.b079_msg_tier_required.Replace("$tier", "" + (plugin.Config.b079_a2_tier + 1));
                                    return(true);
                                }
                                if (plr.RH.scp079PlayerScript.NetworkcurMana >= plugin.Config.b079_a2_power)
                                {
                                    plr.RH.scp079PlayerScript.NetworkcurMana -= plugin.Config.b079_a2_power;
                                }
                                else
                                {
                                    response = plugin.Config.b079_msg_no_power;
                                    return(true);
                                }
                                if (Time.timeSinceLevelLoad - PluginEvents.a2cooldown < plugin.Config.b079_a2_cooldown)
                                {
                                    plr.RH.scp079PlayerScript.NetworkcurMana += plugin.Config.b079_a2_power;
                                    response = plugin.Config.b079_msg_a2_fail;
                                    return(true);
                                }
                                Room room = PluginEvents.SCP079Room(plr.RH);
                                if (room == null)
                                {
                                    plr.RH.scp079PlayerScript.NetworkcurMana += plugin.Config.b079_a2_power;
                                    response = plugin.Config.b079_msg_a2_fail;
                                    return(true);
                                }
                                if (room.Zone == ZoneType.Surface)
                                {
                                    plr.RH.scp079PlayerScript.NetworkcurMana += plugin.Config.b079_a2_power;
                                    response = plugin.Config.b079_msg_a2_fail;
                                    return(true);
                                }
                                foreach (var item in plugin.Config.b079_a2_blacklisted_rooms)
                                {
                                    if (room.Name.ToLower().Contains(item.ToLower()))
                                    {
                                        plr.RH.scp079PlayerScript.NetworkcurMana += plugin.Config.b079_a2_power;
                                        response = plugin.Config.b079_msg_a2_fail;
                                        return(true);
                                    }
                                }
                                Timing.RunCoroutine(PluginEvents.GasRoom(room, plr.RH));
                                response = plugin.Config.b079_msg_a2_run;
                                return(true);
                            }

                            if (args[1].ToLower().Equals("a3"))
                            {
                                if (plr.RH.scp079PlayerScript.NetworkcurLvl < plugin.Config.b079_a3_tier)
                                {
                                    response = plugin.Config.b079_msg_tier_required.Replace("$tier", "" + (plugin.Config.b079_a3_tier + 1));
                                    return(true);
                                }
                                if (plr.RH.scp079PlayerScript.NetworkcurMana >= plugin.Config.b079_a3_power)
                                {
                                    plr.RH.scp079PlayerScript.NetworkcurMana -= plugin.Config.b079_a3_power;
                                }
                                else
                                {
                                    response = plugin.Config.b079_msg_no_power;
                                    return(true);
                                }
                                Generator079.Generators[0].RpcCustomOverchargeForOurBeautifulModCreators(plugin.Config.b079_a3_timer, false);
                                response = plugin.Config.b079_msg_a3_run;
                                return(true);
                            }

                            if (args[1].ToLower().Equals("a4"))
                            {
                                if (plr.RH.scp079PlayerScript.NetworkcurLvl < plugin.Config.b079_a4_tier)
                                {
                                    response = plugin.Config.b079_msg_tier_required.Replace("$tier", "" + (plugin.Config.b079_a4_tier + 1));
                                    return(true);
                                }
                                if (plr.RH.scp079PlayerScript.NetworkcurMana >= plugin.Config.b079_a4_power)
                                {
                                    plr.RH.scp079PlayerScript.NetworkcurMana -= plugin.Config.b079_a4_power;
                                }
                                else
                                {
                                    response = plugin.Config.b079_msg_no_power;
                                    return(true);
                                }
                                var             pos      = plr.RH.scp079PlayerScript.currentCamera.transform.position;
                                GrenadeManager  gm       = plr.RH.GetComponent <GrenadeManager>();
                                GrenadeSettings settings = gm.availableGrenades.FirstOrDefault(g => g.inventoryID == ItemType.GrenadeFlash);
                                FlashGrenade    flash    = GameObject.Instantiate(settings.grenadeInstance).GetComponent <FlashGrenade>();
                                flash.fuseDuration = 0.5f;
                                flash.InitData(gm, Vector3.zero, Vector3.zero, 1f);
                                flash.transform.position = pos;
                                NetworkServer.Spawn(flash.gameObject);
                                response = plugin.Config.b079_msg_a4_run;
                                return(true);
                            }
                            response = plugin.Config.b079_msg_help_cmd_fail.Replace("$prefix", "" + plugin.Config.b079_prefix);
                            return(true);
                        }
                        response = plugin.Config.b079_msg_help_cmd_fail.Replace("$prefix", "" + plugin.Config.b079_prefix);
                        return(true);
                    }
                }
            }
            response = Better079Plugin.instance.Config.b079_msg_help_cmd_fail.Replace("$prefix", "" + Better079Plugin.instance.Config.b079_prefix);
            return(false);
        }
예제 #12
0
 /// <summary>
 /// Initializes a new instance of the <see cref="ElevatorTeleportEventArgs"/> class.
 /// </summary>
 /// <param name="player"><inheritdoc cref="ElevatorTeleportingEventArgs.Player"/></param>
 /// <param name="camera"><inheritdoc cref="ElevatorTeleportingEventArgs.Camera"/></param>
 /// <param name="auxiliaryPowerCost"><inheritdoc cref="ElevatorTeleportingEventArgs.AuxiliaryPowerCost"/></param>
 /// <param name="isAllowed"><inheritdoc cref="ElevatorTeleportingEventArgs.IsAllowed"/></param>
 public ElevatorTeleportEventArgs(Player player, Camera079 camera, float auxiliaryPowerCost, bool isAllowed = true)
     : base(player, camera, auxiliaryPowerCost, isAllowed)
 {
 }
예제 #13
0
        public bool Execute(ArraySegment <string> arguments, ICommandSender sender, out string response)
        {
            var ply = Player.Get((sender as CommandSender)?.SenderId);

            if (ply.Role != RoleType.Scp079)
            {
                response = PluginMain.Instance.Config.NotScp079;
                return(false);
            }

            if (arguments.Count != 1)
            {
                response = "Команды: \n.079 blackout - выключает свет во всём комплексе \n.079 flash - делает вспышку камерой \n.079 cancel - останавливает боеголовку\n.079 find - Находит случайного игрока на камерах";
                return(false);
            }

            var args = arguments.Array;

            switch (args[1].ToLower())
            {
            case "blackout":
                if (ply.Level < PluginMain.Instance.Config.BlackoutLvl)
                {
                    response = PluginMain.Instance.Config.InsufLVL;
                    return(false);
                }
                if (PluginMain.Instance.IsBlackoutOnCooldown)
                {
                    response = PluginMain.Instance.Config.OnCooldown;
                    return(false);
                }
                PluginMain.Instance.IsBlackoutOnCooldown = true;
                Timing.CallDelayed(PluginMain.Instance.Config.BlackoutCooldown, () => PluginMain.Instance.IsBlackoutOnCooldown = false);
                if (ply.Energy >= PluginMain.Instance.Config.BlackoutEnergy)
                {
                    ply.Energy -= PluginMain.Instance.Config.BlackoutEnergy;
                }
                else
                {
                    response = PluginMain.Instance.Config.NoEnergyMsg;
                    return(false);
                }
                Map.TurnOffAllLights(PluginMain.Instance.Config.BlackoutTime);
                response = PluginMain.Instance.Config.AbilitySuccess;
                try
                {
                    CommsHack.AudioAPI.API.PlayFileRaw($"{Paths.Configs}/CommsHackAudio/{PluginMain.Instance.Config.BlackoutSoundPath}", PluginMain.Instance.Config.BlackoutSoundVolume);
                }
                catch (Exception x)
                {
                    Log.Info("CommsHack is not installed, skipping method call, playing cassie instead");
                    Log.Error(x);
                    Cassie.Message(PluginMain.Instance.Config.BlackoutCassie, true);
                }
                return(true);

            case "help":
                response = "Команды: \n.079 blackout - выключает свет во всём комплексе \n.079 flash - делает вспышку камерой \n.079 cancel - останавливает боеголовку\n.079 find - Находит случайного игрока на камерах";
                return(true);

            case "cancel":
                if (Warhead.IsInProgress)
                {
                    if (PluginMain.Instance.Handler.IsNukeOnCooldown)
                    {
                        response = PluginMain.Instance.Config.CancelCooldownMsg;
                        return(false);
                    }
                    if (ply.Level < PluginMain.Instance.Config.WarheadCancelLvl)
                    {
                        response = PluginMain.Instance.Config.InsufLVL;
                        return(true);
                    }
                    if (ply.Energy >= PluginMain.Instance.Config.WarheadCancelEnergy)
                    {
                        ply.Energy -= PluginMain.Instance.Config.WarheadCancelEnergy;
                    }
                    else
                    {
                        response = PluginMain.Instance.Config.NoEnergyMsg;
                        return(true);
                    }
                    if (Warhead.IsLocked)
                    {
                        response = PluginMain.Instance.Config.IsNotInProgressOrLocked;
                        return(false);
                    }
                    Timing.RunCoroutine(PluginMain.Instance.Handler.Nuke(), "nuke");
                    response = PluginMain.Instance.Config.AbilitySuccess;
                    return(true);
                }
                else
                {
                    response = PluginMain.Instance.Config.IsNotInProgressOrLocked;
                    return(true);
                }

            case "flash":
                if (ply.Level < PluginMain.Instance.Config.FlashLVL)
                {
                    response = PluginMain.Instance.Config.InsufLVL;
                    return(true);
                }
                if (PluginMain.Instance.IsFlashOnCooldown)
                {
                    response = PluginMain.Instance.Config.OnCooldown;
                    return(false);
                }
                if (ply.Energy >= PluginMain.Instance.Config.FlashEnergy)
                {
                    ply.Energy -= PluginMain.Instance.Config.FlashEnergy;
                }
                else
                {
                    response = PluginMain.Instance.Config.NoEnergyMsg;
                    return(true);
                }
                var pos = ply.ReferenceHub.scp079PlayerScript.currentCamera.transform.position;

                ply.SpawnFlashGrenade(pos, 0.5f);

                PluginMain.Instance.IsFlashOnCooldown = true;
                Timing.CallDelayed(PluginMain.Instance.Config.FlashCooldown, () => PluginMain.Instance.IsFlashOnCooldown = false);
                foreach (var player in Player.List)
                {
                    if (player.Role == RoleType.Scp106 && Vector3.Distance(player.Position, pos) <= 75)
                    {
                        player.EnableEffect(Exiled.API.Enums.EffectType.Blinded, 2);
                        break;
                    }
                }
                response = PluginMain.Instance.Config.AbilitySuccess;
                return(true);

            case "find":
                if (ply.Level < PluginMain.Instance.Config.FindLVL)
                {
                    response = PluginMain.Instance.Config.InsufLVL;
                    return(false);
                }
                if (ply.Energy >= PluginMain.Instance.Config.FindEnergy)
                {
                    ply.Energy -= PluginMain.Instance.Config.FindEnergy;
                }
                else
                {
                    response = PluginMain.Instance.Config.NoEnergyMsg;
                    return(false);
                }
                if (Player.List.Where(x => x.Team != Team.SCP && x.Team != Team.TUT && x.Team != Team.RIP).IsEmpty())
                {
                    response = PluginMain.Instance.Config.FindNoPlayers;
                    return(false);
                }
                Player    trackingPlayer = Player.List.Where(x => x.Team != Team.SCP && x.Team != Team.TUT && x.Team != Team.RIP).ToList()[UnityEngine.Random.Range(0, Player.List.Where(x => x.Team != Team.SCP && x.Team != Team.TUT && x.Team != Team.RIP).Count() - 1)];
                Camera079 nearestCamera  = Scp079PlayerScript.allCameras.First();
                float     distance       = float.MaxValue;
                float     ADistance;
                foreach (var cam in Scp079PlayerScript.allCameras)
                {
                    ADistance = Vector3.Distance(cam.transform.position, trackingPlayer.Position);
                    if (ADistance < distance)
                    {
                        nearestCamera = cam;
                        distance      = ADistance;
                    }
                }
                ply.ReferenceHub.scp079PlayerScript.CmdSwitchCamera(nearestCamera.cameraId, false);
                UnityEngine.Random.InitState((int)DateTime.Now.Ticks);
                response = $"Отслеживаю: {trackingPlayer.DisplayNickname ?? trackingPlayer.Nickname} - {trackingPlayer.Role}";
                return(false);

            default:
                response = "Команды:\n.079 blackout - выключает свет во всём комплексе \n.079 flash - делает вспышку камерой \n.079 cancel - останавливает боеголовку\n.079 find - Находит случайного игрока на камерах";
                return(false);
            }
        }
예제 #14
0
 public static Synapse.Api.Camera GetSynapseCamera(this Camera079 camera) => Map.Get.Cameras.FirstOrDefault(x => x.GameObject == camera.gameObject);
예제 #15
0
        private static bool Scp079Interact(Scp079PlayerScript __instance, Command079 command, string args, GameObject target)
        {
            args ??= "";
            try
            {
                if (!__instance._interactRateLimit.CanExecute(true))
                {
                    return(false);
                }
                if (!__instance.iAm079)
                {
                    return(false);
                }
                string[] array = args.Split(':');
                GameCore.Console.AddDebugLog("SCP079", "Command received from a client: " + command, MessageImportance.LessImportant, false);
                __instance.RefreshCurrentRoom();
                if (!__instance.CheckInteractableLegitness(__instance.CurrentRoom, target, true))
                {
                    return(false);
                }

                DoorVariant   doorVariant    = null; // F you, compiler
                bool          gotDoorVariant = target?.TryGetComponent(out doorVariant) ?? false;
                List <string> list           = GameCore.ConfigFile.ServerConfig.GetStringList("scp079_door_blacklist") ?? new List <string>();

                switch (command)
                {
                case Command079.Door:
                {
                    if (AlphaWarheadController.Host.inProgress)
                    {
                        return(false);
                    }
                    if (target == null)
                    {
                        GameCore.Console.AddDebugLog("SCP079", "The door command requires a target.", MessageImportance.LessImportant, false);
                        return(false);
                    }
                    if (!gotDoorVariant)
                    {
                        return(false);
                    }
                    if (doorVariant.TryGetComponent(out DoorNametagExtension doorNametagExtension) && list.Count > 0 && list.Contains(doorNametagExtension.GetName))
                    {
                        GameCore.Console.AddDebugLog("SCP079", "Door access denied by the server.", MessageImportance.LeastImportant, false);
                        return(false);
                    }
                    string text          = doorVariant.RequiredPermissions.RequiredPermissions.ToString();
                    float  manaFromLabel = __instance.GetManaFromLabel("Door Interaction " + (text.Contains(",") ? text.Split(',')[0] : text), __instance.abilities);



                    var action         = doorVariant.TargetState ? Scp079EventMisc.DoorAction.Closing : Scp079EventMisc.DoorAction.Opening;
                    var intendedResult = manaFromLabel <= __instance.Mana ? Scp079EventMisc.InteractionResult.Allow : Scp079EventMisc.InteractionResult.NoEnergy;

                    SynapseController.Server.Events.Scp.Scp079.Invoke079DoorInteract(
                        __instance.gameObject.GetPlayer(),
                        action,
                        intendedResult,
                        manaFromLabel,
                        doorVariant.GetDoor(),
                        out var actualResult
                        );

                    switch (actualResult)
                    {
                    case Scp079EventMisc.InteractionResult.Allow:
                    {
                        bool targetState = doorVariant.TargetState;
                        doorVariant.ServerInteract(ReferenceHub.GetHub(__instance.gameObject), 0);
                        if (targetState != doorVariant.TargetState)
                        {
                            __instance.Mana -= manaFromLabel;
                            __instance.AddInteractionToHistory(target, true);
                            GameCore.Console.AddDebugLog("SCP079", "Door state changed.", MessageImportance.LeastImportant, false);
                            return(false);
                        }
                        GameCore.Console.AddDebugLog("SCP079", "Door state failed to change.", MessageImportance.LeastImportant, false);
                        return(false);
                    }

                    case Scp079EventMisc.InteractionResult.Disallow:
                    {
                        GameCore.Console.AddDebugLog("SCP079", "Door access denied by the server.", MessageImportance.LeastImportant, false);
                        return(false);
                    }

                    case Scp079EventMisc.InteractionResult.NoEnergy:
                    {
                        GameCore.Console.AddDebugLog("SCP079", "Not enough mana.", MessageImportance.LeastImportant, false);
                        // might wanna change __instance.Mana to 0,
                        // the client may do another check when being told that the player has not enough mana,
                        // resulting in realizing they do indeed have enough mana
                        __instance.RpcNotEnoughMana(manaFromLabel, __instance.Mana);
                        return(false);
                    }
                    }
                    return(false);
                }

                case Command079.Doorlock:
                {
                    if (AlphaWarheadController.Host.inProgress)
                    {
                        return(false);
                    }
                    if (target == null)
                    {
                        GameCore.Console.AddDebugLog("SCP079", "The door lock command requires a target.", MessageImportance.LessImportant, false);
                        return(false);
                    }
                    if (doorVariant == null)
                    {
                        return(false);
                    }
                    ;
                    if (doorVariant.TryGetComponent(out DoorNametagExtension doorNametagExtension2) && list.Count > 0 && list.Contains(doorNametagExtension2.GetName))
                    {
                        GameCore.Console.AddDebugLog("SCP079", "Door access denied by the server.", MessageImportance.LeastImportant, false);
                        return(false);
                    }

                    float manaFromLabel = __instance.GetManaFromLabel("Door Lock Minimum", __instance.abilities);
                    var   action        = ((DoorLockReason)doorVariant.ActiveLocks).HasFlag(DoorLockReason.Regular079) ? Scp079EventMisc.DoorAction.Unlocking : Scp079EventMisc.DoorAction.Locking;

                    Scp079EventMisc.InteractionResult intendedResult;
                    if (action == Scp079EventMisc.DoorAction.Unlocking)
                    {
                        intendedResult = __instance.lockedDoors.Contains(doorVariant.netId) ? Scp079EventMisc.InteractionResult.Allow : Scp079EventMisc.InteractionResult.Disallow;
                    }
                    else
                    {
                        intendedResult = manaFromLabel <= __instance.Mana ? Scp079EventMisc.InteractionResult.Allow : Scp079EventMisc.InteractionResult.NoEnergy;
                    }

                    SynapseController.Server.Events.Scp.Scp079.Invoke079DoorInteract(
                        __instance.gameObject.GetPlayer(),
                        action,
                        intendedResult,
                        manaFromLabel,
                        doorVariant.GetDoor(),
                        out var actualResult
                        );

                    switch (actualResult)
                    {
                    case Scp079EventMisc.InteractionResult.Allow when action == Scp079EventMisc.DoorAction.Unlocking:
                    {
                        if (!__instance.lockedDoors.Contains(doorVariant.netId))
                        {
                            return(false);
                        }
                        __instance.lockedDoors.Remove(doorVariant.netId);
                        doorVariant.ServerChangeLock(DoorLockReason.Regular079, false);
                        return(false);
                    }

                    case Scp079EventMisc.InteractionResult.Allow when action == Scp079EventMisc.DoorAction.Locking:
                    {
                        if (!__instance.lockedDoors.Contains(doorVariant.netId))
                        {
                            __instance.lockedDoors.Add(doorVariant.netId);
                        }
                        doorVariant.ServerChangeLock(DoorLockReason.Regular079, true);
                        __instance.AddInteractionToHistory(doorVariant.gameObject, true);
                        __instance.Mana -= __instance.GetManaFromLabel("Door Lock Start", __instance.abilities);
                        return(false);
                    }

                    case Scp079EventMisc.InteractionResult.Disallow:
                    {
                        return(false);
                    }

                    case Scp079EventMisc.InteractionResult.NoEnergy:
                    {
                        // might wanna change __instance.Mana to 0,
                        // the client may do another check when being told that the player has not enough mana,
                        // resulting in realizing they do indeed have enough mana
                        __instance.RpcNotEnoughMana(manaFromLabel, __instance.Mana);
                        return(false);
                    }
                    }
                    return(false);
                }

                case Command079.Speaker:
                {
                    string     speakerQualifiedName = __instance.CurrentRoom.transform.parent.name + "/" + __instance.CurrentRoom.name + "/Scp079Speaker";
                    GameObject speaker       = GameObject.Find(speakerQualifiedName);
                    float      manaFromLabel = __instance.GetManaFromLabel("Speaker Start", __instance.abilities);

                    Scp079EventMisc.InteractionResult intendedResult;
                    if (speaker == null)
                    {
                        intendedResult = Scp079EventMisc.InteractionResult.Disallow;
                    }
                    else if (manaFromLabel * 1.5f <= __instance.Mana)
                    {
                        intendedResult = Scp079EventMisc.InteractionResult.Allow;
                    }
                    else
                    {
                        intendedResult = Scp079EventMisc.InteractionResult.NoEnergy;
                    }

                    SynapseController.Server.Events.Scp.Scp079.Invoke079SpeakerInteract(
                        __instance.gameObject.GetPlayer(),
                        manaFromLabel,
                        intendedResult,
                        out var actualResult
                        );

                    switch (actualResult)
                    {
                    case Scp079EventMisc.InteractionResult.Allow:
                    {
                        __instance.Mana   -= manaFromLabel;
                        __instance.Speaker = speakerQualifiedName;
                        __instance.AddInteractionToHistory(speaker, true);
                        return(false);
                    }

                    case Scp079EventMisc.InteractionResult.Disallow:
                    {
                        return(false);
                    }

                    case Scp079EventMisc.InteractionResult.NoEnergy:
                    {
                        // might wanna change __instance.Mana to 0,
                        // the client may do another check when being told that the player has not enough mana,
                        // resulting in realizing they do indeed have enough mana
                        __instance.RpcNotEnoughMana(manaFromLabel, __instance.Mana);
                        return(false);
                    }
                    }

                    return(false);
                }

                case Command079.StopSpeaker:
                    __instance.Speaker = string.Empty;
                    return(false);

                case Command079.ElevatorTeleport:
                {
                    Synapse.Api.Logger.Get.Debug("Teleport");
                    float manaFromLabel = __instance.GetManaFromLabel("Elevator Teleport", __instance.abilities);
                    if (manaFromLabel > __instance.Mana)
                    {
                        __instance.RpcNotEnoughMana(manaFromLabel, __instance.Mana);
                        return(false);
                    }
                    Camera079 camera = null;
                    foreach (Scp079Interactable scp079Interactable in __instance.nearbyInteractables)
                    {
                        if (scp079Interactable.type == Scp079Interactable.InteractableType.ElevatorTeleport)
                        {
                            camera = scp079Interactable.optionalObject.GetComponent <Camera079>();
                        }
                    }
                    if (camera != null)
                    {
                        __instance.RpcSwitchCamera(camera.cameraId, false);
                        __instance.Mana -= manaFromLabel;
                        __instance.AddInteractionToHistory(target, true);
                        return(false);
                    }
                    if (ConsoleDebugMode.CheckImportance("SCP079", MessageImportance.LeastImportant, out Color32 color))
                    {
                        Scp079Interactable scp079Interactable2 = null;
                        Dictionary <Scp079Interactable.InteractableType, byte> dictionary = new Dictionary <Scp079Interactable.InteractableType, byte>();
                        foreach (Scp079Interactable scp079Interactable3 in __instance.nearbyInteractables)
                        {
                            if (dictionary.ContainsKey(scp079Interactable3.type))
                            {
                                Dictionary <Scp079Interactable.InteractableType, byte> dictionary2 = dictionary;
                                Scp079Interactable.InteractableType type = scp079Interactable3.type;
                                byte b = dictionary2[type];
                                dictionary2[type] = (byte)(b + 1);
                            }
                            else
                            {
                                dictionary[scp079Interactable3.type] = 1;
                            }
                            if (scp079Interactable3.type == Scp079Interactable.InteractableType.ElevatorTeleport)
                            {
                                scp079Interactable2 = scp079Interactable3;
                            }
                        }
                        string text2;
                        if (scp079Interactable2 == null)
                        {
                            text2 = "None of the " + __instance.nearbyInteractables.Count + " were an ElevatorTeleport, found: ";
                            using (Dictionary <Scp079Interactable.InteractableType, byte> .Enumerator enumerator2 = dictionary.GetEnumerator())
                            {
                                while (enumerator2.MoveNext())
                                {
                                    KeyValuePair <Scp079Interactable.InteractableType, byte> keyValuePair = enumerator2.Current;
                                    text2 = string.Concat(new object[]
                                        {
                                            text2,
                                            keyValuePair.Value,
                                            "x",
                                            keyValuePair.Key.ToString().Substring(keyValuePair.Key.ToString().Length - 4),
                                            " "
                                        });
                                }
                                goto IL_755;
                            }
                        }
                        if (scp079Interactable2.optionalObject == null)
                        {
                            text2 = "Optional object is missing.";
                        }
                        else if (scp079Interactable2.optionalObject.GetComponent <Camera079>() == null)
                        {
                            string    str       = "";
                            Transform transform = scp079Interactable2.optionalObject.transform;
                            for (int i = 0; i < 5; i++)
                            {
                                str = transform.name + str;
                                if (!(transform.parent != null))
                                {
                                    break;
                                }
                                transform = transform.parent;
                            }
                            text2 = "Camera is missing at " + str;
                        }
                        else
                        {
                            text2 = "Unknown error";
                        }
IL_755:
                        GameCore.Console.AddDebugLog("SCP079", "Could not find the second elevator: " + text2, MessageImportance.LeastImportant, false);
                        return(false);
                    }
                    return(false);
                }

                case Command079.ElevatorUse:
                {
                    float  manaFromLabel = __instance.GetManaFromLabel("Elevator Use", __instance.abilities);
                    string elevatorName  = string.Empty;
                    if (array.Length > 0)
                    {
                        elevatorName = array[0];
                    }

                    Elevator synElevator = Map.Get.Elevators.Find(_ => _.Name == elevatorName);
                    Scp079EventMisc.InteractionResult intendedResult;
                    if (manaFromLabel <= __instance.Mana)
                    {
                        intendedResult = Scp079EventMisc.InteractionResult.NoEnergy;
                    }
                    else if (synElevator == null || (AlphaWarheadController.Host.timeToDetonation == 0f || !synElevator.Operative || synElevator.Locked))
                    {
                        intendedResult = Scp079EventMisc.InteractionResult.Disallow;
                    }
                    else
                    {
                        intendedResult = Scp079EventMisc.InteractionResult.Allow;
                    }

                    intendedResult = manaFromLabel <= __instance.Mana ? Scp079EventMisc.InteractionResult.Allow : Scp079EventMisc.InteractionResult.NoEnergy;

                    SynapseController.Server.Events.Scp.Scp079.Invoke079ElevatorUse(
                        __instance.gameObject.GetPlayer(),
                        manaFromLabel,
                        synElevator,
                        intendedResult,
                        out var actualResult
                        );

                    switch (actualResult)
                    {
                    case Scp079EventMisc.InteractionResult.Allow:
                    {
                        if (synElevator.Use())
                        {
                            __instance.Mana -= manaFromLabel;
                            bool flag3 = false;
                            foreach (Lift.Elevator elevator in synElevator.Lift.elevators)
                            {
                                __instance.AddInteractionToHistory(elevator.door.GetComponentInParent <Scp079Interactable>().gameObject, !flag3);
                                flag3 = true;
                            }
                        }

                        return(false);
                    }

                    case Scp079EventMisc.InteractionResult.Disallow:
                    {
                        return(false);
                    }

                    case Scp079EventMisc.InteractionResult.NoEnergy:
                    {
                        // might wanna change __instance.Mana to 0,
                        // the client may do another check when being told that the player has not enough mana,
                        // resulting in realizing they do indeed have enough mana
                        __instance.RpcNotEnoughMana(manaFromLabel, __instance.Mana);
                        return(false);
                    }
                    }

                    return(false);
                }

                case Command079.Tesla:
                {
                    float manaFromLabel = __instance.GetManaFromLabel("Tesla Gate Burst", __instance.abilities);
                    if (__instance.CurrentRoom != null)
                    {
                        TeslaGate vanillaTesla = __instance.CurrentRoom.GetComponentInChildren <TeslaGate>();
                        Tesla     synapseTesla = vanillaTesla != null?Server.Get.Map.Teslas.Find(_ => _.Gate == vanillaTesla) : null;

                        var intendedResult = manaFromLabel <= __instance.Mana ? Scp079EventMisc.InteractionResult.Allow : Scp079EventMisc.InteractionResult.NoEnergy;

                        SynapseController.Server.Events.Scp.Scp079.Invoke079TeslaInteract(
                            __instance.gameObject.GetPlayer(),
                            manaFromLabel,
                            synapseTesla?.Room,
                            synapseTesla,
                            intendedResult,
                            out var actualResult
                            );

                        switch (actualResult)
                        {
                        case Scp079EventMisc.InteractionResult.Allow:
                        {
                            if (vanillaTesla != null)
                            {
                                vanillaTesla.RpcInstantBurst();
                            }
                            __instance.AddInteractionToHistory(vanillaTesla.gameObject, true);
                            __instance.Mana -= manaFromLabel;
                            return(false);
                        }

                        case Scp079EventMisc.InteractionResult.Disallow:
                        {
                            return(false);
                        }

                        case Scp079EventMisc.InteractionResult.NoEnergy:
                        {
                            // might wanna change __instance.Mana to 0,
                            // the client may do another check when being told that the player has not enough mana,
                            // resulting in realizing they do indeed have enough mana
                            __instance.RpcNotEnoughMana(manaFromLabel, __instance.Mana);
                            return(false);
                        }
                        }
                        return(false);
                    }
                    throw new Exception("Unable to find Tesla Gate in a null room");
                }

                case Command079.Lockdown:
                {
                    if (AlphaWarheadController.Host.inProgress)
                    {
                        GameCore.Console.AddDebugLog("SCP079", "Lockdown cannot commence, Warhead in progress.", MessageImportance.LessImportant, false);
                        return(false);
                    }
                    float manaFromLabel = __instance.GetManaFromLabel("Room Lockdown", __instance.abilities);
                    GameCore.Console.AddDebugLog("SCP079", "Attempting lockdown...", MessageImportance.LeastImportant, false);

                    if (__instance.CurrentRoom != null)
                    {
                        HashSet <Scp079Interactable> roomInteractablesHashSet = Scp079Interactable.InteractablesByRoomId[__instance.CurrentRoom.UniqueId];
                        HashSet <DoorVariant>        doorHashSet = new HashSet <DoorVariant>();

                        GameCore.Console.AddDebugLog("SCP079", "Loaded all interactables", MessageImportance.LeastImportant, false);
                        GameObject lockdownInteractable = null;
                        foreach (Scp079Interactable interactable in roomInteractablesHashSet)
                        {
                            if (interactable != null)
                            {
                                if (interactable.type != Scp079Interactable.InteractableType.Door)
                                {
                                    if (interactable.type == Scp079Interactable.InteractableType.Lockdown)
                                    {
                                        lockdownInteractable = interactable.gameObject;
                                    }
                                }
                                else if (interactable.TryGetComponent(out DoorVariant doorVariant2) && (object)doorVariant2 is IDamageableDoor damageableDoor && damageableDoor.IsDestroyed)
                                {
                                    GameCore.Console.AddDebugLog("SCP079", "Lockdown can't initiate, one of the doors were destroyed.", MessageImportance.LessImportant, false);
                                    return(false);
                                }
                            }
                        }

                        if (__instance.CurrentLDCooldown > 0f)
                        {
                            GameCore.Console.AddDebugLog("SCP079", "Lockdown still on cooldown.", MessageImportance.LessImportant, false);
                            return(false);
                        }

                        GameCore.Console.AddDebugLog("SCP079", "Looking for doors to lock...", MessageImportance.LeastImportant, false);
                        foreach (Scp079Interactable scp079Interactable5 in roomInteractablesHashSet)
                        {
                            if (!(scp079Interactable5 == null) && scp079Interactable5.TryGetComponent(out DoorVariant doorVariant3))
                            {
                                bool doorLocked = doorVariant3.ActiveLocks == (ushort)DoorLockReason.None;
                                if (!doorLocked)
                                {
                                    DoorLockMode mode = DoorLockUtils.GetMode((DoorLockReason)doorVariant3.ActiveLocks);
                                    doorLocked = (mode.HasFlagFast(DoorLockMode.CanClose) || mode.HasFlagFast(DoorLockMode.ScpOverride));
                                }
                                if (doorLocked)
                                {
                                    if (doorVariant3.TargetState)
                                    {
                                        doorVariant3.NetworkTargetState = false;
                                    }
                                    doorVariant3.ServerChangeLock(DoorLockReason.Lockdown079, true);
                                    doorVariant3.UnlockLater(__instance.LockdownDuration, DoorLockReason.Lockdown079);
                                    doorHashSet.Add(doorVariant3);
                                }
                            }
                        }

                        var  intendedResult = manaFromLabel <= __instance.Mana ? Scp079EventMisc.InteractionResult.Allow : Scp079EventMisc.InteractionResult.NoEnergy;
                        bool lightsOut      = true;

                        SynapseController.Server.Events.Scp.Scp079.Invoke079RoomLockdown(
                            __instance.gameObject.GetPlayer(),
                            manaFromLabel,
                            Server.Get.Map.Rooms.Find(_ => _.GameObject == __instance.CurrentRoom),         // FIX
                            ref lightsOut,
                            intendedResult,
                            out var actualResult
                            );

                        switch (actualResult)
                        {
                        case Scp079EventMisc.InteractionResult.Allow:
                        {
                            foreach (FlickerableLightController flickerableLightController in __instance.CurrentRoom.GetComponentsInChildren <FlickerableLightController>())
                            {
                                if (flickerableLightController != null)
                                {
                                    flickerableLightController.ServerFlickerLights(8f);
                                }
                            }
                            __instance.CurrentLDCooldown = __instance.LockdownCooldown + __instance.LockdownDuration;
                            __instance.TargetSetLockdownCooldown(__instance.connectionToClient, __instance.CurrentLDCooldown);
                            GameCore.Console.AddDebugLog("SCP079", "Lockdown initiated.", MessageImportance.LessImportant, false);
                            __instance.AddInteractionToHistory(lockdownInteractable, true);
                            __instance.Mana -= __instance.GetManaFromLabel("Room Lockdown", __instance.abilities);
                            return(false);
                        }

                        case Scp079EventMisc.InteractionResult.Disallow:
                        {
                            return(false);
                        }

                        case Scp079EventMisc.InteractionResult.NoEnergy:
                        {
                            // might wanna change __instance.Mana to 0,
                            // the client may do another check when being told that the player has not enough mana,
                            // resulting in realizing they do indeed have enough mana
                            __instance.RpcNotEnoughMana(manaFromLabel, __instance.Mana);
                            GameCore.Console.AddDebugLog("SCP079", "Lockdown cannot commence, not enough mana.", MessageImportance.LessImportant, false);
                            return(false);
                        }
                        }
                    }
                    else
                    {
                        GameCore.Console.AddDebugLog("SCP079", "Room couldn't be specified.", MessageImportance.Normal, false);
                    }
                    return(false);
                }

                default:
                    return(false);
                }
            }
            catch (Exception e)
            {
                Synapse.Api.Logger.Get.Error($"Synapse-Event: Scp079BulkPatch failed!!\n{e}");
                return(false);
            }
        }
예제 #16
0
        // https://github.com/galaxy119/EXILED/blob/master/EXILED_Main/Extensions/Player.cs


        public void ConsoleCmd(SendingConsoleCommandEventArgs ev)
        {
            if (ev.Player.Role.Equals(RoleType.Scp079))
            {
                if (ev.Name.Equals(plugin.Config.b079_prefix))
                {
                    ev.Allow = false;
                    if (ev.Arguments.IsEmpty())
                    {
                        ev.ReturnMessage = plugin.Config.b079_help_title + "\n" +
                                           "\"." + plugin.Config.b079_prefix + " a1\" - " + plugin.Config.b079_help_a1 + " - " + plugin.Config.b079_a1_power + "+ AP - Tier " + (plugin.Config.b079_a1_tier + 1) + "+\n" +
                                           "\"." + plugin.Config.b079_prefix + " a2\" - " + plugin.Config.b079_help_a2 + " - " + plugin.Config.b079_a2_power + "+ AP - Tier " + (plugin.Config.b079_a2_tier + 1) + "+\n" +
                                           "\"." + plugin.Config.b079_prefix + " a3\" - " + plugin.Config.b079_help_a3 + " - " + plugin.Config.b079_a3_power + "+ AP - Tier " + (plugin.Config.b079_a3_tier + 1) + "+\n" +
                                           "\"." + plugin.Config.b079_prefix + " a4\" - " + plugin.Config.b079_help_a4 + " - " + plugin.Config.b079_a4_power + "+ AP - Tier " + (plugin.Config.b079_a4_tier + 1) + "+\n";
                        return;
                    }
                    if (ev.Arguments.Count >= 1)
                    {
                        if (ev.Arguments[0].ToLower().Equals("help") || ev.Arguments[0].ToLower().Equals("commands") || ev.Arguments[0].ToLower().Equals("?"))
                        {
                            ev.ReturnMessage = plugin.Config.b079_help_title + "\n" +
                                               "\"." + plugin.Config.b079_prefix + " a1\" - " + plugin.Config.b079_help_a1 + " - " + plugin.Config.b079_a1_power + "+ AP - Tier " + (plugin.Config.b079_a1_tier + 1) + "+\n" +
                                               "\"." + plugin.Config.b079_prefix + " a2\" - " + plugin.Config.b079_help_a2 + " - " + plugin.Config.b079_a2_power + "+ AP - Tier " + (plugin.Config.b079_a2_tier + 1) + "+\n" +
                                               "\"." + plugin.Config.b079_prefix + " a3\" - " + plugin.Config.b079_help_a3 + " - " + plugin.Config.b079_a3_power + "+ AP - Tier " + (plugin.Config.b079_a3_tier + 1) + "+\n" +
                                               "\"." + plugin.Config.b079_prefix + " a4\" - " + plugin.Config.b079_help_a4 + " - " + plugin.Config.b079_a4_power + "+ AP - Tier " + (plugin.Config.b079_a4_tier + 1) + "+\n";
                            return;
                        }

                        if (ev.Arguments[0].ToLower().Equals("a1"))
                        {
                            if (ev.Player.ReferenceHub.scp079PlayerScript.NetworkcurLvl < plugin.Config.b079_a1_tier)
                            {
                                ev.ReturnMessage = plugin.Config.b079_msg_tier_required.Replace("$tier", "" + (plugin.Config.b079_a1_tier + 1));
                                return;
                            }
                            if (ev.Player.ReferenceHub.scp079PlayerScript.NetworkcurMana >= plugin.Config.b079_a1_power)
                            {
                                ev.Player.ReferenceHub.scp079PlayerScript.NetworkcurMana -= plugin.Config.b079_a1_power;
                            }
                            else
                            {
                                ev.ReturnMessage = plugin.Config.b079_msg_no_power;
                                return;
                            }
                            var cams = GetSCPCameras();
                            if (cams.Count > 0)
                            {
                                Camera079 cam = cams[UnityEngine.Random.Range(0, cams.Count)];
                                ev.Player.ReferenceHub.scp079PlayerScript.CmdSwitchCamera(cam.cameraId, false);
                                ev.ReturnMessage = plugin.Config.b079_msg_a1_run;
                                return;
                            }
                            else
                            {
                                ev.ReturnMessage = plugin.Config.b079_msg_a1_fail;
                                ev.Player.ReferenceHub.scp079PlayerScript.NetworkcurMana += plugin.Config.b079_a1_power;
                                return;
                            }
                        }

                        if (ev.Arguments[0].ToLower().Equals("a2"))
                        {
                            if (ev.Player.ReferenceHub.scp079PlayerScript.NetworkcurLvl < plugin.Config.b079_a2_tier)
                            {
                                ev.ReturnMessage = plugin.Config.b079_msg_tier_required.Replace("$tier", "" + (plugin.Config.b079_a2_tier + 1));
                                return;
                            }
                            if (ev.Player.ReferenceHub.scp079PlayerScript.NetworkcurMana >= plugin.Config.b079_a2_power)
                            {
                                ev.Player.ReferenceHub.scp079PlayerScript.NetworkcurMana -= plugin.Config.b079_a2_power;
                            }
                            else
                            {
                                ev.ReturnMessage = plugin.Config.b079_msg_no_power;
                                return;
                            }
                            if (Time.timeSinceLevelLoad - a2cooldown < plugin.Config.b079_a2_cooldown)
                            {
                                ev.Player.ReferenceHub.scp079PlayerScript.NetworkcurMana += plugin.Config.b079_a2_power;
                                ev.ReturnMessage = plugin.Config.b079_msg_a2_fail;
                                return;
                            }
                            Room room = ev.Player.CurrentRoom;
                            if (room == null)
                            {
                                ev.Player.ReferenceHub.scp079PlayerScript.NetworkcurMana += plugin.Config.b079_a2_power;
                                ev.ReturnMessage = plugin.Config.b079_msg_a2_fail;
                                return;
                            }
                            if (room.Zone == ZoneType.Surface)
                            {
                                ev.Player.ReferenceHub.scp079PlayerScript.NetworkcurMana += plugin.Config.b079_a2_power;
                                ev.ReturnMessage = plugin.Config.b079_msg_a2_fail;
                                return;
                            }
                            foreach (var item in plugin.Config.b079_a2_blacklisted_rooms)
                            {
                                if (room.Name.ToLower().Contains(item.ToLower()))
                                {
                                    ev.Player.ReferenceHub.scp079PlayerScript.NetworkcurMana += plugin.Config.b079_a2_power;
                                    ev.ReturnMessage = plugin.Config.b079_msg_a2_fail;
                                    return;
                                }
                            }
                            Timing.RunCoroutine(GasRoom(room, ev.Player.ReferenceHub));
                            ev.ReturnMessage = plugin.Config.b079_msg_a2_run;
                            return;
                        }

                        if (ev.Arguments[0].ToLower().Equals("a3"))
                        {
                            if (ev.Player.ReferenceHub.scp079PlayerScript.NetworkcurLvl < plugin.Config.b079_a3_tier)
                            {
                                ev.ReturnMessage = plugin.Config.b079_msg_tier_required.Replace("$tier", "" + (plugin.Config.b079_a3_tier + 1));
                                return;
                            }
                            if (ev.Player.ReferenceHub.scp079PlayerScript.NetworkcurMana >= plugin.Config.b079_a3_power)
                            {
                                ev.Player.ReferenceHub.scp079PlayerScript.NetworkcurMana -= plugin.Config.b079_a3_power;
                            }
                            else
                            {
                                ev.ReturnMessage = plugin.Config.b079_msg_no_power;
                                return;
                            }
                            Generator079.Generators[0].ServerOvercharge(plugin.Config.b079_a3_timer, false);
                            ev.ReturnMessage = plugin.Config.b079_msg_a3_run;
                            return;
                        }

                        if (ev.Arguments[0].ToLower().Equals("a4"))
                        {
                            if (ev.Player.ReferenceHub.scp079PlayerScript.NetworkcurLvl < plugin.Config.b079_a4_tier)
                            {
                                ev.ReturnMessage = plugin.Config.b079_msg_tier_required.Replace("$tier", "" + (plugin.Config.b079_a4_tier + 1));
                                return;
                            }
                            if (a4cooldown >= Time.time)
                            {
                                ev.ReturnMessage = $"<color=red>This ability is in CoolDown ({(int) (a4cooldown - Time.time)})</color>";
                                return;
                            }
                            if (ev.Player.ReferenceHub.scp079PlayerScript.NetworkcurMana >= plugin.Config.b079_a4_power)
                            {
                                ev.Player.ReferenceHub.scp079PlayerScript.NetworkcurMana -= plugin.Config.b079_a4_power;
                            }
                            else
                            {
                                ev.ReturnMessage = plugin.Config.b079_msg_no_power;
                                return;
                            }
                            a4cooldown = Time.time + 5f;
                            var             pos      = ev.Player.ReferenceHub.scp079PlayerScript.currentCamera.transform.position;
                            GrenadeManager  gm       = ev.Player.ReferenceHub.GetComponent <GrenadeManager>();
                            GrenadeSettings settings = gm.availableGrenades.FirstOrDefault(g => g.inventoryID == ItemType.GrenadeFlash);
                            FlashGrenade    flash    = GameObject.Instantiate(settings.grenadeInstance).GetComponent <FlashGrenade>();
                            flash.fuseDuration = 0.5f;
                            flash.InitData(gm, Vector3.zero, Vector3.zero, 1f);
                            flash.transform.position = pos;
                            NetworkServer.Spawn(flash.gameObject);
                            ev.ReturnMessage = plugin.Config.b079_msg_a4_run;
                            return;
                        }
                        ev.ReturnMessage = plugin.Config.b079_msg_help_cmd_fail.Replace("$prefix", "" + plugin.Config.b079_prefix);
                        return;
                    }
                    ev.ReturnMessage = plugin.Config.b079_msg_help_cmd_fail.Replace("$prefix", "" + plugin.Config.b079_prefix);
                    return;
                }
            }
        }
예제 #17
0
파일: Camera.cs 프로젝트: SynapseSL/Synapse
 internal Camera(Camera079 camera, Room room)
 {
     cam  = camera;
     Room = room;
 }
예제 #18
0
 /// <summary>
 /// Returns the <see cref="ZoneType"/> the camera is in.
 /// </summary>
 /// <param name="camera">The <see cref="Camera079"/> to check.</param>
 /// <returns>The <see cref="ZoneType"/> of the zone the camera is in.</returns>
 public static ZoneType Zone(this Camera079 camera) => Room(camera)?.Zone ?? ZoneType.Unspecified;
예제 #19
0
 /// <summary>
 /// Gets the <see cref="CameraType"/>.
 /// </summary>
 /// <param name="camera">The <see cref="Camera079"/> to check.</param>
 /// <returns>The <see cref="CameraType"/>.</returns>
 public static CameraType Type(this Camera079 camera) => OrderedCameraTypes.TryGetValue(camera.GetInstanceID(), out CameraType cameraType) ? cameraType : CameraType.Unknown;
예제 #20
0
 /// <summary>
 /// Returns the <see cref="Room"/> the camera is in, or null if not found.
 /// </summary>
 /// <param name="camera">The <see cref="Camera079"/> to check.</param>
 /// <returns>A <see cref="Room"/>, or null if not found.</returns>
 public static Room Room(this Camera079 camera) => OrderedCameraRooms.TryGetValue(camera.GetInstanceID(), out Room room) ? room : null;
예제 #21
0
파일: Scp079.cs 프로젝트: js6pak/EXILED
 /// <summary>
 /// Sets the camera of SCP-079.
 /// </summary>
 /// <param name="player"></param>
 /// <param name="camera"></param>
 /// <param name="lookAtRotation"></param>
 public static void SetCamera(this ReferenceHub player, Camera079 camera, bool lookAtRotation = false) => player.SetCamera(camera.cameraId, lookAtRotation);