mirror of
https://github.com/misternebula/quantum-space-buddies.git
synced 2025-02-10 12:39:53 +00:00
items: set held item correctly
This commit is contained in:
parent
bfbfc6ffd9
commit
ba51001f55
@ -24,8 +24,7 @@ internal class DropItemMessage : QSBWorldObjectMessage<IQSBItem,
|
||||
WorldObject.DropItem(position, normal, sector);
|
||||
|
||||
var player = QSBPlayerManager.GetPlayer(From);
|
||||
player.HeldItem = WorldObject;
|
||||
|
||||
player.HeldItem = null;
|
||||
player.AnimationSync.VisibleAnimator.SetTrigger("DropHeldItem");
|
||||
}
|
||||
}
|
||||
|
@ -1,7 +1,6 @@
|
||||
using QSB.ItemSync.WorldObjects.Items;
|
||||
using QSB.Messaging;
|
||||
using QSB.Player;
|
||||
using QSB.Utility;
|
||||
|
||||
namespace QSB.ItemSync.Messages;
|
||||
|
||||
@ -24,7 +23,7 @@ internal class MoveToCarryMessage : QSBWorldObjectMessage<IQSBItem>
|
||||
ItemType.DreamLantern => player.DreamLanternSocket,
|
||||
ItemType.SlideReel => player.SlideReelSocket,
|
||||
ItemType.VisionTorch => player.VisionTorchSocket,
|
||||
_ => player.ItemSocket,
|
||||
_ => player.ItemSocket
|
||||
};
|
||||
WorldObject.PickUpItem(itemSocket);
|
||||
|
||||
@ -61,4 +60,4 @@ internal class MoveToCarryMessage : QSBWorldObjectMessage<IQSBItem>
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -9,44 +9,54 @@ namespace QSB.ItemSync.Messages;
|
||||
|
||||
internal class SocketItemMessage : QSBMessage<(SocketMessageType Type, int SocketId, int ItemId)>
|
||||
{
|
||||
public SocketItemMessage(SocketMessageType type, int socketId = -1, int itemId = -1) : base((type, socketId, itemId)) { }
|
||||
public SocketItemMessage(SocketMessageType type, OWItemSocket socket, OWItem item) : base((
|
||||
type,
|
||||
socket ? socket.GetWorldObject<QSBItemSocket>().ObjectId : -1,
|
||||
item ? item.GetWorldObject<IQSBItem>().ObjectId : -1
|
||||
)) { }
|
||||
|
||||
public override bool ShouldReceive => QSBWorldSync.AllObjectsReady;
|
||||
|
||||
public override void OnReceiveRemote()
|
||||
{
|
||||
QSBItemSocket socketWorldObject;
|
||||
IQSBItem itemWorldObject;
|
||||
var player = QSBPlayerManager.GetPlayer(From);
|
||||
player.HeldItem = null;
|
||||
|
||||
DebugLog.DebugWrite("DROP HELD ITEM");
|
||||
player.AnimationSync.VisibleAnimator.SetTrigger("DropHeldItem");
|
||||
|
||||
switch (Data.Type)
|
||||
{
|
||||
case SocketMessageType.Socket:
|
||||
socketWorldObject = Data.SocketId.GetWorldObject<QSBItemSocket>();
|
||||
itemWorldObject = Data.ItemId.GetWorldObject<IQSBItem>();
|
||||
|
||||
socketWorldObject.PlaceIntoSocket(itemWorldObject);
|
||||
return;
|
||||
case SocketMessageType.StartUnsocket:
|
||||
socketWorldObject = Data.SocketId.GetWorldObject<QSBItemSocket>();
|
||||
|
||||
if (!socketWorldObject.IsSocketOccupied())
|
||||
{
|
||||
DebugLog.ToConsole($"Warning - Trying to start unsocket on socket that is unoccupied! Socket:{socketWorldObject.Name}");
|
||||
var qsbItemSocket = Data.SocketId.GetWorldObject<QSBItemSocket>();
|
||||
var qsbItem = Data.ItemId.GetWorldObject<IQSBItem>();
|
||||
|
||||
qsbItemSocket.PlaceIntoSocket(qsbItem);
|
||||
|
||||
var player = QSBPlayerManager.GetPlayer(From);
|
||||
player.HeldItem = null;
|
||||
player.AnimationSync.VisibleAnimator.SetTrigger("DropHeldItem");
|
||||
return;
|
||||
}
|
||||
case SocketMessageType.StartUnsocket:
|
||||
{
|
||||
var qsbItemSocket = Data.SocketId.GetWorldObject<QSBItemSocket>();
|
||||
var qsbItem = Data.ItemId.GetWorldObject<IQSBItem>();
|
||||
|
||||
socketWorldObject.RemoveFromSocket();
|
||||
return;
|
||||
if (!qsbItemSocket.IsSocketOccupied())
|
||||
{
|
||||
DebugLog.ToConsole($"Warning - Trying to start unsocket on socket that is unoccupied! Socket:{qsbItemSocket.Name}");
|
||||
return;
|
||||
}
|
||||
|
||||
qsbItemSocket.RemoveFromSocket();
|
||||
|
||||
var player = QSBPlayerManager.GetPlayer(From);
|
||||
player.HeldItem = qsbItem;
|
||||
return;
|
||||
}
|
||||
case SocketMessageType.CompleteUnsocket:
|
||||
itemWorldObject = Data.ItemId.GetWorldObject<IQSBItem>();
|
||||
{
|
||||
var qsbItem = Data.ItemId.GetWorldObject<IQSBItem>();
|
||||
|
||||
itemWorldObject.OnCompleteUnsocket();
|
||||
return;
|
||||
qsbItem.OnCompleteUnsocket();
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,9 +1,7 @@
|
||||
using HarmonyLib;
|
||||
using OWML.Common;
|
||||
using QSB.ItemSync.Messages;
|
||||
using QSB.ItemSync.WorldObjects;
|
||||
using QSB.ItemSync.WorldObjects.Items;
|
||||
using QSB.ItemSync.WorldObjects.Sockets;
|
||||
using QSB.Messaging;
|
||||
using QSB.Patches;
|
||||
using QSB.Player;
|
||||
@ -18,46 +16,40 @@ internal class ItemPatches : QSBPatch
|
||||
{
|
||||
public override QSBPatchTypes Type => QSBPatchTypes.OnClientConnect;
|
||||
|
||||
[HarmonyPrefix]
|
||||
[HarmonyPostfix]
|
||||
[HarmonyPatch(typeof(ItemTool), nameof(ItemTool.MoveItemToCarrySocket))]
|
||||
public static bool ItemTool_MoveItemToCarrySocket(OWItem item)
|
||||
public static void ItemTool_MoveItemToCarrySocket(OWItem item)
|
||||
{
|
||||
var qsbObj = item.GetWorldObject<IQSBItem>();
|
||||
QSBPlayerManager.LocalPlayer.HeldItem = qsbObj;
|
||||
qsbObj.SendMessage(new MoveToCarryMessage());
|
||||
return true;
|
||||
var qsbItem = item.GetWorldObject<IQSBItem>();
|
||||
QSBPlayerManager.LocalPlayer.HeldItem = qsbItem;
|
||||
qsbItem.SendMessage(new MoveToCarryMessage());
|
||||
}
|
||||
|
||||
[HarmonyPrefix]
|
||||
[HarmonyPostfix]
|
||||
[HarmonyPatch(typeof(ItemTool), nameof(ItemTool.SocketItem))]
|
||||
public static bool ItemTool_SocketItem(ItemTool __instance, OWItemSocket socket)
|
||||
public static void ItemTool_SocketItem(ItemTool __instance, OWItemSocket socket)
|
||||
{
|
||||
var qsbObj = __instance._heldItem.GetWorldObject<IQSBItem>();
|
||||
var socketId = socket.GetWorldObject<QSBItemSocket>().ObjectId;
|
||||
var itemId = qsbObj.ObjectId;
|
||||
var item = __instance._heldItem;
|
||||
QSBPlayerManager.LocalPlayer.HeldItem = null;
|
||||
new SocketItemMessage(SocketMessageType.Socket, socketId, itemId).Send();
|
||||
return true;
|
||||
new SocketItemMessage(SocketMessageType.Socket, socket, item).Send();
|
||||
}
|
||||
|
||||
[HarmonyPrefix]
|
||||
[HarmonyPostfix]
|
||||
[HarmonyPatch(typeof(ItemTool), nameof(ItemTool.StartUnsocketItem))]
|
||||
public static bool ItemTool_StartUnsocketItem(OWItemSocket socket)
|
||||
public static void ItemTool_StartUnsocketItem(OWItemSocket socket)
|
||||
{
|
||||
var item = socket.GetSocketedItem().GetWorldObject<IQSBItem>();
|
||||
QSBPlayerManager.LocalPlayer.HeldItem = item;
|
||||
var socketId = socket.GetWorldObject<QSBItemSocket>().ObjectId;
|
||||
new SocketItemMessage(SocketMessageType.StartUnsocket, socketId).Send();
|
||||
return true;
|
||||
var item = socket.GetSocketedItem();
|
||||
var qsbItem = item.GetWorldObject<IQSBItem>();
|
||||
QSBPlayerManager.LocalPlayer.HeldItem = qsbItem;
|
||||
new SocketItemMessage(SocketMessageType.StartUnsocket, socket, item).Send();
|
||||
}
|
||||
|
||||
[HarmonyPrefix]
|
||||
[HarmonyPostfix]
|
||||
[HarmonyPatch(typeof(ItemTool), nameof(ItemTool.CompleteUnsocketItem))]
|
||||
public static bool ItemTool_CompleteUnsocketItem(ItemTool __instance)
|
||||
public static void ItemTool_CompleteUnsocketItem(ItemTool __instance)
|
||||
{
|
||||
var itemId = __instance._heldItem.GetWorldObject<IQSBItem>().ObjectId;
|
||||
new SocketItemMessage(SocketMessageType.CompleteUnsocket, itemId: itemId).Send();
|
||||
return true;
|
||||
var item = __instance._heldItem;
|
||||
new SocketItemMessage(SocketMessageType.CompleteUnsocket, null, item).Send();
|
||||
}
|
||||
|
||||
[HarmonyPrefix]
|
||||
@ -88,7 +80,7 @@ internal class ItemPatches : QSBPatch
|
||||
}
|
||||
}
|
||||
|
||||
var parent = (customDropTarget == null)
|
||||
var parent = customDropTarget == null
|
||||
? targetRigidbody.transform
|
||||
: customDropTarget.GetItemDropTargetTransform(hit.collider.gameObject);
|
||||
var qsbItem = __instance._heldItem.GetWorldObject<IQSBItem>();
|
||||
@ -108,4 +100,4 @@ internal class ItemPatches : QSBPatch
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user