75 lines
2.5 KiB
C#
75 lines
2.5 KiB
C#
using AscNet.Common;
|
|
using AscNet.Common.Database;
|
|
using AscNet.Common.MsgPack;
|
|
using AscNet.Common.Util;
|
|
using AscNet.Table.V2.share.item;
|
|
using MessagePack;
|
|
|
|
namespace AscNet.GameServer.Handlers
|
|
{
|
|
#region MsgPackScheme
|
|
#pragma warning disable CS8618 // Non-nullable field must contain a non-null value when exiting constructor. Consider declaring as nullable.
|
|
[MessagePackObject(true)]
|
|
public class EquipLevelUpRequest
|
|
{
|
|
public int EquipId;
|
|
public Dictionary<int, int> UseItems;
|
|
public List<int> UseEquipIdList;
|
|
}
|
|
|
|
[MessagePackObject(true)]
|
|
public class EquipLevelUpResponse
|
|
{
|
|
public int Code;
|
|
public int Level;
|
|
public int Exp;
|
|
}
|
|
#pragma warning restore CS8618 // Non-nullable field must contain a non-null value when exiting constructor. Consider declaring as nullable.
|
|
#endregion
|
|
|
|
internal class EquipModule
|
|
{
|
|
[RequestPacketHandler("EquipLevelUpRequest")]
|
|
public static void EquipLevelUpRequestHandler(Session session, Packet.Request packet)
|
|
{
|
|
EquipLevelUpRequest request = packet.Deserialize<EquipLevelUpRequest>();
|
|
|
|
NotifyItemDataList notifyItemData = new();
|
|
int totalExp = 0;
|
|
int totalCost = 0;
|
|
foreach (var item in request.UseItems)
|
|
{
|
|
ItemTable? itemTable = TableReaderV2.Parse<ItemTable>().FirstOrDefault(x => x.Id == item.Key);
|
|
if (itemTable is not null)
|
|
{
|
|
var upgradeInfo = itemTable.GetEquipUpgradeInfo() * item.Value;
|
|
totalExp += upgradeInfo.Exp;
|
|
totalCost += upgradeInfo.Cost;
|
|
notifyItemData.ItemDataList.Add(session.inventory.Do(item.Key, item.Value * -1));
|
|
}
|
|
}
|
|
|
|
notifyItemData.ItemDataList.Add(session.inventory.Do(Inventory.Coin, totalCost * -1));
|
|
session.SendPush(notifyItemData);
|
|
|
|
EquipLevelUpResponse rsp = new()
|
|
{
|
|
Code = 0
|
|
};
|
|
|
|
var upEquip = session.character.AddEquipExp(request.EquipId, totalExp);
|
|
if (upEquip != null)
|
|
{
|
|
rsp.Level = upEquip.Level;
|
|
rsp.Exp = upEquip.Exp;
|
|
|
|
NotifyEquipDataList notifyEquipDataList = new();
|
|
notifyEquipDataList.EquipDataList.Add(upEquip);
|
|
session.SendPush(notifyEquipDataList);
|
|
}
|
|
|
|
session.SendResponse(rsp, packet.Id);
|
|
}
|
|
}
|
|
}
|