begin implementing story mode

This commit is contained in:
Mikhail Tyukin
2025-12-06 12:14:01 -05:00
parent fb062eefae
commit 913c1a2262
6 changed files with 28 additions and 45 deletions

View File

@@ -595,45 +595,6 @@ namespace EpinelPS.Data
} }
return -1; return -1;
} }
public string? GetMapIdFromDBFieldName(string field)
{
// Get game map ID from DB Field Name (ex: 1_Normal for chapter 1 normal)
string[] keys = field.Split("_");
if (int.TryParse(keys[0], out int chapterNum))
{
string difficulty = keys[1];
foreach (KeyValuePair<int, CampaignChapterRecord> item in ChapterCampaignData)
{
if (difficulty == "Normal" && item.Value.Chapter == chapterNum)
{
return item.Value.FieldId;
}
else if (difficulty == "Hard" && item.Value.Chapter == chapterNum)
{
return item.Value.HardFieldId;
}
}
return null;
}
else
{
return keys[0]; // Already a Map ID
}
}
public int GetNormalChapterNumberFromFieldName(string field)
{
foreach (KeyValuePair<int, CampaignChapterRecord> item in ChapterCampaignData)
{
if (item.Value.FieldId == field)
{
return item.Value.Chapter;
}
}
return -1;
}
public IEnumerable<int> GetAllCostumes() public IEnumerable<int> GetAllCostumes()
{ {
foreach (KeyValuePair<int, CharacterCostumeRecord> item in CharacterCostumeTable) foreach (KeyValuePair<int, CharacterCostumeRecord> item in CharacterCostumeTable)
@@ -740,7 +701,12 @@ namespace EpinelPS.Data
CampaignChapterRecord data = ChapterCampaignData[chapter - 1]; CampaignChapterRecord data = ChapterCampaignData[chapter - 1];
if (mod == ChapterMod.Hard) if (mod == ChapterMod.Hard)
return data.HardFieldId; return data.HardFieldId;
else return data.FieldId; else if (mod == ChapterMod.Normal)
return data.FieldId;
else if (mod == ChapterMod.Story)
return data.StoryFieldId;
throw new NotImplementedException($"difficulty {mod} not implemented");
} }
internal int GetConditionReward(int groupId, long damage) internal int GetConditionReward(int groupId, long damage)

View File

@@ -110,6 +110,10 @@ namespace EpinelPS.LobbyServer.LobbyUser
} }
response.LastClearedNormalMainStageId = user.LastNormalStageCleared; response.LastClearedNormalMainStageId = user.LastNormalStageCleared;
response.LastClearedStoryStageId = user.LastStoryStageCleared;
response.LastClearedHardMainStageId = user.LastHardStageCleared;
response.LastClearedMod = user.LastClearedDifficulty;
response.TimeRewardBuffs.AddRange(NetUtils.GetOutpostTimeReward(user)); response.TimeRewardBuffs.AddRange(NetUtils.GetOutpostTimeReward(user));
response.OwnedLobbyDecoBackgroundIdList.AddRange(user.LobbyDecoBackgroundList); response.OwnedLobbyDecoBackgroundIdList.AddRange(user.LobbyDecoBackgroundList);

View File

@@ -30,6 +30,9 @@ namespace EpinelPS.LobbyServer.LobbyUser
response.RepresentationTeam = NetUtils.GetDisplayedTeam(user); response.RepresentationTeam = NetUtils.GetDisplayedTeam(user);
response.LastClearedNormalMainStageId = user.LastNormalStageCleared; response.LastClearedNormalMainStageId = user.LastNormalStageCleared;
response.LastClearedStoryStageId = user.LastStoryStageCleared;
response.LastClearedHardMainStageId = user.LastHardStageCleared;
response.LastClearedMod = user.LastClearedDifficulty;
// Restore completed tutorials. GroupID is the first 4 digits of the Table ID. // Restore completed tutorials. GroupID is the first 4 digits of the Table ID.
foreach (KeyValuePair<int, ClearedTutorialData> item in user.ClearedTutorialData) foreach (KeyValuePair<int, ClearedTutorialData> item in user.ClearedTutorialData)

View File

@@ -17,7 +17,7 @@ namespace EpinelPS.LobbyServer.Misc
}; };
// Define maintenance window timestamps // Define maintenance window timestamps
Google.Protobuf.WellKnownTypes.Timestamp maintenanceFrom = Google.Protobuf.WellKnownTypes.Timestamp.FromDateTime(DateTime.UtcNow.AddHours(-2)); // Example: 2 hour ago /*Google.Protobuf.WellKnownTypes.Timestamp maintenanceFrom = Google.Protobuf.WellKnownTypes.Timestamp.FromDateTime(DateTime.UtcNow.AddHours(-2)); // Example: 2 hour ago
Google.Protobuf.WellKnownTypes.Timestamp maintenanceTo = Google.Protobuf.WellKnownTypes.Timestamp.FromDateTime(DateTime.UtcNow.AddHours(-1)); // Example: 1 hour ago Google.Protobuf.WellKnownTypes.Timestamp maintenanceTo = Google.Protobuf.WellKnownTypes.Timestamp.FromDateTime(DateTime.UtcNow.AddHours(-1)); // Example: 1 hour ago
// Add a new maintenance window // Add a new maintenance window
@@ -25,7 +25,7 @@ namespace EpinelPS.LobbyServer.Misc
{ {
From = maintenanceFrom, From = maintenanceFrom,
To = maintenanceTo To = maintenanceTo
}; };*/
await WriteDataAsync(r); await WriteDataAsync(r);
} }

View File

@@ -92,25 +92,33 @@ namespace EpinelPS.LobbyServer.Stage
}); });
} }
if (clearedStage.StageCategory == StageCategory.Normal || clearedStage.StageCategory == StageCategory.Boss || clearedStage.StageCategory == StageCategory.Hard) if (clearedStage.StageCategory == StageCategory.Normal || clearedStage.StageCategory == StageCategory.Boss || clearedStage.StageCategory == StageCategory.Hard || clearedStage.StageCategory == StageCategory.Story)
{ {
if (clearedStage.ChapterMod == ChapterMod.Hard) if (clearedStage.ChapterMod == ChapterMod.Hard)
{ {
if (StageId > user.LastHardStageCleared) if (StageId > user.LastHardStageCleared)
user.LastHardStageCleared = StageId; user.LastHardStageCleared = StageId;
} }
else else if (clearedStage.ChapterMod == ChapterMod.Story)
{
if (StageId > user.LastStoryStageCleared)
user.LastStoryStageCleared = StageId;
}
else if (clearedStage.ChapterMod == ChapterMod.Normal)
{ {
if (StageId > user.LastNormalStageCleared) if (StageId > user.LastNormalStageCleared)
user.LastNormalStageCleared = StageId; user.LastNormalStageCleared = StageId;
} }
else throw new NotImplementedException();
} }
else else
{ {
Logging.Warn("Unknown stage category " + clearedStage.StageCategory); Logging.Warn("Unknown stage category " + clearedStage.StageCategory);
} }
if (clearedStage.StageType != StageType.Sub) user.LastClearedDifficulty = (int)clearedStage.ChapterMod;
if (clearedStage.StageType != StageType.Sub && clearedStage.ChapterMod != ChapterMod.Story)
{ {
// add outpost reward level if unlocked // add outpost reward level if unlocked
if (user.MainQuestData.TryGetValue(21, out bool _)) if (user.MainQuestData.TryGetValue(21, out bool _))

View File

@@ -22,7 +22,9 @@ public class User
public ulong ID; public ulong ID;
public long RegisterTime; public long RegisterTime;
public int LastNormalStageCleared; public int LastNormalStageCleared;
public int LastStoryStageCleared;
public int LastHardStageCleared; public int LastHardStageCleared;
public int LastClearedDifficulty;
public string? Nickname; public string? Nickname;
public int ProfileIconId = 39900; public int ProfileIconId = 39900;
public bool ProfileIconIsPrism = false; public bool ProfileIconIsPrism = false;