internal SkillManager(Character @char, PlayerCharacterDto dto)
        {
            _character = @char;
            var plr = _character.CharacterManager.Player;

            _items[0] = plr.Inventory[(ulong)(dto.Skill?.Id ?? 0)];
        }
        internal void Save(IDbConnection db)
        {
            if (!_charactersToDelete.IsEmpty)
            {
                var idsToRemove = new StringBuilder();
                var firstRun    = true;
                while (_charactersToDelete.TryPop(out var charToDelete))
                {
                    if (firstRun)
                    {
                        firstRun = false;
                    }
                    else
                    {
                        idsToRemove.Append(',');
                    }
                    idsToRemove.Append(charToDelete.Id);
                }

                DbUtil.BulkDelete <PlayerCharacterDto>(db, statement => statement
                                                       .Where($"{nameof(PlayerCharacterDto.Id):C} IN ({idsToRemove})"));
            }

            foreach (var @char in _characters.Values)
            {
                if ([email protected])
                {
                    var charDto = new PlayerCharacterDto
                    {
                        Id       = @char.Id,
                        PlayerId = (int)Player.Account.Id,
                        Slot     = @char.Slot,
                        Gender   = (byte)@char.Gender,
                    };
                    SetDtoItems(@char, charDto);
                    DbUtil.Insert(db, charDto);
                    @char.ExistsInDatabase = true;
                }
                else
                {
                    if ([email protected])
                    {
                        continue;
                    }

                    var charDto = new PlayerCharacterDto
                    {
                        Id       = @char.Id,
                        PlayerId = (int)Player.Account.Id,
                        Slot     = @char.Slot,
                        Gender   = (byte)@char.Gender,
                    };
                    SetDtoItems(@char, charDto);
                    DbUtil.Update(db, charDto);
                    @char.NeedsToSave = false;
                }
            }
        }
Exemple #3
0
        internal WeaponManager(Character @char, PlayerCharacterDto dto)
        {
            _character = @char;
            var plr = _character.CharacterManager.Player;

            _items[0] = plr.Inventory[(ulong)(dto.Weapon1Id ?? 0)];
            _items[1] = plr.Inventory[(ulong)(dto.Weapon2Id ?? 0)];
            _items[2] = plr.Inventory[(ulong)(dto.Weapon3Id ?? 0)];
        }
Exemple #4
0
        internal CostumeManager(Character @char, PlayerCharacterDto dto)
        {
            _character = @char;
            var plr = _character.CharacterManager.Player;

            _items[0] = plr.Inventory[(ulong)(dto.HairId ?? 0)];
            _items[1] = plr.Inventory[(ulong)(dto.FaceId ?? 0)];
            _items[2] = plr.Inventory[(ulong)(dto.ShirtId ?? 0)];
            _items[3] = plr.Inventory[(ulong)(dto.PantsId ?? 0)];
            _items[4] = plr.Inventory[(ulong)(dto.GlovesId ?? 0)];
            _items[5] = plr.Inventory[(ulong)(dto.ShoesId ?? 0)];
            _items[6] = plr.Inventory[(ulong)(dto.AccessoryId ?? 0)];
        }
Exemple #5
0
        internal Character(CharacterManager characterManager, PlayerCharacterDto dto)
        {
            CharacterManager = characterManager;

            Weapons  = new WeaponManager(this, dto);
            Skills   = new SkillManager(this, dto);
            Costumes = new CostumeManager(this, dto);

            var defaultItems = GameServer.Instance.ResourceCache.GetDefaultItems();

            ExistsInDatabase = true;
            Id     = dto.Id;
            Slot   = dto.Slot;
            Gender = (CharacterGender)dto.Gender;
        }
        internal Character(CharacterManager characterManager, PlayerCharacterDto dto)
        {
            CharacterManager = characterManager;

            Weapons  = new WeaponManager(this, dto);
            Skills   = new SkillManager(this, dto);
            Costumes = new CostumeManager(this, dto);

            var defaultItems = GameServer.Instance.ResourceCache.GetDefaultItems();

            ExistsInDatabase = true;
            Id     = dto.Id;
            Slot   = dto.Slot;
            Gender = (CharacterGender)dto.Gender;

            Hair   = defaultItems.Get(Gender, CostumeSlot.Hair, dto.BasicHair);
            Face   = defaultItems.Get(Gender, CostumeSlot.Face, dto.BasicFace);
            Shirt  = defaultItems.Get(Gender, CostumeSlot.Shirt, dto.BasicShirt);
            Pants  = defaultItems.Get(Gender, CostumeSlot.Pants, dto.BasicPants);
            Gloves = defaultItems.Get(Gender, CostumeSlot.Gloves, 0);
            Shoes  = defaultItems.Get(Gender, CostumeSlot.Shoes, 0);
        }
Exemple #7
0
        private void SetDtoItems(Character @char, PlayerCharacterDto charDto)
        {
            PlayerItem item;

            // Weapons
            for (var slot = WeaponSlot.Weapon1; slot <= WeaponSlot.Weapon3; slot++)
            {
                item = @char.Weapons.GetItem(slot);
                var itemId = item != null ? (int?)item.Id : null;

                switch (slot)
                {
                case WeaponSlot.Weapon1:
                    charDto.Weapon1Id = itemId;
                    break;

                case WeaponSlot.Weapon2:
                    charDto.Weapon2Id = itemId;
                    break;

                case WeaponSlot.Weapon3:
                    charDto.Weapon3Id = itemId;
                    break;
                }
            }

            // Skills
            item            = @char.Skills.GetItem(SkillSlot.Skill);
            charDto.SkillId = item != null ? (int?)item.Id : null;

            // Costumes
            for (var slot = CostumeSlot.Hair; slot <= CostumeSlot.Pet; slot++)
            {
                item = @char.Costumes.GetItem(slot);
                var itemId = item != null ? (int?)item.Id : null;

                switch (slot)
                {
                case CostumeSlot.Hair:
                    charDto.HairId = itemId;
                    break;

                case CostumeSlot.Face:
                    charDto.FaceId = itemId;
                    break;

                case CostumeSlot.Shirt:
                    charDto.ShirtId = itemId;
                    break;

                case CostumeSlot.Pants:
                    charDto.PantsId = itemId;
                    break;

                case CostumeSlot.Gloves:
                    charDto.GlovesId = itemId;
                    break;

                case CostumeSlot.Shoes:
                    charDto.ShoesId = itemId;
                    break;

                case CostumeSlot.Accessory:
                    charDto.AccessoryId = itemId;
                    break;

                case CostumeSlot.Pet:
                    charDto.PetId = itemId;
                    break;
                }
            }
        }
        internal void Save(IDbConnection db)
        {
            //using (_sync.Lock())
            {
                if (!_charactersToDelete.IsEmpty)
                {
                    var idsToRemove = new StringBuilder();
                    var firstRun    = true;
                    while (_charactersToDelete.TryPop(out var charToDelete))
                    {
                        if (firstRun)
                        {
                            firstRun = false;
                        }
                        else
                        {
                            idsToRemove.Append(',');
                        }
                        idsToRemove.Append(charToDelete.Id);
                    }

                    db.BulkDelete <PlayerCharacterDto>(statement => statement
                                                       .Where($"{nameof(PlayerCharacterDto.Id):C} IN ({idsToRemove})"));
                }

                foreach (var @char in _characters.Values)
                {
                    if ([email protected])
                    {
                        var charDto = new PlayerCharacterDto
                        {
                            Id         = @char.Id,
                            PlayerId   = (int)Player.Account.Id,
                            Slot       = @char.Slot,
                            Gender     = (byte)@char.Gender,
                            BasicHair  = @char.Hair.Variation,
                            BasicFace  = @char.Face.Variation,
                            BasicShirt = @char.Shirt.Variation,
                            BasicPants = @char.Pants.Variation
                        };
                        SetDtoItems(@char, charDto);
                        db.Insert(charDto);
                        @char.ExistsInDatabase = true;
                    }
                    else
                    {
                        if ([email protected])
                        {
                            continue;
                        }

                        var charDto = new PlayerCharacterDto
                        {
                            Id         = @char.Id,
                            PlayerId   = (int)Player.Account.Id,
                            Slot       = @char.Slot,
                            Gender     = (byte)@char.Gender,
                            BasicHair  = @char.Hair.Variation,
                            BasicFace  = @char.Face.Variation,
                            BasicShirt = @char.Shirt.Variation,
                            BasicPants = @char.Pants.Variation
                        };
                        SetDtoItems(@char, charDto);
                        db.Update(charDto);
                        @char.NeedsToSave = false;
                    }
                }
            }
        }