/// <summary> /// Handles the event were a client uses an item in their inventory or in their hands, either by /// alt-clicking it or pressing 'E' while hovering over it. /// </summary> private void HandleInteractInventorySlotEvent(InteractInventorySlotEvent msg, EntitySessionEventArgs args) { var coords = Transform(msg.ItemUid).Coordinates; // client sanitization if (!ValidateClientInput(args.SenderSession, coords, msg.ItemUid, out var user)) { Logger.InfoS("system.interaction", $"Inventory interaction validation failed. Session={args.SenderSession}"); return; } // We won't bother to check that the target item is ACTUALLY in an inventory slot. UserInteraction() and // InteractionActivate() should check that the item is accessible. So.. if a user wants to lie about an // in-reach item being used in a slot... that should have no impact. This is functionally the same as if // they had somehow directly clicked on that item. if (msg.AltInteract) { // Use 'UserInteraction' function - behaves as if the user alt-clicked the item in the world. UserInteraction(user.Value, coords, msg.ItemUid, msg.AltInteract); } else { // User used 'E'. We want to activate it, not simulate clicking on the item InteractionActivate(user.Value, msg.ItemUid); } }
/// <summary> /// Handles the event were a client uses an item in their inventory or in their hands, either by /// alt-clicking it or pressing 'E' while hovering over it. /// </summary> private void HandleInteractInventorySlotEvent(InteractInventorySlotEvent msg, EntitySessionEventArgs args) { var coords = Transform(msg.ItemUid).Coordinates; // client sanitization if (!ValidateClientInput(args.SenderSession, coords, msg.ItemUid, out var user)) { Logger.InfoS("system.interaction", $"Inventory interaction validation failed. Session={args.SenderSession}"); return; } if (msg.AltInteract) { // Use 'UserInteraction' function - behaves as if the user alt-clicked the item in the world. UserInteraction(user.Value, coords, msg.ItemUid, msg.AltInteract); } else { // User used 'E'. We want to activate it, not simulate clicking on the item InteractionActivate(user.Value, msg.ItemUid); } }