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; } } }
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)]; }
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)]; }
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); }
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; } } } }