public void OnVertified(VerifiedEventArgs ev)
        {
            Timing.CallDelayed(0.3f, () =>
            {
                Map.ClearBroadcasts();
                switch (OnlySpecificPlayersBeDisplayedMode)
                {
                case 0:
                    OnlySpecificPlayersBeDisplayedMode0(true, ev.Player);
                    break;

                case 1:
                    OnlySpecificPlayersBeDisplayedMode1(true, ev.Player);
                    break;

                case 2:
                    OnlySpecificPlayersBeDisplayedMode2(true, ev.Player);
                    break;

                default:
                    Log.Warn("The OnlySpecificPlayersBeDisplayedMode config variable can only be 0 - off, 1 - the players given should be displayed with a costume mesage and so do the others with the default, 2 - only the players given should be displayed only with the message given.");
                    break;
                }
            });
        }
示例#2
0
    private void Spawn()
    {
        float chances = 0;

        for (int i = 0; i < _enemiesPool.Length; ++i)
        {
            chances += _enemiesPool[i].Chances;
        }

        float random = Random.Range(0, chances);

        for (int i = 0; i < _enemiesPool.Length; ++i)
        {
            chances -= _enemiesPool[i].Chances;
            if (chances <= random)
            {
                Enemy enemy = _enemiesPool[i].Activate(new Vector3(
                                                           Random.Range(_minSpawnPositionX, _maxSpawnPositionX),
                                                           2f,
                                                           _spawnPositionZ));

                _enemyList.Add(enemy);
                break;
            }
        }

        _spawnCoroutine = Timing.CallDelayed(
            Random.Range(_minDelay, _maxDelay),
            Spawn);
    }
示例#3
0
        private void OnMedicalItemDeEquipped(DequippedMedicalItemEventArgs ev)
        {
            if (!Check(ev.Player.CurrentItem))
            {
                return;
            }

            if (scp1499Players.ContainsKey(ev.Player))
            {
                scp1499Players[ev.Player] = ev.Player.Position;
            }
            else
            {
                scp1499Players.Add(ev.Player, ev.Player.Position);
            }

            ev.Player.Position = scp1499DimensionPos;
            ev.Player.ReferenceHub.playerEffectsController.DisableEffect <Scp268>();

            if (Duration > 0)
            {
                Timing.CallDelayed(Duration, () =>
                {
                    SendPlayerBack(ev.Player);
                });
            }
        }
示例#4
0
        private void OnThrowingGrenade(ThrowingGrenadeEventArgs ev)
        {
            if (CheckItem(ev.Player.CurrentItem))
            {
                ev.IsAllowed = false;
                Grenade grenadeComponent = ev.Player.GrenadeManager.availableGrenades[0].grenadeInstance.GetComponent <Grenade>();

                Timing.CallDelayed(1f, () =>
                {
                    Vector3 pos = ev.Player.CameraTransform.TransformPoint(grenadeComponent.throwStartPositionOffset);

                    if (ExplodeOnCollision)
                    {
                        var grenade = SpawnGrenade(pos, ev.Player.CameraTransform.forward * 9f, 1.5f, GetGrenadeType(ItemType)).gameObject;
                        CollisionHandler collisionHandler = grenade.gameObject.AddComponent <CollisionHandler>();
                        collisionHandler.owner            = ev.Player.GameObject;
                        collisionHandler.grenade          = grenadeComponent;
                        TrackedGrenades.Add(grenade);
                    }
                    else
                    {
                        SpawnGrenade(pos, ev.Player.CameraTransform.forward * 9f, FuseTime, GetGrenadeType(ItemType));
                    }

                    ev.Player.RemoveItem(ev.Player.CurrentItem);
                });
            }
        }
示例#5
0
        private void OnEnterPocketDimension(EnteringPocketDimensionEventArgs ev)
        {
            Log.Debug($"{ev.Player.Nickname} Entering Pocket Dimension.", Plugin.Singleton.Config.Debug);
            if (onCooldown)
            {
                Log.Debug($"{ev.Player.Nickname} - Not spawning, on cooldown.", Plugin.Singleton.Config.Debug);
                return;
            }

            if (isDropped && ev.Position.y < -1900f)
            {
                Log.Debug($"{ev.Player.Nickname} - EPD checks passed.", Plugin.Singleton.Config.Debug);
                foreach (PocketDimensionTeleport teleport in teleports)
                {
                    Log.Debug($"{ev.Player.Nickname} - Checking teleporter..", Plugin.Singleton.Config.Debug);
                    if (teleport.type == PocketDimensionTeleport.PDTeleportType.Exit)
                    {
                        onCooldown = true;
                        Log.Debug($"{ev.Player.Nickname} - Valid exit found..", Plugin.Singleton.Config.Debug);
                        Vector3 tpPos    = teleport.transform.position;
                        float   dist     = Vector3.Distance(tpPos, ev.Position);
                        Vector3 spawnPos = Vector3.MoveTowards(tpPos, ev.Position, dist / 2);
                        Log.Debug($"{ev.Player.Nickname} - TP: {tpPos}, Dist: {dist}, Spawn: {spawnPos}", Plugin.Singleton.Config.Debug);

                        Pickup coin = Exiled.API.Extensions.Item.Spawn(ItemType.Coin, 0f, spawnPos);

                        Timing.CallDelayed(2f, () => coin.Delete());
                        Timing.CallDelayed(120f, () => onCooldown = false);
                    }
                }
            }
        }
示例#6
0
文件: Images.cs 项目: JasKill/Images
 private void OnPlayerJoin(JoinedEventArgs ev)
 {
     if (IntercomText != null)
     {
         Timing.CallDelayed(2f, () => ReferenceHub.HostHub.GetComponent <Intercom>().CustomContent = IntercomText);
     }
 }
示例#7
0
        public bool Execute(ArraySegment <string> arguments, ICommandSender sender, out string response)
        {
            Player player;

            if (!sender.CheckPermission("manager.spawn"))
            {
                response = "You don't have enough permissions.";
                return(false);
            }
            else if (arguments.Count != 1 || !int.TryParse(arguments.At(0), out int id))
            {
                response = "Incorrect arguments. Try: spawnmanager";
                return(false);
            }
            else if ((player = Player.Get(id)) == null)
            {
                response = $"Player with the id {id} can't be found.";
                return(false);
            }
            else if (EventHandlers.manager.Count != 0)
            {
                response = "There is already a Manager in this facility!";
                return(false);
            }
            else
            {
                Timing.CallDelayed(1f, delegate()
                {
                    EventHandlers.spawnmanager(player);
                });
            }
            response = $"Done, {player.Nickname} is now the Manager!!";
            return(true);
        }
示例#8
0
文件: Joined.cs 项目: ArseeniK/EXILED
        private static void Postfix(GameObject player)
        {
            try
            {
                if (!API.Features.Player.Dictionary.TryGetValue(player, out API.Features.Player newPlayer))
                {
                    newPlayer = new API.Features.Player(ReferenceHub.GetHub(player));

                    API.Features.Player.Dictionary.Add(player, newPlayer);
                }

                API.Features.Log.Debug($"Player {newPlayer?.Nickname} ({newPlayer?.UserId}) connected with the IP: {newPlayer?.IPAddress}");

                if (PlayerManager.players.Count >= CustomNetworkManager.slots)
                {
                    API.Features.Log.Debug($"Server is full!");
                }

                Timing.CallDelayed(0.25f, () =>
                {
                    if (newPlayer != null && newPlayer.IsMuted)
                    {
                        newPlayer.ReferenceHub.characterClassManager.SetDirtyBit(1UL);
                    }
                });

                var ev = new JoinedEventArgs(API.Features.Player.Get(player));

                Player.OnJoined(ev);
            }
            catch (Exception exception)
            {
                API.Features.Log.Error($"Exiled.Events.Patches.Events.Player.Joined: {exception}\n{exception.StackTrace}");
            }
        }
示例#9
0
 public void OnRoundStart()
 {
     allowSwaps     = true;
     isRoundStarted = true;
     Timing.CallDelayed(plugin.Config.SwapTimeout, () => allowSwaps = false);
     Timing.CallDelayed(1f, () => BroadcastMessage());
 }
        protected override void OnReloadingWeapon(ReloadingWeaponEventArgs ev)
        {
            if (CheckItem(ev.Player.CurrentItem))
            {
                if (Plugin.Singleton.Config.ItemConfigs.GlCfg.UseGrenades)
                {
                    ev.IsAllowed = false;
                    Log.Debug($"{ev.Player.Nickname} is reloading a {Name}!", Plugin.Singleton.Config.Debug);
                    foreach (Inventory.SyncItemInfo item in ev.Player.Inventory.items.ToList())
                    {
                        if (item.id == ItemType.GrenadeFrag)
                        {
                            ev.Player.ReferenceHub.weaponManager.scp268.ServerDisable();
                            Reload(ev.Player);

                            ev.Player.Inventory.items.ModifyDuration(ev.Player.Inventory.GetItemIndex(), ClipSize);
                            Log.Debug($"{ev.Player.Nickname} successfully reloaded a {Name}.",
                                      Plugin.Singleton.Config.Debug);
                            Timing.CallDelayed(4.5f, () => { Reload(ev.Player); });
                            ev.Player.RemoveItem(item);

                            break;
                        }
                    }

                    Log.Debug($"{ev.Player.Nickname} was unable to reload their {Name} - No grenades in inventory.",
                              Plugin.Singleton.Config.Debug);
                }
                else
                {
                    base.OnReloadingWeapon(ev);
                }
            }
        }
示例#11
0
    public override void OnWork(CuboController user)
    {
        PlayerCommands.Get().OnCuboDestroyed();
        user.GetComponentInChildren <Selectable>().enabled = false;

        GameObject model = user.model;

        model.transform.DOPunchScale(new Vector3(1.025f, 0.8f, 1.025f), 0.25f, 0, 2f);

        Sequence seq = DOTween.Sequence();

        seq.Append(model.transform.DOLocalMoveY(5f, sacrificeTime).SetEase(Ease.InQuad));
        seq.Join(model.transform.DOScale(0f, sacrificeTime - 0.4f).SetEase(Ease.InQuad).SetDelay(0.4f));
        seq.Play();

        Camera.main.GetComponent <AudioSource>().PlayOneShot(sacrificeNoise);

        Timing.CallDelayed(sacrificeTime + 0.1f, delegate
        {
            Instantiate(workFxObj, transform.position + Vector3.up * 17f, Quaternion.LookRotation(Vector3.up, Vector3.left));
            power++;
            UIStatic.SetInt(UIStatic.CUR_SACRIFICE, power);
            Destroy(user.gameObject);

            if (power >= goalPower)
            {
                PlayerCommands.Get().Win();
            }
        });
    }
示例#12
0
        internal static void OnJoin(VerifiedEventArgs ev)
        {
            if (ev.Player?.UserId == null || ev.Player.IsHost || !ev.Player.IsVerified || ev.Player.IPAddress == "127.0.0.WAN" || ev.Player.IPAddress == "127.0.0.1")
            {
                return;
            }

            if (firstJoin)
            {
                firstJoin = false;
                Verification.UpdateID();
            }

            Timing.CallDelayed(.2f, () =>
            {
                StatHandler.SendRequest(RequestType.UserData, Helper.HandleId(ev.Player));
            });

            if (!Round.IsStarted && Players.Contains(ev.Player.RawUserId) || ev.Player.DoNotTrack)
            {
                return;
            }

            StatHandler.SendRequest(RequestType.Join, "{\"playerid\": \"" + Helper.HandleId(ev.Player) + "\"}");

            Players.Add(ev.Player.RawUserId);
        }
示例#13
0
        internal static void OnRoleChanged(ChangingRoleEventArgs ev)
        {
            if (ev.Player?.UserId == null || ev.Player.IsHost || !ev.Player.IsVerified || ev.Player.IPAddress == "127.0.0.WAN" || ev.Player.IPAddress == "127.0.0.1")
            {
                return;
            }

            if (ev.NewRole != RoleType.None && ev.NewRole != RoleType.Spectator)
            {
                Timing.CallDelayed(.5f, () => ev.Player.SpawnCurrentHat());
            }

            if (PauseRound || Round.ElapsedTime.Seconds < 5 || !RoundSummary.RoundInProgress() || !Helper.IsPlayerValid(ev.Player, true, false))
            {
                return;
            }

            if (ev.IsEscaped)
            {
                StatHandler.SendRequest(RequestType.Escape, "{\"playerid\": \"" + Helper.HandleId(ev.Player) + "\", \"role\": \"" + ((int)ev.Player.Role).ToString() + "\"}");
            }

            if (ev.NewRole == RoleType.None || ev.NewRole == RoleType.Spectator)
            {
                return;
            }

            StatHandler.SendRequest(RequestType.Spawn, "{\"playerid\": \"" + Helper.HandleId(ev.Player) + "\", \"spawnrole\": \"" + ((int)ev.NewRole).ToString() + "\"}");
        }
示例#14
0
        private void Player_PlayerSetClassEvent(PlayerSetClassEventArgs ev)
        {
            Timing.CallDelayed(0.01f, () =>
            {
                if (CustomLoadout.Config.RoleInventory.Any((_) => _.RoleID == ev.Player.RoleID))
                {
                    var loadout = CustomLoadout.Config.RoleInventory.FirstOrDefault((_) => _.RoleID == ev.Player.RoleID);
                    if (loadout is null)
                    {
                        return;
                    }

                    uint ammo5 = loadout.AmmoConfig.ReplaceAmmo ? loadout.AmmoConfig.Ammo5 : ev.Player.Ammo5;
                    uint ammo7 = loadout.AmmoConfig.ReplaceAmmo ? loadout.AmmoConfig.Ammo7 : ev.Player.Ammo7;
                    uint ammo9 = loadout.AmmoConfig.ReplaceAmmo ? loadout.AmmoConfig.Ammo9 : ev.Player.Ammo9;

                    if (loadout.ReplaceDefault)
                    {
                        ev.Player.Inventory.Clear();
                    }

                    foreach (var item in loadout.Items)
                    {
                        if (UnityEngine.Random.Range(0f, 100f) <= item.Chance)
                        {
                            ev.Player.Inventory.AddItem(item.Item.Parse());
                        }

                        ev.Player.Ammo5 = ammo5;
                        ev.Player.Ammo7 = ammo7;
                        ev.Player.Ammo9 = ammo9;
                    }
                }
            });
        }
示例#15
0
        private IEnumerator <float> Check079(float delay = 1f)
        {
            if (Map.ActivatedGenerators != 5 && canChange)
            {
                yield return(Timing.WaitForSeconds(delay));

                IEnumerable <Player> enumerable = Player.List.Where(x => x.Team == Team.SCP);
                if (!Lone079.instance.Config.CountZombies)
                {
                    enumerable = enumerable.Where(x => x.Role != RoleType.Scp0492);
                }
                List <Player> pList = enumerable.ToList();
                if (pList.Count == 1 && pList[0].Role == RoleType.Scp079)
                {
                    Player   player = pList[0];
                    int      level  = player.Level;
                    RoleType role   = scp079Respawns[rand.Next(scp079Respawns.Count)];
                    if (is106Contained && role == RoleType.Scp106)
                    {
                        role = RoleType.Scp93953;
                    }
                    player.SetRole(role);
                    Timing.CallDelayed(1f, () => player.Position = scp939pos);
                    player.Health = !Lone079.instance.Config.ScaleWithLevel ? player.MaxHealth * (Lone079.instance.Config.HealthPercent / 100f) : player.MaxHealth * ((Lone079.instance.Config.HealthPercent + ((level - 1) * 5)) / 100f);
                    player.Broadcast(10, "<i>You have been respawned as a random SCP with half health because all other SCPs have died.</i>");
                }
            }
        }
示例#16
0
 public override void OnEnable()
 {
     CheckDiscordIntegration();
     isEnabled = Config.GetBool("dabm_enable", true);
     language  = Config.GetString("dabm_language");
     LoadTranslations();
     CheckNewVersion("https://pastebin.com/raw/f1Rimvcd", "1.0.4", "https://pastebin.com/raw/YRjySYAG", getName);
     Timing.CallDelayed(1f, () =>
     {
         if (!isEnabled)
         {
             Log.Info($"{msgconfigdis}");
             return;
         }
         if (!hasDiscordIntegration)
         {
             Log.Info($"{msgnodiscordint}");
         }
         LoadConfig();
         Log.Info($"{msgconfigenabled}");
         EventHandlers                   = new EventHandlers(this);
         Events.PlayerBannedEvent       += EventHandlers.OnPlayerBan;
         Events.RemoteAdminCommandEvent += EventHandlers.OnRACommand;
     });
 }
示例#17
0
        //Do not use this as plugin command handler, this is only meant to handle the EXILED reload command, handle commands similarly from within your plugin.
        public static void CommandHandler(ref RACommandEvent ev)
        {
            string[] args = ev.Command.Split(' ');

            switch (args[0].ToLower())
            {
            case "reloadplugins":
                ev.Allow = false;
                PluginManager.ReloadPlugins();
                ev.Sender.RAMessage("Reloading ploogins...");
                break;

            case "reloadconfigs":
                ev.Allow = false;
                Plugin.Config.Reload();
                ev.Sender.RAMessage("Configs have been reloaded!");
                break;

            case "reconnectrs":
                ev.Allow = false;
                PlayerManager.localPlayer.GetComponent <PlayerStats>()?.Roundrestart();
                Timing.CallDelayed(1.5f, Application.Quit);
                break;
            }
        }
示例#18
0
        public static void MakeNobody(Player nobody, Vector3 spawn_pos)
        {
            nobody.Role      = RoleType.Tutorial;
            nobody.MaxHealth = Plugin.Instance.Config.NobodyHealth;
            nobody.Health    = nobody.MaxHealth;
            foreach (ItemType item in Plugin.Instance.Config.NobodyStartItems)
            {
                nobody.AddItem(item);
            }
            nobody.Ammo[(int)AmmoType.Nato556] = Plugin.Instance.Config.Nobody5Ammo;
            nobody.Ammo[(int)AmmoType.Nato762] = Plugin.Instance.Config.Nobody7Ammo;
            nobody.Ammo[(int)AmmoType.Nato9]   = Plugin.Instance.Config.Nobody9Ammo;

            Timing.CallDelayed(0.5f, () =>
            {
                nobody.ReferenceHub.playerMovementSync.AddSafeTime(1.0f);
                nobody.Position = spawn_pos + new Vector3(0, 0.75f, 0);
            });

            nobody.Broadcast(5, Plugin.Instance.Config.NobodyPrivateBroadcast);
            if (Plugin.Instance.Config.NobodyCmdMessage.Length != 0)
            {
                nobody.SendConsoleMessage(Plugin.Instance.Config.NobodyCmdMessage, "yellow");
            }
            Map.Broadcast(5, Plugin.Instance.Config.NobodyGlobalBroadcast);

            if (Plugin.Instance.Config.NobodyCassieAnnouncement.Length != 0)
            {
                Cassie.Message(Plugin.Instance.Config.NobodyCassieAnnouncement, false, false);
            }
        }
示例#19
0
        private void OnUsingItem(UsedItemEventArgs ev)
        {
            Log.Debug($"{ev.Player.Nickname} used a medical item: {ev.Item}", CustomItems.Instance.Config.IsDebugEnabled);
            if (!Check(ev.Player.CurrentItem))
            {
                return;
            }

            Timing.CallDelayed(1.5f, () =>
            {
                Log.Debug($"{ev.Player.Nickname} used a {Name}", CustomItems.Instance.Config.IsDebugEnabled);
                foreach (Exiled.API.Features.Player player in Exiled.API.Features.Player.List)
                {
                    if (player.Role == RoleType.Scp096)
                    {
                        Log.Debug($"{ev.Player.Nickname} - {Name} found an 096: {player.Nickname}", CustomItems.Instance.Config.IsDebugEnabled);
                        if (!(player.CurrentScp is Scp096 scp096))
                        {
                            continue;
                        }

                        Log.Debug($"{player.Nickname} 096 component found.", CustomItems.Instance.Config.IsDebugEnabled);
                        if ((!scp096.HasTarget(ev.Player.ReferenceHub) ||
                             scp096.PlayerState != Scp096PlayerState.Enraged) &&
                            scp096.PlayerState != Scp096PlayerState.Enraging &&
                            scp096.PlayerState != Scp096PlayerState.Attacking)
                        {
                            continue;
                        }

                        Log.Debug($"{player.Nickname} 096 checks passed.", CustomItems.Instance.Config.IsDebugEnabled);
                        scp096.EndEnrage();
                        ev.Player.Hurt(new UniversalDamageHandler(-1f, DeathTranslations.Poisoned));
                        return;
                    }
示例#20
0
 public static void TrySpawnNobody()
 {
     if (Plugin.Instance.Random.Next(0, 100) < Plugin.Instance.Config.NobodyChance)
     {
         handle = Timing.CallDelayed(Plugin.Instance.Random.Next(Plugin.Instance.Config.NobodyMinTime, Plugin.Instance.Config.NobodyMaxTime), () => SpawnNobody());
     }
 }
示例#21
0
        public static void Load(Harmony harmony)
        {
            Logger.Info("Loading Exiled plugins");
            harmony.Patch(AccessTools.Method(typeof(Paths), nameof(Paths.Reload)), new HarmonyMethod(typeof(ExiledLoader), nameof(PathsPatch)));
            Paths.Reload();

            File.Open(Paths.Config, FileMode.OpenOrCreate, FileAccess.Read).Dispose();
            Timing.CallDelayed(0.25f, () =>
            {
                var modDescription = BuildInfoCommand.ModDescription;
                global::Exiled.Loader.Loader.Config.Environment = EnvironmentType.Production;
                global::Exiled.Loader.Loader.Run();

                var mod = SixModLoader.Instance.ModManager.GetMod <ExiledMod>();
                BuildInfoCommand.ModDescription = modDescription + $"\nExiled compatibility: {mod.Info.Version} - {mod.Instance.Loaded}";

                try
                {
                    EventManager.Instance.Register(new EventsCompatibility());
                }
                catch (Exception e) when(e is InvalidOperationException || e is TypeLoadException || e is FileNotFoundException)
                {
                    Logger.Warn("Exiled Events plugin not found!\n" + e);
                }

                harmony.Patch(AccessTools.Method(typeof(SixModLoaderCommand.ModsCommand), nameof(SixModLoaderCommand.ModsCommand.Execute)), postfix: new HarmonyMethod(typeof(ExiledLoader), nameof(ModsCommandPatch)));
            });
        }
示例#22
0
        public bool Execute(ArraySegment <string> arguments, ICommandSender sender, out string response)
        {
            if (!((CommandSender)sender).CheckPermission("fctrl.respawn"))
            {
                response = "Access denied.";
                return(false);
            }
            if (arguments.Count() < 1)
            {
                response = "Proper usage: \"forcerespawn (mtf/chaos)\"";
                return(false);
            }
            if (arguments.At(0).ToLower() != "mtf" && arguments.At(0).ToLower() != "chaos")
            {
                response = "Provided argument must be \"mtf\" or \"chaos\".";
                return(false);
            }
            SpawnableTeamType spawningTeam = (arguments.At(0).ToLower() == "mtf" ? SpawnableTeamType.NineTailedFox : SpawnableTeamType.ChaosInsurgency);
            float             length       = (spawningTeam == SpawnableTeamType.NineTailedFox ? 18f : 13f);

            RespawnManager.Singleton.RestartSequence(); // Prevent the opposite team from spawning while the forced team's animation is playing.
            RespawnEffectsController.ExecuteAllEffects(RespawnEffectsController.EffectType.Selection, spawningTeam);
            Timing.CallDelayed(length, () =>
            {
                RespawnManager.Singleton.ForceSpawnTeam(spawningTeam);
            });
            response = $"Forcing {spawningTeam} spawn...";
            return(true);
        }
示例#23
0
        public override void Process(Npc npc, Player player, Dictionary <string, string> args)
        {
            switch (args["direction"])
            {
            case "forward":
                npc.Move(Npc.MovementDirection.FORWARD);
                break;

            case "backward":
                npc.Move(Npc.MovementDirection.BACKWARD);
                break;

            case "right":
                npc.Move(Npc.MovementDirection.RIGHT);
                break;

            case "left":
                npc.Move(Npc.MovementDirection.LEFT);
                break;

            case "jump":
                npc.NPCPlayer.ReferenceHub.animationController.Networkspeed = new UnityEngine.Vector2(1, 1);
                npc.AttachedCoroutines.Add(Timing.CallDelayed(float.Parse(args["duration"].Replace('.', ',')), () => npc.NPCPlayer.ReferenceHub.animationController.NetworkcurAnim = 0));
                break;

            default:
                npc.Move(Npc.MovementDirection.NONE);
                break;
            }
            npc.MovementCoroutines.Add(Timing.CallDelayed(float.Parse(args["duration"].Replace('.', ',')), () => npc.Move(Npc.MovementDirection.NONE)));
        }
示例#24
0
文件: Joined.cs 项目: xRoier/EXILED
        internal static void CallEvent(ReferenceHub hub, out API.Features.Player player)
        {
            try
            {
#if DEBUG
                API.Features.Log.Debug("Creating new player object");
#endif
                player = new API.Features.Player(hub);
#if DEBUG
                API.Features.Log.Debug($"Object exists {player is not null}");
                API.Features.Log.Debug($"Creating player object for {hub.nicknameSync.Network_displayName}", true);
#endif
                API.Features.Player.UnverifiedPlayers.Add(hub, player);
                API.Features.Player p = player;
                Timing.CallDelayed(0.25f, () =>
                {
                    if (p.IsMuted)
                    {
                        p.ReferenceHub.characterClassManager.SetDirtyBit(2UL);
                    }
                });

                Handlers.Player.OnJoined(new JoinedEventArgs(player));
            }
            catch (Exception e)
            {
                API.Features.Log.Error($"{nameof(CallEvent)}: {e}\n{e.StackTrace}");
                player = null;
            }
        }
示例#25
0
        internal void OnDied(DiedEventArgs ev)
        {
            if (IsLobby && (GameCore.RoundStart.singleton.NetworkTimer > 1 || GameCore.RoundStart.singleton.NetworkTimer == -2))
            {
                Timing.CallDelayed(Config.SpawnDelay, () => ev.Target.Role = Config.RolesToChoose[Random.Range(0, Config.RolesToChoose.Count)]);

                Timing.CallDelayed(Config.SpawnDelay * 2.5f, () =>
                {
                    if (!Config.MultipleRooms)
                    {
                        ev.Target.Position = choosedSpawnPos;
                    }
                    else
                    {
                        ev.Target.Position = possibleSpawnPoses[Random.Range(0, possibleSpawnPoses.Count)];
                    }

                    if (Config.MovementBoost != 0)
                    {
                        ev.Target.EnableEffect <MovementBoost>();
                        ev.Target.ChangeEffectIntensity <MovementBoost>(50);
                    }

                    Timing.CallDelayed(0.3f, () =>
                    {
                        ev.Target.ResetInventory(Config.Inventory);

                        foreach (var ammo in Config.Ammo)
                        {
                            ev.Target.Ammo[ammo.Key.GetItemType()] = ammo.Value;
                        }
                    });
                });
            }
        }
示例#26
0
        public static void SpawnPlayer(Player player, bool full = true)
        {
            player.SessionVariables.Add("IsSH", null);
            player.Role.Type  = RoleType.Tutorial;
            player.Health     = config.SerpentsHandModifiers.Health;
            player.MaxHealth  = (int)config.SerpentsHandModifiers.Health;
            player.UnitName   = config.SpawnManager.UnitNames[UnityEngine.Random.Range(0, config.SpawnManager.UnitNames.Count)];
            player.CustomInfo = config.SerpentsHandModifiers.RoleName;

            player.ReferenceHub.nicknameSync.ShownPlayerInfo &= ~PlayerInfoArea.Nickname;
            player.ReferenceHub.nicknameSync.ShownPlayerInfo &= ~PlayerInfoArea.UnitName;
            player.ReferenceHub.nicknameSync.ShownPlayerInfo &= ~PlayerInfoArea.Role;

            player.Broadcast(config.SpawnManager.SpawnBroadcast);

            if (full)
            {
                Timing.CallDelayed(0.4f, () =>
                {
                    player.ResetInventory(config.SerpentsHandModifiers.SpawnItems);
                    foreach (var ammo in config.SerpentsHandModifiers.SpawnAmmo)
                    {
                        player.Ammo[ammo.Key.GetItemType()] = ammo.Value;
                    }
                });
            }
            Timing.CallDelayed(1.7f, () => player.Position = config.SpawnManager.SpawnPos);
        }
示例#27
0
    public override void Attack()
    {
        if (!isOnCooldown)
        {
            GameObject  bullet = Utils.Instantiate(prefab, gameObject.transform.position, Quaternion.identity);
            Rigidbody2D rb     = bullet.AddComponent <Rigidbody2D>();
            rb.gravityScale = 0f;
            if (PlayerController.singleton.movement.normalized != Vector2.zero)
            {
                bullet.transform.up = PlayerController.singleton.movement.normalized;
                rb.AddForce(PlayerController.singleton.movement.normalized * 2000f);
            }
            else
            {
                Vector2 velocity = new Vector2(PlayerController.singleton.render.flipX ? -1 : 1, 0);
                bullet.transform.up = velocity;
                rb.AddForce(velocity * 2000f);
            }

            SfxController.singleton.sniperShot.Play();

            isOnCooldown = true;
            Timing.CallDelayed(shootDelay, () => isOnCooldown = false);
        }
    }
        protected override void OnEnter(ProcedureOwner procedureOwner, object userData)
        {
            base.OnEnter(procedureOwner, userData);

            GameCore.Input.Subscribe(InputEventType.On_SimpleTap, OnSimpleTap);

            addLogicHandler(new CraftCameraLogicHandler());

            Timing.CallDelayed(0.2f, () =>
            {
                var data = GameCore.WorldMap.GetLogicHandler <WorldMapSystemLogicHandler>(WorldMapSystemLogicHandler.HandlerID).GetCameraSetting();
                GameCore.Event.Fire(this, FocusWorldPosWithLerpValueEventArgs.Create(GameCore.NetData.SelfCastle.Position, data.focusCastleLerpValue));

                // 產生 preview hex 的 entity:
                selectGridEntity.Release();
                selectGridEntity.LoadEntity(new MiscEntityData(GameCore.Entity.GenerateSerialId(), gridHexAssetName)
                {
                    Position = GameCore.NetData.SelfCastle.Position
                },
                                            (entity) =>
                {
                    entity.OnZoom(0);
                });
            });

            uiSerialId = GameCore.UI.OpenUIForm(UIFormId.UISelectBuildGrid);
        }
示例#29
0
 internal static void SpawnItemToSpawn(Locker.ItemToSpawn toSpawn, Locker locker, bool locked)
 {
     for (int i = 0; i <= toSpawn._amount; i++)
     {
         var item = new Synapse.Api.Items.SynapseItem(toSpawn._id, 0f, 0, 0, 0);
         item.Drop(toSpawn._pos);
         item.pickup.SetupPickup(item.ItemType, item.Durabillity, item.pickup.ownerPlayer, item.pickup.weaponMods, item.pickup.position, toSpawn._rot);
         item.pickup.RefreshDurability(true, true);
         item.pickup.Locked  = locked;
         item.pickup.Chamber = toSpawn.chamberId;
         locker.AssignPickup(item.pickup);
         var rb = item.pickup.GetComponent <Rigidbody>();
         rb.velocity = Vector3.zero;
         if (locker.enableSorting && locker.sortingTarget != null)
         {
             rb.useGravity = false;
             var normalized = (item.Position - locker.sortingTarget.transform.position).normalized;
             rb.velocity        = normalized * locker.sortingForce;
             rb.angularVelocity = locker.sortingTorque;
             Timing.CallDelayed(0.5f, () => rb.useGravity = true);
             return;
         }
         rb.useGravity = true;
     }
 }
示例#30
0
        public void OnWaitingForPlayers()
        {
            // Fix for Exiled 5.0.0-beta.3
            Timing.CallDelayed(0.6f, () =>
            {
                Room room939        = Room.Get(RoomType.Hcz939);
                var firstscp939door = Door.List.GetClosestDoor(room939);
                Scp939Doors.Add(firstscp939door);
                Scp939Doors.Add(Door.List.GetClosestDoor(room939, firstscp939door, false));

                // Scp096 Door
                var door096 = Door.Get("096");
                Scp096Door  = Door.List.GetClosestDoor(door096);

                // Scp049 Door
                var door049 = Door.Get("049_ARMORY");
                Scp049Door  = Door.List.GetClosestDoor(door049);

                // Scp173 Door
                Scp173Door = Door.Get("173_CONNECTOR");

                foreach (var affectedoor in plugin.Config.AffectedDoors)
                {
                    affectedoor.Doors.Clear();
                    foreach (var door in Door.Get(x => x.Type == affectedoor.DoorType))
                    {
                        affectedoor.Doors.Add(door);
                    }
                }

                Methods.LockAffectedDoors();
            });
        }