Implemented shop, adjusted initialDataCheck
This commit is contained in:
parent
505283a003
commit
b880ac9663
10
SharedProject/Models/ShopFolderData.cs
Normal file
10
SharedProject/Models/ShopFolderData.cs
Normal 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; }
|
||||||
|
}
|
@ -126,4 +126,22 @@ public static class FlagCalculator
|
|||||||
|
|
||||||
return result;
|
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;
|
||||||
|
}
|
||||||
}
|
}
|
@ -17,7 +17,7 @@ public class GetGenericMasterController : BaseController<GetGenericMasterControl
|
|||||||
{
|
{
|
||||||
Result = 1,
|
Result = 1,
|
||||||
VerupNo = 2,
|
VerupNo = 2,
|
||||||
EnableIdBit = Enumerable.Repeat((byte)1, 20).ToArray(),
|
EnableIdBit = FlagCalculator.GetBitArrayTrue(20)
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -4,24 +4,31 @@
|
|||||||
[ApiController]
|
[ApiController]
|
||||||
public class GetShopFolderController : BaseController<GetShopFolderController>
|
public class GetShopFolderController : BaseController<GetShopFolderController>
|
||||||
{
|
{
|
||||||
|
private readonly IGameDataService gameDataService;
|
||||||
|
|
||||||
|
public GetShopFolderController(IGameDataService gameDataService)
|
||||||
|
{
|
||||||
|
this.gameDataService = gameDataService;
|
||||||
|
}
|
||||||
|
|
||||||
[HttpPost]
|
[HttpPost]
|
||||||
[Produces("application/protobuf")]
|
[Produces("application/protobuf")]
|
||||||
public IActionResult GetShopFolder([FromBody] GetShopFolderRequest request)
|
public IActionResult GetShopFolder([FromBody] GetShopFolderRequest request)
|
||||||
{
|
{
|
||||||
Logger.LogInformation("GetShopFolder request : {Request}", request.Stringify());
|
Logger.LogInformation("GetShopFolder request : {Request}", request.Stringify());
|
||||||
|
|
||||||
|
gameDataService.GetTokenDataDictionary().TryGetValue("shopTokenId", out var shopTokenId);
|
||||||
|
|
||||||
|
var shopFolderDictionary = gameDataService.GetShopFolderDictionary();
|
||||||
|
|
||||||
var response = new GetShopFolderResponse
|
var response = new GetShopFolderResponse
|
||||||
{
|
{
|
||||||
Result = 1,
|
Result = 1,
|
||||||
TokenId = 1,
|
TokenId = shopTokenId,
|
||||||
VerupNo = 2
|
VerupNo = 2
|
||||||
};
|
};
|
||||||
|
|
||||||
response.AryShopFolderDatas.Add(new GetShopFolderResponse.ShopFolderData
|
foreach (var shopFolder in shopFolderDictionary) response.AryShopFolderDatas.Add(shopFolder.Value);
|
||||||
{
|
|
||||||
Price = 1,
|
|
||||||
SongNo = 2
|
|
||||||
});
|
|
||||||
|
|
||||||
return Ok(response);
|
return Ok(response);
|
||||||
}
|
}
|
||||||
|
@ -24,14 +24,16 @@ public class InitialDataCheckController : BaseController<InitialDataCheckControl
|
|||||||
Logger.LogInformation("Initial data check request: {Request}", request.Stringify());
|
Logger.LogInformation("Initial data check request: {Request}", request.Stringify());
|
||||||
|
|
||||||
var songIdMax = settings.EnableMoreSongs ? Constants.MUSIC_ID_MAX_EXPANDED : Constants.MUSIC_ID_MAX;
|
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 =
|
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 verupNo1 = new uint[] { 104 };
|
||||||
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 aryVerUp = verupNo1.Select(i => new InitialdatacheckResponse.VerupNoData1
|
var aryVerUp = verupNo1.Select(i => new InitialdatacheckResponse.VerupNoData1
|
||||||
{
|
{
|
||||||
MasterType = i,
|
MasterType = i,
|
||||||
@ -50,7 +52,7 @@ public class InitialDataCheckController : BaseController<InitialDataCheckControl
|
|||||||
response.AryVerupNoData1s.AddRange(aryVerUp);
|
response.AryVerupNoData1s.AddRange(aryVerUp);
|
||||||
|
|
||||||
var danData = new List<InitialdatacheckResponse.VerupNoData2.InformationData>();
|
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
|
danData.Add(new InitialdatacheckResponse.VerupNoData2.InformationData
|
||||||
{
|
{
|
||||||
@ -58,7 +60,7 @@ public class InitialDataCheckController : BaseController<InitialDataCheckControl
|
|||||||
VerupNo = 1
|
VerupNo = 1
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
var verupNo2 = new uint[] { 11, 101, 102, 103, 105 };
|
var verupNo2 = new uint[] { 101 };
|
||||||
foreach (var i in verupNo2)
|
foreach (var i in verupNo2)
|
||||||
{
|
{
|
||||||
var verUp2 = new InitialdatacheckResponse.VerupNoData2
|
var verUp2 = new InitialdatacheckResponse.VerupNoData2
|
||||||
|
@ -26,10 +26,17 @@ public class GameDataService : IGameDataService
|
|||||||
|
|
||||||
private ImmutableDictionary<uint, GetfolderResponse.EventfolderData> folderDictionary =
|
private ImmutableDictionary<uint, GetfolderResponse.EventfolderData> folderDictionary =
|
||||||
ImmutableDictionary<uint, GetfolderResponse.EventfolderData>.Empty;
|
ImmutableDictionary<uint, GetfolderResponse.EventfolderData>.Empty;
|
||||||
|
|
||||||
|
private ImmutableDictionary<uint, GetShopFolderResponse.ShopFolderData> shopFolderDictionary =
|
||||||
|
ImmutableDictionary<uint, GetShopFolderResponse.ShopFolderData>.Empty;
|
||||||
|
|
||||||
private List<uint> musics = new();
|
private List<uint> musics = new();
|
||||||
|
|
||||||
private List<uint> musicsWithUra = new();
|
private List<uint> musicsWithUra = new();
|
||||||
|
|
||||||
|
private List<uint> lockedSongsList = new();
|
||||||
|
|
||||||
|
private Dictionary<string, uint> tokenDataDictionary = new();
|
||||||
|
|
||||||
private readonly DataSettings settings;
|
private readonly DataSettings settings;
|
||||||
|
|
||||||
@ -72,6 +79,21 @@ public class GameDataService : IGameDataService
|
|||||||
{
|
{
|
||||||
return folderDictionary;
|
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()
|
public async Task InitializeAsync()
|
||||||
{
|
{
|
||||||
@ -83,6 +105,9 @@ public class GameDataService : IGameDataService
|
|||||||
var danDataPath = Path.Combine(dataPath, settings.DanDataFileName);
|
var danDataPath = Path.Combine(dataPath, settings.DanDataFileName);
|
||||||
var songIntroDataPath = Path.Combine(dataPath, settings.IntroDataFileName);
|
var songIntroDataPath = Path.Combine(dataPath, settings.IntroDataFileName);
|
||||||
var eventFolderDataPath = Path.Combine(dataPath, settings.EventFolderDataFileName);
|
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))
|
if (File.Exists(compressedMusicInfoPath))
|
||||||
{
|
{
|
||||||
@ -97,12 +122,18 @@ public class GameDataService : IGameDataService
|
|||||||
await using var danDataFile = File.OpenRead(danDataPath);
|
await using var danDataFile = File.OpenRead(danDataPath);
|
||||||
await using var songIntroDataFile = File.OpenRead(songIntroDataPath);
|
await using var songIntroDataFile = File.OpenRead(songIntroDataPath);
|
||||||
await using var eventFolderDataFile = File.OpenRead(eventFolderDataPath);
|
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 infoesData = await JsonSerializer.DeserializeAsync<MusicInfoes>(musicInfoFile);
|
||||||
var attributesData = await JsonSerializer.DeserializeAsync<MusicAttributes>(musicAttributeFile);
|
var attributesData = await JsonSerializer.DeserializeAsync<MusicAttributes>(musicAttributeFile);
|
||||||
var danData = await JsonSerializer.DeserializeAsync<List<DanData>>(danDataFile);
|
var danData = await JsonSerializer.DeserializeAsync<List<DanData>>(danDataFile);
|
||||||
var introData = await JsonSerializer.DeserializeAsync<List<SongIntroductionData>>(songIntroDataFile);
|
var introData = await JsonSerializer.DeserializeAsync<List<SongIntroductionData>>(songIntroDataFile);
|
||||||
var eventFolderData = await JsonSerializer.DeserializeAsync<List<EventFolderData>>(eventFolderDataFile);
|
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);
|
InitializeMusicInfoes(infoesData);
|
||||||
|
|
||||||
@ -113,6 +144,12 @@ public class GameDataService : IGameDataService
|
|||||||
InitializeIntroData(introData);
|
InitializeIntroData(introData);
|
||||||
|
|
||||||
InitializeEventFolderData(eventFolderData);
|
InitializeEventFolderData(eventFolderData);
|
||||||
|
|
||||||
|
InitializeShopFolderData(shopFolderData);
|
||||||
|
|
||||||
|
InitializeTokenData(tokenData);
|
||||||
|
|
||||||
|
InitializeLockedSongsData(lockedSongsData);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void TryDecompressMusicInfo()
|
private static void TryDecompressMusicInfo()
|
||||||
@ -179,7 +216,25 @@ public class GameDataService : IGameDataService
|
|||||||
.ToList();
|
.ToList();
|
||||||
musics.Sort();
|
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)
|
private static GetDanOdaiResponse.OdaiData ToResponseOdaiData(DanData data)
|
||||||
{
|
{
|
||||||
var responseOdaiData = new GetDanOdaiResponse.OdaiData
|
var responseOdaiData = new GetDanOdaiResponse.OdaiData
|
||||||
@ -223,4 +278,15 @@ public class GameDataService : IGameDataService
|
|||||||
|
|
||||||
return responseEventFolderData;
|
return responseEventFolderData;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static GetShopFolderResponse.ShopFolderData ToResponseShopFolderData(ShopFolderData data)
|
||||||
|
{
|
||||||
|
var responseShopFolderData = new GetShopFolderResponse.ShopFolderData
|
||||||
|
{
|
||||||
|
SongNo = data.SongNo,
|
||||||
|
Price = data.Price
|
||||||
|
};
|
||||||
|
|
||||||
|
return responseShopFolderData;
|
||||||
|
}
|
||||||
}
|
}
|
@ -19,5 +19,11 @@ public interface IGameDataService
|
|||||||
public ImmutableDictionary<uint, GetSongIntroductionResponse.SongIntroductionData> GetSongIntroDictionary();
|
public ImmutableDictionary<uint, GetSongIntroductionResponse.SongIntroductionData> GetSongIntroDictionary();
|
||||||
|
|
||||||
public ImmutableDictionary<uint, GetfolderResponse.EventfolderData> GetFolderDictionary();
|
public ImmutableDictionary<uint, GetfolderResponse.EventfolderData> GetFolderDictionary();
|
||||||
|
|
||||||
|
public ImmutableDictionary<uint, GetShopFolderResponse.ShopFolderData> GetShopFolderDictionary();
|
||||||
|
|
||||||
|
public Dictionary<string, uint> GetTokenDataDictionary();
|
||||||
|
|
||||||
|
public List<uint> GetLockedSongsList();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -7,4 +7,10 @@ public class DataSettings
|
|||||||
public string EventFolderDataFileName { get; set; } = "event_folder_data.json";
|
public string EventFolderDataFileName { get; set; } = "event_folder_data.json";
|
||||||
|
|
||||||
public string IntroDataFileName { get; set; } = "intro_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";
|
||||||
}
|
}
|
4
TaikoLocalServer/wwwroot/data/locked_songs_data.json
Normal file
4
TaikoLocalServer/wwwroot/data/locked_songs_data.json
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
{
|
||||||
|
"songNo": [
|
||||||
|
]
|
||||||
|
}
|
6
TaikoLocalServer/wwwroot/data/shop_folder_data.json
Normal file
6
TaikoLocalServer/wwwroot/data/shop_folder_data.json
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
[
|
||||||
|
{
|
||||||
|
"songNo": 2,
|
||||||
|
"price": 0
|
||||||
|
}
|
||||||
|
]
|
4
TaikoLocalServer/wwwroot/data/token_data.json
Normal file
4
TaikoLocalServer/wwwroot/data/token_data.json
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
{
|
||||||
|
"shopTokenId": 4,
|
||||||
|
"kaTokenId": 1000
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user