Skip to content

Commit

Permalink
更新至0.4.0(新增世界模式曲目获取支持)
Browse files Browse the repository at this point in the history
1.新增世界模式曲目获取支持
2.修复了Legacy章节体力消耗固定为2的bug
3.修复了Legacy章节残片深化不起作用的bug
4.新增独立的 "/user/me" API接口
5.修复了无法自定义世界模式满体力数的bug(现可在fixed_properties表的max_stamina中设置大于0且可不等于12的满体力数)
  • Loading branch information
Misaka12456 committed Apr 23, 2022
1 parent 68fc555 commit e677d7c
Show file tree
Hide file tree
Showing 10 changed files with 205 additions and 34 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,11 @@
<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
<AssemblyName>MarveCube.Standalone</AssemblyName>
<Version>0.3.7</Version>
<Version>0.4.0</Version>
<Company>123 Open-Source Organization</Company>
<Product>Arcaea Server 2(123 Marvelous Cube) Standalone Version</Product>
<AssemblyVersion>0.3.7</AssemblyVersion>
<FileVersion>0.3.7</FileVersion>
<AssemblyVersion>0.4.0</AssemblyVersion>
<FileVersion>0.4.0</FileVersion>
<Copyright>(C)Copyright 2015-2022 123 Open-Source Organization. All rights reserved.</Copyright>
<AssemblyTitle>123 Marvelous Cube Standalone Version</AssemblyTitle>
<Platforms>x64;ARM64</Platforms>
Expand Down
49 changes: 49 additions & 0 deletions Team123it.Arcaea.MarveCube/Controllers/UserController.cs
Original file line number Diff line number Diff line change
Expand Up @@ -113,6 +113,55 @@ public Task<JObjectResult> register([FromForm]string name,[FromForm]string passw
}));
}

[HttpGet("me")]
public Task<JObjectResult> getMyInfo([FromHeader]string Authorization)
{
return Task.Run(new Func<JObjectResult>(() =>
{
if (PreparingForRelease(HttpContext.Request)) return new ArcaeaAPIException(ArcaeaAPIException.APIExceptionType.PreparingForRelease);
if (Authorization.ToLower().Trim().StartsWith("bearer"))
{
string token = Authorization.Split(" ")[1];
uint? userid = Tokens.GetUserIdByToken(token); //获取token对应的用户id
if (Maintaining(out var players))
{
if (!userid.HasValue || !players.Contains((int)userid.Value))
{
return new ArcaeaAPIException(ArcaeaAPIException.APIExceptionType.ServerMaintaining);
}
}
if (userid.HasValue) //如果获取到了用户id
{
try
{
var p = new PlayerInfo(userid.Value, out _);
return new JObjectResult(new JObject()
{
{ "success", true },
{ "value", p.GetUserBaseInfoData() }
});
}
catch (ArcaeaAPIException ex) //如果发生了异常
{
return ex; //直接返回对应异常的Json
}
catch (Exception) //发生了未知异常
{
return new ArcaeaAPIException(ArcaeaAPIException.APIExceptionType.Other);
}
}
else
{
return new ArcaeaAPIException(ArcaeaAPIException.APIExceptionType.LoggedInAnotherDevice);
}
}
else
{
return new ArcaeaAPIException(ArcaeaAPIException.APIExceptionType.Other);
}
}));
}

[HttpGet("me/save")]
public Task<JObjectResult> cloudFetch([FromHeader]string Authorization)
{
Expand Down
26 changes: 18 additions & 8 deletions Team123it.Arcaea.MarveCube/Core/PlayerInfo.cs
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
using Team123it.Arcaea.MarveCube.Processors.Background;
using Team123it.Arcaea.MarveCube.Processors.Front;
using World = Team123it.Arcaea.MarveCube.Processors.Background.World;
using System.Linq;

namespace Team123it.Arcaea.MarveCube.Core
{
Expand Down Expand Up @@ -412,6 +413,11 @@ public int? Ticket
/// </summary>
public bool? Banned { get; private set; }

/// <summary>
/// 玩家获得的世界模式曲目列表(不包括Beyond曲目)。
/// </summary>
public JArray WorldSongsList { get; set; }

/// <summary>
/// 使用玩家的用户id 初始化 <see cref="PlayerInfo"/> 类的新实例。
/// </summary>
Expand All @@ -422,7 +428,7 @@ public PlayerInfo(uint userid, out bool isExists)
UserId = userid;
using var conn = new MySqlConnection(DatabaseConnectURL);
conn.Open();
var cmd = new MySqlCommand($"SELECT COUNT(*),user_code,name,user_rating,ticket,is_banned,purchases,claimed_presents FROM users WHERE user_id={userid}",conn);
var cmd = new MySqlCommand($"SELECT COUNT(*),user_code,name,user_rating,ticket,is_banned,purchases,claimed_presents,world_songs FROM users WHERE user_id={userid}",conn);
// var tr = conn.BeginTransaction();
var rd = cmd.ExecuteReader();
rd.Read();
Expand All @@ -435,6 +441,7 @@ public PlayerInfo(uint userid, out bool isExists)
Banned = rd.GetBoolean(5);
PurchasedItemsList = (!rd.IsDBNull(6) && !string.IsNullOrWhiteSpace(rd.GetString(6))) ? JArray.Parse(rd.GetString(6)) : null;
ClaimedPresentsList = (!rd.IsDBNull(7) && !string.IsNullOrWhiteSpace(rd.GetString(7))) ? JArray.Parse(rd.GetString(7)) : null;
WorldSongsList = (!rd.IsDBNull(8) && !string.IsNullOrWhiteSpace(rd.GetString(8))) ? JArray.Parse(rd.GetString(8)) : new JArray();
rd.Close();
conn.Close();
isExists = true;
Expand All @@ -450,6 +457,7 @@ public PlayerInfo(uint userid, out bool isExists)
Banned = null;
PurchasedItemsList = null;
ClaimedPresentsList = null;
WorldSongsList = new JArray();
isExists = false;
}
}
Expand All @@ -464,7 +472,7 @@ public PlayerInfo(string usercode, out bool isExists)
UserCode = usercode;
var conn = new MySqlConnection(DatabaseConnectURL);
conn.Open();
var cmd = new MySqlCommand($"SELECT COUNT(*),user_id,name,user_rating,ticket,is_banned,purchases,claimed_presents FROM users WHERE user_code=?usercode", conn);
var cmd = new MySqlCommand($"SELECT COUNT(*),user_id,name,user_rating,ticket,is_banned,purchases,claimed_presents,world_songs FROM users WHERE user_code=?usercode", conn);
cmd.Parameters.Add(new MySqlParameter("?usercode", usercode));
var rd = cmd.ExecuteReader();
rd.Read();
Expand All @@ -477,6 +485,7 @@ public PlayerInfo(string usercode, out bool isExists)
Banned = rd.GetBoolean(5);
PurchasedItemsList = (!rd.IsDBNull(6)) ? JArray.Parse(rd.GetString(6)) : new JArray();
ClaimedPresentsList = (!rd.IsDBNull(7) && !string.IsNullOrWhiteSpace(rd.GetString(7))) ? JArray.Parse(rd.GetString(7)) : null;
WorldSongsList = (!rd.IsDBNull(8) && !string.IsNullOrWhiteSpace(rd.GetString(8))) ? JArray.Parse(rd.GetString(8)) : new JArray();
rd.Close();
conn.Close();
isExists = true;
Expand All @@ -491,6 +500,7 @@ public PlayerInfo(string usercode, out bool isExists)
_potentialint = null;
_ticket = null;
Banned = false;
WorldSongsList = new JArray();
isExists = false;
}
}
Expand Down Expand Up @@ -585,18 +595,18 @@ public JObject GetUserBaseInfoData()
{
r.Add("global_rank", rank!.Value);
}
var worldSongs = WorldSongsList;
using var conn = new MySqlConnection(DatabaseConnectURL);
conn.Open();
var cmd = conn.CreateCommand();
cmd.CommandText = $"SELECT value FROM fixed_properties WHERE `key`='is_byd_chapter_unlocked';";
Console.WriteLine(worldSongs.ToString());
if (Convert.ToBoolean(Convert.ToInt32(cmd.ExecuteScalar())))
{
r.Add("world_songs", FixedDatas.GetPlayerAllOwnBeyondSongIds(UserId!.Value));
}
else
{
r.Add("world_songs", new JArray());
worldSongs.Merge(FixedDatas.GetPlayerAllOwnBeyondSongIds(UserId!.Value));
Console.WriteLine(worldSongs.ToString());
}
r.Add("world_songs", worldSongs);
cmd.CommandText = $"SELECT * FROM users WHERE user_id={UserId}";
var rd = cmd.ExecuteReader();
if (rd.Read()) //如果有玩家数据
Expand Down Expand Up @@ -640,7 +650,7 @@ public JObject GetUserBaseInfoData()
r.Add("stamina", (rd.GetInt32("overflow_staminas") > 0) ? (World.FullStaminas + rd.GetInt32("overflow_staminas")) : World.CalculateCurrentStaminas(rd.IsDBNull(30) ? DateTime.Now : rd.GetDateTime(30), out _));
r.Add("max_stamina_ts", (rd.GetInt32("overflow_staminas") > 0 || rd.IsDBNull(30)) ? 0 : Convert.ToInt64((rd.GetDateTime(30) - DateTime.UnixEpoch).TotalMilliseconds));
r.Add("characters", characters);
r.Add("warning_count", (12 - rd.GetInt32(33) >= 0) ? 0 : Convert.ToInt32((12M - rd.GetInt32(33)) / 3));
r.Add("warning_count", (12 - rd.GetInt32(33) <= 0) ? 0 : Convert.ToInt32((12M - rd.GetInt32(33)) / 3));
var recent_score = new JArray();
if (RecentScore != null)
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -265,6 +265,7 @@ CREATE TABLE `users` (
`purchases` longtext COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`claimed_presents` text COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`overflow_staminas` int(11) NOT NULL DEFAULT 0,
`world_songs` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL,
`totalScore` bigint(20) unsigned NOT NULL DEFAULT 0,
PRIMARY KEY (`user_id`) USING BTREE,
UNIQUE KEY `name` (`name`) USING BTREE
Expand Down Expand Up @@ -296,5 +297,4 @@ INSERT INTO `fixed_properties` (`key`, `value`) VALUES ('core_exp', '250');
INSERT INTO `fixed_properties` (`key`, `value`) VALUES ('is_byd_chapter_unlocked', '1');
INSERT INTO `fixed_properties` (`key`, `value`) VALUES ('level_steps', '[50,100,150,200,250,300,400,500,800,1000,2000,3000,5000,7000,10000,12000,14000,16000,18000,20000,21000,22000,23000,24000,25000,26000,27000,28000,29000,30000]');
INSERT INTO `fixed_properties` (`key`, `value`) VALUES ('max_stamina', '12');
INSERT INTO `fixed_properties` (`key`, `value`) VALUES ('stamina_recover_tick', '1800000');
INSERT INTO `fixed_properties` (`key`, `value`) VALUES ('world_ranking_enabled', '1');
Original file line number Diff line number Diff line change
Expand Up @@ -230,6 +230,7 @@ public static JObject FetchAll(uint userid)
}
}

[Obsolete]
private static JArray GetBlankUnlockList()
{
var unlocks = JObject.Parse(File.ReadAllText(Path.Combine(AppContext.BaseDirectory, "data", "static", "unlocks.json"))).Value<JArray>("unlocks");
Expand Down
Loading

0 comments on commit e677d7c

Please sign in to comment.