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); }
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); }