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