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;
|
||||
}
|
||||
|
||||
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,
|
||||
VerupNo = 2,
|
||||
EnableIdBit = Enumerable.Repeat((byte)1, 20).ToArray(),
|
||||
EnableIdBit = FlagCalculator.GetBitArrayTrue(20)
|
||||
};
|
||||
|
||||
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
@ -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();
|
||||
}
|
||||
|
||||
|
@ -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";
|
||||
}
|
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