private async Task <MethodResult> UseIncense(ItemId item = ItemId.ItemIncenseOrdinary) { if (!_client.LoggedIn) { MethodResult result = await AcLogin(); if (!result.Success) { return(result); } } if (Items.FirstOrDefault(x => x.ItemId == item).Count == 0) { return(new MethodResult()); } var response = await _client.ClientSession.RpcClient.SendRemoteProcedureCallAsync(new Request { RequestType = RequestType.UseIncense, RequestMessage = new UseIncenseMessage { IncenseType = item }.ToByteString() }); if (response == null) { return(new MethodResult()); } UseIncenseResponse useIncenseResponse = UseIncenseResponse.Parser.ParseFrom(response); switch (useIncenseResponse.Result) { case UseIncenseResponse.Types.Result.IncenseAlreadyActive: return(new MethodResult()); case UseIncenseResponse.Types.Result.LocationUnset: return(new MethodResult()); case UseIncenseResponse.Types.Result.Success: LogCaller(new LoggerEventArgs(String.Format("Used incense {0}.", item), LoggerTypes.Success)); return(new MethodResult { Success = true }); case UseIncenseResponse.Types.Result.NoneInInventory: return(new MethodResult()); case UseIncenseResponse.Types.Result.Unknown: return(new MethodResult()); } return(new MethodResult()); }
/// <summary> /// Provides a safe way to invoke the <see cref="UseIncenseReceived" /> event. /// </summary> /// <param name="value"></param> public void RaiseUseIncenseReceived(UseIncenseResponse value) => UseIncenseReceived?.Invoke(this, value);