mirror of
https://github.com/MikuLeaks/KianaBH3.git
synced 2025-12-13 05:14:46 +01:00
feat: add valk command
This commit is contained in:
42
GameServer/Command/Commands/CommandValk.cs
Normal file
42
GameServer/Command/Commands/CommandValk.cs
Normal file
@@ -0,0 +1,42 @@
|
||||
using KianaBH.Data;
|
||||
using KianaBH.Enums.Player;
|
||||
using KianaBH.Internationalization;
|
||||
|
||||
namespace KianaBH.GameServer.Command.Commands;
|
||||
|
||||
[CommandInfo("valk", "Game.Command.Valk.Desc", "Game.Command.Valk.Usage", ["v"], [PermEnum.Admin, PermEnum.Support])]
|
||||
public class CommandValk : ICommands
|
||||
{
|
||||
[CommandMethod("add")]
|
||||
public async ValueTask GetRole(CommandArg arg)
|
||||
{
|
||||
if (!await arg.CheckOnlineTarget()) return;
|
||||
|
||||
var valkId = arg.GetInt(0);
|
||||
if (await arg.GetOption('l') is not int level) return;
|
||||
if (await arg.GetOption('s') is not int star) return;
|
||||
|
||||
level = Math.Clamp(level, 1, 80);
|
||||
star = Math.Clamp(star, 1, 5);
|
||||
|
||||
if (valkId == -1)
|
||||
{
|
||||
// add all
|
||||
foreach (var config in GameData.AvatarData.Values)
|
||||
await arg.Target!.Player!.AvatarManager!.AddAvatar(config.AvatarID, level, star,false);
|
||||
await arg.SendMsg(I18NManager.Translate("Game.Command.Valk.ValkAddedAll"));
|
||||
await arg.Target!.Player!.SyncAll();
|
||||
}
|
||||
else
|
||||
{
|
||||
var valk = await arg.Target!.Player!.AvatarManager!.AddAvatar(valkId, level, star);
|
||||
if (valk == null)
|
||||
{
|
||||
await arg.SendMsg(I18NManager.Translate("Game.Command.Valk.ValkNotFound"));
|
||||
return;
|
||||
}
|
||||
await arg.SendMsg(I18NManager.Translate("Game.Command.Valk.ValkAdded",
|
||||
valk!.FaceAnimationGroupName ?? valkId.ToString()));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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));
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
}
|
||||
@@ -8,7 +8,7 @@ public class PacketGetEquipmentDataRsp : BasePacket
|
||||
{
|
||||
public PacketGetEquipmentDataRsp(PlayerInstance player) : base(CmdIds.GetEquipmentDataRsp)
|
||||
{
|
||||
var proto = new GetEquipmentDataRsp // TODO
|
||||
var proto = new GetEquipmentDataRsp
|
||||
{
|
||||
WeaponList = { player.InventoryManager!.Data.WeaponItems.Select(weapon => weapon.ToWeaponProto()) }
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user