Пример #1
0
        private static bool Prefix(Scp914Machine __instance, ref bool __result, Pickup item)
        {
            try
            {
                var synapseitem = item.GetSynapseItem();
                var type        = Map.Get.Scp914.UpgradeItemID(synapseitem.ID);

                if (type < 0)
                {
                    synapseitem.Destroy();
                    __result = false;
                    return(false);
                }
                synapseitem.pickup = null;
                synapseitem.Destroy();

                var newitem = new SynapseItem(type, item.durability, item.weaponMods[0], item.weaponMods[1], item.weaponMods[2]);
                newitem.pickup   = item;
                newitem.Position = newitem.pickup.transform.position;
                newitem.pickup.RefreshDurability();
                if (newitem.ItemType == ItemType.GunLogicer)
                {
                    newitem.Sight  = 0;
                    newitem.Barrel = 0;
                    newitem.Other  = 0;
                }
            }
            catch (Exception e)
            {
                Logger.Get.Error($"Synapse-Item: Scp914ItemUpgrade failed!!\n{e}\nStackTrace:\n{e.StackTrace}");
            }
            return(false);
        }
Пример #2
0
        private static bool Prefix(Scp914Machine __instance, Inventory inventory, CharacterClassManager player, IEnumerable <CharacterClassManager> players)
        {
            try
            {
                var splayer = inventory.GetPlayer();
                foreach (var item in splayer.Inventory.Items)
                {
                    var type = Map.Get.Scp914.UpgradeItemID(item.ID);

                    if (type < 0)
                    {
                        item.Destroy();
                    }
                    else
                    {
                        var newitem = new SynapseItem(type, item.Durabillity, item.Sight, item.Barrel, item.Other);
                        item.Destroy();
                        if (newitem.ItemType == ItemType.GunLogicer)
                        {
                            newitem.Sight  = 0;
                            newitem.Barrel = 0;
                            newitem.Other  = 0;
                        }
                        newitem.PickUp(splayer);
                        Scp914Machine.TryFriendshipAchievement(item.ItemType, player, players);
                    }
                }
            }
            catch (Exception e)
            {
                Logger.Get.Error($"Synapse-Event: Scp914PlayerUpgrade failed!!\n{e}\nStackTrace:\n{e.StackTrace}");
            }
            return(false);
        }
        public static bool Prefix(Scp914Machine __instance)
        {
            try
            {
                Better914Config Config = Better914Plugin.instance.Config;
                if (!Config.IsEnabled && !Config.UseNewRecipeSystem)
                {
                    return(false);
                }

                if (!NetworkServer.active)
                {
                    return(true);
                }
                __instance.players.Clear();
                __instance.items.Clear();
                foreach (var collider in Physics.OverlapBox(__instance.intake.position, __instance.inputSize / 2f))
                {
                    if (collider.GetComponent <CharacterClassManager>() is CharacterClassManager ccm)
                    {
                        __instance.players.Add(ccm);
                    }
                    if (collider.GetComponent <Pickup>() is Pickup pickup)
                    {
                        __instance.items.Add(pickup);
                    }
                }
                return(Upgrade(__instance));
            }
            catch (System.Exception ex)
            {
                Log.Error(ex.ToString());
                return(true);
            }
        }
Пример #4
0
 /// <summary>
 /// Initializes a new instance of the <see cref="UpgradingItemsEventArgs"/> class.
 /// </summary>
 /// <param name="scp914"><inheritdoc cref="Scp914"/></param>
 /// <param name="players"><inheritdoc cref="Players"/></param>
 /// <param name="items"><inheritdoc cref="Items"/></param>
 /// <param name="knobSetting"><inheritdoc cref="KnobSetting"/></param>
 /// <param name="isAllowed"><inheritdoc cref="IsAllowed"/></param>
 public UpgradingItemsEventArgs(Scp914Machine scp914, List <Player> players, List <Pickup> items, Scp914Knob knobSetting, bool isAllowed = true)
 {
     Scp914      = scp914;
     Players     = players;
     Items       = items;
     KnobSetting = knobSetting;
     IsAllowed   = isAllowed;
 }
        public static bool Upgrade(Scp914Machine instance)
        {
            if (!NetworkServer.active)
            {
                return(true);
            }

            UpgradeItems(instance.items);
            return(false);
        }
Пример #6
0
        public static void UpgradeItem(Scp914Machine instance, Pickup pickup, bool dropped)
        {
            var selectedItem = GetItem(instance.knobState, pickup.ItemId);

            if (selectedItem < 0)
            {
                pickup.Delete();
                return;
            }
            pickup.SetIDFull(selectedItem);

            if (dropped)
            {
                Vector3 b = instance.output.position - instance.intake.position;
                pickup.transform.position += b;
            }
        }
Пример #7
0
        public static bool Prefix(Scp914Machine __instance)
        {
            try
            {
                if (!PluginConfig.Cfg.Enabled)
                {
                    return(true);
                }
                if (!PluginConfig.Cfg.UseNewRecipeSystem)
                {
                    return(true);
                }

                if (!NetworkServer.active)
                {
                    return(false);
                }
                Collider[] array = Physics.OverlapBox(__instance.intake.position, __instance.inputSize / 2f);
                __instance.players.Clear();
                __instance.items.Clear();
                foreach (var collider in array)
                {
                    var ccm = collider.GetComponent <CharacterClassManager>();
                    if (ccm != null)
                    {
                        __instance.players.Add(ccm);
                    }
                    else
                    {
                        var pickup = collider.GetComponent <Pickup>();
                        if (pickup != null)
                        {
                            __instance.items.Add(pickup);
                        }
                    }
                }

                return(Upgrade(__instance, __instance.items, __instance.players));
            }
            catch (Exception ex)
            {
                Log.Error(ex.ToString());
                return(true);
            }
        }
Пример #8
0
        public static void TrySwitchPlayers(Scp914Machine instance, List <CharacterClassManager> players)
        {
            if (instance.knobState == Scp914Knob.OneToOne)
            {
                if (players.Count < 2)
                {
                    return;
                }

                if (CheckPercent(PluginConfig.Cfg.SwapRoleChance))
                {
                    var player   = players[Random.Range(0, players.Count - 1)];
                    var player2  = SelectDifferentRole(player, players.Except(new CharacterClassManager[] { player }));
                    var posTemp  = player.transform.position;
                    var roleTemp = player.CurClass;
                    SetClass(player, player2.CurClass, player2.transform.position);
                    SetClass(player2, roleTemp, posTemp);
                }
            }
        }
Пример #9
0
        private static bool Prefix(Scp914Machine __instance)
        {
            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);
                    }
                }
            }

            var ev = new UpgradingItemsEventArgs(__instance, __instance.players.Select(player => API.Features.Player.Get(player.gameObject)).ToList(), __instance.items, __instance.knobState);

            Scp914.OnUpgradingItems(ev);

            var players = ev.Players.Select(player => player.ReferenceHub.characterClassManager).ToList();

            __instance.MoveObjects(ev.Items, players);

            if (ev.IsAllowed)
            {
                __instance.UpgradeObjects(ev.Items, players);
            }

            return(false);
        }
Пример #10
0
        private static bool Prefix(Scp914Machine __instance, Inventory inventory, CharacterClassManager player, IEnumerable <CharacterClassManager> players)
        {
            try
            {
                if (inventory.curItem == ItemType.None)
                {
                    return(false);
                }

                var splayer = inventory.GetPlayer();
                var type    = Map.Get.Scp914.UpgradeItemID(splayer.ItemInHand.ID);
                var index   = inventory.GetItemIndex();
                if (index < 0 || index >= inventory.items.Count)
                {
                    return(false);
                }
                if (type < 0)
                {
                    splayer.ItemInHand.Destroy();
                    return(false);
                }

                var item    = splayer.ItemInHand;
                var newitem = new SynapseItem(type, item.Durabillity, item.Sight, item.Barrel, item.Other);
                if (newitem.ItemType == ItemType.GunLogicer)
                {
                    newitem.Barrel = 0;
                    newitem.Sight  = 0;
                    newitem.Other  = 0;
                }
                item.Destroy();
                newitem.PickUp(splayer);

                Scp914Machine.TryFriendshipAchievement(newitem.ItemType, player, players);
            }
            catch (Exception e)
            {
                Logger.Get.Error($"Synapse-Event: Scp914HeldItemUpgrade failed!!\n{e}\nStackTrace:\n{e.StackTrace}");
            }
            return(false);
        }
Пример #11
0
        public static bool Upgrade(Scp914Machine instance, IEnumerable <Pickup> items, IEnumerable <CharacterClassManager> players)
        {
            if (!NetworkServer.active)
            {
                return(true);
            }
            foreach (var pickup in items)
            {
                UpgradeItem(instance, pickup, true);
                Scp914Machine.TryFriendshipAchievement(pickup.ItemId, pickup.info.ownerPlayer.GetComponent <CharacterClassManager>(), players);
            }

            TrySwitchPlayers(instance, players.ToList());

            foreach (var ccm in players)
            {
                UpgradePlayer(instance, ccm, players);
            }


            return(false);
        }
Пример #12
0
        public static bool Prefix(Scp914Machine __instance)
        {
            if (!PluginConfig.Cfg.Enabled)
            {
                return(true);
            }

            if (!PluginConfig.Cfg.CanChangeKnobWhileWorking && __instance.working || Math.Abs(__instance.curKnobCooldown) > 0.001f)
            {
                return(false);
            }

            //if (Plugin.KnobBlockade) return false;

            __instance.curKnobCooldown = __instance.knobCooldown;
            Scp914Knob knob = __instance.knobState + 1;

            if (knob > Scp914Machine.knobStateMax)
            {
                knob = Scp914Machine.knobStateMin;
            }
            __instance.NetworkknobState = knob;
            return(false);
        }
Пример #13
0
        public static void TeleportPlayer(Scp914Machine instance, CharacterClassManager player)
        {
            Vector3 b = instance.output.position - instance.intake.position;

            player.GetComponent <PlyMovementSync>().OverridePosition(player.transform.position + b, 0f, false);
        }
Пример #14
0
        public static void UpgradePlayer(Scp914Machine instance, CharacterClassManager player, IEnumerable <CharacterClassManager> players)
        {
            var c = PluginConfig.Cfg;

            if (!c.RoughCoarseDamageSCP && player.IsScpButNotZombie())
            {
                TeleportPlayer(instance, player);
                return;
            }

            if (CheckPercent(c.InvUpgradeChance) && !player.IsAnyScp())
            {
                Inventory inv = player.GetComponent <Inventory>();
                if (inv.items.Count > 0)
                {
                    var index    = inv.items.Count > 1 ? Random.Range(0, inv.items.Count - 1) : 0;
                    var itemInfo = inv.items[index];
                    var item     = GetItem(instance.knobState, itemInfo.id);
                    if (item < 0)
                    {
                        inv.items.RemoveAt(index);
                    }
                    else
                    {
                        itemInfo.id      = item;
                        inv.items[index] = itemInfo;
                        Scp914Machine.TryFriendshipAchievement(item, player, players);
                    }
                }
            }

            if (c.ChangePlayerHealth)
            {
                if (!player.GodMode && player.CurClass != RoleType.Spectator)
                {
                    HealthChangedComponent component = player.GetComponent <HealthChangedComponent>();
                    var stats = player.GetComponent <PlayerStats>();
                    if (component == null)
                    {
                        component = player.gameObject.AddComponent <HealthChangedComponent>();
                        component.OriginalHealthAmmount  = stats.maxHP;
                        component.ActualHealthPercentage = 100;
                    }
                    var newPercent = component.ActualHealthPercentage;

                    if (instance.knobState == Scp914Knob.Rough)
                    {
                        if (CheckPercent(c.RoughDamageChance) || (CheckPercent(c.RoughDamageChance * c.SCPDamageChanceMultiplier) && player.IsScpButNotZombie()))
                        {
                            if (player.IsScpButNotZombie())
                            {
                                HurtPlayer(stats.maxHP * ((c.RoughDamageAmmout / 2) / 100), stats, player);
                            }
                            else
                            {
                                newPercent -= c.RoughDamageAmmout;
                            }
                        }
                    }
                    else if (instance.knobState == Scp914Knob.Coarse)
                    {
                        if (CheckPercent(c.CoarseDamageChance) || (CheckPercent(c.CoarseDamageChance * c.SCPDamageChanceMultiplier) && player.IsScpButNotZombie()))
                        {
                            if (player.IsScpButNotZombie())
                            {
                                HurtPlayer(stats.maxHP * ((c.CoarseDamageAmmout / 2) / 100), stats, player);
                            }
                            else
                            {
                                newPercent -= c.CoarseDamageAmmout;
                            }
                        }
                    }
                    else if (instance.knobState == Scp914Knob.Fine && !player.IsScpButNotZombie())
                    {
                        if (CheckPercent(c.FineHealChance))
                        {
                            newPercent += c.FineHealAmmout;
                        }
                    }
                    else if (instance.knobState == Scp914Knob.VeryFine && !player.IsScpButNotZombie())
                    {
                        if (CheckPercent(c.VeryFineHealChance))
                        {
                            newPercent += c.VeryFineHealAmmout;
                        }
                    }
                    newPercent = Constrain(newPercent, 100 - c.RoughDamageAmmout, 100 + c.VeryFineHealAmmout);
                    Log.Info("newPercent: " + newPercent + "%");
                    if (newPercent <= 0)
                    {
                        HurtPlayer(stats.maxHP + 1f, stats, player);
                        if (stats.health > 0)
                        {
                            newPercent = 5f;
                        }
                        else
                        {
                            Object.Destroy(component);
                        }
                    }
                    if (newPercent >= 100)
                    {
                        var prev = stats.maxHP;
                        stats.maxHP = Mathf.RoundToInt(component.OriginalHealthAmmount * (newPercent / 100));
                        if (prev > stats.maxHP)
                        {
                            stats.health = stats.maxHP < stats.health ? stats.maxHP : stats.health;
                        }
                        else if (!player.IsScpButNotZombie())
                        {
                            stats.HealHPAmount(999999f);
                        }
                    }
                    component.ActualHealthPercentage = newPercent;
                    Log.Info(component.ActualHealthPercentage + "% " + stats.maxHP + "HP " + stats.health + "health");
                }
            }
            TeleportPlayer(instance, player);
        }
Пример #15
0
 /// <summary>
 /// Initializes a new instance of the <see cref="UpgradingEventArgs"/> class.
 /// </summary>
 /// <param name="item"><inheritdoc cref="Item"/></param>
 /// <param name="scp914"><inheritdoc cref="UpgradingItemsEventArgs.Scp914"/></param>
 /// <param name="players"><inheritdoc cref="UpgradingItemsEventArgs.Players"/></param>
 /// <param name="items"><inheritdoc cref="UpgradingItemsEventArgs.Items"/></param>
 /// <param name="knobSetting"><inheritdoc cref="UpgradingItemsEventArgs.KnobSetting"/></param>
 /// <param name="isAllowed"><inheritdoc cref="UpgradingItemsEventArgs.IsAllowed"/></param>
 public UpgradingEventArgs(Inventory.SyncItemInfo item, Scp914Machine scp914, List <Player> players, List <Pickup> items, Scp914Knob knobSetting, bool isAllowed = true)
     : base(scp914, players, items, knobSetting, isAllowed)
 {
     Item = item;
 }