mirror of
https://github.com/EpinelPS/EpinelPS.git
synced 2025-12-13 15:34:36 +01:00
some fixes
This commit is contained in:
@@ -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
|
||||||
|
|||||||
@@ -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 };
|
||||||
|
|||||||
@@ -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 });
|
||||||
|
|||||||
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()
|
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);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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();
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -1,4 +1,6 @@
|
|||||||
using EpinelPS.Utils;
|
using EpinelPS.Database;
|
||||||
|
using EpinelPS.StaticInfo;
|
||||||
|
using EpinelPS.Utils;
|
||||||
|
|
||||||
namespace EpinelPS.LobbyServer.Stage
|
namespace EpinelPS.LobbyServer.Stage
|
||||||
{
|
{
|
||||||
@@ -12,7 +14,22 @@ namespace EpinelPS.LobbyServer.Stage
|
|||||||
|
|
||||||
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);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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");
|
||||||
|
|||||||
Reference in New Issue
Block a user