public async UniTaskVoid HandleRequestClaimMailItems(RequestHandlerData requestHandler, RequestClaimMailItemsMessage request, RequestProceedResultDelegate <ResponseClaimMailItemsMessage> result) { #if UNITY_STANDALONE && !CLIENT_BUILD IPlayerCharacterData playerCharacter; if (GameInstance.ServerUserHandlers.TryGetPlayerCharacter(requestHandler.ConnectionId, out playerCharacter)) { UITextKeys message = UITextKeys.NONE; GetMailResp mailResp = await DbServiceClient.GetMailAsync(new GetMailReq() { MailId = request.id, UserId = playerCharacter.UserId, }); Mail mail = mailResp.Mail; if (mail.IsClaim) { message = UITextKeys.UI_ERROR_MAIL_CLAIM_ALREADY_CLAIMED; } else if (mail.IsDelete) { message = UITextKeys.UI_ERROR_CANNOT_ACCESS_STORAGE; } else { if (mail.Items.Count > 0) { List <CharacterItem> increasingItems = new List <CharacterItem>(); foreach (KeyValuePair <int, short> mailItem in mail.Items) { increasingItems.Add(CharacterItem.Create(mailItem.Key, amount: mailItem.Value)); } if (playerCharacter.IncreasingItemsWillOverwhelming(increasingItems)) { message = UITextKeys.UI_ERROR_WILL_OVERWHELMING; } else { playerCharacter.IncreaseItems(increasingItems); } } if (message == UITextKeys.NONE && mail.Currencies.Count > 0) { List <CurrencyAmount> increasingCurrencies = new List <CurrencyAmount>(); Currency tempCurrency; foreach (KeyValuePair <int, int> mailCurrency in mail.Currencies) { if (!GameInstance.Currencies.TryGetValue(mailCurrency.Key, out tempCurrency)) { continue; } increasingCurrencies.Add(new CurrencyAmount() { currency = tempCurrency, amount = mailCurrency.Value }); } playerCharacter.IncreaseCurrencies(increasingCurrencies); } if (message == UITextKeys.NONE && mail.Gold > 0) { playerCharacter.Gold = playerCharacter.Gold.Increase(mail.Gold); } } if (message != UITextKeys.NONE) { result.Invoke(AckResponseCode.Error, new ResponseClaimMailItemsMessage() { message = message, }); return; } UpdateClaimMailItemsStateResp resp = await DbServiceClient.UpdateClaimMailItemsStateAsync(new UpdateClaimMailItemsStateReq() { MailId = request.id, UserId = playerCharacter.UserId, }); message = resp.Error; result.Invoke( message == UITextKeys.NONE ? AckResponseCode.Success : AckResponseCode.Error, new ResponseClaimMailItemsMessage() { message = message, mail = resp.Mail, }); } else { result.Invoke(AckResponseCode.Error, new ResponseClaimMailItemsMessage() { message = UITextKeys.UI_ERROR_SERVICE_NOT_AVAILABLE, }); } #endif }
public async UniTaskVoid HandleRequestClaimMailItems(RequestHandlerData requestHandler, RequestClaimMailItemsMessage request, RequestProceedResultDelegate <ResponseClaimMailItemsMessage> result) { #if UNITY_STANDALONE && !CLIENT_BUILD IPlayerCharacterData playerCharacter; if (!GameInstance.ServerUserHandlers.TryGetPlayerCharacter(requestHandler.ConnectionId, out playerCharacter)) { result.Invoke(AckResponseCode.Error, new ResponseClaimMailItemsMessage() { message = UITextKeys.UI_ERROR_NOT_LOGGED_IN, }); return; } UITextKeys message = await ClaimMailItems(request.id, playerCharacter); if (message != UITextKeys.NONE) { result.Invoke(AckResponseCode.Error, new ResponseClaimMailItemsMessage() { message = message, }); return; } result.Invoke(AckResponseCode.Success, new ResponseClaimMailItemsMessage()); #endif }