private async UniTask <UITextKeys> ClaimMailItems(string mailId, IPlayerCharacterData playerCharacter) { #if UNITY_STANDALONE && !CLIENT_BUILD AsyncResponseData <GetMailResp> mailResp = await DbServiceClient.GetMailAsync(new GetMailReq() { MailId = mailId, UserId = playerCharacter.UserId, }); if (!mailResp.IsSuccess) { return(UITextKeys.UI_ERROR_INTERNAL_SERVER_ERROR); } Mail mail = mailResp.Response.Mail; if (mail.IsClaim) { return(UITextKeys.UI_ERROR_MAIL_CLAIM_ALREADY_CLAIMED); } else if (mail.IsDelete) { return(UITextKeys.UI_ERROR_MAIL_CLAIM_NOT_ALLOWED); } else { if (mail.Items.Count > 0) { if (playerCharacter.IncreasingItemsWillOverwhelming(mail.Items)) { return(UITextKeys.UI_ERROR_WILL_OVERWHELMING); } else { playerCharacter.IncreaseItems(mail.Items); } } if (mail.Currencies.Count > 0) { playerCharacter.IncreaseCurrencies(mail.Currencies); } if (mail.Gold > 0) { playerCharacter.Gold = playerCharacter.Gold.Increase(mail.Gold); } if (mail.Cash > 0) { AsyncResponseData <CashResp> changeCashResp = await DbServiceClient.ChangeCashAsync(new ChangeCashReq() { UserId = playerCharacter.UserId, ChangeAmount = -mail.Cash }); if (!changeCashResp.IsSuccess) { return(UITextKeys.UI_ERROR_INTERNAL_SERVER_ERROR); } playerCharacter.UserCash = changeCashResp.Response.Cash; } } AsyncResponseData <UpdateClaimMailItemsStateResp> resp = await DbServiceClient.UpdateClaimMailItemsStateAsync(new UpdateClaimMailItemsStateReq() { MailId = mailId, UserId = playerCharacter.UserId, }); return(UITextKeys.NONE); #else return(UITextKeys.UI_ERROR_SERVICE_NOT_AVAILABLE); #endif }