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.Entities.SyncBases;
|
||||
using Cyber.Items;
|
||||
using Cyber.Networking.Clientside;
|
||||
using Cyber.Networking;
|
||||
using Cyber.Networking.Messages;
|
||||
|
||||
namespace Cyber.Controls {
|
||||
|
||||
@ -142,8 +145,10 @@ namespace Cyber.Controls {
|
||||
Item Equipped = Inventory.Equipped.GetItem(SelectedItem.Slot);
|
||||
if (Equipped != null && Equipped.ID == SelectedItem.ID) {
|
||||
Inventory.Equipped.ClearSlot(SelectedItem.Slot);
|
||||
Client.Send(PktType.InventoryAction, new InventoryActionPkt(InventoryAction.Unequip, (int) SelectedItem.Slot));
|
||||
} else {
|
||||
Inventory.Equipped.SetSlot(SelectedItem.Slot, SelectedItem);
|
||||
Client.Send(PktType.InventoryAction, new InventoryActionPkt(InventoryAction.Equip, SelectedItem.ID));
|
||||
}
|
||||
}
|
||||
ItemGridSelectedIndex = CurrentIndex;
|
||||
|
@ -66,7 +66,6 @@ namespace Cyber.Entities.SyncBases {
|
||||
/// </summary>
|
||||
/// <param name="reader"></param>
|
||||
public override void Deserialize(NetworkReader reader) {
|
||||
Debug.Log("Deserializing inventory!");
|
||||
|
||||
byte[][] ByteArray = new byte[4][];
|
||||
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.Entities;
|
||||
using Cyber.Entities.SyncBases;
|
||||
using Cyber.Items;
|
||||
using Cyber.Networking.Messages;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
@ -161,6 +162,7 @@ namespace Cyber.Networking.Clientside {
|
||||
NetClient.RegisterHandler(PktType.Interact, HandlePacket);
|
||||
NetClient.RegisterHandler(PktType.StaticObjectIds, HandlePacket);
|
||||
NetClient.RegisterHandler(PktType.Disconnect, HandlePacket);
|
||||
NetClient.RegisterHandler(PktType.InventoryAction, HandlePacket);
|
||||
|
||||
NetClient.RegisterHandler(MsgType.Connect, OnConnected);
|
||||
NetClient.RegisterHandler(MsgType.Disconnect, OnDisconnected);
|
||||
@ -265,6 +267,29 @@ namespace Cyber.Networking.Clientside {
|
||||
Spawner.Remove(Players[Disconnect.ConnectionID].Character.gameObject);
|
||||
Players.Remove(Disconnect.ConnectionID);
|
||||
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:
|
||||
Debug.LogError("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>
|
||||
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.Entities;
|
||||
using Cyber.Entities.SyncBases;
|
||||
using Cyber.Items;
|
||||
using Cyber.Networking.Messages;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
@ -149,6 +150,7 @@ namespace Cyber.Networking.Serverside {
|
||||
NetworkServer.RegisterHandler(PktType.ClientSync, HandlePacket);
|
||||
NetworkServer.RegisterHandler(PktType.Disconnect, HandlePacket);
|
||||
NetworkServer.RegisterHandler(PktType.FailedChecksums, HandlePacket);
|
||||
NetworkServer.RegisterHandler(PktType.InventoryAction, HandlePacket);
|
||||
|
||||
NetworkServer.RegisterHandler(MsgType.Connect, OnConnected);
|
||||
NetworkServer.RegisterHandler(MsgType.Disconnect, OnDisconnected);
|
||||
@ -240,6 +242,26 @@ namespace Cyber.Networking.Serverside {
|
||||
Syncer.DirtSyncBase(SyncBaseId);
|
||||
}
|
||||
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:
|
||||
Debug.LogError("Received an unknown packet, id: " + msg.msgType);
|
||||
Term.Println("Received an unknown packet, id: " + msg.msgType);
|
||||
|
Loading…
Reference in New Issue
Block a user