mirror of
https://github.com/MikuLeaks/MikuSB.git
synced 2026-06-04 04:03:58 +00:00
add chat command
This commit is contained in:
@@ -1,4 +1,6 @@
|
||||
namespace MikuSB.Configuration;
|
||||
using MikuSB.Proto;
|
||||
|
||||
namespace MikuSB.Configuration;
|
||||
|
||||
public class ConfigContainer
|
||||
{
|
||||
@@ -74,7 +76,10 @@ public class ServerOption
|
||||
public class ServerProfile
|
||||
{
|
||||
public string Name { get; set; } = "Miku-chan";
|
||||
public string Signature { get; set; } = "SnowBreak Private Server";
|
||||
public int Uid { get; set; } = 80;
|
||||
public int Level { get; set; } = 100;
|
||||
public Sex Gender { get; set; } = Sex.Female;
|
||||
}
|
||||
|
||||
public class ProxyOptions
|
||||
|
||||
@@ -23,6 +23,20 @@ public class PlayerGameData : BaseDatabaseDataHelper
|
||||
var result = DatabaseHelper.GetInstance<PlayerGameData>((int)uid);
|
||||
return result;
|
||||
}
|
||||
|
||||
public PlayerProfile ToProfileProto()
|
||||
{
|
||||
var proto = new PlayerProfile
|
||||
{
|
||||
Pid = (uint)Uid,
|
||||
Account = Name,
|
||||
Name = Name,
|
||||
Level = Level,
|
||||
Sex = Gender,
|
||||
Sign = Signature,
|
||||
};
|
||||
return proto;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
using MikuSB.Enums.Player;
|
||||
using MikuSB.GameServer.Game.Player;
|
||||
using MikuSB.Proto;
|
||||
using MikuSB.Util;
|
||||
using MikuSB.Util.Extensions;
|
||||
|
||||
namespace MikuSB.GameServer.Command;
|
||||
|
||||
@@ -31,7 +33,16 @@ public class PlayerCommandSender(PlayerInstance player) : ICommandSender
|
||||
|
||||
public async ValueTask SendMsg(string msg)
|
||||
{
|
||||
// TODO
|
||||
var data = new ChatMsg
|
||||
{
|
||||
Type = ChatType.Friend,
|
||||
Sender = (uint)ConfigManager.Config.ServerOption.ServerProfile.Uid,
|
||||
Recver = (uint)Player.Uid,
|
||||
Text = msg,
|
||||
Profile = Player.ToServerFriendProto(),
|
||||
TimeStamp = (uint)Extensions.GetUnixMs()
|
||||
};
|
||||
await Player.SendPacket(CmdIds.NtfFriendChat, data);
|
||||
}
|
||||
|
||||
public int GetSender()
|
||||
|
||||
@@ -1,13 +1,17 @@
|
||||
using MikuSB.Data;
|
||||
using Google.Protobuf;
|
||||
using MikuSB.Data;
|
||||
using MikuSB.Database;
|
||||
using MikuSB.Database.Account;
|
||||
using MikuSB.Database.Player;
|
||||
using MikuSB.Enums.Item;
|
||||
using MikuSB.GameServer.Command;
|
||||
using MikuSB.GameServer.Game.Character;
|
||||
using MikuSB.GameServer.Game.Inventory;
|
||||
using MikuSB.GameServer.Server;
|
||||
using MikuSB.GameServer.Game.Lineup;
|
||||
using MikuSB.GameServer.Server;
|
||||
using MikuSB.Proto;
|
||||
using MikuSB.TcpSharp;
|
||||
using MikuSB.Util;
|
||||
using MikuSB.Util.Extensions;
|
||||
|
||||
namespace MikuSB.GameServer.Game.Player;
|
||||
@@ -148,6 +152,10 @@ public class PlayerInstance(PlayerGameData data)
|
||||
{
|
||||
if (Connection?.IsOnline == true) await Connection.SendPacket(packet);
|
||||
}
|
||||
public async ValueTask SendPacket(int cmdId, IMessage msg)
|
||||
{
|
||||
if (Connection?.IsOnline == true) await Connection.SendPacket(cmdId,msg);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
@@ -158,10 +166,50 @@ public class PlayerInstance(PlayerGameData data)
|
||||
await Task.CompletedTask;
|
||||
}
|
||||
|
||||
public async ValueTask ReceiveMessage(uint sendUid, uint recvUid, string? message = null, uint? emojiId = null)
|
||||
{
|
||||
var data = new ChatMsg
|
||||
{
|
||||
Type = ChatType.Friend,
|
||||
Sender = sendUid,
|
||||
Recver = recvUid,
|
||||
Emoji = emojiId ?? 0,
|
||||
Text = message ?? "",
|
||||
Profile = Data.ToProfileProto(),
|
||||
TimeStamp = (uint)Extensions.GetUnixMs()
|
||||
};
|
||||
|
||||
await SendPacket(CmdIds.NtfFriendChat, data);
|
||||
|
||||
if (recvUid == ConfigManager.Config.ServerOption.ServerProfile.Uid)
|
||||
{
|
||||
if (message != null)
|
||||
{
|
||||
if (message.StartsWith("/")) message = message[1..].Trim();
|
||||
CommandExecutor.ExecuteCommand(new PlayerCommandSender(this), message);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Serialization
|
||||
|
||||
public PlayerProfile ToServerFriendProto()
|
||||
{
|
||||
var server = ConfigManager.Config.ServerOption.ServerProfile;
|
||||
var proto = new PlayerProfile
|
||||
{
|
||||
Pid = (uint)server.Uid,
|
||||
Account = server.Name,
|
||||
Name = server.Name,
|
||||
Sex = server.Gender,
|
||||
Level = (uint)server.Level,
|
||||
Sign = server.Signature
|
||||
};
|
||||
return proto;
|
||||
}
|
||||
|
||||
public Proto.Player ToPlayerProto()
|
||||
{
|
||||
var proto = new Proto.Player
|
||||
|
||||
19
GameServer/Server/Packet/Recv/Friend/HandlerReqFriendChat.cs
Normal file
19
GameServer/Server/Packet/Recv/Friend/HandlerReqFriendChat.cs
Normal file
@@ -0,0 +1,19 @@
|
||||
using Google.Protobuf;
|
||||
using MikuSB.Proto;
|
||||
using MikuSB.Util;
|
||||
|
||||
namespace MikuSB.GameServer.Server.Packet.Recv.Friend;
|
||||
|
||||
[Opcode(CmdIds.ReqFriendChat)]
|
||||
public class HandlerReqFriendChat : Handler
|
||||
{
|
||||
public override async Task OnHandle(Connection connection, byte[] data, ushort seqNo)
|
||||
{
|
||||
var req = ChatMsg.Parser.ParseFrom(data);
|
||||
var json = JsonFormatter.Default.Format(req);
|
||||
Logger.GetByClassName().Debug($"{json}");
|
||||
|
||||
await connection.Player!.ReceiveMessage((uint)connection.Player!.Uid, (uint)req.Recver, req.Text, (uint)req.Emoji);
|
||||
await connection.SendPacket(CmdIds.RspFriendChat);
|
||||
}
|
||||
}
|
||||
@@ -3,6 +3,7 @@ using MikuSB.Database;
|
||||
using MikuSB.Database.Account;
|
||||
using MikuSB.Database.Player;
|
||||
using MikuSB.GameServer.Game.Player;
|
||||
using MikuSB.GameServer.Server.Packet.Send.Friend;
|
||||
using MikuSB.GameServer.Server.Packet.Send.Login;
|
||||
using MikuSB.Proto;
|
||||
using MikuSB.TcpSharp;
|
||||
@@ -47,5 +48,6 @@ public class HandlerReqLogin : Handler
|
||||
connection.Player.Connection = connection;
|
||||
await connection.SendPacket(new PacketRspLogin(connection.Player!));
|
||||
await connection.Player.OnHeartBeat();
|
||||
await connection.SendPacket(new PacketNtfUpdateFriend(connection.Player!));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,18 @@
|
||||
using MikuSB.GameServer.Game.Player;
|
||||
using MikuSB.TcpSharp;
|
||||
using MikuSB.Proto;
|
||||
|
||||
namespace MikuSB.GameServer.Server.Packet.Send.Friend;
|
||||
|
||||
public class PacketNtfUpdateFriend : BasePacket
|
||||
{
|
||||
public PacketNtfUpdateFriend(PlayerInstance player) : base(CmdIds.NtfUpdateFriend)
|
||||
{
|
||||
var proto = new PlayerProfileArray
|
||||
{
|
||||
List = { player.ToServerFriendProto() }
|
||||
};
|
||||
|
||||
SetData(proto);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user