Example #1
0
        public static void InvokeScp914Upgrade(Scp914.Scp914Machine machine, List <CharacterClassManager> characterClassManagers, ref List <Pickup> pickups, Scp914.Scp914Knob knobSetting, ref bool allow)
        {
            if (Scp914UpgradeEvent == null)
            {
                return;
            }

            List <ReferenceHub> players = new List <ReferenceHub>();

            foreach (CharacterClassManager characterClassManager in characterClassManagers)
            {
                players.Add(characterClassManager.gameObject.GetPlayer());
            }

            SCP914UpgradeEvent ev = new SCP914UpgradeEvent()
            {
                Allow       = allow,
                Machine     = machine,
                Players     = players,
                Items       = pickups,
                KnobSetting = knobSetting
            };

            Scp914UpgradeEvent.Invoke(ref ev);

            pickups = ev.Items;
            allow   = ev.Allow;
        }
        private static bool Prefix(Scp914.Scp914Machine __instance)
        {
            try
            {
                if (!NetworkServer.active)
                {
                    return(false);
                }

                var array   = Physics.OverlapBox(__instance.intake.position, __instance.inputSize / 2f);
                var players = new List <Player>();
                var items   = new List <SynapseItem>();

                foreach (var collider in array)
                {
                    var player = collider.GetComponent <Player>();
                    if (player != null)
                    {
                        players.Add(player);
                    }
                    else
                    {
                        var item = collider.GetComponent <Pickup>().GetSynapseItem();
                        if (item != null)
                        {
                            items.Add(item);
                        }
                    }
                }

                Event.Get.Map.Invoke914Activate(ref players, ref items, out var allow, out var move);

                if (!allow)
                {
                    return(false);
                }

                var vanillaitems   = items.Where(x => x.State == Api.Enum.ItemState.Map).Select(x => x.pickup);
                var vanillaplayers = players.Select(x => x.ClassManager);

                try
                {
                    if (move)
                    {
                        __instance.MoveObjects(vanillaitems, vanillaplayers);
                    }
                }
                finally
                {
                    __instance.UpgradeObjects(vanillaitems, vanillaplayers.ToList());
                }

                return(false);
            }
            catch (Exception e)
            {
                Synapse.Api.Logger.Get.Error($"Synapse-Event: Scp914 Activate Event failed!!\n{e}\nStackTrace:\n{e.StackTrace}");
                return(true);
            }
        }
Example #3
0
        public static bool Prefix(Scp914.Scp914Machine __instance)
        {
            if (EventPlugin.Scp914UpgradeEventPatchDisable)
            {
                return(true);
            }

            try
            {
                if (!NetworkServer.active)
                {
                    return(true);
                }
                Collider[] colliderArray = Physics.OverlapBox(__instance.intake.position, __instance.inputSize / 2f);
                __instance.players.Clear();
                __instance.items.Clear();
                foreach (Collider collider in colliderArray)
                {
                    CharacterClassManager component1 = collider.GetComponent <CharacterClassManager>();
                    if (component1 != null)
                    {
                        __instance.players.Add(component1);
                    }
                    else
                    {
                        Pickup component2 = collider.GetComponent <Pickup>();
                        if (component2 != null)
                        {
                            __instance.items.Add(component2);
                        }
                    }
                }

                List <Pickup> pickups      = __instance.items;
                bool          allowUpgrade = true;

                Events.InvokeScp914Upgrade(__instance, __instance.players, ref pickups, __instance.knobState, ref allowUpgrade);

                __instance.MoveObjects(pickups, __instance.players);

                if (allowUpgrade)
                {
                    __instance.UpgradeObjects(pickups, __instance.players);
                }

                return(false);
            }
            catch (Exception exception)
            {
                Log.Error($"SCP914UpgradeEvent error: {exception}");
                return(true);
            }
        }
        public static bool Prefix(Scp914.Scp914Machine __instance, Pickup item)
        {
            ItemType itemType = __instance.UpgradeItemID(item.info.itemId);

            if (itemType == ItemType.KeycardO5)
            {
                return(false);
            }
            if (itemType < ItemType.KeycardJanitor)
            {
                item.Delete();
                return(false);
            }
            item.SetIDFull(itemType);
            return(true);
        }
        private static void Prefix(Scp914.Scp914Machine __instance)
        {
            try
            {
                if (loaded)
                {
                    return;
                }

                foreach (var recipe in __instance.recipes)
                {
                    Synapse.Api.Map.Get.Scp914.Recipes.Add(new Api.Scp914Recipe(recipe));
                }

                loaded = true;
            }
            catch (Exception e)
            {
                Synapse.Api.Logger.Get.Error($"Synapse-Wrapper: Scp914 recipes failed!!\n{e}\nStackTrace:\n{e.StackTrace}");
            }
        }