add interactable scene but cant switch yet

This commit is contained in:
Naruse
2026-04-26 16:21:34 +08:00
parent f3d958a3ab
commit c9fad34a61
7 changed files with 126 additions and 3 deletions

View File

@@ -13,7 +13,7 @@ public class InventoryManager(PlayerInstance player) : BasePlayerManager(player)
public async ValueTask<GameWeaponInfo?> AddWeaponItem(ItemTypeEnum genre, uint detail, uint particular, uint level = 1)
{
if (genre != ItemTypeEnum.TYPE_WEAPON) return null;
var weaponData = GameData.WeaponData.Values.FirstOrDefault(x => x.Genre == (int)genre && x.Detail == detail && x.Particular == particular);
var weaponData = GameData.WeaponData.Values.FirstOrDefault(x => x.Genre == (int)genre && x.Detail == detail && x.Particular == particular && x.Level == level);
if (weaponData == null) return null;
var templateId = GameResourceTemplateId.FromGdpl((uint)genre,detail,particular,level);
@@ -50,7 +50,7 @@ public class InventoryManager(PlayerInstance player) : BasePlayerManager(player)
public async ValueTask<GameSkinInfo?> AddSkinItem(ItemTypeEnum genre, uint detail, uint particular, uint level = 1)
{
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);
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;
var templateId = GameResourceTemplateId.FromGdpl((uint)genre,detail,particular,level);
@@ -82,4 +82,58 @@ public class InventoryManager(PlayerInstance player) : BasePlayerManager(player)
var templateId = GameResourceTemplateId.FromGdpl((uint)genre,detail,particular,level);
return InventoryData.Skins.Values.FirstOrDefault(x => x.TemplateId == templateId);
}
public async ValueTask<BaseGameItemInfo?> AddArItem(ItemTypeEnum genre, uint detail, uint particular, uint level = 1)
{
if (genre != ItemTypeEnum.TYPE_AR) return null;
var arData = GameData.ArItemData.Values.FirstOrDefault(x => x.Genre == (int)genre && x.Detail == detail && x.Particular == particular && x.Level == level);
if (arData == null) return null;
var templateId = GameResourceTemplateId.FromGdpl((uint)genre, detail, particular, level);
if (InventoryData.Items.Values.Any(x => x.TemplateId == templateId)) return null;
var arInfo = new BaseGameItemInfo
{
TemplateId = templateId,
UniqueId = InventoryData.NextUniqueUid++,
Flag = ItemFlagEnum.FLAG_READED,
ItemCount = 1
};
InventoryData.Items[arInfo.UniqueId] = arInfo;
return arInfo;
}
public async ValueTask<BaseGameItemInfo?> AddManifestationItem(ItemTypeEnum genre, uint detail, uint particular, uint level = 1)
{
if (genre != ItemTypeEnum.TYPE_MANIFESTATION) return null;
var manifestData = GameData.ManifestationData.Values.FirstOrDefault(x => x.Genre == (int)genre && x.Detail == detail && x.Particular == particular && x.Level == level);
if (manifestData == null) return null;
var templateId = GameResourceTemplateId.FromGdpl((uint)genre, detail, particular, level);
if (InventoryData.Items.Values.Any(x => x.TemplateId == templateId)) return null;
var manifestInfo = new BaseGameItemInfo
{
TemplateId = templateId,
UniqueId = InventoryData.NextUniqueUid++,
Flag = ItemFlagEnum.FLAG_READED,
ItemCount = 1
};
InventoryData.Items[manifestInfo.UniqueId] = manifestInfo;
return manifestInfo;
}
public BaseGameItemInfo? GetNormalItem(uint uniqueId)
{
return InventoryData.Items.GetValueOrDefault(uniqueId);
}
public BaseGameItemInfo? GetNormalItemByTemplateId(ulong templateId)
{
return InventoryData.Items.Values.FirstOrDefault(x => x.TemplateId == templateId);
}
public BaseGameItemInfo? GetNormalItemGDPL(ItemTypeEnum genre, uint detail, uint particular, uint level)
{
var templateId = GameResourceTemplateId.FromGdpl((uint)genre, detail, particular, level);
return InventoryData.Items.Values.FirstOrDefault(x => x.TemplateId == templateId);
}
}

View File

@@ -52,6 +52,14 @@ public class PlayerInstance(PlayerGameData data)
{
await InventoryManager.AddWeaponItem((ItemTypeEnum)weapon.Genre, weapon.Detail, weapon.Particular, weapon.Level);
}
foreach (var ar in GameData.ArItemData.Values)
{
await InventoryManager.AddArItem((ItemTypeEnum)ar.Genre, ar.Detail, ar.Particular, ar.Level);
}
foreach (var manifest in GameData.ManifestationData.Values)
{
await InventoryManager.AddManifestationItem((ItemTypeEnum)manifest.Genre, manifest.Detail, manifest.Particular, manifest.Level);
}
foreach (var card in GameData.CardData.Values)
{
await CharacterManager.AddCharacter((ItemTypeEnum)card.Genre, card.Detail, card.Particular, card.Level);
@@ -168,6 +176,7 @@ public class PlayerInstance(PlayerGameData data)
},
};
foreach (var item in InventoryManager.InventoryData.Items.Values) proto.Items.Add(item.ToProto());
foreach (var weapon in InventoryManager.InventoryData.Weapons.Values) proto.Items.Add(weapon.ToProto());
foreach (var skin in InventoryManager.InventoryData.Skins.Values) proto.Items.Add(skin.ToProto());
foreach (var chara in CharacterManager.CharacterData.Characters) proto.Items.Add(chara.ToProto());

View File

@@ -0,0 +1,13 @@
namespace MikuSB.GameServer.Server.CallGS.Handlers.Scene;
// Response:{sErr:true or false}
[CallGSApi("ChangeMainScene")]
public class ChangeMainScene : ICallGSHandler
{
public async Task Handle(Connection connection, string param, ushort seqNo)
{
string rsp = $"{{\"sErr\":false}}";
// TODO change scene with ExtraSync
await CallGSRouter.SendScript(connection, "ChangeMainScene", rsp);
}
}