Exemplo n.º 1
0
        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);
            }
        }
Exemplo n.º 2
0
        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);
                }
            }
Exemplo n.º 3
0
        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);
                }
            }