mirror of
https://github.com/EpinelPS/EpinelPS.git
synced 2025-12-15 08:24:52 +01:00
implement subquests, some fixes
This commit is contained in:
@@ -297,6 +297,7 @@ namespace EpinelPS.Database
|
|||||||
public List<int> CompletedAchievements = [];
|
public List<int> CompletedAchievements = [];
|
||||||
public List<NetMessage> MessengerData = [];
|
public List<NetMessage> MessengerData = [];
|
||||||
public ulong LastMessageId = 1;
|
public ulong LastMessageId = 1;
|
||||||
|
public long LastBadgeSeq = 1;
|
||||||
|
|
||||||
// Event data
|
// Event data
|
||||||
public Dictionary<int, EventData> EventInfo = new();
|
public Dictionary<int, EventData> EventInfo = new();
|
||||||
@@ -321,19 +322,13 @@ namespace EpinelPS.Database
|
|||||||
public Badge AddBadge(BadgeContents type, string location)
|
public Badge AddBadge(BadgeContents type, string location)
|
||||||
{
|
{
|
||||||
// generate unique badge SEQ
|
// generate unique badge SEQ
|
||||||
var num = Rng.RandomId();
|
|
||||||
|
|
||||||
while (Badges.Any(x => x.Seq == num))
|
|
||||||
{
|
|
||||||
num = Rng.RandomId();
|
|
||||||
}
|
|
||||||
|
|
||||||
var badge = new Badge()
|
var badge = new Badge()
|
||||||
{
|
{
|
||||||
BadgeContent = type,
|
BadgeContent = type,
|
||||||
Location = location,
|
Location = location,
|
||||||
BadgeGuid = Guid.NewGuid().ToString(),
|
BadgeGuid = Guid.NewGuid().ToString(),
|
||||||
Seq = num
|
Seq = LastBadgeSeq++
|
||||||
};
|
};
|
||||||
|
|
||||||
Badges.Add(badge);
|
Badges.Add(badge);
|
||||||
|
|||||||
@@ -215,6 +215,7 @@ namespace EpinelPS.LobbyServer.Gacha
|
|||||||
// Add "New Character" Badge
|
// Add "New Character" Badge
|
||||||
user.AddBadge(BadgeContents.BadgeContentsNikkeNew, characterData.name_code.ToString());
|
user.AddBadge(BadgeContents.BadgeContentsNikkeNew, characterData.name_code.ToString());
|
||||||
user.AddTrigger(TriggerType.ObtainCharacter, 1, characterData.name_code);
|
user.AddTrigger(TriggerType.ObtainCharacter, 1, characterData.name_code);
|
||||||
|
user.AddTrigger(TriggerType.ObtainCharacterNew, 1);
|
||||||
|
|
||||||
if (characterData.original_rare == "SSR" || characterData.original_rare == "SR")
|
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 response = new ResCheckStageClear();
|
||||||
var user = GetUser();
|
var user = GetUser();
|
||||||
Console.WriteLine("CheckClear len: " + req.StageIds.Count);
|
|
||||||
|
|
||||||
// TODO: is this correct
|
|
||||||
|
|
||||||
foreach (var fields in user.FieldInfoNew)
|
foreach (var fields in user.FieldInfoNew)
|
||||||
{
|
{
|
||||||
@@ -24,8 +21,6 @@ namespace EpinelPS.LobbyServer.Stage
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
await WriteDataAsync(response);
|
await WriteDataAsync(response);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -191,6 +191,7 @@ namespace EpinelPS.LobbyServer.Stage
|
|||||||
user.AddTrigger(TriggerType.ObtainCharacter, 1, 1015);
|
user.AddTrigger(TriggerType.ObtainCharacter, 1, 1015);
|
||||||
user.AddTrigger(TriggerType.ObtainCharacter, 1, 1014);
|
user.AddTrigger(TriggerType.ObtainCharacter, 1, 1014);
|
||||||
user.AddTrigger(TriggerType.ObtainCharacter, 1, 3005);
|
user.AddTrigger(TriggerType.ObtainCharacter, 1, 3005);
|
||||||
|
user.AddTrigger(TriggerType.ObtainCharacterNew, 1);
|
||||||
|
|
||||||
NetTeamData team1Sub = new()
|
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))
|
if (!GameData.Instance.Subquests.TryGetValue(req.SubquestId, out SubquestRecord? record))
|
||||||
throw new Exception("no such subquest: " + req.SubquestId);
|
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.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);
|
user.AddTrigger(TriggerType.SubQuestClear, 1, req.SubquestId);
|
||||||
|
|
||||||
JsonDb.Save();
|
JsonDb.Save();
|
||||||
|
|||||||
@@ -305,6 +305,7 @@ namespace EpinelPS
|
|||||||
|
|
||||||
user.BondInfo.Add(new() { NameCode = character.name_code, Level = 1 });
|
user.BondInfo.Add(new() { NameCode = character.name_code, Level = 1 });
|
||||||
user.AddTrigger(TriggerType.ObtainCharacter, 1, character.name_code);
|
user.AddTrigger(TriggerType.ObtainCharacter, 1, character.name_code);
|
||||||
|
user.AddTrigger(TriggerType.ObtainCharacterNew, 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user