public async Task <IActionResult> CreateCharacter([FromBody] CreateCharacterRequest request)
        {
            var userId = Guid.Parse(User?.Identity?.Name ?? "");

            _logger.LogInformation("Try to create character {firstName} {lastName} for user {User}",
                                   request.FirstName, request.LastName, userId);
            try
            {
                var character = await _mediator.Send(new CreateCharacterCommand(userId,
                                                                                request.FirstName, request.LastName, request.Sex));

                _logger.LogInformation("Character {CharacterId} created", character.Id);
                return(Created(string.Empty, character));
            }
            catch (BusinessRuleValidationException e)
            {
                if (e.BrokenRule.GetType() == typeof(UserCanOnlyHaveOneCharacter))
                {
                    var existingCharacter = await _mediator.Send(new GetUserCharacterQuery(userId));

                    _logger.LogWarning("User {User} already has a character {FirstName} {LastName} ({CharacterId})",
                                       userId, existingCharacter?.FirstName, existingCharacter?.LastName, existingCharacter?.Id);
                    return(Conflict(existingCharacter));
                }

                throw;
            }
        }
        public async Task CreateCharacterAsync_CreateANewCharacterInDatabase_SettingOwnerToCurrentUserId()
        {
            const int userId = 10;
            var       createCharacterRequest = new CreateCharacterRequest {
                Name = "some-name"
            };
            var naheulbookExecutionContext = new NaheulbookExecutionContext {
                UserId = userId
            };
            var createdCharacter = new Character();
            var initialInventory = new List <Item>();

            _characterFactory.CreateCharacter(createCharacterRequest)
            .Returns(createdCharacter);
            _itemUtil.CreateInitialPlayerInventoryAsync(createCharacterRequest.Money)
            .Returns(initialInventory);

            var actualCharacter = await _service.CreateCharacterAsync(naheulbookExecutionContext, createCharacterRequest);

            Received.InOrder(() =>
            {
                _unitOfWorkFactory.GetUnitOfWork().Characters.Add(createdCharacter);
                _unitOfWorkFactory.GetUnitOfWork().SaveChangesAsync();
            });

            actualCharacter.OwnerId.Should().Be(userId);
            createdCharacter.Should().BeSameAs(actualCharacter);
            createdCharacter.Items.Should().BeSameAs(initialInventory);
        }
Beispiel #3
0
        public Character Create(CreateCharacterRequest character)
        {
            var CreatedCharacter = _mapper.Map <Character>(character);

            _chars.Create(CreatedCharacter);

            return(CreatedCharacter);
        }
        public ActionResult InsertCharacter([FromBody]CreateCharacterRequest request)
        {
            request.Validate();

            if (request.Invalid)
                return BadRequest($"Favor informar valores válidos para: {ErrorHelper.GetErrors(request)}");

            _characterService.InsertCharacter(request.Name, request.Role, request.Patronus, request.House);
            
            return Ok();
        }
        public async Task CreateAsync(CreateCharacterRequest request)
        {
            var entity = new CharacterEntity
            {
                PlayerFullName      = request.PlayerFullName,
                CharacterFullName   = request.CharacterFullName,
                AccruedDowntimeDays = 0
            };

            await(await _container).CreateItemAsync(await _entityMutator.CreateMetadataAsync(entity, request.SharedWith));
        }
        /// <summary>
        /// Handles the creation of a character.
        /// </summary>
        /// <param name="session">The session instance</param>
        /// <param name="length">The length of the packet</param>
        /// <param name="opcode">The opcode of the incoming packet</param>
        /// <param name="requestId"></param>
        /// <param name="data">The packet data</param>
        /// <returns></returns>
        public override bool Handle(ServerSession session, int length, int opcode, int requestId, byte[] data)
        {
            var request = new CreateCharacterRequest();

            int serverId = data[0];

            int userId = (data[1] & 0xFF) + ((data[2] & 0xFF) << 8) + ((data[3] & 0xFF) << 16) + ((data[4] & 0xFF) << 24);

            request = Serializer.Deserialize <CreateCharacterRequest>(data.Skip(5).ToArray());

            using (SqlConnection connection = new DatabaseConnector().GetConnection("origin_gamedata"))
            {
                var cmd = new SqlCommand("create_character", connection);
                cmd.CommandType = System.Data.CommandType.StoredProcedure;
                cmd.Parameters.AddWithValue(":server_id", serverId);
                cmd.Parameters.AddWithValue(":user_id", userId);
                cmd.Parameters.AddWithValue(":character_name", Encoding.UTF8.GetString(request.name).TrimEnd('\0'));
                cmd.Parameters.AddWithValue(":race", request.race);
                cmd.Parameters.AddWithValue(":mode", request.mode);
                cmd.Parameters.AddWithValue(":profession", request.profession);
                cmd.Parameters.AddWithValue(":hair", request.hair);
                cmd.Parameters.AddWithValue(":face", request.face);
                cmd.Parameters.AddWithValue(":height", request.height);
                cmd.Parameters.AddWithValue(":sex", request.sex);


                connection.Open();

                // Execute the prepared statement
                var reader = cmd.ExecuteReader();

                // Loop through the results
                while (reader.Read())
                {
                    var bldr = new PacketBuilder(opcode);

                    bldr.WriteInt(requestId);

                    // Write the result
                    bldr.WriteByte((byte)reader.GetInt32(0));

                    session.Write(bldr.ToPacket());
                }
                reader.Close();
            }


            return(true);
        }
Beispiel #7
0
        public IActionResult CreateCharacter(CreateCharacterRequest request)
        {
            if (_charService.NameExists(request.Name))
            {
                return(UnprocessableEntity(new {
                    Message = $"There's already a character with the name ({request.Name})"
                }));
            }

            var createdChar = _charService.Create(request);

            return(Ok(new {
                Message = "Character created successfully!",
                Character = _mapper.Map <CharacterResponse>(createdChar)
            }));
        }
Beispiel #8
0
        public async Task PostCreateCharacterAsync_ShouldCreateCharacterWithCharacterService_ThenReturnCharacterResponse()
        {
            var createCharacterRequest = new CreateCharacterRequest();
            var createdCharacter       = new Character();
            var characterResponse      = new CreateCharacterResponse();

            _characterService.CreateCharacterAsync(_executionContext, createCharacterRequest)
            .Returns(createdCharacter);
            _mapper.Map <CreateCharacterResponse>(createdCharacter)
            .Returns(characterResponse);

            var result = await _controller.PostCreateCharacterAsync(_executionContext, createCharacterRequest);

            result.Value.Should().BeSameAs(characterResponse);
            result.StatusCode.Should().Be(StatusCodes.Status201Created);
        }
        public async Task CreateCharacter(CreateCharacterRequest request)
        {
            var identityView = IdentityView.FromObjectId(_dbContext, (SHIdentity.FromPrincipal(Context.User)).ObjectId);

            if (identityView.Identity == null)
            {
                return;
            }
            if (!Context.User.Identity.IsAuthenticated)
            {
                return;
            }

            if (request == null || String.IsNullOrEmpty(request.Name))
            {
                return;
            }

            if (_dbContext.Mob.Count(e => e.AccountId == identityView.Identity.Id) > 2)
            {
                return;
            }

            var mob = new Mob()
            {
                MobClassId = request.MobClassId,
                MobRaceId  = request.MobRaceId,
                AccountId  = identityView.Identity.Id,
                Name       = request.Name,
                ZoneId     = 1
            };

            if (_dbContext.Mob.Any(e => e.AccountId == identityView.Identity.Id && e.Name.Equals(mob.Name)))
            {
                return;
            }

            mob = _dbContext.Mob.Add(mob).Entity;
            _dbContext.SaveChanges();
            var response = new CreateCharacterResponse();

            response.Mob = mob;

            await Clients.Client(Context.ConnectionId).SendAsync("CreateCharacterResponse", "", JsonConvert.SerializeObject(response));
        }
        public async Task <CreatedActionResult <CreateCharacterResponse> > PostCreateCharacterAsync(
            [FromServices] NaheulbookExecutionContext executionContext,
            CreateCharacterRequest request
            )
        {
            try
            {
                var character = await _characterService.CreateCharacterAsync(executionContext, request);

                return(_mapper.Map <CreateCharacterResponse>(character));
            }
            catch (ForbiddenAccessException ex)
            {
                throw new HttpErrorException(StatusCodes.Status403Forbidden, ex);
            }
            catch (GroupNotFoundException ex)
            {
                throw new HttpErrorException(StatusCodes.Status400BadRequest, ex);
            }
        }
Beispiel #11
0
        /// <summary>
        /// Handles an incoming character creation request.
        /// </summary>
        /// <param name="session">The session instance</param>
        /// <param name="length">The length of the packet</param>
        /// <param name="opcode">The opcode of the incoming packet</param>
        /// <param name="data">The packet data</param>
        /// <returns></returns>
        public override bool Handle(ServerSession session, int length, int opcode, byte[] data)
        {
            var request = new CreateCharacterRequest();

            request.unknown    = data[0];
            request.race       = data[1];
            request.mode       = data[2];
            request.hair       = data[3];
            request.face       = data[4];
            request.height     = data[5];
            request.profession = data[6];
            request.sex        = data[7];
            Array.Copy(data, 8, request.name, 0, length - 8);

            var player = GameService.GetPlayerForIndex(session.GetGameIndex());

            GameService.PushTask(new CreateCharacterTask(player, request));

            return(true);
        }
        public void CreateCharacterAsync_WhenGroupIdIsGiven_CheckIsGroupOwner()
        {
            const int groupId = 8;
            var       createCharacterRequest = new CreateCharacterRequest {
                Name = "some-name", GroupId = groupId
            };
            var naheulbookExecutionContext = new NaheulbookExecutionContext();
            var createdCharacter           = new Character();
            var group = new Group();

            _characterFactory.CreateCharacter(createCharacterRequest)
            .Returns(createdCharacter);
            _unitOfWorkFactory.GetUnitOfWork().Groups.GetAsync(groupId)
            .Returns(group);
            _authorizationUtil.When(x => x.EnsureIsGroupOwner(naheulbookExecutionContext, group))
            .Throw(new ForbiddenAccessException());

            Func <Task> act = () => _service.CreateCharacterAsync(naheulbookExecutionContext, createCharacterRequest);

            act.Should().Throw <ForbiddenAccessException>();
        }
        public async Task CreateCharacterAsync_WhenGroupIdIsGiven_PutCharacterInGroup()
        {
            const int userId  = 10;
            const int groupId = 8;
            var       createCharacterRequest = new CreateCharacterRequest {
                Name = "some-name", GroupId = groupId
            };
            var naheulbookExecutionContext = new NaheulbookExecutionContext {
                UserId = userId
            };
            var createdCharacter = new Character();
            var group            = new Group();

            _characterFactory.CreateCharacter(createCharacterRequest)
            .Returns(createdCharacter);
            _itemUtil.CreateInitialPlayerInventoryAsync(createCharacterRequest.Money)
            .Returns(new List <Item>());
            _unitOfWorkFactory.GetUnitOfWork().Groups.GetAsync(groupId)
            .Returns(group);

            var actualCharacter = await _service.CreateCharacterAsync(naheulbookExecutionContext, createCharacterRequest);

            actualCharacter.Group.Should().BeSameAs(group);
        }
Beispiel #14
0
 public async Task CreateAsync(CreateCharacterRequest request) =>
 await _service.CreateAsync(request);
Beispiel #15
0
 public async Task <IActionResult> CreateCharacter([FromBody] CreateCharacterRequest request)
 {
     request.SetData(_usersRepository, _customerGuid);
     return(await request.Handle());
 }
Beispiel #16
0
 /// <summary>
 /// The constructor for this task, which will define the player instance
 /// to operate on.
 /// </summary>
 /// <param name="player">The player instance</param>
 public CreateCharacterTask(Player player, CreateCharacterRequest request)
 {
     _player  = player;
     _request = request;
 }
Beispiel #17
0
 public async Task CreateAsync(CreateCharacterRequest request) =>
 await _writeRepository.CreateAsync(request);
Beispiel #18
0
        public static void HandlePacket(byte[] Data, byte Module, PacketType Type, UInt32 Unk01, TORGameClient Client)
        {
            // TODO: Check for packet drop

            IPacket     iPacket = null;
            ClientState State   = Client.State;

            switch (State)
            {
            case ClientState.CONNECTING:
                switch (Type)
                {
                case PacketType.ConnectionHandshake:
                    iPacket = new ConnectionHandshake();
                    break;

                default:
                    Log.Write(LogLevel.Warning, "Received Unknown Packet [{0:X}] on State '{1}'\n{2}", Type, State.ToString(), Data.ToHEX());
                    break;
                }
                break;

            case ClientState.CONNECTED:
                switch (Type)
                {
                case PacketType.ObjectReply:
                    iPacket = new ObjectReply();
                    break;

                case PacketType.Ping:
                    iPacket = new Ping();
                    break;

                default:
                    Log.Write(LogLevel.Warning, "Received Unknown Packet [{0:X}] on State '{1}'\n{2}", Type, State.ToString(), Data.ToHEX());
                    break;
                }
                break;

            case ClientState.AUTHED:
                switch (Type)
                {
                case PacketType.CreateCharacterRequest:
                    Log.Write(LogLevel.Warning, "\n{0}", Data.ToHEX());
                    iPacket = new CreateCharacterRequest();
                    break;

                case PacketType.ObjectReply:
                    iPacket = new ObjectReply();
                    break;

                case PacketType.ServiceRequest:
                    iPacket = new ServiceRequest();
                    break;

                case PacketType.RequestClose:
                    iPacket = new RequestClose();
                    break;

                case PacketType.TimeRequesterRequest:
                    iPacket = new TimeRequesterRequest();
                    break;

                case PacketType.HackNotifyData:
                    iPacket = new HackNotifyData();
                    break;

                case PacketType.CMsgC26464A9:
                    iPacket = new CMsgC26464A9();
                    break;

                case PacketType.CMsg7CB9A193:
                    iPacket = new CMsg7CB9A193();
                    break;

                case PacketType.ModulesList:
                    iPacket = new ModulesList();
                    break;

                case PacketType.AreaModulesList:
                    iPacket = new AreaModulesList();
                    break;

                case PacketType.SetTrackingInfo:
                    iPacket = new SetTrackingInfo();
                    break;

                case PacketType.CharacterListRequest:
                    iPacket = new CharacterListRequest();
                    break;

                case PacketType.SelectCharacterRequest:
                    iPacket = new SelectCharacterRequest();
                    break;

                case PacketType.Ping:
                    iPacket = new Ping();
                    break;

                default:
                    Log.Write(LogLevel.Warning, "Received Unknown Packet [{0:X}] on State '{1}'\n{2}", Type, State.ToString(), Data.ToHEX());
                    break;
                }
                break;

            case ClientState.IN_GAME:
                switch (Type)
                {
                case PacketType.RequestClose:
                    iPacket = new RequestClose();
                    break;

                case PacketType.SetTrackingInfo:
                    iPacket = new SetTrackingInfo();
                    break;

                case PacketType.Ping:
                    iPacket = new Ping();
                    break;

                // TODO: Implement Game Packets
                default:
                    Log.Write(LogLevel.Warning, "Received Unknown Packet [{0:X}] on State '{1}'\n{2}", Type, State.ToString(), Data.ToHEX());
                    break;
                }
                break;
            }

            if (iPacket != null)
            {
                iPacket.SetClient(Client);
                iPacket.SetBuffers(Data);
                //Log.Write(LogLevel.EDebug, "{0}", Data.ToHEX());
                iPacket.Read();
                iPacket.Run();
            }
        }
Beispiel #19
0
 public async Task <IActionResult> Create(CreateCharacterRequest request)
 {
     return(Ok());
 }
Beispiel #20
0
        public async Task <Character> CreateCharacterAsync(NaheulbookExecutionContext executionContext, CreateCharacterRequest request)
        {
            using (var uow = _unitOfWorkFactory.CreateUnitOfWork())
            {
                var character = _characterFactory.CreateCharacter(request);

                if (request.GroupId.HasValue)
                {
                    var group = await uow.Groups.GetAsync(request.GroupId.Value);

                    if (group == null)
                    {
                        throw new GroupNotFoundException(request.GroupId.Value);
                    }
                    _authorizationUtil.EnsureIsGroupOwner(executionContext, group);
                    character.Group = group;
                }

                character.OwnerId = executionContext.UserId;
                character.Items   = await _itemUtil.CreateInitialPlayerInventoryAsync(request.Money);

                uow.Characters.Add(character);

                await uow.SaveChangesAsync();

                return(character);
            }
        }
        public Character CreateCharacter(CreateCharacterRequest characterRequest)
        {
            var character = new Character
            {
                Name     = characterRequest.Name,
                Sex      = characterRequest.Sex,
                IsActive = true,
                IsNpc    = characterRequest.IsNpc,

                Ad  = characterRequest.Stats.Ad,
                Cha = characterRequest.Stats.Cha,
                Cou = characterRequest.Stats.Cou,
                Fo  = characterRequest.Stats.Fo,
                Int = characterRequest.Stats.Int,

                Notes = characterRequest.Notes,

                Level      = 1,
                Experience = 0,

                FatePoint = characterRequest.FatePoint,

                OriginId = characterRequest.OriginId,

                Modifiers = new List <CharacterModifier>(),
            };

            if (characterRequest.JobId.HasValue)
            {
                character.Jobs = new List <CharacterJob>
                {
                    new CharacterJob
                    {
                        JobId = characterRequest.JobId.Value
                    }
                }
            }
            ;

            character.Skills = characterRequest.SkillIds
                               .Select(x => new CharacterSkill
            {
                SkillId = x
            })
                               .ToList();

            foreach (var modifiedStat in characterRequest.ModifiedStat.Values)
            {
                character.Modifiers.Add(new CharacterModifier
                {
                    Name         = modifiedStat.Name,
                    IsActive     = true,
                    Permanent    = true,
                    DurationType = "forever",
                    Values       = modifiedStat.Stats.Select(s => new CharacterModifierValue
                    {
                        StatName = s.Key,
                        Value    = (short)s.Value,
                        Type     = "ADD",
                    }).ToList()
                });
            }

            if (characterRequest.SpecialityId.HasValue)
            {
                character.Specialities = new List <CharacterSpeciality>
                {
                    new CharacterSpeciality
                    {
                        SpecialityId = characterRequest.SpecialityId.Value
                    }
                }
            }
            ;

            return(character);
        }