feat: add valk command

This commit is contained in:
Naruse
2025-06-14 16:51:41 +08:00
parent 07ec2f9abf
commit 969adeca34
10 changed files with 98 additions and 371 deletions

View File

@@ -13,16 +13,17 @@ namespace KianaBH.GameServer.Game.Avatar;
public class AvatarManager(PlayerInstance player) : BasePlayerManager(player)
{
public AvatarData AvatarData { get; } = DatabaseHelper.GetInstanceOrCreateNew<AvatarData>(player.Uid);
public async ValueTask<AvatarDataExcel?> AddAvatar(int avatarId, bool sync = true)
public async ValueTask<AvatarDataExcel?> AddAvatar(int avatarId, int level = 1, int? star = null, bool sync = true)
{
if (AvatarData.Avatars.Any(a => a.AvatarId == avatarId)) return null;
GameData.AvatarData.TryGetValue(avatarId, out var avatarExcel);
if (avatarExcel == null) return null;
var avatar = new AvatarInfo
{
Level = 1,
Level = level,
Timestamp = Extensions.GetUnixSec(),
Star = avatarExcel.UnlockStar,
Star = star ?? avatarExcel.UnlockStar,
DressId = avatarExcel.DefaultDressId,
DressList = {avatarExcel.DefaultDressId},
AvatarId = avatarExcel.AvatarID,
@@ -39,15 +40,13 @@ public class AvatarManager(PlayerInstance player) : BasePlayerManager(player)
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);
var item = await Player.InventoryManager!.AddItem(avatarExcel.InitialWeapon, 1, ItemMainTypeEnum.Weapon, weaponConfig.MaxLv, avatarId, sync: sync);
if (item != null)
{
avatar.WeaponUniqueId = item!.UniqueId;
};
};
AvatarData.Avatars.Add(avatar);
if (sync) await Player.SendPacket(new PacketGetAvatarDataRsp(new List<AvatarInfo> { avatar }, false));

View File

@@ -3,6 +3,7 @@ using KianaBH.Database;
using KianaBH.Database.Inventory;
using KianaBH.Enums.Item;
using KianaBH.GameServer.Game.Player;
using KianaBH.GameServer.Server.Packet.Send.Item;
using KianaBH.Proto;
using KianaBH.Util;
using static KianaBH.Proto.MasterPupilRetcode.Types;
@@ -13,8 +14,7 @@ public class InventoryManager(PlayerInstance player) : BasePlayerManager(player)
{
public InventoryData Data = DatabaseHelper.GetInstanceOrCreateNew<InventoryData>(player.Uid);
public async ValueTask<ItemData?> AddItem(int itemId, int count, ItemMainTypeEnum type, int level = 1, int equipAvatar = 0, bool notify = true,
bool sync = true)
public async ValueTask<ItemData?> AddItem(int itemId, int count, ItemMainTypeEnum type, int level = 1, int equipAvatar = 0, bool sync = true)
{
ItemData? itemData = null;
@@ -34,6 +34,8 @@ public class InventoryManager(PlayerInstance player) : BasePlayerManager(player)
break;
}
if (sync) await Player.SendPacket(new PacketGetEquipmentDataRsp(Player));
return itemData;
}

View File

@@ -7,6 +7,8 @@ using KianaBH.GameServer.Game.Avatar;
using KianaBH.GameServer.Game.Battle;
using KianaBH.GameServer.Game.Inventory;
using KianaBH.GameServer.Server;
using KianaBH.GameServer.Server.Packet.Send.Avatar;
using KianaBH.GameServer.Server.Packet.Send.Item;
using KianaBH.KcpSharp;
using KianaBH.Util.Extensions;
@@ -109,5 +111,11 @@ public class PlayerInstance(PlayerData data)
return Data.ToProto();
}
public async ValueTask SyncAll()
{
await SendPacket(new PacketGetEquipmentDataRsp(this));
await SendPacket(new PacketGetAvatarDataRsp(AvatarManager!.AvatarData!.Avatars!.ToList(), true));
}
#endregion
}