public static void HandleCharacterSelectionWithRemodel(CharacterSelectionWithRemodelMessage message, WorldClient client) { if (!client.InGame) { CharacterRecord record = client.GetAccountCharacter((long)message.id); if (record.RemodelingMaskEnum.HasFlag(CharacterRemodelingEnum.CHARACTER_REMODELING_NAME)) { if (!CharacterRemodelingProvider.Instance.RemodelName(record, message.remodel.name)) { client.Send(new CharacterCreationResultMessage((sbyte)CharacterCreationResultEnum.ERR_NAME_ALREADY_EXISTS)); return; } } if (record.RemodelingMaskEnum.HasFlag(CharacterRemodelingEnum.CHARACTER_REMODELING_BREED)) { CharacterRemodelingProvider.Instance.RemodelBreed(record, message.remodel.breed, message.remodel.cosmeticId); } if (record.RemodelingMaskEnum.HasFlag(CharacterRemodelingEnum.CHARACTER_REMODELING_GENDER)) { } if (record.RemodelingMaskEnum.HasFlag(CharacterRemodelingEnum.CHARACTER_REMODELING_COSMETIC)) { CharacterRemodelingProvider.Instance.RemodelCosmetic(record, message.remodel.cosmeticId); } if (record.RemodelingMaskEnum.HasFlag(CharacterRemodelingEnum.CHARACTER_REMODELING_COLORS)) { CharacterRemodelingProvider.Instance.RemodelColors(record, message.remodel.colors); } record.RemodelingMaskEnum = CharacterRemodelingEnum.CHARACTER_REMODELING_NOT_APPLICABLE; client.Character = new Character(client, record, false); ProcessSelection(client); } }
public static void HandleCharacterSelectionWithRemodelMessage(WorldClient client, CharacterSelectionWithRemodelMessage message) { var character = client.Characters.Where(x => !x.IsDeleted).First(entry => entry.Id == message.id); /* Check null */ if (character == null) { client.Send(new CharacterSelectedErrorMessage()); return; } var remodel = message.remodel; if (((character.MandatoryChanges & (sbyte)CharacterRemodelingEnum.CHARACTER_REMODELING_NAME) == (sbyte)CharacterRemodelingEnum.CHARACTER_REMODELING_NAME) || ((character.PossibleChanges & (sbyte)CharacterRemodelingEnum.CHARACTER_REMODELING_NAME) == (sbyte)CharacterRemodelingEnum.CHARACTER_REMODELING_NAME)) { /* Check if name is valid */ if (!Regex.IsMatch(remodel.name, "^[A-Z][a-z]{2,9}(?:-[A-Z][a-z]{2,9}|[a-z]{1,10})$", RegexOptions.Compiled)) { client.Send(new CharacterCreationResultMessage((int)CharacterCreationResultEnum.ERR_INVALID_NAME)); return; } /* Check if name is free */ if (CharacterManager.Instance.DoesNameExist(remodel.name)) { client.Send(new CharacterCreationResultMessage((int)CharacterCreationResultEnum.ERR_NAME_ALREADY_EXISTS)); return; } /* Set new name */ character.Name = remodel.name; } if (((character.MandatoryChanges & (sbyte)CharacterRemodelingEnum.CHARACTER_REMODELING_GENDER) == (sbyte)CharacterRemodelingEnum.CHARACTER_REMODELING_GENDER) || ((character.PossibleChanges & (sbyte)CharacterRemodelingEnum.CHARACTER_REMODELING_GENDER) == (sbyte)CharacterRemodelingEnum.CHARACTER_REMODELING_GENDER)) { character.Sex = remodel.sex ? SexTypeEnum.SEX_FEMALE : SexTypeEnum.SEX_MALE; } if (((character.MandatoryChanges & (sbyte)CharacterRemodelingEnum.CHARACTER_REMODELING_BREED) == (sbyte)CharacterRemodelingEnum.CHARACTER_REMODELING_BREED) || ((character.PossibleChanges & (sbyte)CharacterRemodelingEnum.CHARACTER_REMODELING_BREED) == (sbyte)CharacterRemodelingEnum.CHARACTER_REMODELING_BREED)) { client.Character = new Character(character, client); client.Character.LoadRecord(); BreedManager.ChangeBreed(client.Character, (PlayableBreedEnum)remodel.breed); client.Character.SaveNow(); character = client.Character.Record; client.Character = null; } if (((character.MandatoryChanges & (sbyte)CharacterRemodelingEnum.CHARACTER_REMODELING_COSMETIC) == (sbyte)CharacterRemodelingEnum.CHARACTER_REMODELING_COSMETIC) || ((character.PossibleChanges & (sbyte)CharacterRemodelingEnum.CHARACTER_REMODELING_COSMETIC) == (sbyte)CharacterRemodelingEnum.CHARACTER_REMODELING_COSMETIC)) { /* Get Head */ var head = BreedManager.Instance.GetHead(remodel.cosmeticId); /* Get character Breed */ var breed = BreedManager.Instance.GetBreed((int)character.Breed); if (breed == null || head.Breed != (int)character.Breed || head.Gender != (int)character.Sex) { client.Send(new CharacterSelectedErrorMessage()); return; } character.Head = head.Id; character.DefaultLook = breed.GetLook(character.Sex); character.DefaultLook.AddSkins(head.Skins); foreach (var scale in character.Sex == SexTypeEnum.SEX_MALE ? breed.MaleLook.Scales : breed.FemaleLook.Scales) { character.DefaultLook.SetScales(scale); } } if (((character.MandatoryChanges & (sbyte)CharacterRemodelingEnum.CHARACTER_REMODELING_COLORS) == (sbyte)CharacterRemodelingEnum.CHARACTER_REMODELING_COLORS) || ((character.PossibleChanges & (sbyte)CharacterRemodelingEnum.CHARACTER_REMODELING_COLORS) == (sbyte)CharacterRemodelingEnum.CHARACTER_REMODELING_COLORS)) { /* Get character Breed */ var breed = BreedManager.Instance.GetBreed((int)character.Breed); if (breed == null) { client.Send(new CharacterSelectedErrorMessage()); return; } /* Set Colors */ var breedColors = character.Sex == SexTypeEnum.SEX_MALE ? breed.MaleColors : breed.FemaleColors; var m_colors = new Dictionary <int, Color>(); foreach (var color in remodel.colors) { var index = color >> 24; var c = Color.FromArgb(color); m_colors.Add(index, c); } var i = 1; foreach (var breedColor in breedColors) { if (!m_colors.ContainsKey(i)) { m_colors.Add(i, Color.FromArgb((int)breedColor)); } i++; } character.DefaultLook.SetColors(m_colors.Select(x => x.Key).ToArray(), m_colors.Select(x => x.Value).ToArray()); } character.MandatoryChanges = 0; character.PossibleChanges = 0; WorldServer.Instance.DBAccessor.Database.Update(character); /* Common selection */ CommonCharacterSelection(client, character); }