mirror of
https://github.com/MikuLeaks/KianaBH3.git
synced 2025-12-14 05:44:34 +01:00
feat: add elf handler
This commit is contained in:
49
GameServer/Game/Elf/ElfManager.cs
Normal file
49
GameServer/Game/Elf/ElfManager.cs
Normal file
@@ -0,0 +1,49 @@
|
||||
using KianaBH.Data.Excel;
|
||||
using KianaBH.Data;
|
||||
using KianaBH.Database;
|
||||
using KianaBH.Database.Avatar;
|
||||
using KianaBH.Database.Elfs;
|
||||
using KianaBH.Enums.Item;
|
||||
using KianaBH.GameServer.Game.Player;
|
||||
using KianaBH.GameServer.Server.Packet.Send.Avatar;
|
||||
using KianaBH.Util.Extensions;
|
||||
using KianaBH.Proto;
|
||||
using KianaBH.GameServer.Server.Packet.Send.Elf;
|
||||
|
||||
namespace KianaBH.GameServer.Game.Elf;
|
||||
|
||||
public class ElfManager(PlayerInstance player) : BasePlayerManager(player)
|
||||
{
|
||||
public ElfsData ElfData = DatabaseHelper.GetInstanceOrCreateNew<ElfsData>(player.Uid);
|
||||
|
||||
public async ValueTask<ElfAstraMateDataExcel?> AddElf(int elfId, int level = 1, int star = 0, bool sync = true)
|
||||
{
|
||||
if (ElfData.Elfs.Any(a => a.ElfId == elfId)) return null;
|
||||
GameData.ElfAstraMateData.TryGetValue(elfId, out var elfExcel);
|
||||
if (elfExcel == null) return null;
|
||||
|
||||
var elf = new ElfData
|
||||
{
|
||||
ElfId = elfId,
|
||||
Level = level,
|
||||
Timestamp = Extensions.GetUnixSec(),
|
||||
Star = elfExcel.MaxRarity <= star ? elfExcel.MaxRarity : star,
|
||||
};
|
||||
|
||||
foreach (var skill in elfExcel.SkillList)
|
||||
{
|
||||
elf.SkillList.Add(new Skill
|
||||
{
|
||||
SkillId = skill.ElfSkillID,
|
||||
SkillLevel = skill.MaxLv,
|
||||
});
|
||||
};
|
||||
|
||||
ElfData.Elfs.Add(elf);
|
||||
|
||||
if (sync) await Player.SendPacket(new PacketGetElfDataRsp(Player));
|
||||
|
||||
return elfExcel;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -5,9 +5,11 @@ using KianaBH.Database.Client;
|
||||
using KianaBH.Database.Player;
|
||||
using KianaBH.GameServer.Game.Avatar;
|
||||
using KianaBH.GameServer.Game.Battle;
|
||||
using KianaBH.GameServer.Game.Elf;
|
||||
using KianaBH.GameServer.Game.Inventory;
|
||||
using KianaBH.GameServer.Server;
|
||||
using KianaBH.GameServer.Server.Packet.Send.Avatar;
|
||||
using KianaBH.GameServer.Server.Packet.Send.Elf;
|
||||
using KianaBH.GameServer.Server.Packet.Send.Item;
|
||||
using KianaBH.KcpSharp;
|
||||
using KianaBH.Util.Extensions;
|
||||
@@ -18,6 +20,7 @@ public class PlayerInstance(PlayerData data)
|
||||
{
|
||||
public AvatarManager? AvatarManager { get; private set; }
|
||||
public InventoryManager? InventoryManager { get; private set; }
|
||||
public ElfManager? ElfManager { get; private set; }
|
||||
|
||||
public static readonly List<PlayerInstance> _playerInstances = [];
|
||||
public PlayerData Data { get; set; } = data;
|
||||
@@ -55,6 +58,7 @@ public class PlayerInstance(PlayerData data)
|
||||
Uid = Data.Uid;
|
||||
AvatarManager = new AvatarManager(this);
|
||||
InventoryManager = new InventoryManager(this);
|
||||
ElfManager = new ElfManager(this);
|
||||
ClientData = InitializeDatabase<ClientData>();
|
||||
GuideData = InitializeDatabase<GuideData>();
|
||||
WorldChatManager = new WorldChatManager(this);
|
||||
@@ -111,6 +115,11 @@ public class PlayerInstance(PlayerData data)
|
||||
return Data.ToProto();
|
||||
}
|
||||
|
||||
public async ValueTask SyncElf()
|
||||
{
|
||||
await SendPacket(new PacketGetElfDataRsp(this));
|
||||
}
|
||||
|
||||
public async ValueTask SyncInventory()
|
||||
{
|
||||
await SendPacket(new PacketGetEquipmentDataRsp(this));
|
||||
|
||||
Reference in New Issue
Block a user