1
0
mirror of synced 2024-09-23 19:08:28 +02:00

Implemented shop, adjusted initialDataCheck

This commit is contained in:
S-Sebb?? 2023-09-11 23:07:13 +08:00
parent 505283a003
commit b880ac9663
11 changed files with 145 additions and 16 deletions

View File

@ -0,0 +1,10 @@
using System.Text.Json.Serialization;
namespace SharedProject.Models;
public class ShopFolderData
{
[JsonPropertyName("songNo")] public uint SongNo { get; set; }
[JsonPropertyName("price")] public uint Price { get; set; }
}

View File

@ -126,4 +126,22 @@ public static class FlagCalculator
return result;
}
public static byte[] GetBitArrayTrue(int bitArraySize)
{
var result = new byte[(bitArraySize / 8) + 1];
var bitSet = new BitArray(bitArraySize, true);
bitSet.CopyTo(result, 0);
return result;
}
public static byte[] GetBitArrayFalse(int bitArraySize)
{
var result = new byte[(bitArraySize / 8) + 1];
var bitSet = new BitArray(bitArraySize, false);
bitSet.CopyTo(result, 0);
return result;
}
}

View File

@ -17,7 +17,7 @@ public class GetGenericMasterController : BaseController<GetGenericMasterControl
{
Result = 1,
VerupNo = 2,
EnableIdBit = Enumerable.Repeat((byte)1, 20).ToArray(),
EnableIdBit = FlagCalculator.GetBitArrayTrue(20)
};

View File

@ -4,24 +4,31 @@
[ApiController]
public class GetShopFolderController : BaseController<GetShopFolderController>
{
private readonly IGameDataService gameDataService;
public GetShopFolderController(IGameDataService gameDataService)
{
this.gameDataService = gameDataService;
}
[HttpPost]
[Produces("application/protobuf")]
public IActionResult GetShopFolder([FromBody] GetShopFolderRequest request)
{
Logger.LogInformation("GetShopFolder request : {Request}", request.Stringify());
gameDataService.GetTokenDataDictionary().TryGetValue("shopTokenId", out var shopTokenId);
var shopFolderDictionary = gameDataService.GetShopFolderDictionary();
var response = new GetShopFolderResponse
{
Result = 1,
TokenId = 1,
TokenId = shopTokenId,
VerupNo = 2
};
response.AryShopFolderDatas.Add(new GetShopFolderResponse.ShopFolderData
{
Price = 1,
SongNo = 2
});
foreach (var shopFolder in shopFolderDictionary) response.AryShopFolderDatas.Add(shopFolder.Value);
return Ok(response);
}

View File

@ -24,14 +24,16 @@ public class InitialDataCheckController : BaseController<InitialDataCheckControl
Logger.LogInformation("Initial data check request: {Request}", request.Stringify());
var songIdMax = settings.EnableMoreSongs ? Constants.MUSIC_ID_MAX_EXPANDED : Constants.MUSIC_ID_MAX;
var lockedSongsList = gameDataService.GetLockedSongsList();
var enabledMusicList = gameDataService.GetMusicList().Except(lockedSongsList);
var enabledUraMusicList = gameDataService.GetMusicWithUraList().Except(lockedSongsList);
var enabledArray =
FlagCalculator.GetBitArrayFromIds(gameDataService.GetMusicList(), songIdMax, Logger);
FlagCalculator.GetBitArrayFromIds(enabledMusicList, songIdMax, Logger);
var uraReleaseBit = FlagCalculator.GetBitArrayFromIds(enabledUraMusicList, songIdMax, Logger);
var defaultSongWithUraList = gameDataService.GetMusicWithUraList();
var uraReleaseBit =
FlagCalculator.GetBitArrayFromIds(defaultSongWithUraList, songIdMax, Logger);
var verupNo1 = new uint[] { 2, 3, 4, 5, 6, 7, 8, 13, 15, 24, 25, 26, 27, 28, 29, 30, 31 };
var verupNo1 = new uint[] { 104 };
var aryVerUp = verupNo1.Select(i => new InitialdatacheckResponse.VerupNoData1
{
MasterType = i,
@ -50,7 +52,7 @@ public class InitialDataCheckController : BaseController<InitialDataCheckControl
response.AryVerupNoData1s.AddRange(aryVerUp);
var danData = new List<InitialdatacheckResponse.VerupNoData2.InformationData>();
for (var danId = Constants.MIN_DAN_ID; danId <= 1; danId++)
for (var danId = Constants.MIN_DAN_ID; danId <= 18; danId++)
{
danData.Add(new InitialdatacheckResponse.VerupNoData2.InformationData
{
@ -58,7 +60,7 @@ public class InitialDataCheckController : BaseController<InitialDataCheckControl
VerupNo = 1
});
}
var verupNo2 = new uint[] { 11, 101, 102, 103, 105 };
var verupNo2 = new uint[] { 101 };
foreach (var i in verupNo2)
{
var verUp2 = new InitialdatacheckResponse.VerupNoData2

View File

@ -26,10 +26,17 @@ public class GameDataService : IGameDataService
private ImmutableDictionary<uint, GetfolderResponse.EventfolderData> folderDictionary =
ImmutableDictionary<uint, GetfolderResponse.EventfolderData>.Empty;
private ImmutableDictionary<uint, GetShopFolderResponse.ShopFolderData> shopFolderDictionary =
ImmutableDictionary<uint, GetShopFolderResponse.ShopFolderData>.Empty;
private List<uint> musics = new();
private List<uint> musicsWithUra = new();
private List<uint> lockedSongsList = new();
private Dictionary<string, uint> tokenDataDictionary = new();
private readonly DataSettings settings;
@ -72,6 +79,21 @@ public class GameDataService : IGameDataService
{
return folderDictionary;
}
public ImmutableDictionary<uint, GetShopFolderResponse.ShopFolderData> GetShopFolderDictionary()
{
return shopFolderDictionary;
}
public Dictionary<string, uint> GetTokenDataDictionary()
{
return tokenDataDictionary;
}
public List<uint> GetLockedSongsList()
{
return lockedSongsList;
}
public async Task InitializeAsync()
{
@ -83,6 +105,9 @@ public class GameDataService : IGameDataService
var danDataPath = Path.Combine(dataPath, settings.DanDataFileName);
var songIntroDataPath = Path.Combine(dataPath, settings.IntroDataFileName);
var eventFolderDataPath = Path.Combine(dataPath, settings.EventFolderDataFileName);
var shopFolderDataPath = Path.Combine(dataPath, settings.ShopFolderDataFileName);
var tokenDataPath = Path.Combine(dataPath, settings.TokenDataFileName);
var lockedSongsDataPath = Path.Combine(dataPath, settings.LockedSongsDataFileName);
if (File.Exists(compressedMusicInfoPath))
{
@ -97,12 +122,18 @@ public class GameDataService : IGameDataService
await using var danDataFile = File.OpenRead(danDataPath);
await using var songIntroDataFile = File.OpenRead(songIntroDataPath);
await using var eventFolderDataFile = File.OpenRead(eventFolderDataPath);
await using var shopFolderDataFile = File.OpenRead(shopFolderDataPath);
await using var tokenDataFile = File.OpenRead(tokenDataPath);
await using var lockedSongsDataFile = File.OpenRead(lockedSongsDataPath);
var infoesData = await JsonSerializer.DeserializeAsync<MusicInfoes>(musicInfoFile);
var attributesData = await JsonSerializer.DeserializeAsync<MusicAttributes>(musicAttributeFile);
var danData = await JsonSerializer.DeserializeAsync<List<DanData>>(danDataFile);
var introData = await JsonSerializer.DeserializeAsync<List<SongIntroductionData>>(songIntroDataFile);
var eventFolderData = await JsonSerializer.DeserializeAsync<List<EventFolderData>>(eventFolderDataFile);
var shopFolderData = await JsonSerializer.DeserializeAsync<List<ShopFolderData>>(shopFolderDataFile);
var tokenData = await JsonSerializer.DeserializeAsync<Dictionary<string, uint>>(tokenDataFile);
var lockedSongsData = await JsonSerializer.DeserializeAsync<Dictionary<string, uint[]>>(lockedSongsDataFile);
InitializeMusicInfoes(infoesData);
@ -113,6 +144,12 @@ public class GameDataService : IGameDataService
InitializeIntroData(introData);
InitializeEventFolderData(eventFolderData);
InitializeShopFolderData(shopFolderData);
InitializeTokenData(tokenData);
InitializeLockedSongsData(lockedSongsData);
}
private static void TryDecompressMusicInfo()
@ -179,7 +216,25 @@ public class GameDataService : IGameDataService
.ToList();
musics.Sort();
}
private void InitializeShopFolderData(List<ShopFolderData>? shopFolderData)
{
shopFolderData.ThrowIfNull("Shouldn't happen!");
shopFolderDictionary = shopFolderData.ToImmutableDictionary(data => data.SongNo, ToResponseShopFolderData);
}
private void InitializeTokenData(Dictionary<string, uint>? tokenData)
{
tokenData.ThrowIfNull("Shouldn't happen!");
tokenDataDictionary = tokenData;
}
private void InitializeLockedSongsData(Dictionary<string, uint[]>? lockedSongsData)
{
lockedSongsData.ThrowIfNull("Shouldn't happen!");
lockedSongsList = lockedSongsData["songNo"].ToList();
}
private static GetDanOdaiResponse.OdaiData ToResponseOdaiData(DanData data)
{
var responseOdaiData = new GetDanOdaiResponse.OdaiData
@ -223,4 +278,15 @@ public class GameDataService : IGameDataService
return responseEventFolderData;
}
private static GetShopFolderResponse.ShopFolderData ToResponseShopFolderData(ShopFolderData data)
{
var responseShopFolderData = new GetShopFolderResponse.ShopFolderData
{
SongNo = data.SongNo,
Price = data.Price
};
return responseShopFolderData;
}
}

View File

@ -19,5 +19,11 @@ public interface IGameDataService
public ImmutableDictionary<uint, GetSongIntroductionResponse.SongIntroductionData> GetSongIntroDictionary();
public ImmutableDictionary<uint, GetfolderResponse.EventfolderData> GetFolderDictionary();
public ImmutableDictionary<uint, GetShopFolderResponse.ShopFolderData> GetShopFolderDictionary();
public Dictionary<string, uint> GetTokenDataDictionary();
public List<uint> GetLockedSongsList();
}

View File

@ -7,4 +7,10 @@ public class DataSettings
public string EventFolderDataFileName { get; set; } = "event_folder_data.json";
public string IntroDataFileName { get; set; } = "intro_data.json";
public string ShopFolderDataFileName { get; set; } = "shop_folder_data.json";
public string TokenDataFileName { get; set; } = "token_data.json";
public string LockedSongsDataFileName { get; set; } = "locked_songs_data.json";
}

View File

@ -0,0 +1,4 @@
{
"songNo": [
]
}

View File

@ -0,0 +1,6 @@
[
{
"songNo": 2,
"price": 0
}
]

View File

@ -0,0 +1,4 @@
{
"shopTokenId": 4,
"kaTokenId": 1000
}