some fixes

This commit is contained in:
Mikhail
2024-12-27 09:45:55 -05:00
parent 7be612ab9d
commit 7a4542b97b
12 changed files with 100 additions and 40 deletions

View File

@@ -24,6 +24,7 @@ namespace EpinelPS.Database
{ {
public List<int> CompletedStages = []; public List<int> CompletedStages = [];
public List<NetFieldObject> CompletedObjects = []; public List<NetFieldObject> CompletedObjects = [];
public bool BossEntered = false;
} }
public class Character public class Character

View File

@@ -15,7 +15,7 @@ namespace EpinelPS.LobbyServer.Campaign
Console.WriteLine("Map ID: " + req.MapId); Console.WriteLine("Map ID: " + req.MapId);
var response = new ResGetCampaignFieldData(); var response = new ResGetCampaignFieldData();
response.Field = GetStage.CreateFieldInfo(user, GameData.Instance.GetNormalChapterNumberFromFieldName(req.MapId), req.MapId.Contains("hard") ? "Hard" : "Normal"); response.Field = GetStage.CreateFieldInfo(user, GameData.Instance.GetNormalChapterNumberFromFieldName(req.MapId), req.MapId.Contains("hard") ? "Hard" : "Normal", out bool bossEntered);
// todo save this data // todo save this data
response.Team = new NetUserTeamData() { LastContentsTeamNumber = 1, Type = 1 }; response.Team = new NetUserTeamData() { LastContentsTeamNumber = 1, Type = 1 };

View File

@@ -206,14 +206,18 @@ namespace EpinelPS.LobbyServer.Gacha
if (characterData.original_rare == "SSR") if (characterData.original_rare == "SSR")
{ {
user.AddTrigger(TriggerType.ObtainCharacterSSR, 1); user.AddTrigger(TriggerType.ObtainCharacterSSR, characterData.name_code);
}
else
{
user.AddTrigger(TriggerType.ObtainCharacter, characterData.name_code);
} }
} }
} }
response.Gacha.Add(gacha); response.Gacha.Add(gacha);
user.AddTrigger(TriggerType.GachaCharacter, 1); user.AddTrigger(TriggerType.GachaCharacter, 0, 0);
} }
response.Reward.Currency.Add(new NetCurrencyData() { Type = (int)CurrencyType.SilverMileageTicket, Value = numberOfPulls }); response.Reward.Currency.Add(new NetCurrencyData() { Type = (int)CurrencyType.SilverMileageTicket, Value = numberOfPulls });

View File

@@ -0,0 +1,25 @@
using EpinelPS.Utils;
namespace EpinelPS.LobbyServer.Messenger
{
[PacketPath("/messenger/enter")]
public class EnterMessenger : LobbyMsgHandler
{
protected override async Task HandleAsync()
{
var req = await ReadData<ReqEnterMessengerDialog>();
// TODO: save these things
var response = new ResEnterMessengerDialog();
response.Message = new NetMessage(){
ConversationId = "m_mainafter_28_01",
CreatedAt = 132123123,
MessageId = "m_mainafter_28_01_1",
Seq = 324234,
State = 0
};
await WriteDataAsync(response);
}
}
}

View File

@@ -8,10 +8,13 @@ namespace EpinelPS.LobbyServer.Mission
protected override async Task HandleAsync() protected override async Task HandleAsync()
{ {
var req = await ReadData<ReqGetRewardedData>(); var req = await ReadData<ReqGetRewardedData>();
var user = GetUser();
var response = new ResGetRewardedData(); var response = new ResGetRewardedData();
// TOOD response.AchievementIds.Add(user.CompletedAchievements);
response.WeeklyIds.Add(user.WeeklyResetableData.CompletedWeeklyMissions);
response.DailyIds.Add(user.ResetableData.CompletedDailyMissions);
await WriteDataAsync(response); await WriteDataAsync(response);
} }

View File

@@ -14,7 +14,9 @@ namespace EpinelPS.LobbyServer.Mission
var response = new ResObtainAchievementReward(); var response = new ResObtainAchievementReward();
List<NetRewardData> rewards = new(); List<NetRewardData> rewards = [];
int total_points = 0;
foreach (var item in req.TidList) foreach (var item in req.TidList)
{ {
@@ -24,11 +26,16 @@ namespace EpinelPS.LobbyServer.Mission
var rewardRecord = GameData.Instance.GetRewardTableEntry(key.reward_id) ?? throw new Exception("unable to lookup reward"); var rewardRecord = GameData.Instance.GetRewardTableEntry(key.reward_id) ?? throw new Exception("unable to lookup reward");
rewards.Add(RewardUtils.RegisterRewardsForUser(user, rewardRecord)); var reward = RewardUtils.RegisterRewardsForUser(user, rewardRecord);
rewards.Add(reward);
user.CompletedAchievements.Add(item); user.CompletedAchievements.Add(item);
total_points++;
} }
user.AddTrigger(TriggerType.PointRewardAchievement, total_points);
response.Reward = NetUtils.MergeRewards(rewards, user); response.Reward = NetUtils.MergeRewards(rewards, user);
JsonDb.Save(); JsonDb.Save();

View File

@@ -14,13 +14,17 @@ namespace EpinelPS.LobbyServer.Mission
var response = new ResObtainDailyMissionReward(); var response = new ResObtainDailyMissionReward();
List<NetRewardData> rewards = new(); List<NetRewardData> rewards = [];
int total_points = 0; int total_points = 0;
foreach (var item in req.TidList) foreach (var item in req.TidList)
{ {
if (user.ResetableData.CompletedDailyMissions.Contains(item)) continue; if (user.ResetableData.CompletedDailyMissions.Contains(item))
{
Console.WriteLine("already completed daily mission");
continue;
}
if (!GameData.Instance.TriggerTable.TryGetValue(item, out TriggerRecord? key)) throw new Exception("unknown TID"); if (!GameData.Instance.TriggerTable.TryGetValue(item, out TriggerRecord? key)) throw new Exception("unknown TID");
@@ -35,11 +39,6 @@ namespace EpinelPS.LobbyServer.Mission
else else
{ {
// Point reward // Point reward
var reward = new NetRewardData();
rewards.Add(reward);
total_points += key.point_value; total_points += key.point_value;
} }
} }

View File

@@ -14,7 +14,7 @@ namespace EpinelPS.LobbyServer.Mission
var response = new ResObtainWeeklyMissionReward(); var response = new ResObtainWeeklyMissionReward();
List<NetRewardData> rewards = new(); List<NetRewardData> rewards = [];
int total_points = 0; int total_points = 0;
@@ -35,11 +35,6 @@ namespace EpinelPS.LobbyServer.Mission
else else
{ {
// Point reward // Point reward
var reward = new NetRewardData();
rewards.Add(reward);
total_points += key.point_value; total_points += key.point_value;
} }
} }

View File

@@ -29,9 +29,7 @@ namespace EpinelPS.LobbyServer.Stage
public static ResClearStage CompleteStage(User user, int StageId, bool forceCompleteScenarios = false) public static ResClearStage CompleteStage(User user, int StageId, bool forceCompleteScenarios = false)
{ {
var response = new ResClearStage(); var response = new ResClearStage();
var clearedStage = GameData.Instance.GetStageData(StageId); var clearedStage = GameData.Instance.GetStageData(StageId) ?? throw new Exception("cleared stage cannot be null");
if (clearedStage == null) throw new Exception("cleared stage cannot be null");
if (user.FieldInfoNew.Count == 0) if (user.FieldInfoNew.Count == 0)
{ {
@@ -134,6 +132,16 @@ namespace EpinelPS.LobbyServer.Stage
} }
} }
// Mark chapter as completed if boss stage was completed
if (clearedStage.stage_category == "Boss" && clearedStage.stage_type == "Main")
{
if (clearedStage.chapter_mod == "Hard")
user.AddTrigger(TriggerType.HardChapterClear, 1, clearedStage.chapter_id);
else
user.AddTrigger(TriggerType.ChapterClear, 1, clearedStage.chapter_id);
}
// CreateClearInfo(user); // CreateClearInfo(user);
var key = (clearedStage.chapter_id - 1) + "_" + clearedStage.chapter_mod; var key = (clearedStage.chapter_id - 1) + "_" + clearedStage.chapter_mod;

View File

@@ -1,4 +1,6 @@
using EpinelPS.Utils; using EpinelPS.Database;
using EpinelPS.StaticInfo;
using EpinelPS.Utils;
namespace EpinelPS.LobbyServer.Stage namespace EpinelPS.LobbyServer.Stage
{ {
@@ -11,8 +13,23 @@ namespace EpinelPS.LobbyServer.Stage
var user = GetUser(); var user = GetUser();
var response = new ResEnterStage(); var response = new ResEnterStage();
user.AddTrigger(StaticInfo.TriggerType.CampaignStart, 1); var clearedStage = GameData.Instance.GetStageData(req.StageId) ?? throw new Exception("cleared stage cannot be null");
if (clearedStage.stage_category == "Boss")
{
// When entering a boss stage, unlock boss information in campaign
var key = (clearedStage.chapter_id - 1) + "_" + clearedStage.chapter_mod;
if (!user.FieldInfoNew.ContainsKey(key))
user.FieldInfoNew.Add(key, new FieldInfoNew());
if (user.FieldInfoNew.TryGetValue(key, out FieldInfoNew? info))
info.BossEntered = true;
}
user.AddTrigger(TriggerType.CampaignStart, 1);
JsonDb.Save();
await WriteDataAsync(response); await WriteDataAsync(response);
} }

View File

@@ -8,25 +8,25 @@ namespace EpinelPS.LobbyServer.Stage
{ {
protected override async Task HandleAsync() protected override async Task HandleAsync()
{ {
var req = await ReadData<ReqGetStageData>(); ReqGetStageData req = await ReadData<ReqGetStageData>();
var user = GetUser(); var user = GetUser();
var response = new ResGetStageData(); ResGetStageData response = new()
{
response.Field = CreateFieldInfo(user, req.Chapter - 1, req.Mod == 0 ? "Normal" : "Hard"); Field = CreateFieldInfo(user, req.Chapter - 1, req.Mod == 0 ? "Normal" : "Hard", out bool bossEntered),
HasChapterBossEntered = bossEntered,
response.HasChapterBossEntered = true; SquadData = ""
};
response.SquadData = "";
await WriteDataAsync(response); await WriteDataAsync(response);
} }
public static NetFieldObjectData CreateFieldInfo(Database.User user, int chapter, string mod) public static NetFieldObjectData CreateFieldInfo(Database.User user, int chapter, string mod, out bool BossEntered)
{ {
var f = new NetFieldObjectData(); var f = new NetFieldObjectData();
bool found = false; bool found = false;
string key = chapter + "_" + mod; string key = chapter + "_" + mod;
BossEntered = false;
foreach (var item in user.FieldInfoNew) foreach (var item in user.FieldInfoNew)
{ {
if (item.Key == key) if (item.Key == key)
@@ -40,6 +40,7 @@ namespace EpinelPS.LobbyServer.Stage
{ {
f.Objects.Add(obj); f.Objects.Add(obj);
} }
BossEntered = item.Value.BossEntered;
break; break;
} }
} }
@@ -47,7 +48,7 @@ namespace EpinelPS.LobbyServer.Stage
if (!found) if (!found)
{ {
user.FieldInfoNew.Add(key, new FieldInfoNew()); user.FieldInfoNew.Add(key, new FieldInfoNew());
return CreateFieldInfo(user, chapter, mod); return CreateFieldInfo(user, chapter, mod, out BossEntered);
} }
return f; return f;

View File

@@ -44,23 +44,23 @@ namespace EpinelPS.LobbyServer.Tower
if (record.type == "TETRA") if (record.type == "TETRA")
{ {
user.AddTrigger(TriggerType.TowerTetraClear, 1); user.AddTrigger(TriggerType.TowerTetraClear, TowerId);
} }
else if (record.type == "ELYSION") else if (record.type == "ELYSION")
{ {
user.AddTrigger(TriggerType.TowerElysionClear, 1); user.AddTrigger(TriggerType.TowerElysionClear, TowerId);
} }
else if (record.type == "MISSILIS") else if (record.type == "MISSILIS")
{ {
user.AddTrigger(TriggerType.TowerMissilisClear, 1); user.AddTrigger(TriggerType.TowerMissilisClear, TowerId);
} }
else if (record.type == "PILGRIM") else if (record.type == "PILGRIM")
{ {
user.AddTrigger(TriggerType.TowerOverspecClear, 1); user.AddTrigger(TriggerType.TowerOverspecClear, TowerId);
} }
else if (record.type == "ALL") else if (record.type == "ALL")
{ {
user.AddTrigger(TriggerType.TowerBasicClear, 1); user.AddTrigger(TriggerType.TowerBasicClear, TowerId);
} }
var reward = GameData.Instance.GetRewardTableEntry(record.reward_id) ?? throw new Exception("failed to get reward"); var reward = GameData.Instance.GetRewardTableEntry(record.reward_id) ?? throw new Exception("failed to get reward");