public void Drop(InventoryItemData item, string prefab) { if (Hands) { // Drop the current item. Player.Local.Holding.Item.RequestDataUpdate(); if (Player.Local.Holding.Item.Data != null) { Player.Local.Holding.Item.Data.Update("Quick Slot", 0); } Player.Local.Holding.CmdDrop(true, false, Player.Local.gameObject, Player.Local.Holding.Item.Data.Serialize()); } else { // Remove from slot and drop on ground. BodyGear g = Player.Local.GearMap[Slot]; if (g.GetGearItem() == null) { Debug.LogError("Cannot drop, looks like the UI and world are desynced!"); return; } g.GetGearItem().Item.RequestDataUpdate(); ItemData data = g.GetGearItem().Item.Data; Player.Local.NetUtils.CmdDropGear(Slot, data.Serialize()); } }
public void CmdDropGear(string slot, string data) { BodyGear g = GetPlayer().GearMap[slot]; if (g.GetGearItem() != null) { Item old = g.GetGearItem().Item; g.SetItem(GetPlayer().gameObject, null, null, false); Item instance = Item.NewInstance(old.Prefab, GetPlayer().transform.position, ItemData.TryDeserialize(data)); NetworkServer.Spawn(instance.gameObject); } }
public GearSaveData(BodyGear gearSlot) { Slot = gearSlot.Name; GearItem item = gearSlot.GetGearItem(); if (item != null) { Prefab = item.Item.Prefab; item.Item.RequestDataUpdate(); Data = item.Item.Data; } else { Prefab = null; Data = null; } }
public static void SaveGear(string reality, Player player) { if (string.IsNullOrEmpty(reality)) { Debug.LogError("Reality is null or em empty, cannot save gear items."); return; } if (player == null) { Debug.LogError("Null player, cannot perform IO operation for gear items."); return; } // Get all the slots, and then get save data from each slot. List <GearSaveData> saveData = new List <GearSaveData>(); Debug.Log("Saving " + (player.GearMap.Count - 1) + " gear slots..."); foreach (var slotName in player.GearMap.Keys) { if (slotName == "Hands") { continue; } BodyGear bg = player.GearMap[slotName]; GearSaveData sd = bg.GetSaveData(); if (sd == null) { Debug.LogError("Gear slot '" + slotName + "' gave null save data!"); continue; } saveData.Add(sd); } // Make array. GearSaveData[] array = saveData.ToArray(); saveData.Clear(); // Get file path. string path = OutputUtils.RealitySaveDirectory + reality + OutputUtils.GearItemSaveFile; // Save to file. OutputUtils.ObjectToFile(array, path); }