mirror of
https://github.com/EpinelPS/EpinelPS.git
synced 2025-12-12 23:14:34 +01:00
implement subquests, some fixes
This commit is contained in:
@@ -297,6 +297,7 @@ namespace EpinelPS.Database
|
||||
public List<int> CompletedAchievements = [];
|
||||
public List<NetMessage> MessengerData = [];
|
||||
public ulong LastMessageId = 1;
|
||||
public long LastBadgeSeq = 1;
|
||||
|
||||
// Event data
|
||||
public Dictionary<int, EventData> EventInfo = new();
|
||||
@@ -321,19 +322,13 @@ namespace EpinelPS.Database
|
||||
public Badge AddBadge(BadgeContents type, string location)
|
||||
{
|
||||
// generate unique badge SEQ
|
||||
var num = Rng.RandomId();
|
||||
|
||||
while (Badges.Any(x => x.Seq == num))
|
||||
{
|
||||
num = Rng.RandomId();
|
||||
}
|
||||
|
||||
var badge = new Badge()
|
||||
{
|
||||
BadgeContent = type,
|
||||
Location = location,
|
||||
BadgeGuid = Guid.NewGuid().ToString(),
|
||||
Seq = num
|
||||
Seq = LastBadgeSeq++
|
||||
};
|
||||
|
||||
Badges.Add(badge);
|
||||
|
||||
@@ -215,6 +215,7 @@ namespace EpinelPS.LobbyServer.Gacha
|
||||
// Add "New Character" Badge
|
||||
user.AddBadge(BadgeContents.BadgeContentsNikkeNew, characterData.name_code.ToString());
|
||||
user.AddTrigger(TriggerType.ObtainCharacter, 1, characterData.name_code);
|
||||
user.AddTrigger(TriggerType.ObtainCharacterNew, 1);
|
||||
|
||||
if (characterData.original_rare == "SSR" || characterData.original_rare == "SR")
|
||||
{
|
||||
|
||||
26
EpinelPS/LobbyServer/Messenger/EnterFinishSubquest.cs
Normal file
26
EpinelPS/LobbyServer/Messenger/EnterFinishSubquest.cs
Normal file
@@ -0,0 +1,26 @@
|
||||
using EpinelPS.Database;
|
||||
using EpinelPS.StaticInfo;
|
||||
using EpinelPS.Utils;
|
||||
|
||||
namespace EpinelPS.LobbyServer.Messenger
|
||||
{
|
||||
[PacketPath("/messenger/subquestfin/enter")]
|
||||
public class EnterFinishSubquest : LobbyMsgHandler
|
||||
{
|
||||
protected override async Task HandleAsync()
|
||||
{
|
||||
var req = await ReadData<ReqEnterSubQuestFinMessengerDialog>();
|
||||
var user = GetUser();
|
||||
|
||||
var response = new ResEnterSubQuestFinMessengerDialog();
|
||||
|
||||
var opener = GameData.Instance.Subquests.Where(x => x.Key == req.SubQuestId).First();
|
||||
var conversation = GameData.Instance.Messages.Where(x => x.Value.conversation_id == opener.Value.end_messenger_conversation_id && x.Value.is_opener).First();
|
||||
|
||||
response.Message = user.CreateMessage(conversation.Value);
|
||||
JsonDb.Save();
|
||||
|
||||
await WriteDataAsync(response);
|
||||
}
|
||||
}
|
||||
}
|
||||
33
EpinelPS/LobbyServer/Messenger/FinishSubquest.cs
Normal file
33
EpinelPS/LobbyServer/Messenger/FinishSubquest.cs
Normal file
@@ -0,0 +1,33 @@
|
||||
using EpinelPS.Database;
|
||||
using EpinelPS.StaticInfo;
|
||||
using EpinelPS.Utils;
|
||||
|
||||
namespace EpinelPS.LobbyServer.Messenger
|
||||
{
|
||||
[PacketPath("/messenger/finsubquest")]
|
||||
public class FinishSubquest : LobbyMsgHandler
|
||||
{
|
||||
protected override async Task HandleAsync()
|
||||
{
|
||||
var req = await ReadData<ReqFinSubQuest>();
|
||||
var user = GetUser();
|
||||
|
||||
var response = new ResFinSubQuest();
|
||||
|
||||
var opener = GameData.Instance.Subquests.Where(x => x.Key == req.SubQuestId).First();
|
||||
var conversation = GameData.Instance.Messages.Where(x => x.Value.id == req.MessageId).First();
|
||||
|
||||
var rewardRecord = GameData.Instance.GetRewardTableEntry(conversation.Value.reward_id) ?? throw new Exception("unable to lookup reward");
|
||||
|
||||
user.SetSubQuest(req.SubQuestId, true);
|
||||
|
||||
var conversationRecordUser = user.MessengerData.Where(x => x.MessageId == req.MessageId).First();
|
||||
conversationRecordUser.State = 2; // mark as claimed
|
||||
|
||||
response.Reward = RewardUtils.RegisterRewardsForUser(user, rewardRecord);
|
||||
JsonDb.Save();
|
||||
|
||||
await WriteDataAsync(response);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -11,9 +11,6 @@ namespace EpinelPS.LobbyServer.Stage
|
||||
|
||||
var response = new ResCheckStageClear();
|
||||
var user = GetUser();
|
||||
Console.WriteLine("CheckClear len: " + req.StageIds.Count);
|
||||
|
||||
// TODO: is this correct
|
||||
|
||||
foreach (var fields in user.FieldInfoNew)
|
||||
{
|
||||
@@ -24,8 +21,6 @@ namespace EpinelPS.LobbyServer.Stage
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
await WriteDataAsync(response);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -191,6 +191,7 @@ namespace EpinelPS.LobbyServer.Stage
|
||||
user.AddTrigger(TriggerType.ObtainCharacter, 1, 1015);
|
||||
user.AddTrigger(TriggerType.ObtainCharacter, 1, 1014);
|
||||
user.AddTrigger(TriggerType.ObtainCharacter, 1, 3005);
|
||||
user.AddTrigger(TriggerType.ObtainCharacterNew, 1);
|
||||
|
||||
NetTeamData team1Sub = new()
|
||||
{
|
||||
|
||||
35
EpinelPS/LobbyServer/Subquest/EnrollSubquest.cs
Normal file
35
EpinelPS/LobbyServer/Subquest/EnrollSubquest.cs
Normal file
@@ -0,0 +1,35 @@
|
||||
using EpinelPS.StaticInfo;
|
||||
using EpinelPS.Utils;
|
||||
using EpinelPS.Database;
|
||||
|
||||
namespace EpinelPS.LobbyServer.Subquest
|
||||
{
|
||||
[PacketPath("/subquest/enrollment")]
|
||||
public class EnrollSubquest : LobbyMsgHandler
|
||||
{
|
||||
protected override async Task HandleAsync()
|
||||
{
|
||||
var req = await ReadData<ReqEnrollmentSubQuest>();
|
||||
var user = GetUser();
|
||||
|
||||
var response = new ResEnrollmentSubQuest();
|
||||
|
||||
if (!GameData.Instance.Subquests.TryGetValue(req.SubquestId, out _))
|
||||
throw new Exception("no such subquest: " + req.SubquestId);
|
||||
|
||||
if (!user.SubQuestData.ContainsKey(req.SubquestId))
|
||||
user.SetSubQuest(req.SubquestId, false);
|
||||
|
||||
response.SubquestData = new NetSubQuestData()
|
||||
{
|
||||
CreatedAt = DateTime.UtcNow.Ticks,
|
||||
IsReceived = false,
|
||||
SubQuestId = req.SubquestId
|
||||
};
|
||||
|
||||
JsonDb.Save();
|
||||
|
||||
await WriteDataAsync(response);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -17,7 +17,9 @@ namespace EpinelPS.LobbyServer.Subquest
|
||||
if (!GameData.Instance.Subquests.TryGetValue(req.SubquestId, out SubquestRecord? record))
|
||||
throw new Exception("no such subquest: " + req.SubquestId);
|
||||
|
||||
|
||||
user.AddTrigger(TriggerType.CampaignGroupClear, record.clear_condition_value, record.clear_condition_id); // TODO this may need to go elsewhere
|
||||
user.AddTrigger(TriggerType.FieldObjectCollection, record.clear_condition_value, record.clear_condition_id); // TODO this may need to go elsewhere
|
||||
user.AddTrigger(TriggerType.SubQuestClear, 1, req.SubquestId);
|
||||
|
||||
JsonDb.Save();
|
||||
|
||||
@@ -305,6 +305,7 @@ namespace EpinelPS
|
||||
|
||||
user.BondInfo.Add(new() { NameCode = character.name_code, Level = 1 });
|
||||
user.AddTrigger(TriggerType.ObtainCharacter, 1, character.name_code);
|
||||
user.AddTrigger(TriggerType.ObtainCharacterNew, 1);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user