mirror of
https://github.com/EpinelPS/EpinelPS.git
synced 2025-12-12 15:04:36 +01:00
some fixes
This commit is contained in:
@@ -24,6 +24,7 @@ namespace EpinelPS.Database
|
||||
{
|
||||
public List<int> CompletedStages = [];
|
||||
public List<NetFieldObject> CompletedObjects = [];
|
||||
public bool BossEntered = false;
|
||||
}
|
||||
|
||||
public class Character
|
||||
|
||||
@@ -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 };
|
||||
|
||||
@@ -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 });
|
||||
|
||||
25
EpinelPS/LobbyServer/Messenger/EnterMessenger.cs
Normal file
25
EpinelPS/LobbyServer/Messenger/EnterMessenger.cs
Normal 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);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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");
|
||||
|
||||
Reference in New Issue
Block a user