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;
}
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()
{
foreach (KeyValuePair<int, CharacterCostumeRecord> item in CharacterCostumeTable)
@@ -740,7 +701,12 @@ namespace EpinelPS.Data
CampaignChapterRecord data = ChapterCampaignData[chapter - 1];
if (mod == ChapterMod.Hard)
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)

View File

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

View File

@@ -30,6 +30,9 @@ namespace EpinelPS.LobbyServer.LobbyUser
response.RepresentationTeam = NetUtils.GetDisplayedTeam(user);
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.
foreach (KeyValuePair<int, ClearedTutorialData> item in user.ClearedTutorialData)

View File

@@ -17,7 +17,7 @@ namespace EpinelPS.LobbyServer.Misc
};
// 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
// Add a new maintenance window
@@ -25,7 +25,7 @@ namespace EpinelPS.LobbyServer.Misc
{
From = maintenanceFrom,
To = maintenanceTo
};
};*/
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 (StageId > user.LastHardStageCleared)
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)
user.LastNormalStageCleared = StageId;
}
else throw new NotImplementedException();
}
else
{
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
if (user.MainQuestData.TryGetValue(21, out bool _))

View File

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