unlock more stage for operation

This commit is contained in:
Naruse
2026-04-29 00:47:21 +08:00
parent ee79486748
commit 5af23a8113
5 changed files with 111 additions and 29 deletions

View File

@@ -79,34 +79,6 @@ public class PlayerInstance(PlayerGameData data)
await LineupManager.UpdateLineup(1, selected[0], selected[1], selected[2],false);
var bootstrapAttrs = BuildLobbyBootstrapAttrs();
var existingAttrs = Data.Attrs
.ToDictionary(x => (x.Gid, x.Sid));
var seenAttrs = new HashSet<(uint Gid, uint Sid)>();
foreach (var (gid, sid, value) in bootstrapAttrs)
{
if (!seenAttrs.Add((gid, sid)))
continue;
if (existingAttrs.TryGetValue((gid, sid), out var attr))
{
if (attr.Val < value)
attr.Val = value;
continue;
}
var newAttr = new PlayerAttr
{
Gid = gid,
Sid = sid,
Val = value
};
Data.Attrs.Add(newAttr);
existingAttrs[(gid, sid)] = newAttr;
}
});
t.Wait();
@@ -226,6 +198,7 @@ public class PlayerInstance(PlayerGameData data)
public Proto.Player ToPlayerProto()
{
BuildPlayerAttr();
var displayName = PlayerGameData.NormalizeDisplayName(Data.Name);
var proto = new Proto.Player
{
@@ -293,6 +266,38 @@ public class PlayerInstance(PlayerGameData data)
return (gid << 16) | sid;
}
public void BuildPlayerAttr()
{
var bootstrapAttrs = BuildLobbyBootstrapAttrs();
var existingAttrs = Data.Attrs
.ToDictionary(x => (x.Gid, x.Sid));
var seenAttrs = new HashSet<(uint Gid, uint Sid)>();
foreach (var (gid, sid, value) in bootstrapAttrs)
{
if (!seenAttrs.Add((gid, sid)))
continue;
if (existingAttrs.TryGetValue((gid, sid), out var attr))
{
if (attr.Val < value)
attr.Val = value;
continue;
}
var newAttr = new PlayerAttr
{
Gid = gid,
Sid = sid,
Val = value
};
Data.Attrs.Add(newAttr);
existingAttrs[(gid, sid)] = newAttr;
}
}
private static IEnumerable<(uint Gid, uint Sid, uint Value)> BuildLobbyBootstrapAttrs()
{
// GuideLogic uses group 4. Value 999 is safely above every configured step count,
@@ -337,6 +342,12 @@ public class PlayerInstance(PlayerGameData data)
yield return (22, levelId, 1_700_000_000);
}
foreach (var levelId in GameData.DailyLevelData.Keys)
{
yield return (21, levelId, 7);
yield return (22, levelId, 1_700_000_000);
}
// Main Scene 0 mean default scene
yield return (132, 1, 0);
}