mirror of
https://github.com/EpinelPS/EpinelPS.git
synced 2025-12-13 15:34:36 +01:00
begin implementing story mode
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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 _))
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user