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<NetFieldObject> CompletedObjects = [];
public bool BossEntered = false;
}
public class Character

View File

@@ -15,7 +15,7 @@ namespace EpinelPS.LobbyServer.Campaign
Console.WriteLine("Map ID: " + req.MapId);
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
response.Team = new NetUserTeamData() { LastContentsTeamNumber = 1, Type = 1 };

View File

@@ -206,14 +206,18 @@ namespace EpinelPS.LobbyServer.Gacha
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);
user.AddTrigger(TriggerType.GachaCharacter, 1);
user.AddTrigger(TriggerType.GachaCharacter, 0, 0);
}
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()
{
var req = await ReadData<ReqGetRewardedData>();
var user = GetUser();
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);
}

View File

@@ -14,7 +14,9 @@ namespace EpinelPS.LobbyServer.Mission
var response = new ResObtainAchievementReward();
List<NetRewardData> rewards = new();
List<NetRewardData> rewards = [];
int total_points = 0;
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");
rewards.Add(RewardUtils.RegisterRewardsForUser(user, rewardRecord));
var reward = RewardUtils.RegisterRewardsForUser(user, rewardRecord);
rewards.Add(reward);
user.CompletedAchievements.Add(item);
total_points++;
}
user.AddTrigger(TriggerType.PointRewardAchievement, total_points);
response.Reward = NetUtils.MergeRewards(rewards, user);
JsonDb.Save();

View File

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

View File

@@ -14,7 +14,7 @@ namespace EpinelPS.LobbyServer.Mission
var response = new ResObtainWeeklyMissionReward();
List<NetRewardData> rewards = new();
List<NetRewardData> rewards = [];
int total_points = 0;
@@ -35,11 +35,6 @@ namespace EpinelPS.LobbyServer.Mission
else
{
// Point reward
var reward = new NetRewardData();
rewards.Add(reward);
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)
{
var response = new ResClearStage();
var clearedStage = GameData.Instance.GetStageData(StageId);
if (clearedStage == null) throw new Exception("cleared stage cannot be null");
var clearedStage = GameData.Instance.GetStageData(StageId) ?? throw new Exception("cleared stage cannot be null");
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);
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
{
@@ -11,8 +13,23 @@ namespace EpinelPS.LobbyServer.Stage
var user = GetUser();
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);
}

View File

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

View File

@@ -44,23 +44,23 @@ namespace EpinelPS.LobbyServer.Tower
if (record.type == "TETRA")
{
user.AddTrigger(TriggerType.TowerTetraClear, 1);
user.AddTrigger(TriggerType.TowerTetraClear, TowerId);
}
else if (record.type == "ELYSION")
{
user.AddTrigger(TriggerType.TowerElysionClear, 1);
user.AddTrigger(TriggerType.TowerElysionClear, TowerId);
}
else if (record.type == "MISSILIS")
{
user.AddTrigger(TriggerType.TowerMissilisClear, 1);
user.AddTrigger(TriggerType.TowerMissilisClear, TowerId);
}
else if (record.type == "PILGRIM")
{
user.AddTrigger(TriggerType.TowerOverspecClear, 1);
user.AddTrigger(TriggerType.TowerOverspecClear, TowerId);
}
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");