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); }
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); } } }
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); }); } }
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); }
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); }
public void CharacterCreationRequestMessageFrame(GameClient client, CharacterCreationRequestMessage characterCreationRequestMessage) { Container.Instance().Resolve <ICharacterManager>().CreateCharacter(client, characterCreationRequestMessage); }
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 //}; }
/** * 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); }