mirror of
https://github.com/MikuLeaks/KianaBH3.git
synced 2025-12-14 13:54:43 +01:00
Init enter game
This commit is contained in:
86
GameServer/Game/Inventory/InventoryManager.cs
Normal file
86
GameServer/Game/Inventory/InventoryManager.cs
Normal file
@@ -0,0 +1,86 @@
|
||||
using KianaBH.Data;
|
||||
using KianaBH.Database;
|
||||
using KianaBH.Database.Inventory;
|
||||
using KianaBH.Enums.Item;
|
||||
using KianaBH.GameServer.Game.Player;
|
||||
using KianaBH.Proto;
|
||||
using KianaBH.Util;
|
||||
using static KianaBH.Proto.MasterPupilRetcode.Types;
|
||||
|
||||
namespace KianaBH.GameServer.Game.Inventory;
|
||||
|
||||
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)
|
||||
{
|
||||
ItemData? itemData = null;
|
||||
|
||||
switch (type)
|
||||
{
|
||||
case ItemMainTypeEnum.Material:
|
||||
GameData.MaterialData.TryGetValue(itemId, out var materialConfig);
|
||||
if (materialConfig == null) return null;
|
||||
itemData = await PutItem(itemId, count, type);
|
||||
break;
|
||||
case ItemMainTypeEnum.Weapon:
|
||||
GameData.WeaponData.TryGetValue(itemId, out var weaponConfig);
|
||||
if (weaponConfig == null) return null;
|
||||
itemData = await PutItem(itemId, 1, type, level, equipAvatar: equipAvatar, uniqueId: ++Data.NextUniqueId);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return itemData;
|
||||
}
|
||||
|
||||
public async ValueTask<ItemData> PutItem(int itemId, int count, ItemMainTypeEnum type, int level = 0,
|
||||
int exp = 0, int equipAvatar = 0, int uniqueId = 0)
|
||||
{
|
||||
var item = new ItemData
|
||||
{
|
||||
ItemId = itemId,
|
||||
Count = count,
|
||||
Level = level,
|
||||
Exp = exp,
|
||||
EquipAvatar = equipAvatar,
|
||||
};
|
||||
|
||||
if (uniqueId > 0) item.UniqueId = uniqueId;
|
||||
|
||||
switch (type)
|
||||
{
|
||||
case ItemMainTypeEnum.Material:
|
||||
var oldItem = Data.MaterialItems.Find(x => x.ItemId == itemId);
|
||||
if (oldItem != null)
|
||||
{
|
||||
oldItem.Count += count;
|
||||
item = oldItem;
|
||||
break;
|
||||
}
|
||||
|
||||
Data.MaterialItems.Add(item);
|
||||
break;
|
||||
case ItemMainTypeEnum.Weapon:
|
||||
if (Data.WeaponItems.Count + 1 > GameConstants.INVENTORY_MAX_EQUIPMENT)
|
||||
{
|
||||
return item;
|
||||
}
|
||||
|
||||
Data.WeaponItems.Add(item);
|
||||
break;
|
||||
case ItemMainTypeEnum.Stigmata:
|
||||
if (Data.StigmataItems.Count + 1 > GameConstants.INVENTORY_MAX_EQUIPMENT)
|
||||
{
|
||||
return item;
|
||||
}
|
||||
Data.StigmataItems.Add(item);
|
||||
break;
|
||||
}
|
||||
|
||||
return item;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user