Send InventoryActions across space and time
This commit is contained in:
parent
3a8eac7125
commit
c1af15fb80
@ -5,6 +5,9 @@ using Cyber.Util;
|
|||||||
using Cyber.Console;
|
using Cyber.Console;
|
||||||
using Cyber.Entities.SyncBases;
|
using Cyber.Entities.SyncBases;
|
||||||
using Cyber.Items;
|
using Cyber.Items;
|
||||||
|
using Cyber.Networking.Clientside;
|
||||||
|
using Cyber.Networking;
|
||||||
|
using Cyber.Networking.Messages;
|
||||||
|
|
||||||
namespace Cyber.Controls {
|
namespace Cyber.Controls {
|
||||||
|
|
||||||
@ -142,8 +145,10 @@ namespace Cyber.Controls {
|
|||||||
Item Equipped = Inventory.Equipped.GetItem(SelectedItem.Slot);
|
Item Equipped = Inventory.Equipped.GetItem(SelectedItem.Slot);
|
||||||
if (Equipped != null && Equipped.ID == SelectedItem.ID) {
|
if (Equipped != null && Equipped.ID == SelectedItem.ID) {
|
||||||
Inventory.Equipped.ClearSlot(SelectedItem.Slot);
|
Inventory.Equipped.ClearSlot(SelectedItem.Slot);
|
||||||
|
Client.Send(PktType.InventoryAction, new InventoryActionPkt(InventoryAction.Unequip, (int) SelectedItem.Slot));
|
||||||
} else {
|
} else {
|
||||||
Inventory.Equipped.SetSlot(SelectedItem.Slot, SelectedItem);
|
Inventory.Equipped.SetSlot(SelectedItem.Slot, SelectedItem);
|
||||||
|
Client.Send(PktType.InventoryAction, new InventoryActionPkt(InventoryAction.Equip, SelectedItem.ID));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
ItemGridSelectedIndex = CurrentIndex;
|
ItemGridSelectedIndex = CurrentIndex;
|
||||||
|
@ -66,7 +66,6 @@ namespace Cyber.Entities.SyncBases {
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="reader"></param>
|
/// <param name="reader"></param>
|
||||||
public override void Deserialize(NetworkReader reader) {
|
public override void Deserialize(NetworkReader reader) {
|
||||||
Debug.Log("Deserializing inventory!");
|
|
||||||
|
|
||||||
byte[][] ByteArray = new byte[4][];
|
byte[][] ByteArray = new byte[4][];
|
||||||
ByteArray[0] = reader.ReadBytesAndSize();
|
ByteArray[0] = reader.ReadBytesAndSize();
|
||||||
|
19
Assets/Scripts/Items/InventoryAction.cs
Normal file
19
Assets/Scripts/Items/InventoryAction.cs
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
|
||||||
|
namespace Cyber.Items {
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Represents an inventory action
|
||||||
|
/// </summary>
|
||||||
|
public enum InventoryAction : byte {
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Equip an item, given int is the ID of the item equipping
|
||||||
|
/// </summary>
|
||||||
|
Equip,
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Unequip the given slot, removing anything that was inside of it.
|
||||||
|
/// </summary>
|
||||||
|
Unequip
|
||||||
|
}
|
||||||
|
}
|
12
Assets/Scripts/Items/InventoryAction.cs.meta
Normal file
12
Assets/Scripts/Items/InventoryAction.cs.meta
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: d7c9b247469522d429ed7c2f00946978
|
||||||
|
timeCreated: 1494797212
|
||||||
|
licenseType: Free
|
||||||
|
MonoImporter:
|
||||||
|
serializedVersion: 2
|
||||||
|
defaultReferences: []
|
||||||
|
executionOrder: 0
|
||||||
|
icon: {instanceID: 0}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
@ -1,6 +1,7 @@
|
|||||||
using Cyber.Console;
|
using Cyber.Console;
|
||||||
using Cyber.Entities;
|
using Cyber.Entities;
|
||||||
using Cyber.Entities.SyncBases;
|
using Cyber.Entities.SyncBases;
|
||||||
|
using Cyber.Items;
|
||||||
using Cyber.Networking.Messages;
|
using Cyber.Networking.Messages;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
@ -161,6 +162,7 @@ namespace Cyber.Networking.Clientside {
|
|||||||
NetClient.RegisterHandler(PktType.Interact, HandlePacket);
|
NetClient.RegisterHandler(PktType.Interact, HandlePacket);
|
||||||
NetClient.RegisterHandler(PktType.StaticObjectIds, HandlePacket);
|
NetClient.RegisterHandler(PktType.StaticObjectIds, HandlePacket);
|
||||||
NetClient.RegisterHandler(PktType.Disconnect, HandlePacket);
|
NetClient.RegisterHandler(PktType.Disconnect, HandlePacket);
|
||||||
|
NetClient.RegisterHandler(PktType.InventoryAction, HandlePacket);
|
||||||
|
|
||||||
NetClient.RegisterHandler(MsgType.Connect, OnConnected);
|
NetClient.RegisterHandler(MsgType.Connect, OnConnected);
|
||||||
NetClient.RegisterHandler(MsgType.Disconnect, OnDisconnected);
|
NetClient.RegisterHandler(MsgType.Disconnect, OnDisconnected);
|
||||||
@ -265,6 +267,29 @@ namespace Cyber.Networking.Clientside {
|
|||||||
Spawner.Remove(Players[Disconnect.ConnectionID].Character.gameObject);
|
Spawner.Remove(Players[Disconnect.ConnectionID].Character.gameObject);
|
||||||
Players.Remove(Disconnect.ConnectionID);
|
Players.Remove(Disconnect.ConnectionID);
|
||||||
break;
|
break;
|
||||||
|
case (PktType.InventoryAction):
|
||||||
|
InventoryActionPkt InventoryActionPkt = new InventoryActionPkt();
|
||||||
|
InventoryActionPkt.Deserialize(msg.reader);
|
||||||
|
|
||||||
|
SyncBase CurrSyncBase = Spawner.SyncDB.Get(InventoryActionPkt.SyncBaseID);
|
||||||
|
Inventory Inventory;
|
||||||
|
if (CurrSyncBase is Inventory) {
|
||||||
|
Inventory = (Inventory) CurrSyncBase;
|
||||||
|
} else {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (InventoryActionPkt.Action) {
|
||||||
|
case InventoryAction.Equip:
|
||||||
|
Item Item = ItemDB.Singleton.Get(InventoryActionPkt.RelatedInt);
|
||||||
|
Inventory.Equipped.SetSlot(Item.Slot, Item);
|
||||||
|
break;
|
||||||
|
case InventoryAction.Unequip:
|
||||||
|
EquipSlot Slot = (EquipSlot) InventoryActionPkt.RelatedInt;
|
||||||
|
Inventory.Equipped.ClearSlot(Slot);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
Debug.LogError("Received an unknown packet, id: " + msg.msgType);
|
Debug.LogError("Received an unknown packet, id: " + msg.msgType);
|
||||||
Term.Println("Received an unknown packet, id: " + msg.msgType);
|
Term.Println("Received an unknown packet, id: " + msg.msgType);
|
||||||
|
62
Assets/Scripts/Networking/Messages/InventoryActionPkt.cs
Normal file
62
Assets/Scripts/Networking/Messages/InventoryActionPkt.cs
Normal file
@ -0,0 +1,62 @@
|
|||||||
|
|
||||||
|
using Cyber.Items;
|
||||||
|
using UnityEngine.Networking;
|
||||||
|
|
||||||
|
namespace Cyber.Networking.Messages {
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Packet containing an inventory action of a kind.
|
||||||
|
/// </summary>
|
||||||
|
public class InventoryActionPkt : MessageBase {
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// The inventory action.
|
||||||
|
/// </summary>
|
||||||
|
public InventoryAction Action;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// The related int to the <see cref="InventoryAction"/>
|
||||||
|
/// </summary>
|
||||||
|
public int RelatedInt;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// The inventory SyncBaseID this happened in. Only set by server.
|
||||||
|
/// </summary>
|
||||||
|
public int SyncBaseID;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Creates an inventory action packet for sending.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="action">The action done.</param>
|
||||||
|
/// <param name="relatedInt"></param>
|
||||||
|
public InventoryActionPkt(InventoryAction action, int relatedInt) {
|
||||||
|
Action = action;
|
||||||
|
RelatedInt = relatedInt;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Creates an inventory action packet for deserializing.
|
||||||
|
/// </summary>
|
||||||
|
public InventoryActionPkt() {}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Deserializes the <see cref="InventoryActionPkt"/>
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="reader"></param>
|
||||||
|
public override void Deserialize(NetworkReader reader) {
|
||||||
|
Action = (InventoryAction) reader.ReadByte();
|
||||||
|
RelatedInt = reader.ReadInt32();
|
||||||
|
SyncBaseID = reader.ReadInt32();
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Serializes the <see cref="InventoryActionPkt"/>
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="writer"></param>
|
||||||
|
public override void Serialize(NetworkWriter writer) {
|
||||||
|
writer.Write((byte) Action);
|
||||||
|
writer.Write(RelatedInt);
|
||||||
|
writer.Write(SyncBaseID);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,12 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 6f56a2a8158b89a4d8e6040c90dd76da
|
||||||
|
timeCreated: 1494797212
|
||||||
|
licenseType: Free
|
||||||
|
MonoImporter:
|
||||||
|
serializedVersion: 2
|
||||||
|
defaultReferences: []
|
||||||
|
executionOrder: 0
|
||||||
|
icon: {instanceID: 0}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
@ -65,5 +65,10 @@ namespace Cyber.Networking {
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public const short FailedChecksums = 210;
|
public const short FailedChecksums = 210;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Packet containing an inventory action and an int relating somehow to this action.
|
||||||
|
/// </summary>
|
||||||
|
public const short InventoryAction = 211;
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,6 +1,7 @@
|
|||||||
using Cyber.Console;
|
using Cyber.Console;
|
||||||
using Cyber.Entities;
|
using Cyber.Entities;
|
||||||
using Cyber.Entities.SyncBases;
|
using Cyber.Entities.SyncBases;
|
||||||
|
using Cyber.Items;
|
||||||
using Cyber.Networking.Messages;
|
using Cyber.Networking.Messages;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
@ -149,6 +150,7 @@ namespace Cyber.Networking.Serverside {
|
|||||||
NetworkServer.RegisterHandler(PktType.ClientSync, HandlePacket);
|
NetworkServer.RegisterHandler(PktType.ClientSync, HandlePacket);
|
||||||
NetworkServer.RegisterHandler(PktType.Disconnect, HandlePacket);
|
NetworkServer.RegisterHandler(PktType.Disconnect, HandlePacket);
|
||||||
NetworkServer.RegisterHandler(PktType.FailedChecksums, HandlePacket);
|
NetworkServer.RegisterHandler(PktType.FailedChecksums, HandlePacket);
|
||||||
|
NetworkServer.RegisterHandler(PktType.InventoryAction, HandlePacket);
|
||||||
|
|
||||||
NetworkServer.RegisterHandler(MsgType.Connect, OnConnected);
|
NetworkServer.RegisterHandler(MsgType.Connect, OnConnected);
|
||||||
NetworkServer.RegisterHandler(MsgType.Disconnect, OnDisconnected);
|
NetworkServer.RegisterHandler(MsgType.Disconnect, OnDisconnected);
|
||||||
@ -240,6 +242,26 @@ namespace Cyber.Networking.Serverside {
|
|||||||
Syncer.DirtSyncBase(SyncBaseId);
|
Syncer.DirtSyncBase(SyncBaseId);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case PktType.InventoryAction:
|
||||||
|
InventoryActionPkt InventoryActionPkt = new InventoryActionPkt();
|
||||||
|
InventoryActionPkt.Deserialize(msg.reader);
|
||||||
|
|
||||||
|
Inventory CurrInventory = Players[msg.conn.connectionId].Character.GetComponent<Inventory>();
|
||||||
|
InventoryActionPkt.SyncBaseID = CurrInventory.ID;
|
||||||
|
|
||||||
|
switch (InventoryActionPkt.Action) {
|
||||||
|
case InventoryAction.Equip:
|
||||||
|
Item Item = ItemDB.Singleton.Get(InventoryActionPkt.RelatedInt);
|
||||||
|
CurrInventory.Equipped.SetSlot(Item.Slot, Item);
|
||||||
|
break;
|
||||||
|
case InventoryAction.Unequip:
|
||||||
|
EquipSlot Slot = (EquipSlot) InventoryActionPkt.RelatedInt;
|
||||||
|
CurrInventory.Equipped.ClearSlot(Slot);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
SendToAll(PktType.InventoryAction, InventoryActionPkt);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
Debug.LogError("Received an unknown packet, id: " + msg.msgType);
|
Debug.LogError("Received an unknown packet, id: " + msg.msgType);
|
||||||
Term.Println("Received an unknown packet, id: " + msg.msgType);
|
Term.Println("Received an unknown packet, id: " + msg.msgType);
|
||||||
|
Loading…
Reference in New Issue
Block a user