add support card giveall command

NOTE: need to delete old database because im moving support card to different column
This commit is contained in:
Naruse
2026-04-28 23:08:23 +08:00
parent 069ee6aa2a
commit 5f0de1a9f0
8 changed files with 127 additions and 27 deletions

View File

@@ -36,12 +36,48 @@ public class CommandGiveAll : ICommands
var weapon = await player.InventoryManager!.AddWeaponItem(ItemTypeEnum.TYPE_WEAPON, (uint)detail,(uint)particular,1,(uint)level,false);
if (weapon == null)
{
await arg.SendMsg(I18NManager.Translate("Game.Command.GiveAll.WeaponNotFound"));
await arg.SendMsg(I18NManager.Translate("Game.Command.GiveAll.NotFound", I18NManager.Translate("Word.Weapon")));
return;
}
weapons.Add(weapon);
}
if (weapons.Count > 0) await player.SendPacket(new PacketNtfCallScript(weapons));
await arg.SendMsg(I18NManager.Translate("Game.Command.GiveAll.WeaponAdded", weapons.Count.ToString()));
await arg.SendMsg(I18NManager.Translate("Game.Command.GiveAll.GiveAllItems",
I18NManager.Translate("Word.Weapon"), weapons.Count.ToString()));
}
[CommandMethod("card")]
public async ValueTask GiveAllSupportCard(CommandArg arg)
{
if (!await arg.CheckOnlineTarget()) return;
if (await arg.GetOption('p') is not int particular) return;
if (await arg.GetOption('l') is not int level) return;
var detail = arg.GetInt(0);
var player = arg.Target!.Player!;
List<GameSupportCardInfo> supportCards = [];
if (detail == -1)
{
// add all
foreach (var config in GameData.SupportCardData)
{
var supportCard = await player.InventoryManager!
.AddSupportCardItem(config.Detail, config.Particular, config.Level, (uint)level, false);
if (supportCard != null) supportCards.Add(supportCard);
}
}
else
{
var supportCard = await player.InventoryManager!.AddSupportCardItem((uint)detail, (uint)particular, 1, (uint)level, false);
if (supportCard == null)
{
await arg.SendMsg(I18NManager.Translate("Game.Command.GiveAll.NotFound", I18NManager.Translate("Word.SupportCard")));
return;
}
supportCards.Add(supportCard);
}
if (supportCards.Count > 0) await player.SendPacket(new PacketNtfCallScript(supportCards));
await arg.SendMsg(I18NManager.Translate("Game.Command.GiveAll.GiveAllItems",
I18NManager.Translate("Word.SupportCard"), supportCards.Count.ToString()));
}
}

View File

@@ -110,26 +110,44 @@ public class InventoryManager(PlayerInstance player) : BasePlayerManager(player)
return arInfo;
}
public async ValueTask<BaseGameItemInfo?> AddSupportCardItem(uint detail, uint particular, uint level = 1, bool sendPacket = true)
public async ValueTask<GameSupportCardInfo?> AddSupportCardItem(uint detail, uint particular, uint level = 1, uint cardLevel = 1, bool sendPacket = true)
{
const ItemTypeEnum genre = ItemTypeEnum.TYPE_SUPPORT;
var spCard = GameData.SupportCardData.FirstOrDefault(x => x.Genre == (int)genre && x.Detail == detail && x.Particular == particular && x.Level == level);
if (spCard == null) return null;
var templateId = GameResourceTemplateId.FromGdpl((uint)genre, detail, particular, level);
if (InventoryData.Items.Values.Any(x => x.TemplateId == templateId)) return null;
var info = new BaseGameItemInfo
cardLevel = Math.Clamp(cardLevel, 1, spCard.MaxLevel);
var info = new GameSupportCardInfo
{
TemplateId = templateId,
UniqueId = InventoryData.NextUniqueUid++,
ItemType = genre,
ItemCount = 1
ItemCount = 1,
Level = cardLevel,
};
InventoryData.Items[info.UniqueId] = info;
InventoryData.SupportCards[info.UniqueId] = info;
if (sendPacket) await Player.SendPacket(new PacketNtfCallScript([info]));
return info;
}
public GameSupportCardInfo? GetSupportCardItem(uint uniqueId)
{
return InventoryData.SupportCards.GetValueOrDefault(uniqueId);
}
public GameSupportCardInfo? GetSupportCardByTemplateId(ulong templateId)
{
return InventoryData.SupportCards.Values.FirstOrDefault(x => x.TemplateId == templateId);
}
public GameSupportCardInfo? GetSupportCardItemGDPL(ItemTypeEnum genre, uint detail, uint particular, uint level)
{
var templateId = GameResourceTemplateId.FromGdpl((uint)genre, detail, particular, level);
return InventoryData.SupportCards.Values.FirstOrDefault(x => x.TemplateId == templateId);
}
public async ValueTask<BaseGameItemInfo?> AddManifestationItem(ItemTypeEnum genre, uint detail, uint particular, uint level = 1, bool sendPacket = true)
{
if (genre != ItemTypeEnum.TYPE_MANIFESTATION) return null;

View File

@@ -66,10 +66,6 @@ public class PlayerInstance(PlayerGameData data)
{
await CharacterManager.AddCharacter((ItemTypeEnum)card.Genre, card.Detail, card.Particular, card.Level, sendPacket:false);
}
foreach (var sc in GameData.SupportCardData)
{
await InventoryManager.AddSupportCardItem(sc.Detail, sc.Particular, sc.Level, sendPacket: false);
}
foreach (var supplies in GameData.AllSuppliesData)
{
await InventoryManager.AddSuppliesItem(supplies, 90000, false);

View File

@@ -53,6 +53,21 @@ public class PacketNtfCallScript : BasePacket
SetData(proto);
}
public PacketNtfCallScript(List<GameSupportCardInfo> cards) : base(CmdIds.NtfScript)
{
var proto = new NtfCallScript
{
Api = "",
Arg = "{}",
ExtraSync = new NtfSyncPlayer
{
Items = { cards.Select(x => x.ToProto()) }
}
};
SetData(proto);
}
public PacketNtfCallScript(InventoryData inventory) : base(CmdIds.NtfScript)
{
var proto = new NtfCallScript
@@ -65,6 +80,7 @@ public class PacketNtfCallScript : BasePacket
foreach (var item in inventory.Items.Values) extraSync.Items.Add(item.ToProto());
foreach (var skin in inventory.Skins.Values) extraSync.Items.Add(skin.ToProto());
foreach (var weapon in inventory.Weapons.Values) extraSync.Items.Add(weapon.ToProto());
foreach (var supportCard in inventory.SupportCards.Values) extraSync.Items.Add(supportCard.ToProto());
proto.ExtraSync = extraSync;
SetData(proto);
}