mirror of
https://github.com/MikuLeaks/MikuSB.git
synced 2026-06-04 08:04:01 +00:00
Merge pull request #2 from ahasasjeb/main
This commit is contained in:
@@ -1,4 +1,9 @@
|
||||
using MikuSB.Proto;
|
||||
using MikuSB.Data;
|
||||
using MikuSB.Database;
|
||||
using MikuSB.Database.Inventory;
|
||||
using MikuSB.Enums.Item;
|
||||
using MikuSB.GameServer.Game.Player;
|
||||
using MikuSB.Proto;
|
||||
using System.Text.Json;
|
||||
using System.Text.Json.Nodes;
|
||||
using System.Text.Json.Serialization;
|
||||
@@ -11,9 +16,10 @@ public class GirlSkin_ChangeSkinType : ICallGSHandler
|
||||
public async Task Handle(Connection connection, string param, ushort seqNo)
|
||||
{
|
||||
var req = JsonSerializer.Deserialize<ChangeSkinTypeParam>(param);
|
||||
var skinType = ClampClientSkinType(req?.Type ?? 0);
|
||||
var response = new JsonObject
|
||||
{
|
||||
["nType"] = req?.Type ?? 1,
|
||||
["nType"] = skinType,
|
||||
["nSkinId"] = req?.SkinId
|
||||
};
|
||||
if (req == null)
|
||||
@@ -21,16 +27,22 @@ public class GirlSkin_ChangeSkinType : ICallGSHandler
|
||||
await CallGSRouter.SendScript(connection, "GirlSkin_ChangeSkinType", response.ToJsonString());
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
var player = connection.Player!;
|
||||
var skinData = player.InventoryManager.GetSkinItem(req.SkinId);
|
||||
var skinData = GetOrCreateSkinItem(player, req.SkinId);
|
||||
if (skinData != null)
|
||||
skinData.SkinType = skinType;
|
||||
|
||||
player.InventoryManager.InventoryData.SkinTypesBySkinId ??= [];
|
||||
player.InventoryManager.InventoryData.SkinTypesBySkinId[req.SkinId] = skinType;
|
||||
DatabaseHelper.SaveDatabaseType(player.InventoryManager.InventoryData);
|
||||
|
||||
if (skinData == null)
|
||||
{
|
||||
await CallGSRouter.SendScript(connection, "GirlSkin_ChangeSkinType", response.ToJsonString());
|
||||
return;
|
||||
}
|
||||
|
||||
skinData.SkinType = req.Type;
|
||||
var sync = new NtfSyncPlayer
|
||||
{
|
||||
Items = { skinData.ToProto() }
|
||||
@@ -38,6 +50,42 @@ public class GirlSkin_ChangeSkinType : ICallGSHandler
|
||||
|
||||
await CallGSRouter.SendScript(connection, "GirlSkin_ChangeSkinType", response.ToJsonString(), sync);
|
||||
}
|
||||
|
||||
internal static uint ClampClientSkinType(uint skinType)
|
||||
{
|
||||
return Math.Min(skinType, 1);
|
||||
}
|
||||
|
||||
internal static GameSkinInfo? GetOrCreateSkinItem(PlayerInstance player, uint skinId)
|
||||
{
|
||||
var inventoryData = player.InventoryManager.InventoryData;
|
||||
if (inventoryData.Skins.TryGetValue(skinId, out var skinInfo))
|
||||
return skinInfo;
|
||||
|
||||
if (!GameData.CardSkinData.TryGetValue(skinId, out var skinData))
|
||||
return null;
|
||||
|
||||
var templateId = GameResourceTemplateId.FromGdpl(skinData.Genre, skinData.Detail, skinData.Particular, skinData.Level);
|
||||
skinInfo = player.InventoryManager.GetSkinItemByTemplateId(templateId);
|
||||
if (skinInfo != null)
|
||||
{
|
||||
inventoryData.Skins.Remove(skinInfo.UniqueId);
|
||||
skinInfo.UniqueId = skinId;
|
||||
}
|
||||
else
|
||||
{
|
||||
skinInfo = new GameSkinInfo
|
||||
{
|
||||
UniqueId = skinId,
|
||||
TemplateId = templateId,
|
||||
ItemType = ItemTypeEnum.TYPE_CARD_SKIN,
|
||||
ItemCount = 1
|
||||
};
|
||||
}
|
||||
|
||||
inventoryData.Skins[skinId] = skinInfo;
|
||||
return skinInfo;
|
||||
}
|
||||
}
|
||||
|
||||
internal sealed class ChangeSkinTypeParam
|
||||
|
||||
Reference in New Issue
Block a user