💀 strictly necessary login nitifies

This commit is contained in:
rfi
2024-02-21 10:46:58 +07:00
parent 11263bd61e
commit d052bd1935
12 changed files with 162 additions and 18 deletions

View File

@@ -4,6 +4,7 @@ namespace BLHX.Server.Common.Data;
public static class JSON public static class JSON
{ {
public static JsonSerializerOptions serializerOptions = new() { IncludeFields = true, WriteIndented = true };
public static string ConfigPath => Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Config.json"); public static string ConfigPath => Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Config.json");
public static string ShareConfigPath => Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Resources\\sharecfgdata\\"); public static string ShareConfigPath => Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Resources\\sharecfgdata\\");
@@ -15,22 +16,16 @@ public static class JSON
Save(path, obj); Save(path, obj);
} }
return JsonSerializer.Deserialize<T>(File.ReadAllText(path)); return JsonSerializer.Deserialize<T>(File.ReadAllText(path), serializerOptions) ?? new T();
} }
public static void Save<T>(string path, T obj) public static void Save<T>(string path, T obj)
{ {
File.WriteAllText(path, JsonSerializer.Serialize(obj, new JsonSerializerOptions() File.WriteAllText(path, JsonSerializer.Serialize(obj, serializerOptions));
{
WriteIndented = true
}));
} }
public static string Stringify<T>(T obj) public static string Stringify<T>(T obj)
{ {
return JsonSerializer.Serialize(obj, new JsonSerializerOptions() return JsonSerializer.Serialize(obj, serializerOptions);
{
WriteIndented = true
});
} }
} }

View File

@@ -1,4 +1,5 @@
using BLHX.Server.Common.Database; using BLHX.Server.Common.Data;
using BLHX.Server.Common.Database;
using BLHX.Server.Common.Proto; using BLHX.Server.Common.Proto;
using BLHX.Server.Common.Utils; using BLHX.Server.Common.Utils;
using BLHX.Server.Game.Handlers; using BLHX.Server.Game.Handlers;
@@ -117,11 +118,35 @@ namespace BLHX.Server.Game
ns.Write(sendBuf); ns.Write(sendBuf);
} }
void SendPacket(Packet packet)
{
var ns = tcpClient.GetStream();
byte[] sendBuf = GC.AllocateUninitializedArray<byte>(Packet.LENGTH_SIZE + Packet.HEADER_SIZE + packet.bytes.Length);
BinaryPrimitives.WriteUInt16BigEndian(sendBuf, (ushort)(packet.bytes.Length + Packet.HEADER_SIZE));
sendBuf[Packet.LENGTH_SIZE] = 0;
BinaryPrimitives.WriteUInt16BigEndian(sendBuf.AsSpan(Packet.LENGTH_SIZE + 1), (ushort)packet.command);
BinaryPrimitives.WriteUInt16BigEndian(sendBuf.AsSpan(Packet.HEADER_SIZE), NextPacketIdx);
packet.bytes.CopyTo(sendBuf.AsSpan(Packet.LENGTH_SIZE + Packet.HEADER_SIZE));
ns.Write(sendBuf);
}
public void InitClientData() public void InitClientData()
{ {
this.NotifyPlayerData(); this.NotifyPlayerData();
this.NotifyRefluxData();
this.NotifyGameRoom();
this.NotifyStatisticsInit(); this.NotifyStatisticsInit();
this.NotifyShipData(); this.NotifyShipData();
this.NotifyShipSkinData();
this.NotifyFleetData();
this.NotifyShopMonthData();
this.NotifyChapterData();
this.NotifyBagData();
this.NotifyDormData();
this.NotifyNavalAcademy();
// SendPacket(new() { bytes = Convert.FromBase64String("CAEQABgAIAAyBQjqBxABMgUI6QcQATIFCNcIEAEyBQjQCBABMgUIlQoQATIFCJoKEAEyBQjTCBABMgUIzggQATIFCM8IEAEyBQiYChABMgUIlgoQATIFCNEIEAEyBQjSCBABMgUI2AgQATgBQAJK/gEIARIQCgQxMTEyEBYYDSABMAA4ABIQCgQxMTA2EAwYFyABMAA4ABIQCgQxMTA1EBYYDyABMAA4ABIQCgQxMzAyEBgYDCABMAA4ABIQCgQxMzA0EBgYFCABMAA4ABIQCgQxMTAzEAwYDCABMAA4ABIQCgQxMTAyEBEYDCABMAA4ABIQCgQxMTA3EBcYFCABMAA4ABIQCgQxMzA2EBAYGCABMAA4ABIQCgQxMzAxEBQYGCABMAA4ABIQCgQxMTA0EBAYDCABMAA4ABIQCgQxMTExEBYYFiACMAA4ABIQCgQxMDAxEAAYACABMAA4ABIQCgQxMDAyEAAYACABMAA4AFAAWABgAGj/o82uBnIA"), command = Command.Sc19001 });
} }
public void SendHttpResponse(string rsp, string type = "text/plain") public void SendHttpResponse(string rsp, string type = "text/plain")

View File

@@ -70,5 +70,10 @@ namespace BLHX.Server.Game.Handlers
}); });
} }
} }
public static void NotifyRefluxData(this Connection connection)
{
connection.Send(new Sc11752());
}
} }
} }

View File

@@ -19,6 +19,11 @@ namespace BLHX.Server.Game.Handlers
} }
} }
public static void NotifyShipSkinData(this Connection connection)
{
connection.Send(new Sc12201());
}
public static void NotifyFleetData(this Connection connection) public static void NotifyFleetData(this Connection connection)
{ {
if (connection.player is not null) if (connection.player is not null)
@@ -26,7 +31,10 @@ namespace BLHX.Server.Game.Handlers
connection.Send(new Sc12101() connection.Send(new Sc12101()
{ {
GroupLists = [ GroupLists = [
new Groupinfo() { Id = 1, ShipLists = [1, 2] } new Groupinfo() { Id = 1, ShipLists = [1, 2] },
new Groupinfo() { Id = 2 },
new Groupinfo() { Id = 11 },
new Groupinfo() { Id = 12 }
] ]
}); });
} }

View File

@@ -0,0 +1,16 @@
using BLHX.Server.Common.Proto.p13;
namespace BLHX.Server.Game.Handlers
{
internal static class P13
{
}
static class P13ConnectionNotifyExtensions
{
public static void NotifyChapterData(this Connection connection)
{
connection.Send(new Sc13001() { ReactChapter = new() });
}
}
}

View File

@@ -0,0 +1,24 @@
using BLHX.Server.Common.Proto.p15;
namespace BLHX.Server.Game.Handlers
{
internal static class P15
{
}
static class P15ConnectionNotifyExtensions
{
public static void NotifyBagData(this Connection connection)
{
connection.Send(new Sc15001()
{
ItemLists = [
new Iteminfo() { Id = 20001, Count = 5 },
new Iteminfo() { Id = 15003, Count = 10 },
new Iteminfo() { Id = 50002, Count = 10 },
new Iteminfo() { Id = 50001, Count = 10 }
]
});
}
}
}

View File

@@ -0,0 +1,16 @@
using BLHX.Server.Common.Proto.p16;
namespace BLHX.Server.Game.Handlers
{
internal static class P16
{
}
static class P16ConnectionNotifyExtensions
{
public static void NotifyShopMonthData(this Connection connection)
{
connection.Send(new Sc16200() { Month = (uint)DateTime.Now.Month });
}
}
}

View File

@@ -0,0 +1,22 @@
using BLHX.Server.Common.Proto.p19;
namespace BLHX.Server.Game.Handlers
{
internal static class P19
{
}
static class P19ConnectionNotifyExtensions
{
public static void NotifyDormData(this Connection connection)
{
connection.Send(new Sc19001()
{
Lv = 1,
FloorNum = 1,
ExpPos = 2,
LoadTime = (uint)DateTimeOffset.Now.ToUnixTimeSeconds()
});
}
}
}

View File

@@ -0,0 +1,23 @@
using BLHX.Server.Common.Proto.p22;
namespace BLHX.Server.Game.Handlers
{
internal static class P22
{
}
static class P22ConnectionNotifyExtensions
{
public static void NotifyNavalAcademy(this Connection connection)
{
connection.Send(new Sc22001()
{
OilWellLevel = 1,
GoldWellLevel = 1,
ClassLv = 1,
Class = new(),
SkillClassNum = 2
});
}
}
}

View File

@@ -11,4 +11,11 @@ namespace BLHX.Server.Game.Handlers
connection.Send(new Sc26102()); connection.Send(new Sc26102());
} }
} }
static class P26ConnectionNotifyExtensions
{
public static void NotifyGameRoom(this Connection connection)
{
connection.Send(new Sc26120());
}
}
} }

View File

@@ -6,15 +6,15 @@ using System.Reflection;
namespace BLHX.Server.Game namespace BLHX.Server.Game
{ {
readonly struct Packet struct Packet
{ {
public const int LENGTH_SIZE = 2; public const int LENGTH_SIZE = 2;
public const int HEADER_SIZE = 5; public const int HEADER_SIZE = 5;
public readonly ushort length; public ushort length;
public readonly byte flag; public byte flag;
public readonly Command command; public Command command;
public readonly ushort id; public ushort id;
public readonly byte[] bytes; public byte[] bytes;
public Packet(byte[] recv) public Packet(byte[] recv)
{ {
@@ -26,7 +26,7 @@ namespace BLHX.Server.Game
Array.Copy(recv, HEADER_SIZE + LENGTH_SIZE, bytes, 0, length - HEADER_SIZE); Array.Copy(recv, HEADER_SIZE + LENGTH_SIZE, bytes, 0, length - HEADER_SIZE);
} }
public T Decode<T>() where T : IExtensible => Serializer.Deserialize<T>(bytes.AsSpan()); public readonly T Decode<T>() where T : IExtensible => Serializer.Deserialize<T>(bytes.AsSpan());
} }
static class PacketFactory static class PacketFactory

View File

@@ -1,4 +1,5 @@
using BLHX.Server.Common.Data; using BLHX.Server.Common.Data;
using BLHX.Server.Common.Database;
using BLHX.Server.Common.Utils; using BLHX.Server.Common.Utils;
using BLHX.Server.Game; using BLHX.Server.Game;
using BLHX.Server.Sdk; using BLHX.Server.Sdk;
@@ -14,6 +15,8 @@ internal class Program
Logger.c.Log($"Version {Assembly.GetEntryAssembly()?.GetCustomAttribute<AssemblyInformationalVersionAttribute>()?.InformationalVersion}"); Logger.c.Log($"Version {Assembly.GetEntryAssembly()?.GetCustomAttribute<AssemblyInformationalVersionAttribute>()?.InformationalVersion}");
Logger.c.Log("Starting..."); Logger.c.Log("Starting...");
// Preload
System.Runtime.CompilerServices.RuntimeHelpers.RunClassConstructor(typeof(DBManager).TypeHandle);
Config.Load(); Config.Load();
if (Config.Instance.Address == "127.0.0.1") if (Config.Instance.Address == "127.0.0.1")
{ {