mirror of
https://github.com/MikuLeaks/MikuSB.git
synced 2026-06-04 10:43:59 +00:00
add profile item
This commit is contained in:
22
Common/Data/Excel/ProfileExcel.cs
Normal file
22
Common/Data/Excel/ProfileExcel.cs
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
namespace MikuSB.Data.Excel;
|
||||||
|
|
||||||
|
[ResourceEntity("profile.json")]
|
||||||
|
public class ProfileExcel : ExcelResource
|
||||||
|
{
|
||||||
|
public uint Genre { get; set; }
|
||||||
|
public uint Detail { get; set; }
|
||||||
|
public uint Particular { get; set; }
|
||||||
|
public uint Level { get; set; }
|
||||||
|
public string I18n { get; set; } = "";
|
||||||
|
public string LuaType { get; set; } = "";
|
||||||
|
|
||||||
|
public override uint GetId()
|
||||||
|
{
|
||||||
|
return (uint)I18n.GetHashCode();
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void Loaded()
|
||||||
|
{
|
||||||
|
GameData.ProfileData.Add(GetId(), this);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -22,7 +22,7 @@ public static class GameData
|
|||||||
public static List<SupportCardExcel> SupportCardData { get; private set; } = [];
|
public static List<SupportCardExcel> SupportCardData { get; private set; } = [];
|
||||||
public static Dictionary<uint, WeaponSkinExcel> WeaponSkinData { get; private set; } = [];
|
public static Dictionary<uint, WeaponSkinExcel> WeaponSkinData { get; private set; } = [];
|
||||||
public static Dictionary<uint, DailyLevelExcel> DailyLevelData { get; private set; } = [];
|
public static Dictionary<uint, DailyLevelExcel> DailyLevelData { get; private set; } = [];
|
||||||
|
public static Dictionary<uint, ProfileExcel> ProfileData { get; private set; } = [];
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class GameResourceTemplateId
|
public static class GameResourceTemplateId
|
||||||
|
|||||||
24
Common/Enums/Player/ProfileTypeEnum.cs
Normal file
24
Common/Enums/Player/ProfileTypeEnum.cs
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
namespace MikuSB.Enums.Player;
|
||||||
|
|
||||||
|
public enum ProfileShowItemTypeEnum
|
||||||
|
{
|
||||||
|
SHOWITEM_CARD1 = 1, //第1个展示卡
|
||||||
|
SHOWITEM_CARD2 = 2, //第2个展示卡
|
||||||
|
SHOWITEM_CARD3 = 3, //第3个展示卡
|
||||||
|
SHOWITEM_GIRL = 4, //看板娘
|
||||||
|
SHOWITEM_FACE = 5, //头像
|
||||||
|
SHOWITEM_FRAME = 6, //头像框
|
||||||
|
SHOWITEM_CARD4 = 7, //第4个展示卡
|
||||||
|
SHOWITEM_CARD5 = 8, //第5个展示卡
|
||||||
|
SHOWITEM_SKIN1 = 9, //第1个展示皮肤
|
||||||
|
SHOWITEM_SKIN2 = 10, //第2个展示皮肤
|
||||||
|
SHOWITEM_SKIN3 = 11, //第3个展示皮肤
|
||||||
|
SHOWITEM_SKIN4 = 12, //第4个展示皮肤
|
||||||
|
SHOWITEM_SKIN5 = 13, //第5个展示皮肤
|
||||||
|
SHOWITEM_BADGE1 = 14, //第一个展示勋章
|
||||||
|
SHOWITEM_BADGE2 = 15, //第二个展示勋章
|
||||||
|
SHOWITEM_BADGE3 = 16, //第三个展示勋章
|
||||||
|
SHOWITEM_COVER = 17, //展示封面
|
||||||
|
SHOWITEM_NAMECARD = 18, //展示名片
|
||||||
|
SHOWITEM_BUBBLE = 19, //聊天气泡
|
||||||
|
}
|
||||||
@@ -35,6 +35,7 @@ public class ServerTextCHS
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public class WordTextCHS
|
public class WordTextCHS
|
||||||
{
|
{
|
||||||
|
public string Profile => "个人资料";
|
||||||
public string WeaponSkin => "武器皮肤";
|
public string WeaponSkin => "武器皮肤";
|
||||||
public string SupportCard => "支援卡";
|
public string SupportCard => "支援卡";
|
||||||
public string Weapon => "武器";
|
public string Weapon => "武器";
|
||||||
@@ -240,7 +241,8 @@ public class GiveAllTextCHS
|
|||||||
"注意:-1 表示全部";
|
"注意:-1 表示全部";
|
||||||
public string Usage => "用法:/giveall weapon <detail/-1> -p<特定> -l<等級>\n" +
|
public string Usage => "用法:/giveall weapon <detail/-1> -p<特定> -l<等級>\n" +
|
||||||
"用法:/giveall weaponskin <detail/-1> -p<特定>\n" +
|
"用法:/giveall weaponskin <detail/-1> -p<特定>\n" +
|
||||||
"用法:/giveall card <detail/-1> -p<特定> -l<等級>";
|
"用法:/giveall card <detail/-1> -p<特定> -l<等級>" +
|
||||||
|
"用法:/giveall profile <detail/-1> -g<类型> -p<特定> -l<等级>";
|
||||||
public string NotFound => "未找到 {0}!";
|
public string NotFound => "未找到 {0}!";
|
||||||
public string GiveAllItems => "已向玩家添加 {0} 个 {1}!";
|
public string GiveAllItems => "已向玩家添加 {0} 个 {1}!";
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -35,6 +35,7 @@ public class ServerTextCHT
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public class WordTextCHT
|
public class WordTextCHT
|
||||||
{
|
{
|
||||||
|
public string Profile => "個人資料";
|
||||||
public string WeaponSkin => "武器外觀";
|
public string WeaponSkin => "武器外觀";
|
||||||
public string SupportCard => "支援卡";
|
public string SupportCard => "支援卡";
|
||||||
public string Weapon => "武器";
|
public string Weapon => "武器";
|
||||||
@@ -240,7 +241,8 @@ public class GiveAllTextCHT
|
|||||||
"注意:-1 表示全部";
|
"注意:-1 表示全部";
|
||||||
public string Usage => "用法:/giveall weapon <detail/-1> -p<特定> -l<等級>\n" +
|
public string Usage => "用法:/giveall weapon <detail/-1> -p<特定> -l<等級>\n" +
|
||||||
"用法:/giveall weaponskin <detail/-1> -p<特定>\n" +
|
"用法:/giveall weaponskin <detail/-1> -p<特定>\n" +
|
||||||
"用法:/giveall card <detail/-1> -p<特定> -l<等級>";
|
"用法:/giveall card <detail/-1> -p<特定> -l<等級>" +
|
||||||
|
"用法:/giveall profile <detail/-1> -g<類型> -p<特定> -l<等級>";
|
||||||
public string NotFound => "未找到 {0}!";
|
public string NotFound => "未找到 {0}!";
|
||||||
public string GiveAllItems => "已向玩家添加 {0} 個 {1}!";
|
public string GiveAllItems => "已向玩家添加 {0} 個 {1}!";
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -35,6 +35,7 @@ public class ServerTextEN
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public class WordTextEN
|
public class WordTextEN
|
||||||
{
|
{
|
||||||
|
public string Profile => "Profile";
|
||||||
public string WeaponSkin => "Weapon Skin";
|
public string WeaponSkin => "Weapon Skin";
|
||||||
public string Valk => "Valkyrie";
|
public string Valk => "Valkyrie";
|
||||||
public string Material => "Material";
|
public string Material => "Material";
|
||||||
@@ -206,7 +207,8 @@ public class GiveAllTextEN
|
|||||||
"Note: -1 means all";
|
"Note: -1 means all";
|
||||||
public string Usage => "Usage: /giveall weapon <detail/-1> -p<particular> -l<level>\n" +
|
public string Usage => "Usage: /giveall weapon <detail/-1> -p<particular> -l<level>\n" +
|
||||||
"Usage: /giveall weaponskin <detail/-1> -p<particular>\n" +
|
"Usage: /giveall weaponskin <detail/-1> -p<particular>\n" +
|
||||||
"Usage: /giveall card <detail/-1> -p<particular> -l<level>";
|
"Usage: /giveall card <detail/-1> -p<particular> -l<level>" +
|
||||||
|
"Usage: /giveall profile <detail/-1> -g<genre> -p<particular> -l<level>";
|
||||||
public string NotFound => "{0} not found!";
|
public string NotFound => "{0} not found!";
|
||||||
public string GiveAllItems => "Added {0} {1} to player!";
|
public string GiveAllItems => "Added {0} {1} to player!";
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -96,7 +96,7 @@ public class CommandGiveAll : ICommands
|
|||||||
foreach (var config in GameData.WeaponSkinData.Values)
|
foreach (var config in GameData.WeaponSkinData.Values)
|
||||||
{
|
{
|
||||||
var weaponSkin = await player.InventoryManager!
|
var weaponSkin = await player.InventoryManager!
|
||||||
.AddWeaponSkinItem((ItemTypeEnum)config.Genre, config.Detail, config.Particular, 1, false);
|
.AddWeaponSkinItem((ItemTypeEnum)config.Genre, config.Detail, config.Particular, config.Level, false);
|
||||||
if (weaponSkin != null) weaponSkins.Add(weaponSkin);
|
if (weaponSkin != null) weaponSkins.Add(weaponSkin);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -114,4 +114,40 @@ public class CommandGiveAll : ICommands
|
|||||||
await arg.SendMsg(I18NManager.Translate("Game.Command.GiveAll.GiveAllItems",
|
await arg.SendMsg(I18NManager.Translate("Game.Command.GiveAll.GiveAllItems",
|
||||||
I18NManager.Translate("Word.WeaponSkin"), weaponSkins.Count.ToString()));
|
I18NManager.Translate("Word.WeaponSkin"), weaponSkins.Count.ToString()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[CommandMethod("profile")]
|
||||||
|
public async ValueTask GiveAllProfile(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;
|
||||||
|
if (await arg.GetOption('g') is not int genre) return;
|
||||||
|
|
||||||
|
var detail = arg.GetInt(0);
|
||||||
|
var player = arg.Target!.Player!;
|
||||||
|
List<BaseGameItemInfo> profileItems = [];
|
||||||
|
if (detail == -1)
|
||||||
|
{
|
||||||
|
// add all
|
||||||
|
foreach (var config in GameData.ProfileData.Values)
|
||||||
|
{
|
||||||
|
var profile = await player.InventoryManager!
|
||||||
|
.AddProfileItem((ItemTypeEnum)config.Genre, config.Detail, config.Particular, config.Level, false);
|
||||||
|
if (profile != null) profileItems.Add(profile);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
var profile = await player.InventoryManager!.AddProfileItem((ItemTypeEnum)genre, (uint)detail, (uint)particular, (uint)level, false);
|
||||||
|
if (profile == null)
|
||||||
|
{
|
||||||
|
await arg.SendMsg(I18NManager.Translate("Game.Command.GiveAll.NotFound", I18NManager.Translate("Word.Profile")));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
profileItems.Add(profile);
|
||||||
|
}
|
||||||
|
if (profileItems.Count > 0) await player.SendPacket(new PacketNtfCallScript(profileItems));
|
||||||
|
await arg.SendMsg(I18NManager.Translate("Game.Command.GiveAll.GiveAllItems",
|
||||||
|
I18NManager.Translate("Word.Profile"), profileItems.Count.ToString()));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -25,7 +25,7 @@ public class InventoryManager(PlayerInstance player) : BasePlayerManager(player)
|
|||||||
UniqueId = InventoryData.NextUniqueUid++,
|
UniqueId = InventoryData.NextUniqueUid++,
|
||||||
Level = weaponLevel,
|
Level = weaponLevel,
|
||||||
Break = GetWeaponBreak(weaponLevel),
|
Break = GetWeaponBreak(weaponLevel),
|
||||||
ItemType = ItemTypeEnum.TYPE_WEAPON,
|
ItemType = genre,
|
||||||
ItemCount = 1
|
ItemCount = 1
|
||||||
};
|
};
|
||||||
InventoryData.Weapons[weaponInfo.UniqueId] = weaponInfo;
|
InventoryData.Weapons[weaponInfo.UniqueId] = weaponInfo;
|
||||||
@@ -67,13 +67,13 @@ public class InventoryManager(PlayerInstance player) : BasePlayerManager(player)
|
|||||||
if (genre != ItemTypeEnum.TYPE_CARD_SKIN) return null;
|
if (genre != ItemTypeEnum.TYPE_CARD_SKIN) return null;
|
||||||
var skinData = GameData.CardSkinData.Values.FirstOrDefault(x => x.Genre == (int)genre && x.Detail == detail && x.Particular == particular && x.Level == level);
|
var skinData = GameData.CardSkinData.Values.FirstOrDefault(x => x.Genre == (int)genre && x.Detail == detail && x.Particular == particular && x.Level == level);
|
||||||
if (skinData == null) return null;
|
if (skinData == null) return null;
|
||||||
|
|
||||||
var templateId = GameResourceTemplateId.FromGdpl((uint)genre,detail,particular,level);
|
var templateId = GameResourceTemplateId.FromGdpl((uint)genre,detail,particular,level);
|
||||||
|
if (InventoryData.Items.Values.Any(x => x.TemplateId == templateId)) return null;
|
||||||
var skinInfo = new GameSkinInfo
|
var skinInfo = new GameSkinInfo
|
||||||
{
|
{
|
||||||
TemplateId = templateId,
|
TemplateId = templateId,
|
||||||
UniqueId = InventoryData.NextUniqueUid++,
|
UniqueId = InventoryData.NextUniqueUid++,
|
||||||
ItemType = ItemTypeEnum.TYPE_CARD_SKIN,
|
ItemType = genre,
|
||||||
ItemCount = 1
|
ItemCount = 1
|
||||||
};
|
};
|
||||||
InventoryData.Skins[skinInfo.UniqueId] = skinInfo;
|
InventoryData.Skins[skinInfo.UniqueId] = skinInfo;
|
||||||
@@ -111,7 +111,7 @@ public class InventoryManager(PlayerInstance player) : BasePlayerManager(player)
|
|||||||
{
|
{
|
||||||
TemplateId = templateId,
|
TemplateId = templateId,
|
||||||
UniqueId = InventoryData.NextUniqueUid++,
|
UniqueId = InventoryData.NextUniqueUid++,
|
||||||
ItemType = ItemTypeEnum.TYPE_AR,
|
ItemType = genre,
|
||||||
ItemCount = 1
|
ItemCount = 1
|
||||||
};
|
};
|
||||||
InventoryData.Items[arInfo.UniqueId] = arInfo;
|
InventoryData.Items[arInfo.UniqueId] = arInfo;
|
||||||
@@ -171,7 +171,7 @@ public class InventoryManager(PlayerInstance player) : BasePlayerManager(player)
|
|||||||
{
|
{
|
||||||
TemplateId = templateId,
|
TemplateId = templateId,
|
||||||
UniqueId = InventoryData.NextUniqueUid++,
|
UniqueId = InventoryData.NextUniqueUid++,
|
||||||
ItemType = ItemTypeEnum.TYPE_MANIFESTATION,
|
ItemType = genre,
|
||||||
ItemCount = 1
|
ItemCount = 1
|
||||||
};
|
};
|
||||||
InventoryData.Items[manifestInfo.UniqueId] = manifestInfo;
|
InventoryData.Items[manifestInfo.UniqueId] = manifestInfo;
|
||||||
@@ -240,7 +240,7 @@ public class InventoryManager(PlayerInstance player) : BasePlayerManager(player)
|
|||||||
{
|
{
|
||||||
TemplateId = templateId,
|
TemplateId = templateId,
|
||||||
UniqueId = InventoryData.NextUniqueUid++,
|
UniqueId = InventoryData.NextUniqueUid++,
|
||||||
ItemType = ItemTypeEnum.TYPE_WEAPON_SKIN,
|
ItemType = genre,
|
||||||
ItemCount = 1
|
ItemCount = 1
|
||||||
};
|
};
|
||||||
InventoryData.Items[skinInfo.UniqueId] = skinInfo;
|
InventoryData.Items[skinInfo.UniqueId] = skinInfo;
|
||||||
@@ -249,4 +249,25 @@ public class InventoryManager(PlayerInstance player) : BasePlayerManager(player)
|
|||||||
|
|
||||||
return skinInfo;
|
return skinInfo;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public async ValueTask<BaseGameItemInfo?> AddProfileItem(ItemTypeEnum genre, uint detail, uint particular, uint level = 1, bool sendPacket = true)
|
||||||
|
{
|
||||||
|
if (genre < ItemTypeEnum.TYPE_PROFILE || genre > ItemTypeEnum.TYPE_ANALYST) return null;
|
||||||
|
var profileData = GameData.ProfileData.Values.FirstOrDefault(x => x.Genre == (int)genre && x.Detail == detail && x.Particular == particular && x.Level == level);
|
||||||
|
if (profileData == null) return null;
|
||||||
|
var templateId = GameResourceTemplateId.FromGdpl((uint)genre, detail, particular, level);
|
||||||
|
if (InventoryData.Items.Values.Any(x => x.TemplateId == templateId)) return null;
|
||||||
|
var profileInfo = new BaseGameItemInfo
|
||||||
|
{
|
||||||
|
TemplateId = templateId,
|
||||||
|
UniqueId = InventoryData.NextUniqueUid++,
|
||||||
|
ItemType = genre,
|
||||||
|
ItemCount = 1
|
||||||
|
};
|
||||||
|
InventoryData.Items[profileInfo.UniqueId] = profileInfo;
|
||||||
|
|
||||||
|
if (sendPacket) await Player.SendPacket(new PacketNtfCallScript([profileInfo]));
|
||||||
|
|
||||||
|
return profileInfo;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -11,7 +11,7 @@ public class Daily_SetSelectSuit : ICallGSHandler
|
|||||||
var req = JsonSerializer.Deserialize<GirlWeaponSkinParam>(param);
|
var req = JsonSerializer.Deserialize<GirlWeaponSkinParam>(param);
|
||||||
if (req == null)
|
if (req == null)
|
||||||
{
|
{
|
||||||
await CallGSRouter.SendScript(connection, "GirlWeaponSkin_Change", "{}");
|
await CallGSRouter.SendScript(connection, "Daily_SetSelectSuit", "{}");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
var rsp = $"{{\"SuitId\":{req.Suit}}}";
|
var rsp = $"{{\"SuitId\":{req.Suit}}}";
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ public class GirlWeaponSkin_Change : ICallGSHandler
|
|||||||
var req = JsonSerializer.Deserialize<GirlWeaponSkinParam>(param);
|
var req = JsonSerializer.Deserialize<GirlWeaponSkinParam>(param);
|
||||||
if (req == null)
|
if (req == null)
|
||||||
{
|
{
|
||||||
await CallGSRouter.SendScript(connection, "GirlWeaponSkin_Change", "{}");
|
await CallGSRouter.SendScript(connection, "GirlWeaponSkin_Change", "{\"err\":\"error.BadParam\"}");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -33,7 +33,7 @@ public class GirlWeaponSkin_Change : ICallGSHandler
|
|||||||
Items = { cardData.ToProto() }
|
Items = { cardData.ToProto() }
|
||||||
};
|
};
|
||||||
|
|
||||||
await CallGSRouter.SendScript(connection, "GirlWeaponSkin_Change", "{}", sync);
|
await CallGSRouter.SendScript(connection, "GirlWeaponSkin_Change", "null", sync);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
using MikuSB.Database;
|
using MikuSB.Enums.Player;
|
||||||
using MikuSB.Proto;
|
using MikuSB.Proto;
|
||||||
using System.Text.Json;
|
using System.Text.Json;
|
||||||
using System.Text.Json.Serialization;
|
using System.Text.Json.Serialization;
|
||||||
@@ -8,8 +8,6 @@ namespace MikuSB.GameServer.Server.CallGS.Handlers.Misc;
|
|||||||
[CallGSApi("PlayerSetting_ChangeShowCard")]
|
[CallGSApi("PlayerSetting_ChangeShowCard")]
|
||||||
public class PlayerSetting_ChangeShowCard : ICallGSHandler
|
public class PlayerSetting_ChangeShowCard : ICallGSHandler
|
||||||
{
|
{
|
||||||
private const int ShowItemGirlIndex = 4;
|
|
||||||
|
|
||||||
public async Task Handle(Connection connection, string param, ushort seqNo)
|
public async Task Handle(Connection connection, string param, ushort seqNo)
|
||||||
{
|
{
|
||||||
var player = connection.Player!;
|
var player = connection.Player!;
|
||||||
@@ -23,13 +21,9 @@ public class PlayerSetting_ChangeShowCard : ICallGSHandler
|
|||||||
await CallGSRouter.SendScript(connection, "PlayerSetting_ChangeShowCard", "{}");
|
await CallGSRouter.SendScript(connection, "PlayerSetting_ChangeShowCard", "{}");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
player.SetShowItem((int)ProfileShowItemTypeEnum.SHOWITEM_GIRL, card.Guid);
|
||||||
player.SetShowItem(ShowItemGirlIndex, card.Guid);
|
|
||||||
DatabaseHelper.SaveDatabaseType(player.Data);
|
|
||||||
|
|
||||||
var sync = new NtfSyncPlayer();
|
var sync = new NtfSyncPlayer();
|
||||||
sync.ShowItems.AddRange(player.Data.ShowItems);
|
sync.ShowItems.AddRange(player.Data.ShowItems);
|
||||||
|
|
||||||
await CallGSRouter.SendScript(connection, "PlayerSetting_ChangeShowCard", "{}", sync);
|
await CallGSRouter.SendScript(connection, "PlayerSetting_ChangeShowCard", "{}", sync);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,49 @@
|
|||||||
|
using MikuSB.Enums.Player;
|
||||||
|
using MikuSB.Proto;
|
||||||
|
using System.Text.Json;
|
||||||
|
using System.Text.Json.Serialization;
|
||||||
|
|
||||||
|
namespace MikuSB.GameServer.Server.CallGS.Handlers.Misc;
|
||||||
|
|
||||||
|
[CallGSApi("PlayerSetting_SetProfileFace")]
|
||||||
|
public class PlayerSetting_SetProfileFace : ICallGSHandler
|
||||||
|
{
|
||||||
|
public async Task Handle(Connection connection, string param, ushort seqNo)
|
||||||
|
{
|
||||||
|
var player = connection.Player!;
|
||||||
|
var req = JsonSerializer.Deserialize<SetProfileFaceParam>(param);
|
||||||
|
if (req == null)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (req.HeadItemId > 0)
|
||||||
|
{
|
||||||
|
var item = player.InventoryManager.GetNormalItem(req.HeadItemId);
|
||||||
|
if (item == null)
|
||||||
|
{
|
||||||
|
await CallGSRouter.SendScript(connection, "PlayerSetting_SetProfileFace", "{\"err\":\"error.BadParam\"}");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
player.SetShowItem((int)ProfileShowItemTypeEnum.SHOWITEM_FACE, item.UniqueId);
|
||||||
|
}
|
||||||
|
if (req.FrameItemId > 0)
|
||||||
|
{
|
||||||
|
var item = player.InventoryManager.GetNormalItem(req.FrameItemId);
|
||||||
|
if (item == null)
|
||||||
|
{
|
||||||
|
await CallGSRouter.SendScript(connection, "PlayerSetting_SetProfileFace", "{\"err\":\"error.BadParam\"}");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
player.SetShowItem((int)ProfileShowItemTypeEnum.SHOWITEM_FRAME, item.UniqueId);
|
||||||
|
}
|
||||||
|
|
||||||
|
var sync = new NtfSyncPlayer();
|
||||||
|
sync.ShowItems.AddRange(player.Data.ShowItems);
|
||||||
|
await CallGSRouter.SendScript(connection, "PlayerSetting_SetProfileFace", "null", sync);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
internal sealed class SetProfileFaceParam
|
||||||
|
{
|
||||||
|
[JsonPropertyName("nHeadItemID")] public uint HeadItemId { get; set; }
|
||||||
|
[JsonPropertyName("nFrameItemID")] public uint FrameItemId { get; set; }
|
||||||
|
}
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
using MikuSB.Enums.Player;
|
||||||
|
using MikuSB.Proto;
|
||||||
|
using System.Text.Json;
|
||||||
|
using System.Text.Json.Serialization;
|
||||||
|
|
||||||
|
namespace MikuSB.GameServer.Server.CallGS.Handlers.Misc;
|
||||||
|
|
||||||
|
[CallGSApi("PlayerSetting_SetShowBubble")]
|
||||||
|
public class PlayerSetting_SetShowBubble : ICallGSHandler
|
||||||
|
{
|
||||||
|
public async Task Handle(Connection connection, string param, ushort seqNo)
|
||||||
|
{
|
||||||
|
var player = connection.Player!;
|
||||||
|
var req = JsonSerializer.Deserialize<SetShowBubbleParam>(param);
|
||||||
|
if (req == null)
|
||||||
|
return;
|
||||||
|
|
||||||
|
var item = player.InventoryManager.GetNormalItem(req.Id);
|
||||||
|
if (item == null)
|
||||||
|
{
|
||||||
|
await CallGSRouter.SendScript(connection, "PlayerSetting_SetShowBubble", "{\"err\":\"error.BadParam\"}");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
player.SetShowItem((int)ProfileShowItemTypeEnum.SHOWITEM_BUBBLE, item.UniqueId);
|
||||||
|
var sync = new NtfSyncPlayer();
|
||||||
|
sync.ShowItems.AddRange(player.Data.ShowItems);
|
||||||
|
await CallGSRouter.SendScript(connection, "PlayerSetting_SetShowBubble", "null", sync);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
internal sealed class SetShowBubbleParam
|
||||||
|
{
|
||||||
|
[JsonPropertyName("nID")]
|
||||||
|
public uint Id { get; set; }
|
||||||
|
}
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
using MikuSB.Enums.Player;
|
||||||
|
using MikuSB.Proto;
|
||||||
|
using System.Text.Json;
|
||||||
|
using System.Text.Json.Serialization;
|
||||||
|
|
||||||
|
namespace MikuSB.GameServer.Server.CallGS.Handlers.Misc;
|
||||||
|
|
||||||
|
[CallGSApi("PlayerSetting_SetShowCover")]
|
||||||
|
public class PlayerSetting_SetShowCover : ICallGSHandler
|
||||||
|
{
|
||||||
|
public async Task Handle(Connection connection, string param, ushort seqNo)
|
||||||
|
{
|
||||||
|
var player = connection.Player!;
|
||||||
|
var req = JsonSerializer.Deserialize<SetShowCoverParam>(param);
|
||||||
|
if (req == null)
|
||||||
|
return;
|
||||||
|
|
||||||
|
var item = player.InventoryManager.GetNormalItem(req.Id);
|
||||||
|
if (item == null)
|
||||||
|
{
|
||||||
|
await CallGSRouter.SendScript(connection, "PlayerSetting_SetShowCover", "{\"err\":\"error.BadParam\"}");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
player.SetShowItem((int)ProfileShowItemTypeEnum.SHOWITEM_COVER, item.UniqueId);
|
||||||
|
var sync = new NtfSyncPlayer();
|
||||||
|
sync.ShowItems.AddRange(player.Data.ShowItems);
|
||||||
|
await CallGSRouter.SendScript(connection, "PlayerSetting_SetShowCover", "null", sync);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
internal sealed class SetShowCoverParam
|
||||||
|
{
|
||||||
|
[JsonPropertyName("nID")]
|
||||||
|
public uint Id { get; set; }
|
||||||
|
}
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
using MikuSB.Enums.Player;
|
||||||
|
using MikuSB.Proto;
|
||||||
|
using System.Text.Json;
|
||||||
|
using System.Text.Json.Serialization;
|
||||||
|
|
||||||
|
namespace MikuSB.GameServer.Server.CallGS.Handlers.Misc;
|
||||||
|
|
||||||
|
[CallGSApi("PlayerSetting_SetShowNameCard")]
|
||||||
|
public class PlayerSetting_SetShowNameCard : ICallGSHandler
|
||||||
|
{
|
||||||
|
public async Task Handle(Connection connection, string param, ushort seqNo)
|
||||||
|
{
|
||||||
|
var player = connection.Player!;
|
||||||
|
var req = JsonSerializer.Deserialize<SetShowNameCardParam>(param);
|
||||||
|
if (req == null)
|
||||||
|
return;
|
||||||
|
|
||||||
|
var item = player.InventoryManager.GetNormalItem(req.Id);
|
||||||
|
if (item == null)
|
||||||
|
{
|
||||||
|
await CallGSRouter.SendScript(connection, "PlayerSetting_SetShowNameCard", "{\"err\":\"error.BadParam\"}");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
player.SetShowItem((int)ProfileShowItemTypeEnum.SHOWITEM_NAMECARD, item.UniqueId);
|
||||||
|
var sync = new NtfSyncPlayer();
|
||||||
|
sync.ShowItems.AddRange(player.Data.ShowItems);
|
||||||
|
await CallGSRouter.SendScript(connection, "PlayerSetting_SetShowNameCard", "null", sync);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
internal sealed class SetShowNameCardParam
|
||||||
|
{
|
||||||
|
[JsonPropertyName("nID")]
|
||||||
|
public uint Id { get; set; }
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user