mirror of
https://github.com/EpinelPS/EpinelPS.git
synced 2025-12-13 07:24:52 +01:00
Messenger implementation
This commit is contained in:
@@ -160,7 +160,7 @@ namespace EpinelPS.Database
|
|||||||
public BadgeContents BadgeContent;
|
public BadgeContents BadgeContent;
|
||||||
public string BadgeGuid = "";
|
public string BadgeGuid = "";
|
||||||
|
|
||||||
public Badge() {}
|
public Badge() { }
|
||||||
public Badge(NetBadge badge)
|
public Badge(NetBadge badge)
|
||||||
{
|
{
|
||||||
Location = badge.Location;
|
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
|
public class User
|
||||||
{
|
{
|
||||||
// User info
|
// User info
|
||||||
@@ -282,6 +294,8 @@ namespace EpinelPS.Database
|
|||||||
public List<Trigger> Triggers = [];
|
public List<Trigger> Triggers = [];
|
||||||
public int LastTriggerId = 1;
|
public int LastTriggerId = 1;
|
||||||
public List<int> CompletedAchievements = [];
|
public List<int> CompletedAchievements = [];
|
||||||
|
public List<NetMessage> MessengerData = [];
|
||||||
|
public ulong LastMessageId = 1;
|
||||||
|
|
||||||
// Event data
|
// Event data
|
||||||
public Dictionary<int, EventData> EventInfo = new();
|
public Dictionary<int, EventData> EventInfo = new();
|
||||||
@@ -524,6 +538,34 @@ namespace EpinelPS.Database
|
|||||||
|
|
||||||
return removed;
|
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
|
public class CoreInfo
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -69,6 +69,9 @@ namespace EpinelPS.StaticInfo
|
|||||||
public readonly Dictionary<int, InfracoreRecord> InfracoreTable = [];
|
public readonly Dictionary<int, InfracoreRecord> InfracoreTable = [];
|
||||||
public readonly Dictionary<int, AttractiveCounselCharacterRecord> AttractiveCounselCharacterTable = [];
|
public readonly Dictionary<int, AttractiveCounselCharacterRecord> AttractiveCounselCharacterTable = [];
|
||||||
public readonly Dictionary<int, AttractiveLevelRewardRecord> AttractiveLevelReward = [];
|
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;
|
public byte[] Sha256Hash;
|
||||||
@@ -528,6 +531,24 @@ namespace EpinelPS.StaticInfo
|
|||||||
{
|
{
|
||||||
this.AttractiveLevelReward.Add(obj.id, obj);
|
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)
|
public MainQuestCompletionRecord? GetMainQuestForStageClearCondition(int stage)
|
||||||
|
|||||||
@@ -713,4 +713,40 @@
|
|||||||
{
|
{
|
||||||
public List<AttractiveLevelRewardRecord> records = [];
|
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 });
|
user.BondInfo.Add(new() { NameCode = characterData.name_code, Level = 1 });
|
||||||
|
|
||||||
if (characterData.original_rare == "SSR")
|
user.AddTrigger(TriggerType.ObtainCharacter, characterData.name_code);
|
||||||
{
|
|
||||||
user.AddTrigger(TriggerType.ObtainCharacterSSR, characterData.name_code);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
user.AddTrigger(TriggerType.ObtainCharacter, characterData.name_code);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ using EpinelPS.Utils;
|
|||||||
|
|
||||||
namespace EpinelPS.LobbyServer.LobbyUser
|
namespace EpinelPS.LobbyServer.LobbyUser
|
||||||
{
|
{
|
||||||
[PacketPath("/user/SetNickNameInTutorial")]
|
[PacketPath("/User/SetNickNameInTutorial")]
|
||||||
public class SetNicknameInTutorial : LobbyMsgHandler
|
public class SetNicknameInTutorial : LobbyMsgHandler
|
||||||
{
|
{
|
||||||
protected override async Task HandleAsync()
|
protected override async Task HandleAsync()
|
||||||
|
|||||||
@@ -1,4 +1,6 @@
|
|||||||
using EpinelPS.Utils;
|
using EpinelPS.Utils;
|
||||||
|
using EpinelPS.StaticInfo;
|
||||||
|
using EpinelPS.Database;
|
||||||
|
|
||||||
namespace EpinelPS.LobbyServer.Messenger
|
namespace EpinelPS.LobbyServer.Messenger
|
||||||
{
|
{
|
||||||
@@ -8,16 +10,18 @@ namespace EpinelPS.LobbyServer.Messenger
|
|||||||
protected override async Task HandleAsync()
|
protected override async Task HandleAsync()
|
||||||
{
|
{
|
||||||
var req = await ReadData<ReqEnterMessengerDialog>();
|
var req = await ReadData<ReqEnterMessengerDialog>();
|
||||||
|
var user = GetUser();
|
||||||
|
|
||||||
// TODO: save these things
|
|
||||||
var response = new ResEnterMessengerDialog();
|
var response = new ResEnterMessengerDialog();
|
||||||
response.Message = new NetMessage(){
|
|
||||||
ConversationId = "m_mainafter_28_01",
|
var opener = GameData.Instance.MessageConditions[req.Tid];
|
||||||
CreatedAt = 132123123,
|
var conversation = GameData.Instance.Messages.Where(x => x.Value.conversation_id == opener.tid && x.Value.is_opener).First();
|
||||||
MessageId = "m_mainafter_28_01_1",
|
|
||||||
Seq = 324234,
|
response.Message = user.CreateMessage(conversation.Value);
|
||||||
State = 0
|
|
||||||
};
|
user.AddTrigger(TriggerType.MessageClear, 1, req.Tid); // TODO check if this is correct
|
||||||
|
|
||||||
|
JsonDb.Save();
|
||||||
|
|
||||||
await WriteDataAsync(response);
|
await WriteDataAsync(response);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
using EpinelPS.Database;
|
||||||
|
using EpinelPS.StaticInfo;
|
||||||
using EpinelPS.Utils;
|
using EpinelPS.Utils;
|
||||||
|
|
||||||
namespace EpinelPS.LobbyServer.Messenger
|
namespace EpinelPS.LobbyServer.Messenger
|
||||||
@@ -8,10 +10,16 @@ namespace EpinelPS.LobbyServer.Messenger
|
|||||||
protected override async Task HandleAsync()
|
protected override async Task HandleAsync()
|
||||||
{
|
{
|
||||||
var req = await ReadData<ReqEnterSubQuestMessengerDialog>();
|
var req = await ReadData<ReqEnterSubQuestMessengerDialog>();
|
||||||
|
var user = GetUser();
|
||||||
|
|
||||||
// TODO: save these things
|
|
||||||
var response = new ResEnterSubQuestMessengerDialog();
|
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);
|
await WriteDataAsync(response);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
using EpinelPS.Utils;
|
using EpinelPS.Database;
|
||||||
|
using EpinelPS.Utils;
|
||||||
|
|
||||||
namespace EpinelPS.LobbyServer.Messenger
|
namespace EpinelPS.LobbyServer.Messenger
|
||||||
{
|
{
|
||||||
@@ -8,10 +9,17 @@ namespace EpinelPS.LobbyServer.Messenger
|
|||||||
protected override async Task HandleAsync()
|
protected override async Task HandleAsync()
|
||||||
{
|
{
|
||||||
var req = await ReadData<ReqGetMessages>();
|
var req = await ReadData<ReqGetMessages>();
|
||||||
|
var user = GetUser();
|
||||||
|
|
||||||
// TODO: save these things
|
|
||||||
var response = new ResGetMessages();
|
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);
|
await WriteDataAsync(response);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,6 @@
|
|||||||
using EpinelPS.Utils;
|
using EpinelPS.Utils;
|
||||||
|
using EpinelPS.StaticInfo;
|
||||||
|
using EpinelPS.Database;
|
||||||
|
|
||||||
namespace EpinelPS.LobbyServer.Messenger
|
namespace EpinelPS.LobbyServer.Messenger
|
||||||
{
|
{
|
||||||
@@ -7,10 +9,21 @@ namespace EpinelPS.LobbyServer.Messenger
|
|||||||
{
|
{
|
||||||
protected override async Task HandleAsync()
|
protected override async Task HandleAsync()
|
||||||
{
|
{
|
||||||
|
// This request handles saving user choices
|
||||||
var req = await ReadData<ReqProceedMessage>();
|
var req = await ReadData<ReqProceedMessage>();
|
||||||
|
ResProceedMessage response = new();
|
||||||
|
var user = GetUser();
|
||||||
|
|
||||||
// TODO: save these things
|
var msgToSave = GameData.Instance.Messages.Where(x => x.Key == req.MessageId).First();
|
||||||
var response = new ResProceedMessage();
|
|
||||||
|
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);
|
await WriteDataAsync(response);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -185,6 +185,12 @@ namespace EpinelPS.LobbyServer.Stage
|
|||||||
|
|
||||||
user.BondInfo.Add(new() { NameCode = 3001, Level = 1 });
|
user.BondInfo.Add(new() { NameCode = 3001, Level = 1 });
|
||||||
user.BondInfo.Add(new() { NameCode = 3005, 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()
|
NetTeamData team1Sub = new()
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -303,6 +303,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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user