public void DropRecentItem() { if (!NetworkServer.active) { var message = new DropRecentItemMessage(); _cmdDropItem.Invoke(message); } else { var player = PlayerCharacterMasterController.instances[0]; var inventory = player.master.inventory; if (!_pickups.TryGetValue(inventory, out var pickup)) { return; } if (pickup.ItemIndex == ItemIndex.None || Time.time - pickup.PickupTime > 10) { return; } // Server, execute command var characterBody = inventory.GetComponent <CharacterMaster>().GetBody(); var charTransform = characterBody.transform; var pickupIndex = PickupCatalog.FindPickupIndex(pickup.ItemIndex); DropItem(charTransform, inventory, pickupIndex); } }
private void DoDropItem(NetworkUser user, DropRecentItemMessage message) { var master = user.master; if (master == null) { return; } var body = master.GetBody(); if (body == null) { Debug.LogError("Cannot find network user's body!"); return; } var inventory = master.inventory; var charTransform = body.transform; if (!_pickups.TryGetValue(inventory, out var pickup)) { Debug.LogError("Received drop item request prior to any pickup"); return; } if (pickup.ItemIndex == ItemIndex.None || Time.time - pickup.PickupTime > 10) { Debug.LogError("Received drop item request with no valid recent pickup"); return; } Debug.Log($"Dropping item \'{pickup.ItemIndex}\' for player \'{master.name}\'"); var pickupIndex = PickupCatalog.FindPickupIndex(pickup.ItemIndex); DropItem(charTransform, inventory, pickupIndex); }