public override async Task ExecuteAsync(CharNewPacket packet, ClientSession clientSession) { if (clientSession.HasSelectedCharacter) { return; } // TODO: Hold Account Information in Authorized object var accountId = clientSession.Account.AccountId; var slot = packet.Slot; var characterName = packet.Name; if (_characterDao.FirstOrDefault(s => (s.AccountId == accountId) && (s.Slot == slot) && (s.State == CharacterState.Active)) != null) { return; } var rg = new Regex( @"^[\u0021-\u007E\u00A1-\u00AC\u00AE-\u00FF\u4E00-\u9FA5\u0E01-\u0E3A\u0E3F-\u0E5B\u002E]*$"); if (rg.Matches(characterName).Count == 1) { var character = _characterDao.FirstOrDefault(s => (s.Name == characterName) && (s.State == CharacterState.Active)); if (character == null) { var chara = new CharacterDto { Class = packet.IsMartialArtist ? CharacterClassType.MartialArtist : CharacterClassType.Adventurer, Gender = packet.Gender, HairColor = packet.HairColor, HairStyle = packet.HairStyle, Hp = packet.IsMartialArtist ? 12965 : 221, JobLevel = 1, Level = (byte)(packet.IsMartialArtist ? 81 : 1), MapId = 1, MapX = (short)RandomFactory.Instance.RandomNumber(78, 81), MapY = (short)RandomFactory.Instance.RandomNumber(114, 118), Mp = packet.IsMartialArtist ? 2369 : 221, MaxMateCount = 10, SpPoint = 10000, SpAdditionPoint = 0, Name = characterName, Slot = slot, AccountId = accountId, State = CharacterState.Active }; _characterDao.InsertOrUpdate(ref chara); var miniland = new MinilandDto { MinilandId = Guid.NewGuid(), State = MinilandState.Open, MinilandMessage = "Welcome", OwnerId = chara.CharacterId, WelcomeMusicInfo = "Spring^Melody" }; _minilandDao.InsertOrUpdate(ref miniland); await clientSession.SendPacketAsync(new SuccessPacket()).ConfigureAwait(false); await clientSession.HandlePacketsAsync(new[] { new EntryPointPacket() }).ConfigureAwait(false); } else { await clientSession.SendPacketAsync(new InfoPacket { Message = clientSession.GetMessageFromKey(LanguageKey.ALREADY_TAKEN) }).ConfigureAwait(false); } } else { await clientSession.SendPacketAsync(new InfoPacket { Message = clientSession.GetMessageFromKey(LanguageKey.INVALID_CHARNAME) }).ConfigureAwait(false); } }
public override async Task ExecuteAsync(CharNewPacket packet, ClientSession clientSession) { // TODO: Hold Account Information in Authorized object var accountId = clientSession.Account.AccountId; var slot = packet.Slot; var characterName = packet.Name; if (await _characterDao.FirstOrDefaultAsync(s => (s.AccountId == accountId) && (s.Slot == slot) && (s.State == CharacterState.Active)).ConfigureAwait(false) != null) { return; } var rg = new Regex(Nameregex); if (rg.Matches(characterName !).Count == 1) { var character = await _characterDao.FirstOrDefaultAsync(s => (s.Name == characterName) && (s.State == CharacterState.Active)).ConfigureAwait(false); if (character == null) { var level = (byte)(packet.IsMartialArtist ? 81 : 1); var @class = packet.IsMartialArtist ? CharacterClassType.MartialArtist : CharacterClassType.Adventurer; var chara = new CharacterDto { Class = @class, Gender = packet.Gender, HairColor = packet.HairColor, HairStyle = packet.HairStyle, Hp = (int)_hpService.GetHp(@class, level), JobLevel = 1, Level = level, MapId = 1, MapX = (short)RandomHelper.Instance.RandomNumber(78, 81), MapY = (short)RandomHelper.Instance.RandomNumber(114, 118), Mp = (int)_mpService.GetMp(@class, level), MaxMateCount = 10, SpPoint = 10000, SpAdditionPoint = 0, Name = characterName, Slot = slot, AccountId = accountId, State = CharacterState.Active }; chara = await _characterDao.TryInsertOrUpdateAsync(chara).ConfigureAwait(false); var miniland = new MinilandDto { MinilandId = Guid.NewGuid(), State = MinilandState.Open, MinilandMessage = ((short)Game18NConstString.Welcome).ToString(), OwnerId = chara.CharacterId, WelcomeMusicInfo = 3800 }; await _minilandDao.TryInsertOrUpdateAsync(miniland).ConfigureAwait(false); var charaGo = chara.Adapt <Character>(); var itemsToAdd = new List <BasicEquipment>(); foreach (var item in _worldConfiguration.BasicEquipments) { switch (item.Key) { case nameof(CharacterClassType.Adventurer) when @class != CharacterClassType.Adventurer: case nameof(CharacterClassType.Archer) when @class != CharacterClassType.Archer: case nameof(CharacterClassType.Mage) when @class != CharacterClassType.Mage: case nameof(CharacterClassType.MartialArtist) when @class != CharacterClassType.MartialArtist: case nameof(CharacterClassType.Swordsman) when @class != CharacterClassType.Swordsman: break; default: itemsToAdd.AddRange(_worldConfiguration.BasicEquipments[item.Key]); break; } } foreach (var itemToAdd in itemsToAdd) { charaGo.InventoryService.AddItemToPocket(InventoryItemInstance.Create(_itemBuilderService.Create(itemToAdd.VNum, itemToAdd.Amount), charaGo.CharacterId), itemToAdd.NoscorePocketType); } await _quicklistEntryDao.TryInsertOrUpdateAsync(new[] { new QuicklistEntryDto { Id = Guid.NewGuid(), CharacterId = chara.CharacterId, Slot = 1, Type = 0, IconType = 2, IconVNum = 0 }, new QuicklistEntryDto { Id = Guid.NewGuid(), CharacterId = chara.CharacterId, Slot = 9, Type = 1, IconType = 3, IconVNum = 1 }, new QuicklistEntryDto { Id = Guid.NewGuid(), CharacterId = chara.CharacterId, Slot = 0, Type = 1, IconType = 1, IconVNum = 1 }, new QuicklistEntryDto { Id = Guid.NewGuid(), CharacterId = chara.CharacterId, Slot = 8, Type = 1, IconType = 1, IconVNum = 16 }, }); await _itemInstanceDao.TryInsertOrUpdateAsync(charaGo.InventoryService.Values.Select(s => s.ItemInstance !).ToArray()).ConfigureAwait(false); await _inventoryItemInstanceDao.TryInsertOrUpdateAsync(charaGo.InventoryService.Values.ToArray()).ConfigureAwait(false); await clientSession.SendPacketAsync(new SuccessPacket()).ConfigureAwait(false); await clientSession.HandlePacketsAsync(new[] { new EntryPointPacket() }).ConfigureAwait(false); } else { await clientSession.SendPacketAsync(new InfoiPacket { Message = Game18NConstString.CharacterNameAlreadyTaken }).ConfigureAwait(false); } }
public override async Task ExecuteAsync(CharNewPacket packet, ClientSession clientSession) { if (clientSession.HasSelectedCharacter) { return; } // TODO: Hold Account Information in Authorized object var accountId = clientSession.Account.AccountId; var slot = packet.Slot; var characterName = packet.Name; if (await _characterDao.FirstOrDefaultAsync(s => (s.AccountId == accountId) && (s.Slot == slot) && (s.State == CharacterState.Active)).ConfigureAwait(false) != null) { return; } var rg = new Regex(Nameregex); if (rg.Matches(characterName !).Count == 1) { var character = await _characterDao.FirstOrDefaultAsync(s => (s.Name == characterName) && (s.State == CharacterState.Active)).ConfigureAwait(false); if (character == null) { var chara = new CharacterDto { Class = packet.IsMartialArtist ? CharacterClassType.MartialArtist : CharacterClassType.Adventurer, Gender = packet.Gender, HairColor = packet.HairColor, HairStyle = packet.HairStyle, Hp = packet.IsMartialArtist ? 12965 : 221, JobLevel = 1, Level = (byte)(packet.IsMartialArtist ? 81 : 1), MapId = 1, MapX = (short)RandomHelper.Instance.RandomNumber(78, 81), MapY = (short)RandomHelper.Instance.RandomNumber(114, 118), Mp = packet.IsMartialArtist ? 2369 : 221, MaxMateCount = 10, SpPoint = 10000, SpAdditionPoint = 0, Name = characterName, Slot = slot, AccountId = accountId, State = CharacterState.Active }; chara = await _characterDao.TryInsertOrUpdateAsync(chara).ConfigureAwait(false); var miniland = new MinilandDto { MinilandId = Guid.NewGuid(), State = MinilandState.Open, MinilandMessage = ((short)Game18NConstString.Welcome).ToString(), OwnerId = chara.CharacterId, WelcomeMusicInfo = 3800 }; await _minilandDao.TryInsertOrUpdateAsync(miniland).ConfigureAwait(false); await clientSession.SendPacketAsync(new SuccessPacket()).ConfigureAwait(false); await clientSession.HandlePacketsAsync(new[] { new EntryPointPacket() }).ConfigureAwait(false); } else { await clientSession.SendPacketAsync(new InfoiPacket { Message = Game18NConstString.CharacterNameAlreadyTaken }).ConfigureAwait(false); } }