public void Cmd_RequestUseItem(RequestUseItemMessage data) { logger.LogVerbose($"[Server] Client requested to use item with guid {data.itemGuid} {data.useAmount}x", bridge); INetworkItemInstance item; var error = inputValidator.ValidateUseItem(bridge.identity, data, out item).error; if (error == null) { var ctx = new ItemContext { useAmount = data.useAmount, targetIndex = data.targetIndex, }; error = item.Server_Use(bridge.player, ctx).error; if (error == null) { bridge.TargetRpc_NotifyItemUsed(bridge.connectionToClient, new ItemUsedMessage() { itemID = item.ID, amountUsed = data.useAmount, targetIndex = data.targetIndex }); } } HandleError(error); }
public Result <bool> ValidateUseItem(NetworkIdentity identity, RequestUseItemMessage data, 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()); } // TODO: Consider creating a distance check to Use items directly from the world, rather than from a collection (requires permission changes on items). if (outItem.collectionEntry.amount < data.useAmount) { return(Failed()); } return(true); }