feat: add stigmata to inventory & giveall command

This commit is contained in:
Naruse
2025-06-15 08:42:26 +08:00
parent 5da6892d76
commit 1751dc6cbb
7 changed files with 79 additions and 61 deletions

View File

@@ -24,13 +24,13 @@ public class ItemData
public int Count { get; set; } public int Count { get; set; }
public int Level { get; set; } public int Level { get; set; }
public int Exp { get; set; } public int Exp { get; set; }
public bool Locked { get; set; } public bool IsLocked { get; set; }
public bool AffixIdentify { get; set; } public bool IsAffixIdentify { get; set; }
public uint CancelLockedTime { get; set; } public uint CancelLockedTime { get; set; }
public bool Extracted { get; set; } public bool Extracted { get; set; }
public int SlotNum { get; set; } public int SlotNum { get; set; }
public int Refine { get; set; } public int RefineValue { get; set; }
public int Promote { get; set; } public int PromoteTimes { get; set; }
public int Homology { get; set; } public int Homology { get; set; }
public List<int> QuantumBranchLists { get; set; } = []; public List<int> QuantumBranchLists { get; set; } = [];
public List<Rune> RuneLists { get; set; } = []; public List<Rune> RuneLists { get; set; } = [];
@@ -56,10 +56,57 @@ public class ItemData
UniqueId = (uint)UniqueId, UniqueId = (uint)UniqueId,
Level = (uint)Level, Level = (uint)Level,
Exp = (uint)Exp, Exp = (uint)Exp,
IsProtected = Locked, IsProtected = IsLocked,
IsExtracted = Extracted, IsExtracted = Extracted,
}; };
} }
public Stigmata ToStigmataProto()
{
return new Stigmata
{
Id= (uint)ItemId,
UniqueId= (uint)UniqueId,
Level= (uint)Level,
Exp= (uint)Exp,
SlotNum = (uint)SlotNum,
RefineValue = (uint)RefineValue,
PromoteTimes = (uint)PromoteTimes,
IsProtected= IsLocked,
IsAffixIdentify = IsAffixIdentify,
RuneList =
{
RuneLists.Select(x => new StigmataRune
{
RuneId = (uint)x.RuneId,
StrengthPercent = (uint)x.Strength,
})
},
WaitSelectRuneList =
{
WaitSelectRuneLists.Select(x => new StigmataRune
{
RuneId = (uint)x.RuneId,
StrengthPercent = (uint)x.Strength,
})
},
WaitSelectRuneGroupList =
{
WaitSelectRuneGroupLists.Select(x => new StigmataRuneGroup
{
UniqueId = (uint)x.UniqueId,
RuneList =
{
RuneLists.Select(l => new StigmataRune
{
RuneId = (uint)l.RuneId,
StrengthPercent = (uint)l.Strength,
})
}
})
}
};
}
} }
public class RuneGroup public class RuneGroup

View File

@@ -35,21 +35,13 @@ public class ServerTextEN
/// </summary> /// </summary>
public class WordTextEN public class WordTextEN
{ {
public string Rank => "Rank"; public string Star => "Star";
public string Avatar => "Avatar"; public string Valk => "Valkyrie";
public string Material => "Material"; public string Material => "Material";
public string Pet => "Pet"; public string Stigmata => "Stigmata";
public string Relic => "Relic";
public string Weapon => "Weapon"; public string Weapon => "Weapon";
public string Talent => "Talent";
public string Banner => "Gacha"; public string Banner => "Gacha";
public string Activity => "Activity"; public string Activity => "Activity";
public string CdKey => "CdKey";
public string VideoKey => "VideoKey";
public string Buff => "Blessing";
public string Miracle => "Curio";
public string Unlock => "Luxury";
public string TrainParty => "TrainParty";
// server info // server info
public string Config => "Config File"; public string Config => "Config File";
@@ -60,8 +52,6 @@ public class WordTextEN
public string CustomData => "Custom Data"; public string CustomData => "Custom Data";
public string Database => "Database"; public string Database => "Database";
public string Command => "Command"; public string Command => "Command";
public string SSL => "SSL";
public string Ec2b => "Ec2b";
public string SdkServer => "Web Server"; public string SdkServer => "Web Server";
public string Handler => "Packet Handler"; public string Handler => "Packet Handler";
public string Dispatch => "Global Dispatch"; public string Dispatch => "Global Dispatch";
@@ -69,39 +59,6 @@ public class WordTextEN
public string Handbook => "Handbook"; public string Handbook => "Handbook";
public string NotFound => "Not Found"; public string NotFound => "Not Found";
public string Error => "Error"; public string Error => "Error";
public string FloorInfo => "Floor File";
public string FloorGroupInfo => "Floor Group File";
public string FloorMissingResult => "Teleportation and World Generation";
public string FloorGroupMissingResult => "Teleportation, Monster Battles, and World Generation";
public string Mission => "Mission";
public string MissionInfo => "Mission File";
public string SubMission => "Sub Mission";
public string SubMissionInfo => "Sub Mission File";
public string MazeSkill => "Maze Skill";
public string MazeSkillInfo => "Maze Skill File";
public string Dialogue => "Simulated Universe Event";
public string DialogueInfo => "Simulated Universe Event File";
public string Performance => "Performance";
public string PerformanceInfo => "Performance File";
public string RogueChestMap => "Simulated Universe Map";
public string RogueChestMapInfo => "Simulated Universe Map File";
public string ChessRogueRoom => "Simulated Universe DLC";
public string ChessRogueRoomInfo => "Simulated Universe DLC File";
public string SummonUnit => "Summon Unit";
public string SummonUnitInfo => "Summon Unit File";
public string RogueTournRoom => "Divergent Rogue Room";
public string RogueTournRoomInfo => "Divergent Rogue Room File";
public string TypesOfRogue => "types of rogue";
public string RogueMagicRoom => "Unknowable Domain Room";
public string RogueMagicRoomInfo => "Unknowable Domain Room File";
public string RogueDiceSurface => "Dice Surface Effect";
public string RogueDiceSurfaceInfo => "Dice Surface Effect File";
public string AdventureModifier => "AdventureModifier";
public string AdventureModifierInfo => "AdventureModifier File";
public string RogueMapGen => "RogueMapGen File";
public string RogueMiracleGroup => "RogueMiracleGroup File";
public string RogueMiracleEffectGen => "RogueMiracleEffectGen File";
public string DatabaseAccount => "Database Account"; public string DatabaseAccount => "Database Account";
public string Tutorial => "Tutorial"; public string Tutorial => "Tutorial";
} }
@@ -245,10 +202,11 @@ public class ValkTextEN
public class GiveAllTextEN public class GiveAllTextEN
{ {
public string Desc => "Give all items of specified type\n" + public string Desc => "Give all items of specified type\n" +
"weapon: weapons"; "weapon,stigmata";
public string Usage => public string Usage =>
"Usage: /giveall weapon"; "Usage: /giveall weapon\n\n" +
"Usage: /giveall stigmata";
public string GiveAllItems => "Granted all {0}"; public string GiveAllItems => "Granted all {0}";
} }

View File

@@ -16,7 +16,19 @@ public class CommandGiveall : ICommands
{ {
var item = await arg.Target!.Player!.InventoryManager!.AddItem(conf.ID, 1, ItemMainTypeEnum.Weapon, conf.MaxLv, sync:false); var item = await arg.Target!.Player!.InventoryManager!.AddItem(conf.ID, 1, ItemMainTypeEnum.Weapon, conf.MaxLv, sync:false);
} }
await arg.Target!.Player!.SyncWeapon(); await arg.Target!.Player!.SyncInventory();
await arg.SendMsg(I18NManager.Translate("Game.Command.GiveAll.GiveAllItems", I18NManager.Translate("Word.Weapon"))); await arg.SendMsg(I18NManager.Translate("Game.Command.GiveAll.GiveAllItems", I18NManager.Translate("Word.Weapon")));
} }
[CommandMethod("stigmata")]
public async ValueTask GiveStigmata(CommandArg arg)
{
if (!await arg.CheckOnlineTarget()) return;
foreach (var conf in GameData.StigmataData.Values.Where(stigmata => stigmata.Rarity == stigmata.MaxRarity))
{
var item = await arg.Target!.Player!.InventoryManager!.AddItem(conf.ID, 1, ItemMainTypeEnum.Stigmata, conf.MaxLv, sync: false);
}
await arg.Target!.Player!.SyncInventory();
await arg.SendMsg(I18NManager.Translate("Game.Command.GiveAll.GiveAllItems", I18NManager.Translate("Word.Stigmata")));
}
} }

View File

@@ -30,6 +30,10 @@ public class InventoryManager(PlayerInstance player) : BasePlayerManager(player)
if (weaponConfig == null) return null; if (weaponConfig == null) return null;
itemData = await PutItem(itemId, 1, type, level, equipAvatar: equipAvatar, uniqueId: ++Data.NextUniqueId); itemData = await PutItem(itemId, 1, type, level, equipAvatar: equipAvatar, uniqueId: ++Data.NextUniqueId);
break; break;
case ItemMainTypeEnum.Stigmata:
GameData.StigmataData.TryGetValue(itemId, out var stigmataConfig);
itemData = await PutItem(itemId, 1, type, level, uniqueId: ++Data.NextUniqueId);
break;
default: default:
break; break;
} }
@@ -63,7 +67,6 @@ public class InventoryManager(PlayerInstance player) : BasePlayerManager(player)
item = oldItem; item = oldItem;
break; break;
} }
Data.MaterialItems.Add(item); Data.MaterialItems.Add(item);
break; break;
case ItemMainTypeEnum.Weapon: case ItemMainTypeEnum.Weapon:
@@ -71,7 +74,6 @@ public class InventoryManager(PlayerInstance player) : BasePlayerManager(player)
{ {
return item; return item;
} }
Data.WeaponItems.Add(item); Data.WeaponItems.Add(item);
break; break;
case ItemMainTypeEnum.Stigmata: case ItemMainTypeEnum.Stigmata:

View File

@@ -111,7 +111,7 @@ public class PlayerInstance(PlayerData data)
return Data.ToProto(); return Data.ToProto();
} }
public async ValueTask SyncWeapon() public async ValueTask SyncInventory()
{ {
await SendPacket(new PacketGetEquipmentDataRsp(this)); await SendPacket(new PacketGetEquipmentDataRsp(this));
} }

View File

@@ -2,7 +2,6 @@ using Google.Protobuf.Collections;
using KianaBH.Data; using KianaBH.Data;
using KianaBH.KcpSharp; using KianaBH.KcpSharp;
using KianaBH.Proto; using KianaBH.Proto;
using KianaBH.Util.Extensions;
namespace KianaBH.GameServer.Server.Packet.Send.Activity; namespace KianaBH.GameServer.Server.Packet.Send.Activity;
@@ -31,8 +30,6 @@ public class PacketGeneralActivityGetMainInfoRsp : BasePacket
ExchangeTimes = 1, ExchangeTimes = 1,
}; };
return activity; return activity;
}); });

View File

@@ -10,7 +10,9 @@ public class PacketGetEquipmentDataRsp : BasePacket
{ {
var proto = new GetEquipmentDataRsp var proto = new GetEquipmentDataRsp
{ {
WeaponList = { player.InventoryManager!.Data.WeaponItems.Select(weapon => weapon.ToWeaponProto()) } WeaponList = { player.InventoryManager!.Data.WeaponItems.Select(weapon => weapon.ToWeaponProto()) },
StigmataList = { player.InventoryManager!.Data.StigmataItems.Select(stigmata => stigmata.ToStigmataProto()) },
MaterialList = { player.InventoryManager!.Data.MaterialItems.Select(material => material.ToMaterialProto()) }
}; };
SetData(proto); SetData(proto);