Пример #1
0
        /// <summary>
        /// Get cleared on despawn So need to Reinitialise on spawn
        /// </summary>
        /// <param name="action"></param>
        /// <param name="FromType"></param>
        public void RegisterPort(Action action, Type FromType)
        {
            if (isServer == false)
            {
                return;
            }
            var insertCable = new Cable();

            CableID++;
            insertCable.cableCoilID = CableID;
            insertCable.PanelInput  = action;
            insertCable.PanelOutput = action;
            if (Connections.ContainsKey(action) == false)
            {
                Connections[action] = new List <Cable>();
            }


            Connections[action].Add(insertCable);
            Cables.Add(insertCable);

            var newLocalPortData = new LocalPortData();

            newLocalPortData.LocalAction = action;

            if (ColourDictionary == null)
            {
                Logger.Log("Color dictionary wasn't found. RegisterPort has exited.", Category.Interaction);
                return;
            }

            if (ColourDictionary.ContainsKey(FromType) == false)
            {
                ColourDictionary[FromType]     = new Dictionary <MethodInfo, Color>();
                MonoAvailableColours[FromType] = new List <Color>(AvailableColours);
            }

            if (ColourDictionary[FromType].ContainsKey(action.Method) == false)
            {
                ColourDictionary[FromType][action.Method] = PickARandomColourForPort(action.Method, FromType);
            }
            else
            {
                newLocalPortData.Colour = ColourDictionary[FromType][action.Method];
            }

            newLocalPortData.LocalID = ID;
            ID++;

            DictionaryCurrentPorts[action] = newLocalPortData;
            PanelOutputCurrentPorts.Add(newLocalPortData);
            PanelOutputCurrentPorts =
                PanelOutputCurrentPorts.OrderBy(item => HackingProcessBase.random.Next()).ToList();
            PanelInputCurrentPorts.Add(newLocalPortData);
            PanelInputCurrentPorts = PanelInputCurrentPorts.OrderBy(item => HackingProcessBase.random.Next()).ToList();
        }
Пример #2
0
        /// <summary>
        /// Get cleared on despawn So need to Reinitialise on spawn
        /// </summary>
        /// <param name="action"></param>
        /// <param name="FromType"></param>
        public void RegisterPort(Action action, Type FromType)
        {
            if (isServer == false)
            {
                return;
            }
            var OnePeace = Spawn.ServerPrefab(OnePeaceCoil.gameObject);

            AddObjectToItemStorage(OnePeace.GameObject);


            var newCable    = OnePeace.GameObject.GetComponent <CableCoil>();
            var insertCable = new Cable();

            insertCable.cableCoil   = newCable;
            insertCable.PanelInput  = action;
            insertCable.PanelOutput = action;
            if (Connections.ContainsKey(action) == false)
            {
                Connections[action] = new List <Cable>();
            }


            Connections[action].Add(insertCable);
            Cables.Add(insertCable);

            var newLocalPortData = new LocalPortData();

            newLocalPortData.LocalAction = action;
            if (ColourDictionary.ContainsKey(FromType) == false)
            {
                ColourDictionary[FromType]     = new Dictionary <MethodInfo, Color>();
                MonoAvailableColours[FromType] = new List <Color>(AvailableColours);
            }

            if (ColourDictionary[FromType].ContainsKey(action.Method) == false)
            {
                ColourDictionary[FromType][action.Method] = PickARandomColourForPort(action.Method, FromType);
            }
            else
            {
                newLocalPortData.Colour = ColourDictionary[FromType][action.Method];
            }

            newLocalPortData.LocalID = ID;
            ID++;

            DictionaryCurrentPorts[action] = newLocalPortData;
            PanelOutputCurrentPorts.Add(newLocalPortData);
            PanelOutputCurrentPorts =
                PanelOutputCurrentPorts.OrderBy(item => HackingProcessBase.random.Next()).ToList();
            PanelInputCurrentPorts.Add(newLocalPortData);
            PanelInputCurrentPorts = PanelInputCurrentPorts.OrderBy(item => HackingProcessBase.random.Next()).ToList();
        }
Пример #3
0
        public void ProcessCustomInteraction(GameObject Player,
                                             RequestHackingInteraction.InteractionWith InteractionType,
                                             uint Referenceobject, int PanelInputID, int PanelOutputID)
        {
            PlayerScript PlayerScript = Player.GetComponent <PlayerScript>();

            if (Validations.CanInteract(PlayerScript, NetworkSide.Server) == false)
            {
                return;
            }
            switch (InteractionType)
            {
            case RequestHackingInteraction.InteractionWith.CutWire:

                if (Validations.HasItemTrait(PlayerScript.DynamicItemStorage.GetActiveHandSlot().ItemObject,
                                             CommonTraits.Instance.Wirecutter) == false)
                {
                    return;
                }


                Cable Cable = null;
                foreach (var cable in Cables)
                {
                    if (cable?.cableCoilID == Referenceobject)
                    {
                        Cable = cable;
                        break;
                    }
                }

                if (Cable == null)
                {
                    Logger.LogWarning("No cable was found for cutting", Category.Interaction);
                    return;
                }

                Connections[Cable.PanelOutput].Remove(Cable);
                Cables.Remove(Cable);
                var Spawned = Spawn.ServerPrefab(OnePeaceCoil.gameObject).GameObject;


                var Hand = PlayerScript.DynamicItemStorage.GetBestHand(Spawned.GetComponent <Stackable>());
                if (Hand == null)
                {
                    Spawned.GetComponent <CustomNetTransform>().AppearAtPositionServer(PlayerScript.WorldPos - this.GetComponent <RegisterTile>().WorldPositionServer);
                }
                else
                {
                    Inventory.ServerAdd(Spawned, Hand);
                }


                OnChangeServer.Invoke();
                break;

            case RequestHackingInteraction.InteractionWith.Cable:
                //Please cable do not Spare thing

                if (Validations.HasItemTrait(PlayerScript.DynamicItemStorage.GetActiveHandSlot().ItemObject,
                                             CommonTraits.Instance.Cable) == false)
                {
                    return;
                }

                LocalPortData LocalPortOutput = null;
                foreach (var kPortData in DictionaryCurrentPorts)
                {
                    if (kPortData.Value.LocalID == PanelOutputID)
                    {
                        LocalPortOutput = kPortData.Value;
                    }
                }


                LocalPortData LocalPortInput = null;

                foreach (var kPortData in DictionaryCurrentPorts)
                {
                    if (kPortData.Value.LocalID == PanelInputID)
                    {
                        LocalPortInput = kPortData.Value;
                    }
                }


                foreach (var cable in Cables)
                {
                    if (LocalPortInput.LocalAction == cable.PanelInput &&
                        LocalPortOutput.LocalAction == cable.PanelOutput)
                    {
                        return;                                 //Cable Already at position
                    }
                }



                var stackable = PlayerScript.DynamicItemStorage.GetActiveHandSlot().Item.GetComponent <Stackable>();

                stackable.ServerConsume(1);

                var insertCable = new Cable();
                CableID++;
                insertCable.cableCoilID = CableID;
                Cables.Add(insertCable);

                insertCable.PanelInput  = LocalPortInput.LocalAction;
                insertCable.PanelOutput = LocalPortOutput.LocalAction;

                if (Connections.ContainsKey(insertCable.PanelOutput) == false)
                {
                    Connections[insertCable.PanelOutput] = new List <Cable>();
                }

                Connections[insertCable.PanelOutput].Add(insertCable);

                OnChangeServer.Invoke();
                break;
            }
        }
        public void ProcessCustomInteraction(GameObject Player,
                                             RequestHackingInteraction.InteractionWith InteractionType,
                                             GameObject Referenceobject, int PanelInputID, int PanelOutputID)
        {
            PlayerScript PlayerScript = Player.GetComponent <PlayerScript>();

            if (Validations.CanInteract(PlayerScript, NetworkSide.Server) == false)
            {
                return;
            }
            switch (InteractionType)
            {
            case RequestHackingInteraction.InteractionWith.CutWire:

                if (Validations.HasItemTrait(PlayerScript.DynamicItemStorage.GetActiveHandSlot().ItemObject,
                                             CommonTraits.Instance.Wirecutter) == false)
                {
                    return;
                }


                Cable Cable = null;
                foreach (var cable in Cables)
                {
                    if (cable?.cableCoil.gameObject == Referenceobject)
                    {
                        Cable = cable;
                        break;
                    }
                }

                if (Cable == null)
                {
                    Logger.LogWarning("No cable was found for cutting", Category.Interaction);
                    return;
                }

                Connections[Cable.PanelOutput].Remove(Cable);
                Cables.Remove(Cable);
                var Hand = PlayerScript.DynamicItemStorage.GetBestHand(Cable.cableCoil.GetComponent <Stackable>());
                if (Hand == null)
                {
                    itemStorage.ServerTryRemove(Cable.cableCoil.gameObject,
                                                DroppedAtWorldPosition: (PlayerScript.WorldPos -
                                                                         this.GetComponent <RegisterTile>().WorldPositionServer));
                }
                else
                {
                    itemStorage.ServerTransferGameObjectToItemSlot(Cable.cableCoil.gameObject, Hand);
                }


                OnChangeServer.Invoke();
                break;

            case RequestHackingInteraction.InteractionWith.Cable:
                //Please cable do not Spare thing

                if (Validations.HasItemTrait(PlayerScript.DynamicItemStorage.GetActiveHandSlot().ItemObject,
                                             CommonTraits.Instance.Cable) == false)
                {
                    return;
                }

                LocalPortData LocalPortOutput = null;
                foreach (var kPortData in DictionaryCurrentPorts)
                {
                    if (kPortData.Value.LocalID == PanelOutputID)
                    {
                        LocalPortOutput = kPortData.Value;
                    }
                }


                LocalPortData LocalPortInput = null;

                foreach (var kPortData in DictionaryCurrentPorts)
                {
                    if (kPortData.Value.LocalID == PanelInputID)
                    {
                        LocalPortInput = kPortData.Value;
                    }
                }


                foreach (var cable in Cables)
                {
                    if (LocalPortInput.LocalAction == cable.PanelInput &&
                        LocalPortOutput.LocalAction == cable.PanelOutput)
                    {
                        return;                                 //Cable Already at position
                    }
                }


                var stackable = Referenceobject.GetComponent <Stackable>();

                var OnePeace = stackable.ServerRemoveOne();
                if (OnePeace == stackable.gameObject)
                {
                    ItemSlot SpareSlot = null;
                    foreach (var TitemSlot in itemStorage.GetItemSlots())
                    {
                        if (TitemSlot.Item == null)
                        {
                            SpareSlot = TitemSlot;
                            break;
                        }
                    }

                    Inventory.ServerTransfer(PlayerScript.DynamicItemStorage.GetActiveHandSlot(), SpareSlot);
                }
                else
                {
                    AddObjectToItemStorage(OnePeace);
                }

                var newCable    = OnePeace.GetComponent <CableCoil>();
                var insertCable = new Cable();
                insertCable.cableCoil = newCable;
                Cables.Add(insertCable);

                insertCable.PanelInput  = LocalPortInput.LocalAction;
                insertCable.PanelOutput = LocalPortOutput.LocalAction;

                if (Connections.ContainsKey(insertCable.PanelOutput) == false)
                {
                    Connections[insertCable.PanelOutput] = new List <Cable>();
                }

                Connections[insertCable.PanelOutput].Add(insertCable);

                OnChangeServer.Invoke();
                break;
            }
        }