/// <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; }
// 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); } }