public void Cmd_RequestDropItem(RequestDropItemMessage data)
        {
            logger.LogVerbose($"[Server] Client requested to drop item with guid {data.itemGuid}", bridge);

            INetworkItemInstance item;
            var error = inputValidator.ValidateDropItem(bridge.identity, data, bridge.player, out item).error;

            if (error == null)
            {
                error = item.Server_Drop(bridge.player, data.worldPosition).error;
            }

            HandleError(error);
        }
Esempio n. 2
0
        public Result <bool> ValidateDropItem(NetworkIdentity identity, RequestDropItemMessage data, Player player, out INetworkItemInstance outItem)
        {
            outItem = null;
            if (CheckGuidBytes(data.itemGuid.bytes) == false)
            {
                return(Failed());
            }

            if (CheckItemPermission(identity, data.itemGuid, ReadWritePermission.ReadWrite, out outItem) == false)
            {
                return(Failed());
            }

            if (Vector3.Distance(data.worldPosition, player.transform.position) > player.GetComponent <IDropHandler>().maxDropDistance)
            {
                logger.LogVerbose("[Server] player suggested position for drop is too far away from player; Forcing drop position", this);
                data.worldPosition = player.transform.position + (player.transform.forward * 3f); // TODO: Use drop handler.
            }

            return(true);
        }