Ejemplo n.º 1
0
        public async Task <IActionResult> GetCharacterAppearance([FromRoute(Name = "id")] int characterId, [FromServices][NotNull] ICharacterAppearanceRepository characterAppearanceRepository)
        {
            if (!await characterAppearanceRepository.ContainsAsync(characterId))
            {
                return(BuildFailedResponseModel(CharacterDataQueryReponseCode.CharacterNotFound));
            }

            CharacterAppearanceModel appearanceModel = await characterAppearanceRepository.RetrieveAsync(characterId);

            return(BuildSuccessfulResponseModel(new CharacterAppearanceResponse((int)appearanceModel.AvatarModelId)));
        }
Ejemplo n.º 2
0
        //[AuthorizeJwt(GuardianApplicationRole.ZoneServer)] //TODO: Eventually we'll need to auth these zoneservers.
        public async Task <IActionResult> UpdatePlayerAvatar([FromBody][NotNull] ZoneServerAvatarPedestalInteractionCharacterRequest requestModel,
                                                             [FromServices][NotNull] IGameObjectBehaviourDataServiceClient <AvatarPedestalInstanceModel> avatarPedestalModel,
                                                             [FromServices][NotNull] ICharacterAppearanceRepository characterAppearanceRepository)
        {
            if (avatarPedestalModel == null)
            {
                throw new ArgumentNullException(nameof(avatarPedestalModel));
            }
            if (characterAppearanceRepository == null)
            {
                throw new ArgumentNullException(nameof(characterAppearanceRepository));
            }

            //If this fails we have problems that can be mitigated.
            CharacterAppearanceModel appearanceModel = await characterAppearanceRepository.RetrieveAsync(requestModel.CharacterGuid.EntityId);

            try
            {
                var behaviourInstanceResponse = await avatarPedestalModel.GetBehaviourInstance(requestModel.AvatarPedestalId);

                if (behaviourInstanceResponse.isSuccessful)
                {
                    //we can properly change.
                    appearanceModel.AvatarModelId = behaviourInstanceResponse.Result.AvatarModelId;
                    await characterAppearanceRepository.UpdateAsync(requestModel.CharacterGuid.EntityId, appearanceModel);

                    //return BadRequest($"Cannot query data for Avatar Pedestal: {requestModel.AvatarPedestalId} Reason: {behaviourInstanceResponse.ResultCode.ToString()}");
                }
            }
            catch (Exception e)
            {
                if (Logger.IsEnabled(LogLevel.Error))
                {
                    Logger.LogError($"Encountered exception: {e.Message} in {nameof(UpdatePlayerAvatar)}.\n\nStack: {e.StackTrace}");
                }
            }

            //No matter what we should return the current.
            return(Json(new AvatarPedestalChangeResponse((int)appearanceModel.AvatarModelId)));
        }