mirror of
https://github.com/EpinelPS/EpinelPS.git
synced 2025-12-12 15:04:36 +01:00
Messenger implementation
This commit is contained in:
@@ -160,7 +160,7 @@ namespace EpinelPS.Database
|
||||
public BadgeContents BadgeContent;
|
||||
public string BadgeGuid = "";
|
||||
|
||||
public Badge() {}
|
||||
public Badge() { }
|
||||
public Badge(NetBadge badge)
|
||||
{
|
||||
Location = badge.Location;
|
||||
@@ -201,6 +201,18 @@ namespace EpinelPS.Database
|
||||
};
|
||||
}
|
||||
}
|
||||
public class ConversationChoice
|
||||
{
|
||||
|
||||
}
|
||||
public class ConversationMessage
|
||||
{
|
||||
public string ConversationId { get; set; } = "";
|
||||
public long CreatedAt { get; set; }
|
||||
public ulong Seq { get; set; }
|
||||
public string Id { get; set; } = "";
|
||||
public int State { get; set; }
|
||||
}
|
||||
public class User
|
||||
{
|
||||
// User info
|
||||
@@ -282,6 +294,8 @@ namespace EpinelPS.Database
|
||||
public List<Trigger> Triggers = [];
|
||||
public int LastTriggerId = 1;
|
||||
public List<int> CompletedAchievements = [];
|
||||
public List<NetMessage> MessengerData = [];
|
||||
public ulong LastMessageId = 1;
|
||||
|
||||
// Event data
|
||||
public Dictionary<int, EventData> EventInfo = new();
|
||||
@@ -524,6 +538,34 @@ namespace EpinelPS.Database
|
||||
|
||||
return removed;
|
||||
}
|
||||
|
||||
public NetMessage CreateMessage(MessengerDialogRecord r, int state = 0)
|
||||
{
|
||||
var msg = new NetMessage()
|
||||
{
|
||||
ConversationId = r.conversation_id,
|
||||
CreatedAt = DateTime.UtcNow.Ticks,
|
||||
MessageId = r.id,
|
||||
Seq = (long)LastMessageId++,
|
||||
State = state
|
||||
};
|
||||
MessengerData.Add(msg);
|
||||
return msg;
|
||||
}
|
||||
|
||||
public NetMessage CreateMessage(string conversationId, string messageId, int state = 0)
|
||||
{
|
||||
var msg = new NetMessage()
|
||||
{
|
||||
ConversationId = conversationId,
|
||||
CreatedAt = DateTime.UtcNow.Ticks,
|
||||
MessageId = messageId,
|
||||
Seq = (long)LastMessageId++,
|
||||
State = state
|
||||
};
|
||||
MessengerData.Add(msg);
|
||||
return msg;
|
||||
}
|
||||
}
|
||||
public class CoreInfo
|
||||
{
|
||||
|
||||
@@ -69,6 +69,9 @@ namespace EpinelPS.StaticInfo
|
||||
public readonly Dictionary<int, InfracoreRecord> InfracoreTable = [];
|
||||
public readonly Dictionary<int, AttractiveCounselCharacterRecord> AttractiveCounselCharacterTable = [];
|
||||
public readonly Dictionary<int, AttractiveLevelRewardRecord> AttractiveLevelReward = [];
|
||||
public readonly Dictionary<int, SubquestRecord> Subquests = [];
|
||||
public readonly Dictionary<string, MessengerDialogRecord> Messages = [];
|
||||
public readonly Dictionary<int, MessengerMsgConditionRecord> MessageConditions = [];
|
||||
|
||||
|
||||
public byte[] Sha256Hash;
|
||||
@@ -528,6 +531,24 @@ namespace EpinelPS.StaticInfo
|
||||
{
|
||||
this.AttractiveLevelReward.Add(obj.id, obj);
|
||||
}
|
||||
|
||||
var subquest = await LoadZip<SubquestTable>("SubQuestTable.json", progress);
|
||||
foreach (var obj in subquest.records)
|
||||
{
|
||||
this.Subquests.Add(obj.id, obj);
|
||||
}
|
||||
|
||||
var msgs = await LoadZip<MessengerDialogTable>("MessengerDialogTable.json", progress);
|
||||
foreach (var obj in msgs.records)
|
||||
{
|
||||
this.Messages.Add(obj.id, obj);
|
||||
}
|
||||
|
||||
var msgc = await LoadZip<MessengerMsgConditionTable>("MessengerConditionTriggerTable.json", progress);
|
||||
foreach (var obj in msgc.records)
|
||||
{
|
||||
this.MessageConditions.Add(obj.id, obj);
|
||||
}
|
||||
}
|
||||
|
||||
public MainQuestCompletionRecord? GetMainQuestForStageClearCondition(int stage)
|
||||
|
||||
@@ -713,4 +713,40 @@
|
||||
{
|
||||
public List<AttractiveLevelRewardRecord> records = [];
|
||||
}
|
||||
public class SubquestRecord
|
||||
{
|
||||
public int id;
|
||||
public int group_id;
|
||||
public int clear_condition_id;
|
||||
public int clear_condition_value;
|
||||
public string conversation_id = "";
|
||||
public string end_messenger_conversation_id = "";
|
||||
public int before_sub_quest_id;
|
||||
}
|
||||
public class SubquestTable
|
||||
{
|
||||
public List<SubquestRecord> records = [];
|
||||
}
|
||||
public class MessengerDialogRecord
|
||||
{
|
||||
public string id = "";
|
||||
public string conversation_id = "";
|
||||
public string jump_target = "";
|
||||
public bool is_opener;
|
||||
public int reward_id;
|
||||
}
|
||||
public class MessengerDialogTable
|
||||
{
|
||||
public List<MessengerDialogRecord> records = [];
|
||||
}
|
||||
public class MessengerMsgConditionRecord
|
||||
{
|
||||
public int id;
|
||||
public string tid = "";
|
||||
public int reward_id;
|
||||
}
|
||||
public class MessengerMsgConditionTable
|
||||
{
|
||||
public List<MessengerMsgConditionRecord> records = [];
|
||||
}
|
||||
}
|
||||
|
||||
@@ -219,14 +219,7 @@ namespace EpinelPS.LobbyServer.Gacha
|
||||
{
|
||||
user.BondInfo.Add(new() { NameCode = characterData.name_code, Level = 1 });
|
||||
|
||||
if (characterData.original_rare == "SSR")
|
||||
{
|
||||
user.AddTrigger(TriggerType.ObtainCharacterSSR, characterData.name_code);
|
||||
}
|
||||
else
|
||||
{
|
||||
user.AddTrigger(TriggerType.ObtainCharacter, characterData.name_code);
|
||||
}
|
||||
user.AddTrigger(TriggerType.ObtainCharacter, characterData.name_code);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@ using EpinelPS.Utils;
|
||||
|
||||
namespace EpinelPS.LobbyServer.LobbyUser
|
||||
{
|
||||
[PacketPath("/user/SetNickNameInTutorial")]
|
||||
[PacketPath("/User/SetNickNameInTutorial")]
|
||||
public class SetNicknameInTutorial : LobbyMsgHandler
|
||||
{
|
||||
protected override async Task HandleAsync()
|
||||
|
||||
@@ -1,4 +1,6 @@
|
||||
using EpinelPS.Utils;
|
||||
using EpinelPS.StaticInfo;
|
||||
using EpinelPS.Database;
|
||||
|
||||
namespace EpinelPS.LobbyServer.Messenger
|
||||
{
|
||||
@@ -8,16 +10,18 @@ namespace EpinelPS.LobbyServer.Messenger
|
||||
protected override async Task HandleAsync()
|
||||
{
|
||||
var req = await ReadData<ReqEnterMessengerDialog>();
|
||||
var user = GetUser();
|
||||
|
||||
// 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
|
||||
};
|
||||
|
||||
var opener = GameData.Instance.MessageConditions[req.Tid];
|
||||
var conversation = GameData.Instance.Messages.Where(x => x.Value.conversation_id == opener.tid && x.Value.is_opener).First();
|
||||
|
||||
response.Message = user.CreateMessage(conversation.Value);
|
||||
|
||||
user.AddTrigger(TriggerType.MessageClear, 1, req.Tid); // TODO check if this is correct
|
||||
|
||||
JsonDb.Save();
|
||||
|
||||
await WriteDataAsync(response);
|
||||
}
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
using EpinelPS.Database;
|
||||
using EpinelPS.StaticInfo;
|
||||
using EpinelPS.Utils;
|
||||
|
||||
namespace EpinelPS.LobbyServer.Messenger
|
||||
@@ -8,10 +10,16 @@ namespace EpinelPS.LobbyServer.Messenger
|
||||
protected override async Task HandleAsync()
|
||||
{
|
||||
var req = await ReadData<ReqEnterSubQuestMessengerDialog>();
|
||||
var user = GetUser();
|
||||
|
||||
// TODO: save these things
|
||||
var response = new ResEnterSubQuestMessengerDialog();
|
||||
|
||||
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.conversation_id && x.Value.is_opener).First();
|
||||
|
||||
response.Message = user.CreateMessage(conversation.Value);
|
||||
JsonDb.Save();
|
||||
|
||||
await WriteDataAsync(response);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
using EpinelPS.Utils;
|
||||
using EpinelPS.Database;
|
||||
using EpinelPS.Utils;
|
||||
|
||||
namespace EpinelPS.LobbyServer.Messenger
|
||||
{
|
||||
@@ -8,10 +9,17 @@ namespace EpinelPS.LobbyServer.Messenger
|
||||
protected override async Task HandleAsync()
|
||||
{
|
||||
var req = await ReadData<ReqGetMessages>();
|
||||
var user = GetUser();
|
||||
|
||||
// TODO: save these things
|
||||
var response = new ResGetMessages();
|
||||
|
||||
var newMessages = user.MessengerData.Where(x => x.Seq >= req.Seq);
|
||||
|
||||
foreach (var item in newMessages)
|
||||
{
|
||||
response.Messages.Add(item);
|
||||
}
|
||||
|
||||
await WriteDataAsync(response);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,4 +1,6 @@
|
||||
using EpinelPS.Utils;
|
||||
using EpinelPS.StaticInfo;
|
||||
using EpinelPS.Database;
|
||||
|
||||
namespace EpinelPS.LobbyServer.Messenger
|
||||
{
|
||||
@@ -7,10 +9,21 @@ namespace EpinelPS.LobbyServer.Messenger
|
||||
{
|
||||
protected override async Task HandleAsync()
|
||||
{
|
||||
// This request handles saving user choices
|
||||
var req = await ReadData<ReqProceedMessage>();
|
||||
ResProceedMessage response = new();
|
||||
var user = GetUser();
|
||||
|
||||
// TODO: save these things
|
||||
var response = new ResProceedMessage();
|
||||
var msgToSave = GameData.Instance.Messages.Where(x => x.Key == req.MessageId).First();
|
||||
|
||||
response.Message = user.CreateMessage(msgToSave.Value.conversation_id, req.MessageId);
|
||||
|
||||
if (msgToSave.Value.reward_id != 0)
|
||||
{
|
||||
Console.WriteLine("TODO reward for messenger. Reward ID: " + msgToSave.Value.reward_id + " Message ID: " + req.MessageId);
|
||||
}
|
||||
|
||||
JsonDb.Save();
|
||||
|
||||
await WriteDataAsync(response);
|
||||
}
|
||||
|
||||
@@ -185,6 +185,12 @@ namespace EpinelPS.LobbyServer.Stage
|
||||
|
||||
user.BondInfo.Add(new() { NameCode = 3001, Level = 1 });
|
||||
user.BondInfo.Add(new() { NameCode = 3005, Level = 1 });
|
||||
|
||||
user.AddTrigger(TriggerType.ObtainCharacter, 1, 3001);
|
||||
user.AddTrigger(TriggerType.ObtainCharacter, 1, 1018);
|
||||
user.AddTrigger(TriggerType.ObtainCharacter, 1, 1015);
|
||||
user.AddTrigger(TriggerType.ObtainCharacter, 1, 1014);
|
||||
user.AddTrigger(TriggerType.ObtainCharacter, 1, 3005);
|
||||
|
||||
NetTeamData team1Sub = new()
|
||||
{
|
||||
|
||||
@@ -303,6 +303,7 @@ namespace EpinelPS
|
||||
});
|
||||
|
||||
user.BondInfo.Add(new() { NameCode = character.name_code, Level = 1 });
|
||||
user.AddTrigger(TriggerType.ObtainCharacter, 1, character.name_code);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user