Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
4de98ce
Merge pull request #1 from peach322/copilot/fix-giveall-command-issue
peach322 May 11, 2026
bef0fa1
Copilot/translate md to chinese english (#2)
AliceJump May 11, 2026
f962911
Update README.md
AliceJump May 11, 2026
445c6d0
Merge branch 'MikuLeaks:main' into main
AliceJump May 12, 2026
4d3fcd2
Merge branch 'MikuLeaks:main' into main
AliceJump May 13, 2026
0681473
Merge branch 'MikuLeaks:main' into main
AliceJump May 13, 2026
03bb2cd
Merge branch 'MikuLeaks:main' into main
AliceJump May 13, 2026
5e87452
Merge branch 'MikuLeaks:main' into main
AliceJump May 13, 2026
b320c4c
Merge branch 'MikuLeaks:main' into main
AliceJump May 13, 2026
d665bba
Enhance login process and player initialization features (#3)
AliceJump May 13, 2026
d815e71
添加自动更新选项到服务器配置
AliceJump May 13, 2026
a2d8975
chore: add build and release workflow
AliceJump May 14, 2026
8bd3648
fix: use valid dotnet-version format
AliceJump May 14, 2026
d417ab7
fix: add RuntimeIdentifier to publish command
AliceJump May 14, 2026
7d28fba
fix: add RuntimeIdentifier to restore and build
AliceJump May 14, 2026
cd11d67
chore: remove RuntimeIdentifier parameters from workflow
AliceJump May 14, 2026
a46a25a
chore: add VSCode task for running MikuSB project
AliceJump May 14, 2026
fb703d8
Implement character level-up and improve support card system (#4)
AliceJump May 16, 2026
eeff0ff
Merge branch 'main' into main
AliceJump May 16, 2026
9aa6469
Enhance support card system and account management (#6)
AliceJump May 16, 2026
a69d628
Implement new features and fixes for Gacha and ClimbTower (#7)
AliceJump May 23, 2026
8591047
Implement various gameplay features and fixes (#8)
AliceJump May 23, 2026
51496ef
Fixed an issue where clicking on a feature not yet implemented on the…
AliceJump May 28, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 15 additions & 0 deletions .vscode/launch.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
{
"version": "0.2.0",
"configurations": [
{
"name": "Run MikuSB (build output dir)",
"type": "coreclr",
"request": "launch",
"program": "${workspaceFolder}/MikuSB/bin/Debug/net10.0/MikuSB.exe",
"args": [],
"cwd": "${workspaceFolder}/MikuSB/bin/Debug/net10.0",
"console": "integratedTerminal",
"stopAtEntry": false
}
]
}
17 changes: 17 additions & 0 deletions .vscode/tasks.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
{
"version": "2.0.0",
"tasks": [
{
"label": "Run MikuSB",
"type": "shell",
"command": "dotnet",
"args": [
"run",
"--project",
".\\MikuSB\\MikuSB.csproj"
],
"isBackground": true,
"group": "build"
}
]
}
1 change: 1 addition & 0 deletions Common/Configuration/ConfigContainer.cs
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,7 @@ public class ServerOption
public string FallbackLanguage { get; set; } = "EN";
public string[] DefaultPermissions { get; set; } = ["Admin"];
public ServerProfile ServerProfile { get; set; } = new();
public bool EnableAutoUpdate { get; set; } = true;
public bool EnableGmMenu { get; set; } = false;
public bool AutoCreateUser { get; set; } = true;
public bool SavePersonalDebugFile { get; set; } = false;
Expand Down
23 changes: 23 additions & 0 deletions Common/Data/Excel/BattlePassTimeExcel.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
using Newtonsoft.Json;

namespace MikuSB.Data.Excel;

[ResourceEntity("battlepass/timelist.json")]
public class BattlePassTimeExcel : ExcelResource
{
[JsonProperty("ID")] public uint Id { get; set; }
[JsonProperty("StartTime")] public string StartTime { get; set; } = "";
[JsonProperty("EndTime")] public string EndTime { get; set; } = "";
[JsonProperty("BuyStartTime")] public string BuyStartTime { get; set; } = "";
[JsonProperty("BuyEndTime")] public string BuyEndTime { get; set; } = "";
[JsonProperty("Condition")] public string Condition { get; set; } = "";
[JsonProperty("ExpStep")] public uint ExpStep { get; set; }
[JsonProperty("MaxExPerWeek")] public uint MaxExPerWeek { get; set; }

public override uint GetId() => Id;

public override void Loaded()
{
GameData.BattlePassTimeData[Id] = this;
}
}
32 changes: 32 additions & 0 deletions Common/Data/Excel/BossPvpBossChallengeExcel.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System.Globalization;

namespace MikuSB.Data.Excel;

[ResourceEntity("challenge/bosspvp/boss_challenge.json")]
public class BossPvpBossChallengeExcel : ExcelResource
{
public uint ID { get; set; }
public string StartTime { get; set; } = "";
public string EndTime { get; set; } = "";
public List<uint> tbTaskID { get; set; } = [];

[JsonExtensionData] public IDictionary<string, JToken> ExtraData { get; set; } = new Dictionary<string, JToken>();

[JsonIgnore] public List<uint> BossIds { get; private set; } = [];

public override uint GetId() => ID;

public override void Loaded()
{
BossIds = ExtraData
.Where(x => x.Key.StartsWith("Boss", StringComparison.Ordinal) && int.TryParse(x.Key[4..], out _))
.OrderBy(x => int.Parse(x.Key[4..], CultureInfo.InvariantCulture))
.Select(x => x.Value.Type == JTokenType.Integer ? x.Value.Value<uint>() : 0u)
.Where(x => x > 0)
.ToList();

GameData.BossPvpBossChallengeData[ID] = this;
}
}
17 changes: 17 additions & 0 deletions Common/Data/Excel/BossPvpBossExcel.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
namespace MikuSB.Data.Excel;

[ResourceEntity("challenge/bosspvp/boss.json")]
public class BossPvpBossExcel : ExcelResource
{
public uint ID { get; set; }
public uint LevelID { get; set; }
public uint BossID { get; set; }
public List<List<int>> BossLevel { get; set; } = [];

public override uint GetId() => ID;

public override void Loaded()
{
GameData.BossPvpBossData[ID] = this;
}
}
15 changes: 15 additions & 0 deletions Common/Data/Excel/BossPvpNumExcel.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
namespace MikuSB.Data.Excel;

[ResourceEntity("challenge/bosspvp/num.json")]
public class BossPvpNumExcel : ExcelResource
{
public uint Week { get; set; }
public uint Num { get; set; }

public override uint GetId() => Week;

public override void Loaded()
{
GameData.BossPvpNumData[Week] = this;
}
}
56 changes: 56 additions & 0 deletions Common/Data/Excel/ClimbTowerAwardExcel.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;

namespace MikuSB.Data.Excel;

[ResourceEntity("challenge/climbtower/climb_tower_award.json")]
public class ClimbTowerAwardExcel : ExcelResource
{
[JsonProperty("ID")] public uint ID { get; set; }
[JsonProperty("Diff")] public JToken? DiffRaw { get; set; }
[JsonProperty("FirstAward")] public List<List<uint>> FirstAward { get; set; } = [];
[JsonProperty("StarCount1")] public int StarCount1 { get; set; }
[JsonProperty("StarAward1")] public List<List<uint>> StarAward1 { get; set; } = [];
[JsonProperty("StarCount2")] public int StarCount2 { get; set; }
[JsonProperty("StarAward2")] public List<List<uint>> StarAward2 { get; set; } = [];
[JsonProperty("StarCount3")] public int StarCount3 { get; set; }
[JsonProperty("StarAward3")] public List<List<uint>> StarAward3 { get; set; } = [];

[JsonIgnore]
public int Diff => DiffRaw?.Type switch
{
JTokenType.Integer => Math.Max(1, DiffRaw.Value<int>()),
JTokenType.String when int.TryParse(DiffRaw.Value<string>(), out var value) => Math.Max(1, value),
_ => 1
};

public override uint GetId() => (ID * 10u) + (uint)Diff;

public override void Loaded()
{
if (!GameData.ClimbTowerAwardData.TryGetValue(ID, out var diffMap))
{
diffMap = [];
GameData.ClimbTowerAwardData[ID] = diffMap;
}

diffMap[Diff] = this;
}

public int GetStarCount(int group) => group switch
{
1 => StarCount1,
2 => StarCount2,
3 => StarCount3,
_ => 0
};

public IReadOnlyList<IReadOnlyList<uint>> GetRewards(int group) => group switch
{
0 => FirstAward,
1 => StarAward1,
2 => StarAward2,
3 => StarAward3,
_ => []
};
}
18 changes: 18 additions & 0 deletions Common/Data/Excel/ClimbTowerDiffExcel.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
using Newtonsoft.Json;

namespace MikuSB.Data.Excel;

[ResourceEntity("challenge/climbtower/climb_tower_diff.json")]
public class ClimbTowerDiffExcel : ExcelResource
{
[JsonProperty("ID")] public uint ID { get; set; }
[JsonProperty("Level1")] public int Level1 { get; set; }
[JsonProperty("Level2")] public int Level2 { get; set; }

public override uint GetId() => ID;

public override void Loaded()
{
GameData.ClimbTowerDiffData[ID] = this;
}
}
17 changes: 17 additions & 0 deletions Common/Data/Excel/ClimbTowerLevelOrderExcel.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
using Newtonsoft.Json;

namespace MikuSB.Data.Excel;

[ResourceEntity("challenge/climbtower/climb_tower_levelorder.json")]
public class ClimbTowerLevelOrderExcel : ExcelResource
{
[JsonProperty("ID")] public uint ID { get; set; }
[JsonProperty("LevelID")] public uint LevelID { get; set; }

public override uint GetId() => ID;

public override void Loaded()
{
GameData.ClimbTowerLevelOrderData[ID] = this;
}
}
57 changes: 57 additions & 0 deletions Common/Data/Excel/ClimbTowerTimeExcel.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System.Globalization;

namespace MikuSB.Data.Excel;

[ResourceEntity("challenge/climbtower/climb_tower_time.json")]
public class ClimbTowerTimeExcel : ExcelResource
{
[JsonProperty("ID")] public uint ID { get; set; }
[JsonProperty("StartTime")] public string StartTime { get; set; } = "";
[JsonProperty("EndTime")] public string EndTime { get; set; } = "";
[JsonProperty("Level1")] public List<List<uint>> Level1 { get; set; } = [];
[JsonProperty("Level2")] public JToken? Level2Raw { get; set; }

public override uint GetId() => ID;

public override void Loaded()
{
GameData.ClimbTowerTimeData[ID] = this;
}

public IReadOnlyList<IReadOnlyList<uint>> GetLevelGroups(int type)
{
if (type == 1)
return Level1;

if (Level2Raw == null)
return [];

if (Level2Raw.Type == JTokenType.Array)
{
return Level2Raw
.Children()
.OfType<JArray>()
.Select(x => (IReadOnlyList<uint>)x.Values<uint>().ToList())
.ToList();
}

if (Level2Raw.Type == JTokenType.Object)
{
return Level2Raw
.Children<JProperty>()
.Select(x => new
{
Key = uint.TryParse(x.Name, CultureInfo.InvariantCulture, out var key) ? key : 0u,
Value = x.Value.Type == JTokenType.Integer ? x.Value.Value<uint>() : 0u
})
.Where(x => x.Key > 0 && x.Value > 0)
.OrderBy(x => x.Key)
.Select(x => (IReadOnlyList<uint>)new List<uint> { x.Key, x.Value })
.ToList();
}

return [];
}
}
21 changes: 21 additions & 0 deletions Common/Data/Excel/DlcActivityExcel.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
using Newtonsoft.Json;

namespace MikuSB.Data.Excel;

[ResourceEntity("dlc/dlc_activities.json")]
public class DlcActivityExcel : ExcelResource
{
[JsonProperty("ID")] public uint Id { get; set; }
[JsonProperty("StartTime")] public string StartTime { get; set; } = "";
[JsonProperty("EndTime")] public string EndTime { get; set; } = "";
[JsonProperty("EnterStartTime")] public string EnterStartTime { get; set; } = "";
[JsonProperty("CloseEndTime")] public string CloseEndTime { get; set; } = "";
[JsonProperty("Condition")] public string Condition { get; set; } = "";

public override uint GetId() => Id;

public override void Loaded()
{
GameData.DlcActivityData[Id] = this;
}
}
20 changes: 20 additions & 0 deletions Common/Data/Excel/DreamCardActivityExcel.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
using Newtonsoft.Json;

namespace MikuSB.Data.Excel;

[ResourceEntity("dlc/DreamCard/activity.json")]
public class DreamCardActivityExcel : ExcelResource
{
[JsonProperty("ID")] public uint ID { get; set; }
[JsonProperty("StartTime")] public string StartTime { get; set; } = "";
[JsonProperty("EndTime")] public string EndTime { get; set; } = "";
[JsonProperty("Condition")] public string Condition { get; set; } = "";
[JsonProperty("LevelListID")] public List<uint> LevelListID { get; set; } = [];

public override uint GetId() => ID;

public override void Loaded()
{
GameData.DreamCardActivityData[ID] = this;
}
}
Loading