Example #1
0
        private void HandleCharacterCanBeCreatedResultMessage(IAccount account,
                                                              CharacterCanBeCreatedResultMessage message)
        {
            // Si nous ne pouvons pas créer de personnages, nous arrêtons la fonction
            if (!message.YesYouCan)
            {
                return;
            }
            // Sinon, nous choisissons une classe au hasard
            var breedId = (sbyte)Randomize.GetRandomNumber(1, 18);
            // Nous récupérons les informations de la classe avec les D2O
            var breed = ObjectDataManager.Instance.Get <Breed>(breedId);
            // Nous récupérons la couleur de base de la classe, et nous faisons un léger random sur la couleur
            var breedColors = breed.MaleColors.Select(i => Randomize.GetRandomNumber((int)i - 80000, (int)i + 80000))
                              .ToList();
            // On récupère la liste des cosmetics disponibles pour cette classe et ce sexe
            var headsList = ObjectDataManager.Instance.EnumerateObjects <Head>().ToList()
                            .FindAll(h => h.Breed == breedId && h.Gender == 0);
            // Nous selectionnons au hasard un cosmetics dans la liste
            var head = headsList[Randomize.GetRandomNumber(0, 7)];
            //// Nous envoyons la requête pour créer le personnage
            var ccrm = new CharacterCreationRequestMessage(account.Character.Name, breedId, false, breedColors,
                                                           (ushort)head.Id);

            account.Network.SendToServer(ccrm);
        }
Example #2
0
 public static void HandleCharacterCreationRequestMessage(Client client, CharacterCreationRequestMessage message)
 {
     if (client.Account.Characters.Count >= 5)
     {
         client.Send(new CharacterCreationResultMessage((sbyte)CharacterCreationResultEnum.ERR_TOO_MANY_CHARACTERS));
     }
     else
     {
         if (CharacterRecord.NameExist(message.name)) //need to add check for non allowed char
         {
             client.Send(new CharacterCreationResultMessage((sbyte)CharacterCreationResultEnum.ERR_NAME_ALREADY_EXISTS));
         }
         else
         {
             Breed           breed     = Breed.Breeds[(BreedEnum)message.breed];
             string          look      = message.sex == false ? breed.MaleLook : breed.FemaleLook;
             CharacterRecord character = new CharacterRecord(client.Account.Id, message.name, 1, 0, (BreedEnum)message.breed, message.colors.Distinct().Count() != 1 ? look.Insert(look.IndexOf("||") + 1, $"1={message.colors[0]},2={message.colors[1]},3={message.colors[2]},4={message.colors[3]},5={message.colors[4]}") : look, message.sex, Config.StartMap != 0 ? Config.StartMap : breed.StartMapId, Config.StartCellId != 0 ? Config.StartCellId : breed.StartDisposition.cellId, Config.StartDirection != 0 ? (DirectionsEnum)Config.StartDirection : (DirectionsEnum)breed.StartDisposition.direction, AlignmentSideEnum.ALIGNMENT_NEUTRAL, 0, 0, false, 0, 0, 0, DateTime.Now);
             character.Create();
             client.Account.Characters = CharacterRecord.ReturnCharacters(client.Account.Id);
             new List <CharacterSpellRecord>(new CharacterSpellRecord[] { new CharacterSpellRecord(client.Account.Characters.FirstOrDefault(chara => chara.Name == character.Name).Id, 64, 0, 1), new CharacterSpellRecord(client.Account.Characters.FirstOrDefault(chara => chara.Name == character.Name).Id, 65, breed.BreedSpellsId[0], 1), new CharacterSpellRecord(client.Account.Characters.FirstOrDefault(chara => chara.Name == character.Name).Id, 66, breed.BreedSpellsId[1], 1), new CharacterSpellRecord(client.Account.Characters.FirstOrDefault(chara => chara.Name == character.Name).Id, 67, breed.BreedSpellsId[2], 1) }).ForEach(spell => spell.Create());
             client.Send(new CharacterCreationResultMessage((sbyte)CharacterCreationResultEnum.OK));
             SendCharactersListMessage(client, false);
         }
     }
 }
Example #3
0
 public static void HandleCharacterCreationRequestMessage(GameClient client, CharacterCreationRequestMessage message)
 {
     if (client.Account.Characters.Count >= 5 && !client.Account.HasRights)
     {
         client.Send(new CharacterCreationResultMessage((sbyte)CharacterCreationResultEnum.ERR_TOO_MANY_CHARACTERS));
     }
     else
     {
         if (CharacterRecord.NameExist(message.name))
         {
             client.Send(new CharacterCreationResultMessage((sbyte)CharacterCreationResultEnum.ERR_NAME_ALREADY_EXISTS));
         }
         else if (!new Regex("^[A-Z][a-z]{2,9}(?:-[A-Z][a-z]{2,9}|[a-z]{1,10})$").IsMatch(message.name))
         {
             client.Send(new CharacterCreationResultMessage((sbyte)CharacterCreationResultEnum.ERR_INVALID_NAME));
         }
         else
         {
             Breed           breed           = Breed.Breeds[message.breed - 1];
             string          look            = message.sex == false ? breed.MaleLook : breed.FemaleLook;
             CharacterRecord characterRecord = new CharacterRecord(client.Account.Id, message.name, 1, 0, (BreedEnum)message.breed, message.colors.Distinct().Count() != 1 ? look.Insert(look.IndexOf("||") + 1, $"1={message.colors[0]},2={message.colors[1]},3={message.colors[2]},4={message.colors[3]},5={message.colors[4]}") : look, message.sex, Config.StartMap != 0 ? Config.StartMap : breed.StartMapId, Config.StartCellId != 0 ? Config.StartCellId : breed.StartDisposition.cellId, Config.StartDirection != 0 ? (DirectionsEnum)Config.StartDirection : (DirectionsEnum)breed.StartDisposition.direction, AlignmentSideEnum.ALIGNMENT_NEUTRAL, 0, 0, false, 0, 0, 0, DateTime.Now);
             characterRecord.Create();
             client.Account.Characters = CharacterRecord.ReturnCharacters(client.Account.Id);
             CharacterRecord firstOrDefault = client.Account.Characters.FirstOrDefault(character => character.Name == characterRecord.Name);
             if (firstOrDefault != null)
             {
                 new List <CharacterSpellRecord>(new[] { new CharacterSpellRecord(firstOrDefault.Id, 64, 0, 1), new CharacterSpellRecord(firstOrDefault.Id, 65, breed.BreedSpellsId[0], 1), new CharacterSpellRecord(firstOrDefault.Id, 66, breed.BreedSpellsId[1], 1), new CharacterSpellRecord(firstOrDefault.Id, 67, breed.BreedSpellsId[2], 1) }).ForEach(spell => spell.Create());
             }
             client.Send(new CharacterCreationResultMessage((sbyte)CharacterCreationResultEnum.OK));
             SendCharactersListMessage(client, false);
         }
     }
 }
        public static void HandleCharacterCreation(CharacterCreationRequestMessage message, WorldClient client)
        {
            if (!WorldServer.Instance.IsStatus(ServerStatusEnum.ONLINE))
            {
                client.Send(new CharacterCreationResultMessage((sbyte)CharacterCreationResultEnum.ERR_NO_REASON));

                return;
            }

            if (!client.InGame)
            {
                if (client.Characters.Count() == client.Account.CharacterSlots)
                {
                    client.Send(new CharacterCreationResultMessage((sbyte)CharacterCreationResultEnum.ERR_TOO_MANY_CHARACTERS));

                    return;
                }

                if (CharacterRecord.NameExist(message.name))
                {
                    client.Send(new CharacterCreationResultMessage((sbyte)CharacterCreationResultEnum.ERR_NAME_ALREADY_EXISTS));

                    return;
                }

                if (client.Account.Role < ServerRoleEnum.Animator)
                {
                    foreach (var value in message.name)
                    {
                        if (UnauthorizedNameContent.Contains(value))
                        {
                            client.Send(new CharacterCreationResultMessage((sbyte)CharacterCreationResultEnum.ERR_INVALID_NAME));

                            return;
                        }
                    }
                }

                if (message.name.Split(null).Count() > 1)
                {
                    client.Send(new CharacterCreationResultMessage((sbyte)CharacterCreationResultEnum.ERR_INVALID_NAME));

                    return;
                }


                long nextId = CharacterRecord.Characters.DynamicPop(x => x.Id);

                MessagePool.SendRequest <OnCharacterCreationResultMessage>(TransitionServerManager.Instance.AuthServer,
                                                                           new OnCharacterCreationMessage {
                    AccountId   = client.Account.Id,
                    CharacterId = nextId,
                },
                                                                           delegate(OnCharacterCreationResultMessage result) { CreateCharacter(message, client, result.Succes, nextId); });
            }
        }
Example #5
0
        public static void HandleCharacterCreationRequestMessage(WorldClient client, CharacterCreationRequestMessage message)
        {
            if (!IPCAccessor.Instance.IsConnected)
            {
                SendCharacterCreationResultMessage(client, CharacterCreationResultEnum.ERR_NO_REASON);
                return;
            }

            CharacterManager.Instance.CreateCharacter(client, message.name, message.breed, message.sex, message.colors, message.cosmeticId,
                                                      () => OnCharacterCreationSuccess(client), x => OnCharacterCreationFailed(client, x));
        }
        static void CreateCharacter(CharacterCreationRequestMessage message, WorldClient client, bool succes, long id)
        {
            if (!succes)
            {
                client.Send(new CharacterCreationResultMessage((sbyte)CharacterCreationResultEnum.ERR_NO_REASON));
                return;
            }
            ContextActorLook look   = BreedRecord.GetBreedLook(message.breed, message.sex, message.cosmeticId, message.colors);
            CharacterRecord  record = CharacterRecord.New(id, message.name, client.Account.Id, look, message.breed, message.cosmeticId, message.sex);

            record.AddInstantElement();
            client.Character = new Character(client, record, true);
            logger.White("Character " + record.Name + " created");
            ProcessSelection(client);
        }
 public static void HandleCharacterCreationRequestMessage(WorldClient client, CharacterCreationRequestMessage message)
 {
     if (!IPCAccessor.Instance.IsConnected)
     {
         CharacterHandler.OnCharacterCreationFailed(client, CharacterCreationResultEnum.ERR_NO_REASON);
     }
     else
     {
         Singleton <CharacterManager> .Instance.CreateCharacter(client, message.name, message.breed, message.sex, message.colors, message.cosmeticId, delegate
         {
             CharacterHandler.OnCharacterCreationSuccess(client);
         }, delegate(CharacterCreationResultEnum x)
         {
             CharacterHandler.OnCharacterCreationFailed(client, x);
         });
     }
 }
        public static void HandleCharacterCreationRequest(CharacterCreationRequestMessage message, WorldClient client)
        {
            if (client.Characters.Count() == client.Account.MaxCharactersCount)
            {
                client.Send(new CharacterCreationResultMessage((sbyte)CharacterCreationResultEnum.ERR_TOO_MANY_CHARACTERS));
                return;
            }
            if (CharacterRecord.CheckCharacterNameExist(message.name))
            {
                client.Send(new CharacterCreationResultMessage((sbyte)CharacterCreationResultEnum.ERR_NAME_ALREADY_EXISTS));
                return;
            }
            if (client.Account.Role <= ServerRoleEnum.MODERATOR)
            {
                foreach (var value in message.name)
                {
                    if (UnauthorizedNameContent.Contains(value))
                    {
                        client.Send(new CharacterCreationResultMessage((sbyte)CharacterCreationResultEnum.ERR_INVALID_NAME));
                        return;
                    }
                }
            }
            string look = BreedRecord.GetBreedEntityLook((int)message.breed, message.sex, (int)message.cosmeticId, message.colors).ConvertToString();

            CharacterRecord newCharacter = CharacterRecord.Default(message.name, client.Account.Id, look, message.breed, message.sex);

            client.Character       = new Character(newCharacter, client);
            client.Character.IsNew = true;
            StatsRecord.Create(client.Character);
            client.Character.SetLevel(ConfigurationManager.Instance.StartLevel);
            client.Character.Record.AddElement();
            client.Character.UpdateBreedSpells();
            client.Character.LearnAllJobs();
            Logger.Log("Character " + newCharacter.Name + " created!");
            ProcessSelection(client);
        }
 public void HandleCharacterCreationRequestMessage(CharacterCreationRequestMessage message)
 {
     Console.WriteLine(message);
 }
Example #10
0
        public void CharacterCreationRequestMessageFrame(WorldClient client, CharacterCreationRequestMessage characterCreationRequestMessage)
        {
            Burning.DofusProtocol.Datacenter.Breed breed = BreedRepository.Instance.GetBreedById(characterCreationRequestMessage.breed);
            var look = Look.Parse(characterCreationRequestMessage.sex ? breed.FemaleLook : breed.MaleLook);

            for (int i = 1; i < characterCreationRequestMessage.colors.Length; i++)
            {
                look.UpdateColor(i, characterCreationRequestMessage.colors[i]);
            }

            Burning.DofusProtocol.Datacenter.Head head = HeadRepository.Instance.List.Find(x => x.Id == characterCreationRequestMessage.cosmeticId);
            short skin = short.Parse(head.Skins);

            look.AddSkin((uint)skin);

            Character character = new Character()
            {
                Id         = DatabaseManager.Instance.AutoIncrement <Character>(CharacterRepository.Instance.Collection),
                AccountId  = client.Account.Id,
                Name       = characterCreationRequestMessage.name,
                Breed      = (sbyte)characterCreationRequestMessage.breed,
                Experience = 0,
                Level      = 1,
                CellId     = 383,
                MapId      = 154010883,
                Kamas      = 0,
                Sex        = characterCreationRequestMessage.sex,
                EntityLook = look.GetDatas()
            };

            CharacterRepository.Instance.Insert(character); //creation of character

            CharacterCharacteristic characterCharacteristic = new CharacterCharacteristic()
            {
                Id                             = DatabaseManager.Instance.AutoIncrement <CharacterCharacteristic>(CharacterCharacteristicRepository.Instance.Collection),
                CharacterId                    = character.Id,
                CapitalPoint                   = 100,
                LifeBase                       = 45,
                fireElementReduction           = new CharacterBaseCharacteristic(0, 0, 0, 0, 0),
                airElementReduction            = new CharacterBaseCharacteristic(0, 0, 0, 0, 0),
                waterElementReduction          = new CharacterBaseCharacteristic(0, 0, 0, 0, 0),
                earthElementReduction          = new CharacterBaseCharacteristic(0, 0, 0, 0, 0),
                neutralElementReduction        = new CharacterBaseCharacteristic(0, 0, 0, 0, 0),
                fireElementResistPercent       = new CharacterBaseCharacteristic(0, 0, 0, 0, 0),
                airElementResistPercent        = new CharacterBaseCharacteristic(0, 0, 0, 0, 0),
                waterElementResistPercent      = new CharacterBaseCharacteristic(0, 0, 0, 0, 0),
                pushDamageReduction            = new CharacterBaseCharacteristic(0, 0, 0, 0, 0),
                earthElementResistPercent      = new CharacterBaseCharacteristic(0, 0, 0, 0, 0),
                dodgePMLostProbability         = new CharacterBaseCharacteristic(0, 0, 0, 0, 0),
                dodgePALostProbability         = new CharacterBaseCharacteristic(0, 0, 0, 0, 0),
                fireDamageBonus                = new CharacterBaseCharacteristic(0, 0, 0, 0, 0),
                airDamageBonus                 = new CharacterBaseCharacteristic(0, 0, 0, 0, 0),
                waterDamageBonus               = new CharacterBaseCharacteristic(0, 0, 0, 0, 0),
                earthDamageBonus               = new CharacterBaseCharacteristic(0, 0, 0, 0, 0),
                neutralDamageBonus             = new CharacterBaseCharacteristic(0, 0, 0, 0, 0),
                criticalDamageBonus            = new CharacterBaseCharacteristic(0, 0, 0, 0, 0),
                neutralElementResistPercent    = new CharacterBaseCharacteristic(0, 0, 0, 0, 0),
                PMAttack                       = new CharacterBaseCharacteristic(0, 0, 0, 0, 0),
                criticalDamageReduction        = new CharacterBaseCharacteristic(0, 0, 0, 0, 0),
                pvpEarthElementResistPercent   = new CharacterBaseCharacteristic(0, 0, 0, 0, 0),
                spellDamageReceivedPercent     = new CharacterBaseCharacteristic(100, 0, 0, 0, 0),
                spellDamageDonePercent         = new CharacterBaseCharacteristic(0, 0, 0, 0, 0),
                weaponDamageReceivedPercent    = new CharacterBaseCharacteristic(100, 0, 0, 0, 0),
                weaponDamageDonePercent        = new CharacterBaseCharacteristic(0, 0, 0, 0, 0),
                rangedDamageReceivedPercent    = new CharacterBaseCharacteristic(100, 0, 0, 0, 0),
                rangedDamageDonePercent        = new CharacterBaseCharacteristic(0, 0, 0, 0, 0),
                pvpNeutralElementResistPercent = new CharacterBaseCharacteristic(0, 0, 0, 0, 0),
                meleeDamageReceivedPercent     = new CharacterBaseCharacteristic(100, 0, 0, 0, 0),
                pvpFireElementReduction        = new CharacterBaseCharacteristic(0, 0, 0, 0, 0),
                pvpAirElementReduction         = new CharacterBaseCharacteristic(0, 0, 0, 0, 0),
                pvpWaterElementReduction       = new CharacterBaseCharacteristic(0, 0, 0, 0, 0),
                pvpEarthElementReduction       = new CharacterBaseCharacteristic(0, 0, 0, 0, 0),
                pvpNeutralElementReduction     = new CharacterBaseCharacteristic(0, 0, 0, 0, 0),
                pvpFireElementResistPercent    = new CharacterBaseCharacteristic(0, 0, 0, 0, 0),
                pvpAirElementResistPercent     = new CharacterBaseCharacteristic(0, 0, 0, 0, 0),
                pvpWaterElementResistPercent   = new CharacterBaseCharacteristic(0, 0, 0, 0, 0),
                meleeDamageDonePercent         = new CharacterBaseCharacteristic(0, 0, 0, 0, 0),
                PAAttack                       = new CharacterBaseCharacteristic(0, 0, 0, 0, 0),
                pushDamageBonus                = new CharacterBaseCharacteristic(0, 0, 0, 0, 0),
                tackleBlock                    = new CharacterBaseCharacteristic(0, 0, 0, 0, 0),
                actionPoints                   = new CharacterBaseCharacteristic(6, 0, 0, 0, 0),
                prospecting                    = new CharacterBaseCharacteristic(100, 0, 0, 0, 0),
                initiative                     = new CharacterBaseCharacteristic(100, 0, 0, 0, 0),
                tackleEvade                    = new CharacterBaseCharacteristic(0, 0, 0, 0, 0),
                strength                       = new CharacterBaseCharacteristic(0, 0, 0, 0, 0),
                movementPoints                 = new CharacterBaseCharacteristic(3, 0, 0, 0, 0),
                wisdom                         = new CharacterBaseCharacteristic(0, 0, 0, 0, 0),
                permanentDamagePercent         = new CharacterBaseCharacteristic(10, 0, 0, 0, 0),
                runeBonusPercent               = new CharacterBaseCharacteristic(0, 0, 0, 0, 0),
                glyphBonusPercent              = new CharacterBaseCharacteristic(0, 0, 0, 0, 0),
                trapBonusPercent               = new CharacterBaseCharacteristic(0, 0, 0, 0, 0),
                trapBonus                      = new CharacterBaseCharacteristic(0, 0, 0, 0, 0),
                damagesBonusPercent            = new CharacterBaseCharacteristic(0, 0, 0, 0, 0),
                vitality                       = new CharacterBaseCharacteristic(0, 0, 0, 0, 0),
                allDamagesBonus                = new CharacterBaseCharacteristic(0, 0, 0, 0, 0),
                healBonus                      = new CharacterBaseCharacteristic(0, 0, 0, 0, 0),
                weaponDamagesBonusPercent      = new CharacterBaseCharacteristic(0, 0, 0, 0, 0),
                criticalHit                    = new CharacterBaseCharacteristic(0, 0, 0, 0, 0),
                reflect                        = new CharacterBaseCharacteristic(0, 0, 0, 0, 0),
                summonableCreaturesBoost       = new CharacterBaseCharacteristic(0, 0, 0, 0, 0),
                range                          = new CharacterBaseCharacteristic(0, 0, 0, 0, 0),
                intelligence                   = new CharacterBaseCharacteristic(0, 0, 0, 0, 0),
                agility                        = new CharacterBaseCharacteristic(0, 0, 0, 0, 0),
                chance                         = new CharacterBaseCharacteristic(0, 0, 0, 0, 0),
                criticalMiss                   = new CharacterBaseCharacteristic(0, 0, 0, 0, 0)
            };

            CharacterCharacteristicRepository.Instance.Insert(characterCharacteristic);

            Inventory inventory = new Inventory()
            {
                Id          = DatabaseManager.Instance.AutoIncrement <Inventory>(InventoryRepository.Instance.Collection),
                CharacterId = character.Id,
                ObjectItems = new List <ObjectItem>()
            };

            InventoryRepository.Instance.Insert(inventory); //creation of inventory

            client.SendPacket(new CharacterCreationResultMessage((uint)CharacterCreationResultEnum.OK));
            this.SendCharacterListMessage(client, true);
        }
Example #11
0
 public void CharacterCreationRequestMessageFrame(GameClient client,
                                                  CharacterCreationRequestMessage characterCreationRequestMessage)
 {
     Container.Instance().Resolve <ICharacterManager>().CreateCharacter(client, characterCreationRequestMessage);
 }
Example #12
0
        public static void HandleCharacterCreation(BigEndianReader reader, WorldClient client, WorldServer server)
        {
            try
            {
                CharacterCreationRequestMessage message = new CharacterCreationRequestMessage();
                message.Unpack(reader);
                client.Send(new CharacterCreationResultMessage(0));
                Thread.Sleep(1000);
                int   y      = 0;
                int[] colors = new int[5];
                foreach (int x in message.colors)
                {
                    if (y < 5 && x != -1)
                    {
                        colors[y] = (y + 1 & 255) << 24 | x & 16777215;
                        //((nb & 255) << 24 | color & 16777215)
                        y++;
                    }
                    else
                    {
                        break;
                    }
                }

                for (int x = 0; x < colors.Length; x++)
                {
                    Out.Debug(colors[x].ToString(), "Colors");
                }
                //x => x.Key << 24 | x.Value.ToArgb() & 0xFFFFFF

                int style = message.breed * 10;
                if (message.sex)
                {
                    style++;
                }

                Char = new CharacterBaseInformations(
                    1,
                    200,
                    message.name,
                    new EntityLook(1, new short[] { (short)style }, colors, new short[] { 125 }, new SubEntity[] { }),
                    message.breed,
                    message.sex);

                IEnumerable <CharacterBaseInformations> chars = new List <CharacterBaseInformations>()
                {
                    Char
                };

                client.Send(new CharactersListMessage(false, chars));
            }
            catch (Exception e)
            {
                Out.Error(e.Message);
            }
            //var_character =
            //{
            //    Level = 1,
            //    Name = message.name,
            //    Breed = message.breed,
            //    Sex = message.sex,
            //    EntityLook = EntityManager.Instance.BuildEntityLook(message.breed, message.sex, message.colors.ToList()),
            //    MapId = BreedManager.Instance.GetStartMap(message.breed),
            //    CellId = BreedManager.Instance.GetStartCell(message.breed),
            //    Direction = BreedManager.Instance.GetStartDirection(message.breed),
            //    SpellsPoints = 1
            //};
        }
Example #13
0
        /**
         * Handle character creation frame
         */
        public Task CreateCharacter(GameClient client, CharacterCreationRequestMessage characterCreationRequestMessage)
        {
            var characterAlreadyExist = this._characterRepository.Entities().Values
                                        .FirstOrDefault(x => x.Name == characterCreationRequestMessage.name);

            //check if account with name already exist
            if (characterAlreadyExist != null)
            {
                client.Send(new CharacterCreationResultMessage((int)CharacterCreationResultEnum.ERR_NAME_ALREADY_EXISTS));
                return(null);
            }

            //check length of name
            if (!this.VerifCharacterName(characterCreationRequestMessage.name))
            {
                client.Send(new CharacterCreationResultMessage((int)CharacterCreationResultEnum.ERR_INVALID_NAME));
                return(null);
            }

            //check if valid colors
            if (!characterCreationRequestMessage.colors.All(x => x >= 0))
            {
                client.Send(new CharacterCreationResultMessage((int)CharacterCreationResultEnum.ERR_NOT_ALLOWED));
                return(null);
            }

            var numberOfCharacters = this._characterRepository.Entities().Values.Count(x => x.AccountId == 1);

            //check if account has too many characters created
            if (numberOfCharacters >= 6)
            {
                client.Send(new CharacterCreationResultMessage((int)CharacterCreationResultEnum.ERR_TOO_MANY_CHARACTERS));
                return(null);
            }

            //find head by cosmeticId
            this.HeadsData.TryGetValue(characterCreationRequestMessage.cosmeticId, out Heads head);

            //check if cosmeticId is correspond to sex + breed
            if (head == null || Convert.ToBoolean(head.Gender) != characterCreationRequestMessage.sex ||
                head.Breed != characterCreationRequestMessage.breed)
            {
                client.Send(new CharacterCreationResultMessage((int)CharacterCreationResultEnum.ERR_NOT_ALLOWED));
                return(null);
            }

            var character = new Character();

            //character.Id = this.GenerateId();
            character.AccountId      = client.Account.Id;
            character.Breed          = characterCreationRequestMessage.breed;
            character.Sex            = characterCreationRequestMessage.sex;
            character.Level          = 200; //from config
            character.MapId          = 81266690;
            character.CellId         = 298;
            character.Experiences    = 0;
            character.Name           = characterCreationRequestMessage.name;
            character.EntityLookData = JsonConvert.SerializeObject(new EntityLook()
            {
                bonesId       = 1,
                scales        = new int[] { 125 },
                indexedColors = characterCreationRequestMessage.colors,
                skins         = new int[] { Convert.ToInt32(head.AssetId.Split("_")[0]), (int)head.Skins },
                subentities   = new SubEntity[] {}
            });

            this._characterRepository.AddEntity(character);

            client.Send(new CharacterCreationResultMessage((int)CharacterCreationResultEnum.OK));

            ApproachFrames.SendCharactersListMessage(client);

            return(Task.CompletedTask);
        }