- 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