コード例 #1
0
        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);
            }
        }
コード例 #2
0
        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);
        }