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