- Home /
SyncListStruct Not Syncing to Rest of Server!
This code is designed to Sync a list of Items in a chest to the rest of the server. It was working, however, if a player joins after an Item was added to the Chest, they do not see it. Most recently I have tried to get it to work by: Having a Client add an Item to the servers copy of the List, then having the server Sync this list to every client. However, when the RpcSyncItems Function is called, I am given a ArgumentOutOfRangeException at the print(items[i]) function. (A current PlaceHolder function until I figure out the issue) I believe it is trying to read from the servers copy of the items, however, despite the CmdAddByIndex attempting to modify this list, it remains null. This is the Code i have been using:
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using UnityEngine.Networking;
public class Chest : NetworkBehaviour {
public int slotX;
public int slotY;
[SyncVar]
public bool isInUse;
public struct ItemStruct
{
public int id;
int ammount;
int data;
public ItemStruct(ItemStack item){
this.id = item.itemId;
this.ammount = item.ammount;
this.data = item.data;
}
public ItemStack grabItem(){
ItemStack item = new ItemStack (ItemHandler.getItemById (id));
item.ammount = ammount;
item.data = data;
return item;
}
}
public class SyncListItemStruct : SyncListStruct<ItemStruct>
{
}
[SyncVar]
public SyncListItemStruct items = new SyncListItemStruct();
public int startingID = 0;
void Start(){
slotX = 5;
slotY = 5;
CmdSetupEmptyItems ();
}
int lol = 0;
void Update(){
if (lol == 0) {
lol++;
return;
}
CmdSyncServerItems ();
}
[Command]
private void CmdSetupEmptyItems(){
for (int i = 0; i < slotX*slotY; i++) {
items.Add(new ItemStruct (new ItemStack (ItemHandler.nullItem)));
}
}
[Command]
private void CmdSyncServerItems(){
RpcSyncItems (this.items);
}
[ClientRpc]
private void RpcSyncItems(SyncListItemStruct items){
for (int i = 0; i < slotX * slotY; i++) {
print (items [i].id);
}
}
[Command]
public void CmdAddByIndex(int index, ItemStack item){
ItemStruct itemStruct = new ItemStruct(item);
items [index] = itemStruct;
}
private void removeByIndex(int index){
items [index] = new ItemStruct(new ItemStack (ItemHandler.nullItem));
}
public ItemStack getByIndex(int index){
return items[index].grabItem();
}
}
Your answer
Follow this Question
Related Questions
A node in a childnode? 1 Answer
Characters gun dosent activate on network? 1 Answer
Trying to send command for object without authority. - change color of object from client 0 Answers
UNET: Flicker when a client moves a non-player object using another non-player-object 1 Answer
"Trying to send command for object without authority" warning but the object is the localPlayer 1 Answer