using KianaBH.Data; using KianaBH.Data.Excel; using KianaBH.Database; using KianaBH.Database.Avatar; using KianaBH.Enums.Item; using KianaBH.GameServer.Game.Player; using KianaBH.GameServer.Server.Packet.Send.Avatar; using KianaBH.Util.Extensions; namespace KianaBH.GameServer.Game.Avatar; public class AvatarManager(PlayerInstance player) : BasePlayerManager(player) { public AvatarData AvatarData { get; } = DatabaseHelper.GetInstanceOrCreateNew(player.Uid); public async ValueTask AddAvatar(int avatarId, bool sync = true) { GameData.AvatarData.TryGetValue(avatarId, out var avatarExcel); if (avatarExcel == null) return null; var avatar = new AvatarInfo { Level = 1, Timestamp = Extensions.GetUnixSec(), Star = avatarExcel.UnlockStar, DressId = avatarExcel.DefaultDressId, DressList = {avatarExcel.DefaultDressId}, AvatarId = avatarExcel.AvatarID, }; foreach (var skill in avatarExcel.SkillList) { avatar.SkillList.Add(new AvatarSkill { SkillId = skill }); }; var weapon = GameData.WeaponData.TryGetValue(avatarExcel.InitialWeapon, out var weaponConfig); if (weaponConfig != null) { var item = await Player.InventoryManager!.AddItem(avatarExcel.InitialWeapon, 1, ItemMainTypeEnum.Weapon, weaponConfig.MaxLv, avatarId); if (item != null) { avatar.WeaponUniqueId = item!.UniqueId; }; }; AvatarData.Avatars.Add(avatar); if (sync) await Player.SendPacket(new PacketGetAvatarDataRsp(new List { avatar }, false)); return avatarExcel; } public AvatarInfo? GetAvatar(uint avatarId) { return AvatarData.Avatars.Find(avatar => avatar.AvatarId == avatarId); } }