Exemplo n.º 1
0
        /// <summary>
        /// Things to trigger for attached items if found + hurting peoples hands.
        /// </summary>
        /// <param name="health"></param>
        public void TriggerTrap(LivingHealthMasterBase health = null)
        {
            if (health != null)
            {
                HurtHand(health);
            }
            var slot = trapContent.GetTopOccupiedIndexedSlot();

            if (slot == null)
            {
                return;
            }
            if (slot.ItemObject.TryGetComponent <ITrapComponent>(out var component))
            {
                if (Inventory.ServerDrop(slot))
                {
                    trapInSnare = false;
                }
                component.TriggerTrap();
            }
            UpdateTrapVisual();
            isArmed = false;
        }
Exemplo n.º 2
0
        // Interaction when clicking the bin
        public void ServerPerformInteraction(HandApply interaction)
        {
            var handObj = interaction.HandObject;

            if (handObj == null)
            {
                var pna = interaction.Performer.GetComponent <PlayerNetworkActions>();

                // Pen comes out before the paper
                if (storedPen)
                {
                    Chat.AddExamineMsgFromServer(interaction.Performer, "You take the pen out of the paper bin.");
                    Inventory.ServerTransfer(penSlot, interaction.HandSlot);
                    SyncStoredPen(storedPen, null);
                    return;
                }

                // Player is picking up a piece of paper
                if (!HasPaper())
                {
                    Chat.AddExamineMsgFromServer(interaction.Performer, "The paper bin is empty!");
                    return;
                }

                Chat.AddExamineMsgFromServer(interaction.Performer, "You take the paper out of the paper bin.");
                if (!HasPaper())
                {
                    throw new InvalidOperationException();
                }

                // First, get the papers that players have put in the bin
                var occupiedSlot = itemStorage.GetTopOccupiedIndexedSlot();
                if (occupiedSlot != null)
                {
                    //remove it from the slot
                    Inventory.ServerTransfer(occupiedSlot, interaction.HandSlot);
                }
                else                 // Otherwise, take from blank paper stash
                {
                    var paper      = Spawn.ServerPrefab(blankPaper).GameObject;
                    var targetSlot = itemStorage.GetNextFreeIndexedSlot();
                    Inventory.ServerAdd(paper, interaction.HandSlot);
                }

                SyncPaperCount(paperCount, paperCount - 1);
            }
            else
            {
                // Player is adding a piece of paper or a pen
                if (handObj.GetComponent <Pen>())
                {
                    SyncStoredPen(storedPen, handObj);
                    Chat.AddExamineMsgFromServer(interaction.Performer, "You put the pen in the paper bin.");
                    Inventory.ServerTransfer(interaction.HandSlot, penSlot);
                    return;
                }

                var freeSlot = itemStorage.GetNextFreeIndexedSlot();
                if (freeSlot == null)
                {
                    Chat.AddExamineMsgFromServer(interaction.Performer, "The bin is full.");
                }
                Chat.AddExamineMsgFromServer(interaction.Performer, "You put the paper in the paper bin.");
                Inventory.ServerTransfer(interaction.HandSlot, freeSlot);
                SyncPaperCount(paperCount, paperCount + 1);
            }
        }