From bb298b74c43e4ac5107e5d92d648cd3c091eb81d Mon Sep 17 00:00:00 2001 From: Mister_Nebula <41904486+misternebula@users.noreply.github.com> Date: Sat, 30 Oct 2021 16:14:38 +0100 Subject: [PATCH] add playerinfo.helditem --- QSB/ItemSync/Events/DropItemEvent.cs | 4 ++++ QSB/ItemSync/Events/MoveToCarryEvent.cs | 3 +++ QSB/ItemSync/Events/SocketItemEvent.cs | 2 ++ QSB/ItemSync/Patches/ItemPatches.cs | 12 ++++++++++-- QSB/Player/PlayerInfo.cs | 2 ++ QSB/Player/QSBPlayerManager.cs | 4 ++++ 6 files changed, 25 insertions(+), 2 deletions(-) diff --git a/QSB/ItemSync/Events/DropItemEvent.cs b/QSB/ItemSync/Events/DropItemEvent.cs index f2db3153..69921945 100644 --- a/QSB/ItemSync/Events/DropItemEvent.cs +++ b/QSB/ItemSync/Events/DropItemEvent.cs @@ -1,5 +1,6 @@ using QSB.Events; using QSB.ItemSync.WorldObjects; +using QSB.Player; using QSB.Utility; using QSB.WorldSync; using UnityEngine; @@ -31,6 +32,9 @@ namespace QSB.ItemSync.Events { var worldObject = QSBWorldSync.GetWorldFromId(message.ObjectId); worldObject.DropItem(message.Position, message.Normal, message.Sector); + + var player = QSBPlayerManager.GetPlayer(message.FromId); + player.HeldItem = worldObject; } } } diff --git a/QSB/ItemSync/Events/MoveToCarryEvent.cs b/QSB/ItemSync/Events/MoveToCarryEvent.cs index 450db0ca..de337611 100644 --- a/QSB/ItemSync/Events/MoveToCarryEvent.cs +++ b/QSB/ItemSync/Events/MoveToCarryEvent.cs @@ -31,6 +31,9 @@ namespace QSB.ItemSync.Events var player = QSBPlayerManager.GetPlayer(message.AboutId); var itemObject = QSBWorldSync.GetWorldFromId(message.ObjectId); var itemType = itemObject.GetItemType(); + + player.HeldItem = itemObject; + Transform itemSocket = null; switch (itemType) { diff --git a/QSB/ItemSync/Events/SocketItemEvent.cs b/QSB/ItemSync/Events/SocketItemEvent.cs index 2e66f015..3ab8cbe1 100644 --- a/QSB/ItemSync/Events/SocketItemEvent.cs +++ b/QSB/ItemSync/Events/SocketItemEvent.cs @@ -31,6 +31,8 @@ namespace QSB.ItemSync.Events { var socketWorldObject = QSBWorldSync.GetWorldFromId(message.SocketId); var itemWorldObject = QSBWorldSync.GetWorldFromId(message.ItemId); + var player = QSBPlayerManager.GetPlayer(message.FromId); + player.HeldItem = null; switch (message.SocketType) { case SocketEventType.Socket: diff --git a/QSB/ItemSync/Patches/ItemPatches.cs b/QSB/ItemSync/Patches/ItemPatches.cs index 95274a00..04c4c6cc 100644 --- a/QSB/ItemSync/Patches/ItemPatches.cs +++ b/QSB/ItemSync/Patches/ItemPatches.cs @@ -2,6 +2,7 @@ using OWML.Common; using QSB.Events; using QSB.Patches; +using QSB.Player; using QSB.Utility; using QSB.WorldSync; using UnityEngine; @@ -17,7 +18,9 @@ namespace QSB.ItemSync.Patches [HarmonyPatch(typeof(ItemTool), nameof(ItemTool.MoveItemToCarrySocket))] public static bool ItemTool_MoveItemToCarrySocket(OWItem item) { - var itemId = QSBWorldSync.GetIdFromTypeSubset(ItemManager.GetObject(item)); + var qsbObj = ItemManager.GetObject(item); + var itemId = QSBWorldSync.GetIdFromTypeSubset(qsbObj); + QSBPlayerManager.LocalPlayer.HeldItem = qsbObj; QSBEventManager.FireEvent(EventNames.QSBMoveToCarry, itemId); return true; } @@ -26,8 +29,10 @@ namespace QSB.ItemSync.Patches [HarmonyPatch(typeof(ItemTool), nameof(ItemTool.SocketItem))] public static bool ItemTool_SocketItem(OWItem ____heldItem, OWItemSocket socket) { + var qsbObj = ItemManager.GetObject(____heldItem); var socketId = QSBWorldSync.GetIdFromTypeSubset(ItemManager.GetObject(socket)); - var itemId = QSBWorldSync.GetIdFromTypeSubset(ItemManager.GetObject(____heldItem)); + var itemId = QSBWorldSync.GetIdFromTypeSubset(qsbObj); + QSBPlayerManager.LocalPlayer.HeldItem = null; QSBEventManager.FireEvent(EventNames.QSBSocketItem, socketId, itemId, SocketEventType.Socket); return true; } @@ -36,6 +41,8 @@ namespace QSB.ItemSync.Patches [HarmonyPatch(typeof(ItemTool), nameof(ItemTool.StartUnsocketItem))] public static bool ItemTool_StartUnsocketItem(OWItemSocket socket) { + var item = ItemManager.GetObject(socket.GetSocketedItem()); + QSBPlayerManager.LocalPlayer.HeldItem = item; var socketId = QSBWorldSync.GetIdFromTypeSubset(ItemManager.GetObject(socket)); QSBEventManager.FireEvent(EventNames.QSBSocketItem, socketId, 0, SocketEventType.StartUnsocket); return true; @@ -84,6 +91,7 @@ namespace QSB.ItemSync.Patches var objectId = QSBWorldSync.GetIdFromTypeSubset(ItemManager.GetObject(____heldItem)); ____heldItem.DropItem(hit.point, hit.normal, parent, sector, customDropTarget); ____heldItem = null; + QSBPlayerManager.LocalPlayer.HeldItem = null; Locator.GetToolModeSwapper().UnequipTool(); var parentSector = parent.GetComponentInChildren(); if (parentSector != null) diff --git a/QSB/Player/PlayerInfo.cs b/QSB/Player/PlayerInfo.cs index 9d8430a9..b5e68723 100644 --- a/QSB/Player/PlayerInfo.cs +++ b/QSB/Player/PlayerInfo.cs @@ -3,6 +3,7 @@ using QSB.Animation.Player; using QSB.Animation.Player.Thrusters; using QSB.CampfireSync.WorldObjects; using QSB.ClientServerStateSync; +using QSB.ItemSync.WorldObjects; using QSB.Player.TransformSync; using QSB.ProbeSync; using QSB.QuantumSync; @@ -95,6 +96,7 @@ namespace QSB.Player public Transform VesselCoreSocket => CameraBody.transform.Find("REMOTE_VesselCoreSocket"); public QSBMarshmallow Marshmallow { get; set; } public QSBCampfire Campfire { get; set; } + public IQSBOWItem HeldItem { get; set; } // Conversation public int CurrentCharacterDialogueTreeId { get; set; } diff --git a/QSB/Player/QSBPlayerManager.cs b/QSB/Player/QSBPlayerManager.cs index 377b1ef4..6e7b3c66 100644 --- a/QSB/Player/QSBPlayerManager.cs +++ b/QSB/Player/QSBPlayerManager.cs @@ -1,4 +1,5 @@ using OWML.Common; +using QSB.ItemSync.WorldObjects; using QSB.Player.Events; using QSB.Player.TransformSync; using QSB.Tools; @@ -173,5 +174,8 @@ namespace QSB.Player return playerList.Where(x => x.PlayerStates.IsReady).OrderBy(x => Vector3.Distance(x.Body.transform.position, worldPoint)).FirstOrDefault(); } + + public static IEnumerable> GetPlayerCarryItems() + => PlayerList.Select(x => new Tuple(x, x.HeldItem)); } } \ No newline at end of file